Compare commits

...

541 commits
1.24.0 ... main

Author SHA1 Message Date
Olivier Crête 87ec3bd399 ssdobjectdetector: Add size threshold to drop too big detections
There is a known "failure" mode where the SSD detector finds an object
which is the whole frame. So skip objects which are "too big" to avoid
this.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6810>
2024-05-17 23:35:29 +00:00
Thibault Saunier 5be3f255b0 encoding-profile: Add a way to specify a factory-name when specifying caps
In some cases you want to ensure that a specific element factory is used
while requiring some specific caps but this was not possible. You can
now do `qtmux:video/x-prores,variant=standard|factory-name=avenc_prores_ks`
to ensure that the `avenc_prores_ks` factory is used to produce the
'standard' variant of prores video stream.

This also enhances a bit the documentation

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6875>
2024-05-17 22:46:52 +00:00
Hyunwoo f4fdae1ce0 gst-python: Fix README.md
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6876>
2024-05-17 14:12:08 +00:00
Edward Hervey afc1eadfdc streamsynchronizer: Split up event handler code
No changes to behaviour, just split up the big parts into dedicated function for
readability

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6825>
2024-05-17 13:13:41 +00:00
He Junyan a3a3264f02 vah26{4,5}enc: No need to assert i>=0 in frame_setup_from_gop()
The value is an uint here and never be negative.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6868>
2024-05-17 14:42:20 +08:00
Víctor Manuel Jáquez Leal 0233a2a7cf vah26xenc: factorize the encoder frame setup
A simple removal of duplicated code.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6854>
2024-05-17 02:41:18 +00:00
Brad Reitmeyer a564440020 nvcodec: Accept progressive-high profiles for h264
Videos using progressive-high used to work on 1.16 before the parser added progressive-high. It looks like partial
support was added to nvcodec in https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1634
but accidentally ommited gstnvh264dec

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6862>
2024-05-16 16:05:52 -05:00
Víctor Manuel Jáquez Leal 51c2030efd examples: va: add option for enabling alive stream
This is useful to test va encoding for live streams which should enable output
delay.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359>
2024-05-16 14:54:40 +02:00
He Junyan 7a03813ee9 vabaseenc: Set the correct min_buffers for propose_allocation()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359>
2024-05-16 14:54:40 +02:00
He Junyan 941d0c417f va: av1enc: Set preferred_output_delay value to increase performance
Also calculate the correct latency.
In live mode, preferred_output_delay is disabled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359>
2024-05-16 14:54:40 +02:00
He Junyan ba2b053444 va: vp9enc: Set preferred_output_delay value to increase performance
Also calculate the correct latency.
In live mode, preferred_output_delay is disabled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359>
2024-05-16 14:54:40 +02:00
He Junyan 47db542689 va: h265enc: Set preferred_output_delay value to increase performance
Also calculate the correct latency.
In live mode, preferred_output_delay is disabled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359>
2024-05-16 14:54:40 +02:00
He Junyan fe25ed22e1 va: h264enc: Set preferred_output_delay value to increase performance
Also calculate the correct latency.
In live mode, preferred_output_delay is disabled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359>
2024-05-16 14:54:40 +02:00
He Junyan a73474827b va: baseenc: Add is_live field to check the live stream
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359>
2024-05-16 14:54:39 +02:00
He Junyan 556a254e59 va: baseenc: Add a preferred_output_delay field for GPU parallel processing
The encoder can specify the a preferred_output_delay value to get better throughput
performance. The higher delay may get better HW performance, but it may increases
the encoder and pipeline latency.
When the output queue length is smaller than preferred_output_delay, the encoder
will not block to waiting for the encoding output. It will continue to prepare and
send more commands to GPU, which may improve the encoder throughput performance.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359>
2024-05-16 14:54:39 +02:00
He Junyan 0694c4a1c3 va: encoder: Do not continue when push_buffer gets error
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359>
2024-05-16 14:54:39 +02:00
He Junyan 9e2f0ea8dc va: libs: Use va_check_surface_has_status() to implement va_check_surface()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359>
2024-05-16 14:54:39 +02:00
He Junyan 2ec51dab7d va: libs: Add va_check_surface_has_status() helper function
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359>
2024-05-16 14:54:39 +02:00
He Junyan 933a155b1a va: encoder: Use GstVaEncFrame as the base object for all Enc Frame
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4359>
2024-05-16 14:54:39 +02:00
Guillaume Desmottes 210487b50a wavparse: reset when receiving STREAM_START
We need to reset the internal state to be able to parse a new stream.
When doing so keep seek event and do not destroy the adapter.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6840>
2024-05-16 11:35:02 +00:00
Seungha Yang b01305f60c decodebin3: Fix caps and stream leaks
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6858>
2024-05-16 10:46:33 +00:00
Sebastian Dröge 0a2e0a4f64 buffer: Use C11 atomics if available for 64 bit atomic operations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6740>
2024-05-16 06:52:58 +00:00
Sebastian Dröge 8ea355e52c audioringbuffer: Avoid overflows of segment done counter
This counter is incremented once for every segment, meaning it would
e.g. overflow after 24 days when using 1ms segments. Once that happens,
completely wrong positions are reported and invalid memory is handed out
for writing/reading the next segments.

As the affected variables are unfortunately part of the public API of
the struct, a second set of variables is added together with accessor
functions and both variables are kept in sync for backwards
compatibility.

All existing users of the two variables are moved to the new ones but
external code might still run into the overflow.

This also slightly breaks API as external code updating the variables
will have no effect anymore but the only known user of this is
pulsesink.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6740>
2024-05-16 06:52:58 +00:00
Sebastian Dröge f8246327ef mpegtsmux: Allow pads to have no caps until they receive their first buffer
If the muxer times out because of the latency deadline it can happen
that some pads have no caps yet. In that case skip creation of streams
for these pads and create updated section tables once the first buffer
arrives later.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6823>
2024-05-15 18:31:43 +00:00
Sebastian Dröge 4f33bc8932 mpegtsmux: Correctly time out and mux anyway in live pipelines
This makes sure that for sparse streams (KLV, DVB subtitles, ...) the
muxer does not wait until the next buffer is available for them but
times out on the latency deadline and outputs data.

For non-live pipelines it will still be necessary for upstream to
correctly produce gap events for sparse streams.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6823>
2024-05-15 18:31:43 +00:00
Seungha Yang 15c24abf5d nvcodec: Add AV1 encoder
Adding CUDA mode "nvav1enc", D3D11 mode "nvd3d11av1enc" and auto GPU
mode "nvautogpuav1enc" elements

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754>
2024-05-15 14:35:52 +00:00
Seungha Yang da019bf137 nvcodec: Rename nvcuda{h264,h265}enc to nv{h264,h265}enc
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754>
2024-05-15 14:35:52 +00:00
Seungha Yang b74422dcbc nvcodec: Remove old nvenc implementation
Stop shipping deprecated implementation

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754>
2024-05-15 14:35:52 +00:00
Seungha Yang 0ffbe20d31 nvcodec: Bump minimum supported SDK version to 10.0
New preset (i.e., P1 ~ P7) requires SDK 10.0 or newer

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754>
2024-05-15 14:35:52 +00:00
Seungha Yang 60637b96c8 nvcodec: Update SDK header to 12.0.16
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754>
2024-05-15 14:35:52 +00:00
Seungha Yang ff6d6e1b3c nvencoder: Enhance lagacy encoding profile mapping
Updated based on the NVENC Preset Migration Guide

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754>
2024-05-15 14:35:52 +00:00
Seungha Yang cfd92819d9 nvencoder: Update property names and default value
... to be the same as old NVENC elements

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754>
2024-05-15 14:35:51 +00:00
Edward Hervey aab2f59d02 avviddec: Rename variables and fuse function
* gst_ffmpegviddec_frame() is the only caller of gst_ffmpegviddec_video_frame()
  and has the same signature. Just move the checks into a single function and
  use that.
* Make it clear which frames are the input and output ones in
  gst_ffmpegviddec_video_frame() to make issues like the one fixed in the previous
  commit more obvious.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6851>
2024-05-15 13:20:54 +00:00
He Junyan f858179d01 vah265enc: Let FORCE_KEYFRAME be IDR frame rather than just I frame
The FORCE_KEYFRAME frame which has GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME
bit set should be the sync point. So we should let it be an IDR frame to begin
a new GOP, rather than just promote it to an I frame.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6619>
2024-05-15 09:55:49 +00:00
He Junyan ea015bea61 vah264enc: Let FORCE_KEYFRAME be IDR frame rather than just I frame
The FORCE_KEYFRAME frame which has GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME
bit set should be the sync point. So we should let it be an IDR frame to begin
a new GOP, rather than just promote it to an I frame.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6619>
2024-05-15 09:55:49 +00:00
He Junyan c6957d7a36 examples: vaenc-dynamic: support force key frame setting
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6619>
2024-05-15 09:55:49 +00:00
Alexander Slobodeniuk 0e3e688bed systemclock: fix usage of __STDC_NO_ATOMICS__
__STDC_NO_ATOMICS doesn't seem to exist. In fact the only compiler
I've found that sets any of those is msvc, but it sets
__STDC_NO_ATOMICS__, not __STDC_NO_ATOMICS.

__STDC_NO_ATOMICS__ is the one documented by C11 standard.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6848>
2024-05-14 23:38:31 +02:00
Edward Hervey 64cac1ed99 avvidec: Fix dropping wrong "ghost" frames
This fixes the code regarding dropping "ghost frames", that is to say input
frames which ended up not producing any decoded frame.

The iteration itself makes sense.. but it was stopping at the "input" frame and
not the decoded frame we just got back.

When dealing with I-frame codecs, ffmpeg will decode frames in separate frames,
so there is no guarantee that they are decoding in order.

Fixes playback issues with such codecs

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6842>
2024-05-14 13:52:52 +02:00
He Junyan fc3f5a2f09 vaenc: Allow to set the max-qp and min-qp for QVBR and ICQ modes
In fact, these setting can work well.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6841>
2024-05-14 11:16:14 +08:00
He Junyan 7211e3fffd vah26{4,5}enc: Set the qp_p and qp_b to qp_i value in ICQ and QVBR
Set the P and B frame qp to I frame value to avoid generating delta
QP between different frame types. For ICQ and QVBR modes, we can
only set the qpi value, so the qpp and qpb values should be set to
the same value as the qpi.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6841>
2024-05-14 10:31:05 +08:00
Seungha Yang 9d23c26027 d3d12decoder: Fix SDK debug layer warning
Address below message reported by SDK debug layer.

ID3D12Device::CheckFeatureSupport: Unsupported Decode Profile Specified.
Use ID3D12VideoDevice::CheckFeatureSupport with D3D12_FEATURE_VIDEO_DECODE_PROFILES
to retrieve a list of supported profiles

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6839>
2024-05-13 19:42:52 +00:00
He Junyan 07dceabdfc vavp9enc: Do not use base class video info to calculate coded size
We should use our in_info which is an adjusted value to calculate
that coded size.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6826>
2024-05-13 13:59:51 +00:00
Mark Nauwelaerts 869b6f2968 dvdspu: use multiple minimal sized PGS overlay rectangles
... rather than possibly 1 large at full video size

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6413>
2024-05-13 08:37:51 +00:00
Seungha Yang 99b1f5ddd2 nvencoder: Fix maximum QP value setting
Fixing typo

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6827>
2024-05-12 09:38:29 +00:00
Sebastian Dröge 63d58fcebf audioconvert: Add test for 96 channel conversion
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6819>
2024-05-12 07:06:32 +00:00
Sebastian Dröge a4514c5458 level: Don't post a message on EOS without a valid audio info
If EOS is received before caps, e.g. because of an error, then rate and
number of channels would be 0 and some divisions by zero would happen.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6819>
2024-05-12 07:06:32 +00:00
Sebastian Dröge 399b147d90 audioconvert: Support converting >64 channels
There's nothing requiring <= 64 channels except for getting the reorder
map and creating a channel mixing matrix, but those won't be possible to
call anyway as channel positions can only express up to 64 channels.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6819>
2024-05-12 07:06:32 +00:00
Sebastian Dröge d68ac0db57 aja: Update to AJA NTV2 17.0.1
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3289

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6808>
2024-05-11 15:54:54 +00:00
Robert Mader f982b94cd9 v4l2codecs: decoder: Reorder caps to prefer DMA_DRM ones
Certain V4L2 fourccs don't (yet) have DRM counter parts, in which case
we can't create DMA_DRM caps for them. This is usually the case for
specific tilings, which are represented as modifiers for DMA formats.

While using these tilings is generally preferable - because of e.g.
lower memory usage - it can result in additional conversion steps when
interacting with DMA based APIs such as GL, Vulkan or KMS. In such cases
using a DMA compatible format usually ends up being the better option.

Before the addition of DMA_DRM caps, this was what playbin3 ended up
requesting in various cases - e.g. prefering NV12 over NV12_4L4 - but
the addition of DMA_DRM caps seems to confuse the selection logic.

As a simple and quite robust solution, assume that peers supporting
DMA_DRM caps always prefer these and reorder the caps accordingly.

In the future we plan to have a translation layer for cases where
there is a matching fourcc+modifier pair for a V4L2 fourcc, ensuring
optimal results.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6645>
2024-05-09 16:37:07 +00:00
Sebastian Dröge e049013db7 play: Mention that gst_play_new() also initialized GStreamer
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6801>
2024-05-09 09:56:39 +00:00
Sebastian Dröge fcd7807de8 play: Initialize debug category and error quark in class_init
Doing it in gst_play_new() means that bindings that directly call
g_object_new() with the GType wouldn't end up initializing both.
This affects at least the Python and GJS bindings.

gst_init() is nonetheless only called from gst_play_new() once because
calling it from class_init would likely lead to problems as that's
called from somewhere in the middle of GObject.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6801>
2024-05-09 09:56:39 +00:00
Emil Pettersson 19bc0da824 vtdec: Fix deadlock when negotiating format change
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6811>
2024-05-08 06:33:10 +00:00
Matthew Waters da35ed6916 cccombiner: add support for timing out captions without EOS
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6335>
2024-05-08 14:28:39 +10:00
Piotr Brzeziński a9378c048e audiovisualizer: Add simple pipeline unit test
Creates pipelines with each of our visualizer elements and runs them with 20 buffers from audiotestsrc.
Added after a completely broken (segfaulting) synaescope went unnoticed for a while.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6800>
2024-05-07 14:48:47 +00:00
Bill Nottingham 5d7d3c6c0f pbutils: fix visualization plugins
inbuf is persistent, GST_BUFFER_COPY_MEMORY's append behavior is
not what we want.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6800>
2024-05-07 14:48:47 +00:00
Tim-Philipp Müller 06cd4e2457 unixfd: disable flaky test_unixfd_segment for now
It's a problem with the test, and a proper fix might
require new API, so just disable it for now.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6813>
2024-05-07 13:39:29 +01:00
Sebastian Dröge 9e58fa49f1 info: Use GstVecDeque for the ringbuffer logger instead of GQueue
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6779>
2024-05-06 18:25:42 +00:00
Sebastian Dröge 0ef396359c gst: Move GstQueueArray as GstVecDeque to core
And change lengths and indices from guint to gsize for a more correct type.

Also deprecate GstQueueArray and implement it in terms of GstVecDeque.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6779>
2024-05-06 18:25:42 +00:00
Matthew Waters c9af1d486a webrtc: request-aux-sender, only sink floating refs
Don't add an extra ref if non-floating as that ref will never be
unreffed.

gst_bin_add() is transfer floating (alias to transfer none).

Fixes a leak when a non-floating ref was provided as a return value in
the request-aux-sender signal.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6807>
2024-05-06 14:21:38 +00:00
Rafael Caricio 6fd1900d54 pbutils: AV1 mime codec
Add basic AV1 mime codec param generation based on the spec at https://aomediacodec.github.io/av1-isobmff/#codecsparam

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6696>
2024-05-06 12:43:27 +00:00
Sebastian Dröge efba52fcba qtdemux: Use G_GUINT64_CONSTANT when creating test caps
Otherwise this fails on 32 bit platforms.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6804>
2024-05-06 06:18:35 +00:00
Philippe Normand 1c87cda56d glcolorconvert: Fix caps negotiation with upstream DMABuf
The uninitialized texture target was leading to a NULL texture-target string
added to the output caps.

Fixes #3519

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6805>
2024-05-05 17:48:32 +01:00
Thibault Saunier 41f8276c2b glvideomixer: Handle pads which have no caps set on mouse events
And directly use the pad vinfo instead of getting current caps

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6265>
2024-05-05 12:37:05 +00:00
Seungha Yang 9acf4fc139 d3dshader: Fix gamma and primaries conversion pixel shader
Fixing regression introduced by the commit of f52ecb9607

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6802>
2024-05-04 19:57:33 +09:00
Stéphane Cerveau 73c64e8182 tests: add vulkan H.265 encode
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6676>
2024-05-03 19:40:17 +00:00
Stéphane Cerveau 5320514076 tests: add Vulkan H.264 encode
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6676>
2024-05-03 19:40:16 +00:00
Víctor Manuel Jáquez Leal 1b1593568f vkencoder: add gstvkencoder helper object
Add a gstvkencoder class to support Vulkan encoder such as H26X
formats.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6676>
2024-05-03 19:40:16 +00:00
Seungha Yang 66c1383051 d3d11: Add support for Y216 and Y416 formats
We were mapping Y212 and Y412 formats to DXGI_FORMAT_{Y216,Y416}.
Reuse already implemented shaders for the new formats

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6745>
2024-05-03 17:02:35 +00:00
Seungha Yang c8d01d7d1a video: Add Y216 and Y416 formats
The same memory layout as Y212 and Y412 formats, respectively

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6745>
2024-05-03 17:02:34 +00:00
He Junyan ae989e8cee vah265enc: Fix a memory leak when destroying the object
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6791>
2024-05-03 15:58:48 +00:00
He Junyan f340429681 vah265enc: Use a FIFO queue to generate DTS
The base parse will infer the DTS by itself, so we need to make DTS
offset before PTS in order to avoid DTS bigger than PTS. We now use
a FIFO queue to store all PTS and assign it to DTS by an offset.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6791>
2024-05-03 15:58:48 +00:00
He Junyan 20ebf6bbb9 vah264enc: Use a FIFO queue to generate DTS
The base parse will infer the DTS by itself, so we need to make DTS
offset before PTS in order to avoid DTS bigger than PTS. We now use
a FIFO queue to store all PTS and assign it to DTS by an offset.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6791>
2024-05-03 15:58:48 +00:00
Stéphane Cerveau ddb9b9d9ca vkdecoder: change dstmask in decoder frame barrier
Use of VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT instead of
specific VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR

Fix for VUID-vkCmdPipelineBarrier2-srcStageMask-03849

pDependencyInfo->pImageMemoryBarriers[0].srcStageMask
(VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR) is not compatible with
the queue family properties
(VK_QUEUE_GRAPHICS_BIT|VK_QUEUE_COMPUTE_BIT|VK_QUEUE_TRANSFER_BIT|
VK_QUEUE_SPARSE_BINDING_BIT|VK_QUEUE_PROTECTED_BIT) of this
command buffer. The Vulkan spec states: The srcStageMask member
of any element of the pMemoryBarriers, pBufferMemoryBarriers, or
pImageMemoryBarriers members of pDependencyInfo must only
include pipeline stages valid for the queue family that was
used to create the command pool that commandBuffer was allocated
 from (
https://www.khronos.org/registry/vulkan/specs/1.3-extensions/
html/vkspec.html#VUID-vkCmdPipelineBarrier2-srcStageMask-03849)

The frame barrier should use a compatible srcStageMask for all
the queues.

Remove reset_pipeline_stage_mask as it is redundant

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6780>
2024-05-02 18:07:25 +00:00
Rafael Caricio 2bcbbe0d0a av1parse: No default will trigger warning at compile time
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6778>
2024-05-02 16:31:53 +00:00
Rafael Caricio 27041bf9e9 av1parse: Add max-level and max-tier to caps
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6778>
2024-05-02 16:31:53 +00:00
Rafael Caricio c9a79b7387 av1parse: Add level and tier to caps
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6778>
2024-05-02 16:31:53 +00:00
Loïc Le Page 9d703439f1 pitch: add validate tests
Add pitch tests with different forward and backward playback rates.
Those tests depend on the libSoundTouch version to validate the buffers
checksums. The actual version uses libSoundTouch 2.3.2, use the
`--force-fallback-for=soundtouch` meson option to build using the same
version.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6247>
2024-05-02 13:26:09 +02:00
Loïc Le Page b628f1bc8f pitch: add interactive test
Test pitch with different forward and backward playback rates.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6247>
2024-05-02 10:24:30 +02:00
Loïc Le Page 8f5325ed11 pitch: make it work with reverse playback
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6247>
2024-05-01 20:12:02 +00:00
Loïc Le Page 35165da586 pitch: fix multithread accesses
- fully protect accesses to the libsoundtouch API that is not
  thread-safe.
- fully protect accesses to GstPitch members that could be read by a
  downstream query thread while written by an upstream streaming thread
  or a user thread.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6247>
2024-05-01 20:12:02 +00:00
Loïc Le Page 9f5bb30d3a pitch: refactor some variables names
- use the `GST_PITCH_GET_PRIVATE` accessor when needed
- rename `out_seg_rate` to `output_rate` to use the same name as the parameter
- rename `seg_arate` to `segment_applied_rate` to improve readability
- apply gst-indent to gstpitch.hh/cc

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6247>
2024-05-01 20:12:01 +00:00
Loïc Le Page 7f4c0e6fb1 pitch: fix time ratio computation
When changing playing rate, the output segment was not correctly
calculated because the stream time ratio was computed using the previous
input segment rate instead of using the actual rate. This was producing
wrong results for the output segment start and end values.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6247>
2024-05-01 20:12:01 +00:00
Loïc Le Page d5734159d1 videorate: add validate tests
Add tests with different reverse playback speeds.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6247>
2024-05-01 20:12:01 +00:00
Seungha Yang e6b9a45bfe qsvh264dec,qsvh265dec: Fix nalu leaks
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3514
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6781>
2024-05-01 10:38:05 +00:00
Sebastian Dröge ec42cedf63 encoding-profile: Fix nullability of (de)serialization functions
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6775>
2024-05-01 09:51:35 +00:00
Piotr Brzeziński bfb7cf7d0b vtdec: Fix PAUSED->READY deadlock when output loop is running
Makes sure the GST_PAD_STREAM_LOCK is not taken when pad is being deactivated.
The lack of this was causing deadlocks when stopping the pipeline right after producing first buffers.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6783>
2024-05-01 08:59:37 +00:00
Stéphane Cerveau 10ce5a6857 vkh26xdec: Fix stop memory leak
The h26xdecoder 'stop' method was not called
as the vulkan h26x class rewires the video decoder
'stop' base method to its own one.

It was causing some memory leaks such as dangling parser
and dpb in h26xdecoder base class.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6782>
2024-04-30 18:51:10 +00:00
Edward Hervey dd3344fd2e ges-pipeline: Configure encodebin before linking
Modifying the `avoid-reencoding` property of `encodebin` could potentially cause
it to reconfigure itself, in which case the source pad will be removed and then
re-added.

Therefore set that property *before* attempting to link to that pad.

Fixes smart-render

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6757>
2024-04-30 15:47:41 +00:00
He Junyan 0c81d1a1e7 vabaseenc: delete the useless frame counter fields
They are used to calculate the PTS and DTS before, no usage now.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6773>
2024-04-30 07:51:13 +00:00
He Junyan 477fea97b4 vabaseenc: Do not set the min_pts
Because all the va encoders improved their PTS/DTS algorithm, now
it is impossible to generate minus DTS. So no underflow will happen
and we do not need to set a 1000 hour offset now.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6773>
2024-04-30 07:51:13 +00:00
Matthew Waters 184d94305c glcolorconvert: add support for planar yuv->planar yuv conversions
Currently only supported by keeping the same colorimetry and is only
a repacking operation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6596>
2024-04-30 05:58:55 +00:00
Matthew Waters 674e643428 glcolorconvert: use color matrices
Allows programatically supporting whatever new formats are added to
libgstvideo.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6596>
2024-04-30 05:58:55 +00:00
Mengkejiergeli Ba 9480197377 msdk: Add Y212 format to hevc encoder static raw caps
Note that static caps is used for the old MSDK dispatch.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6750>
2024-04-30 04:05:29 +00:00
Sebastian Dröge e68eccff10 exiftag: Prevent integer overflows and out of bounds reads when handling undefined tags
Fixes ZDI-CAN-23896
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3483

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6766>
2024-04-29 20:06:22 +00:00
Shengqi Yu a92167ea6e glmixer: Add GL_SYNC_META option to bufferpool
when pipline is
glvideomixerelement->glcolorconvertelement->gldownloadelement and
glcolorconvertelement is not passthrough, the gl bufferpool between
glvideomixerelement and glcolorconvertelement will not add gl sync meta
during allocating buffer. This will cause that glcolorconvert's inbuf
has no sync meta to wait for.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6756>
2024-04-29 19:15:39 +00:00
François Laignel 59e17fa931 rtp: add value annotation for GST_RTP_VALID_VALUE
... otherwise its value is not available to bindings.

See https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1425#note_2384464

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6762>
2024-04-29 18:27:40 +00:00
Edward Hervey 9c10726ae1 gstvalue: Add a GstAllocationParams to String conversion
Avoids ending up with plenty of warnings when serializing GstStructure
containing GstAllocationParams

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6714>
2024-04-29 16:01:33 +00:00
He Junyan ae68d9dda5 vah265enc: Set the correct buffer flag for output
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6703>
2024-04-29 13:25:09 +00:00
He Junyan d06b12c6f1 vah264enc: Set the correct buffer flag for output
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6703>
2024-04-29 13:25:09 +00:00
Seungha Yang b66834787c vabaseenc: Fix frame leak on error path
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6703>
2024-04-29 13:25:09 +00:00
He Junyan c013b03a19 vah265enc: Do not touch the PTS of output frame
1. The PTS of all frames should not be changed.
2. Just update the DTS based on the PTS. For the frame which is not
   reordered, the DTS is equal to PTS. For frame which is reordered,
   the DTS is equal to previous DTS. For example:
   Input: F0[D0, P0] -- F1[D1, P1] -- F2[D2, P2] -- F3[D3, P3]
   Output: F0[I, D0, P0] -- F3[P, D0, P3] -- F1[B, D1, P1] -- F2[B, D2, P2]

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6703>
2024-04-29 13:25:08 +00:00
He Junyan 4d1a48c9e9 vah264enc: Do not touch the PTS of output frame
1. The PTS of all frames should not be changed.
2. Just update the DTS based on the PTS. For the frame which is not
   reordered, the DTS is equal to PTS. For frame which is reordered,
   the DTS is equal to previous DTS. For example:
   Input: F0[D0, P0] -- F1[D1, P1] -- F2[D2, P2] -- F3[D3, P3]
   Output: F0[I, D0, P0] -- F3[P, D0, P3] -- F1[B, D1, P1] -- F2[B, D2, P2]

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6703>
2024-04-29 13:25:08 +00:00
Tim-Philipp Müller eec64e372b rtph264depay: fix FU-B handling
Skip extra 16-bit DON in FU-B header.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6607>
2024-04-29 12:21:52 +00:00
Tim-Philipp Müller b1a45b527a rtph264depay: minor refactoring of FU handling code
Make code easier to follow, and prepare for next commit.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6607>
2024-04-29 12:21:52 +00:00
Edward Hervey 777c8a9b15 structure: Add a serialization for GArray in GstStructure
Instead of constantly spurting out warnings in the log files

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6691>
2024-04-29 11:05:44 +00:00
William Wedler 9ad6a9b942 fix: qmlglsink: video content resizes to new item size
Mark geometry dirty when the item rectangle changes in the
QtGLVideoItem::updatePaintNode method. This allows changes in the bounding
rectangle to be applied to the scene graph geometry node.

Fixes #3493

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6711>
2024-04-29 02:57:06 +00:00
William Wedler c02af39026 fix: qml6glsink: video content resizes to new item size
Mark geometry dirty when the item rectangle changes in the
QtGLVideoItem::updatePaintNode method. This allows changes in the bounding
rectangle to be applied to the scene graph geometry node.

Fixes #3493

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6711>
2024-04-29 02:57:06 +00:00
Seungha Yang cb20a371c2 d3d12decoder: Fix d3d12 resource copy
It was copying to self resource

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6753>
2024-04-28 15:31:19 +00:00
Seungha Yang 84f4068036 nvh265encoder: Fix crash with RGBx and BGRx
Both formats need to be handled in switch

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6752>
2024-04-28 23:34:37 +09:00
Seungha Yang 46131f0cb0 d3d12ipcclient: Fix deadlock when copying texture
Fixing deadlock in below case
* GC lock is taken by background thread, and the background thread calls
  gst_d3d12_ipc_client_release_imported_data() which takes ipc lock
* ipc lock is already taken in ipc thread and trying to pushing GC data
  via gst_d3d12_command_queue_set_notify()
* gst_d3d12_command_queue_set_notify() is trying to take GC lock
  but it's already taken by background thread

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
Seungha Yang 19932cf178 d3d12ipcsink: Handle external fence
Waits external fence before sending frame to peer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
Seungha Yang b7844ef307 d3d12decoder: Remove CPU-side waiting
Sets decoder command queue's fence to memory instead of waiting
from decoder's output thread. CPU-side waiting will happen
only if download is required.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
Seungha Yang a05961ab7b d3d12screencapturesrc: Fix output to non-d3d12 element
Configures upload/download flags to memory after write

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
Seungha Yang e29655e9ca d3d12screencapturesrc: Release and flush d3d11 objects before d3d12
Fixing device-removed error when closing pipeline

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
Seungha Yang 3e08cdeebe d3d12memory: Do not wait external fence on map()
Only wait for external fence if upload or download is required.
Waiting for external fence in case of d3d12 mapping is caller's
responsibility

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
Seungha Yang 2c203e0d40 d3d12encoder: Handle external fence explicitly
Waits for external fence if any

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
Seungha Yang 2a14793ee1 d3d12converter: Add support for GPU-side external fence waiting
Ideally, GPU waiting should be scheduled just before executing command list.
But handling the case outside of converter is a bit complicated.
Under an assumption that constructed command list will be executed
immediately, schedules GPU-side waiting inside of conversion method
to simplify the flow.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
Seungha Yang c95725bb79 d3d12memory: Use explicit type for GST_MAP_D3D12 define
C++ compiler will complain about different type between int and GstMapFlags

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
Seungha Yang 87f43c25cc d3d12frame: Extract external fence from memory and wait helper function
Adding gst_d3d12_frame_fence_{gpu,cpu}_wait() methods

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
Seungha Yang 478e49dd73 d3d12: Update copy_texture_region() method
Pass external fence value if any and allow passing fence
data so that dependent resources can be released
once copy is done

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
Seungha Yang d8aa2eea83 d3d12commandqueue: Add execute_wait_and_command_lists() method
... so that GPU-side waiting and executing can be scheduled at once

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
Seungha Yang ebb64dfd0d d3d12memory: Add get_external_fence() method
Required for caller to wait external fence without map() method

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
Seungha Yang 00924d4820 d3d12bufferpool: Sync all memory objects on acquire_buffer()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6749>
2024-04-28 12:49:07 +00:00
He Junyan ae5361b7fa vabaseenc: No need to call _finish_subframe()
After vaav1enc is aligned to TU, there is no case that generates
multi output for one input.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6688>
2024-04-28 07:49:02 +00:00
He Junyan 8d0a1a0c56 vavp9enc: Set the correct buffer flag for output
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6688>
2024-04-28 07:49:02 +00:00
He Junyan 9bd73987f6 vaav1enc: Set the correct buffer flag for output
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6688>
2024-04-28 07:49:02 +00:00
He Junyan b8871c87a2 vaav1enc: Do not change the PTS/DTS of output frames
The AV1 encoder does not reorder the frames, so there is no need
to change the timestamp related meta data of output frames, just
inheriting it from the input frames.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6688>
2024-04-28 07:49:02 +00:00
He Junyan f68bc7f49a vaav1enc: Change the alignment of output to "tu"
The current output alignment is "frame", which may cause some issues
for PTS and DTS calculation. We now change the alignment to "tu",
and this is also the alignment mode for av1enc and svtav1enc.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6688>
2024-04-28 07:49:02 +00:00
Nirbheek Chauhan d7eeb62f38 meson: Fix Python library searching on Windows
Neither LIBDIR nor LIBPL are set with the native windows Python
(unlike MSYS2), so we need to use `prefix` which takes us to the
rootdir of the Python installation.

The name is also different: it's python312.dll, not python3.12.dll.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6734>
2024-04-27 01:30:21 +00:00
Nirbheek Chauhan 753aeccde7 meson: Fix Python library name fetching on Windows
`python.get_variable('FOO', [])` becomes `python.get_variable('FOO')`
due to how Meson treats empty arrays in arguments, which breaks the
fallback feature of get_variable().

So we need to actually check whether the variable exists before trying
to fetch it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6734>
2024-04-27 01:30:21 +00:00
Tim-Philipp Müller 7074849c5c exif: add debug category
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6741>
2024-04-27 00:19:30 +00:00
Xavier Claessens f0ef33d018 unixfd: Close file descriptors on error
After calling g_unix_fd_list_steal_fds() and before calling
gst_fd_allocator_alloc(), we are responsible for closing those fds.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6532>
2024-04-26 18:52:19 +00:00
Xavier Claessens 1f8accbc8d unixfdsink: Take segment into account when converting timestamps
Also rename `calculate_timestamp()` to `to_monotonic()` and
`from_monotonic()` which better describe what it does.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6532>
2024-04-26 18:52:19 +00:00
Xavier Claessens 7f47dba299 unixfd: Allow sending buffers with no memories
There is no reason to not allow it, and it is useful for simple unit
test.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6532>
2024-04-26 18:52:18 +00:00
Víctor Manuel Jáquez Leal 1f080391ed vulkan: replace gst_vulkan_queue_create_decoder() with gst_vulkan_decoder_new_from_queue()
The purpose of this refactor is to hide decoding code from public API.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6723>
2024-04-26 16:24:22 +00:00
Víctor Manuel Jáquez Leal 18c32272bd vulkan: conceal unused decoder symbols
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6723>
2024-04-26 16:24:22 +00:00
Víctor Manuel Jáquez Leal 668b395a38 vulkan: conceal decoder from public API
Since we don't want to expose video decoding API outside of GStreamer, the
header is removed from installation and both source files are renamed as
-private.

The header must remain in gst-libs because is referred by GstVulkanQueue,
which's the decoder factory.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6723>
2024-04-26 16:24:22 +00:00
Víctor Manuel Jáquez Leal 547e2899d1 vaallocator: disable derived all together for Mesa <23.3
First it derived mapping was disabled for P010 formats, but also there's an
issue with interlaced frames.

It would be possible to disable derived mapping only for interlaced (H.264
decoder and vadeinterlace) but it would spread the hacks along the code. It's
simpler and contained to disable derived completely for Mesa <23.3

Fixes: #3450
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6729>
2024-04-26 15:41:39 +00:00
Víctor Manuel Jáquez Leal 7eb08feeee va: videoformat: use video library to get DRM fourcc
Instead of duplicating the GStreamer format to DRM fourcc mapping, this patch
uses the GstVideo library helpers. This duplicates the big O of looking for,
since the two lists are traversed, but it's less error prone.

Partially reverts commit 547f3e8622.

Fixes: #3354
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6731>
2024-04-26 15:10:36 +02:00
Edward Hervey 8737b9ca84 playbin3: Handle combiner update in case of errors
The assertion that was present before is a bit too harsh, since there is now
a (understandable) use-case where this could happen.

In gapless use-case, with two files containing the same type (ex:audio). The
first one *does* expose a collection with an audio stream, but decoding
fails (for whatever reason).

That would cause us to have configured a audio combiner, which was never
used (i.e. not active).

Then the second file plays and we (wrongly) assume it should be activated
... whereas the combiner was indeed present.

Demote the assertion to a warning and properly handle it

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6737>
2024-04-26 11:31:32 +00:00
Tim Blechmann ff7b41ac86 soup: fix thread name
thread names should be below 16char, otherwise they won't be shown on
linux.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6736>
2024-04-26 09:45:49 +08:00
Hou Qi be7ba5ac51 wlwindow: free staged buffer when do gst_wl_window_finalize
If waylandsink received buffer rate is high which causes frame
drop, the cached staged buffer will be replaced when next buffer
needs to be rendered and be freed after redraw. But there is
chance to get memory leak if ended without redraw. So need to
free staged buffer when do gst_wl_window_finalize().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6670>
2024-04-25 23:55:42 +00:00
Seungha Yang 4ac46ce82b d3d12screencapturesrc: Performance improvement
Process captured frame using d3d11 instead of d3d12, and use shared
fence when copying processed d3d11 texture to d3d12 resource.
In this way, capture CPU thread does not need to wait for fence signal.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6733>
2024-04-25 22:51:01 +00:00
Xavier Claessens 364d0ff45d pad: gst_pad_set_offset is only reliable on source pads
Setting an offset on sink pads won't repush segment event which means
buffer running time won't be adjusted. Better warn about this than being
silently not working.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6464>
2024-04-25 13:49:03 +00:00
Nirbheek Chauhan e7598ed521 rsvg: Disable deprecations instead of porting to new librsvg API
`rsvg_handle_get_dimensions()` and `rsvg_handle_render_cairo()` are
deprecated, and the replacement librsvg functions as specified in the
migration guide are `rsvg_handle_get_intrinsic_size_in_pixels()` and
`rsvg_handle_render_document()`.

However, those are not drop-in replacements, and actually have
breaking semantics for our use-case:

1. `intrinsic_size_in_pixels()` requires SVGs to have width+height or
   the viewBox attribute, but `get_dimensions()` does not. It will
   calculate the geometry based on element extents recursively.
2. `render_cairo()` simply renders the SVG at its intrinsic size on
   the specified surface starting at the top-left, maintaining
   whatever transformations have been applied to the cairo surface,
   including distorted aspect ratio.
   However, `render_document()` does not do that, it is specifically
   for rendering at the specified aspect ratio inside the specified
   viewport, and if you specify a viewPort that does not match the
   aspect ratio of the SVG, librsvg will center it.

Matching the old behaviour with the new APIs is a lot of work for no
benefit. We'd be duplicating code that is already there in librsvg in
one case and undoing work that librsvg is doing in the other case.

The aspect ratio handling in this element is also kinda atrocious.
There is no option to scale the SVG while maintaining the aspect
ratio. Overall, element needs a rewrite.

Let's just disable deprecations. The API is not going anywhere.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6726>
2024-04-25 12:43:07 +00:00
Nirbheek Chauhan 49f9a1e224 Revert "rsvgdec: Fix uses of librsvg functions deprecated since 2.52"
This reverts commit b8db473955.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6726>
2024-04-25 12:43:07 +00:00
Jordan Petridis 83694a1094 ci: Remove pip install version limits for meson/hotdoc
We used to have them pinned to avoid unexpected issues
when we wanted to update the image, however we haven't
needed them lately and we should be good to install the
latest stable version always.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6656>
2024-04-24 15:01:27 +00:00
Jordan Petridis 472d1b52d3 ci: Add a simple build job based on debian
The gstreamer-rs repos use debian based images already,
which we can later base on this one. Additionally it's
good to have another distro target so we avoid weird
fedoraisms when possible.

It will also be simpler to keep it up to date, as we
don't need to run the test suite against this build as
well.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6656>
2024-04-24 15:01:27 +00:00
Víctor Manuel Jáquez Leal d2c8593b2e vkswapper: choose color space according with format
The swapper surfaces contains the color space for each supported format. Instead
of hard coding the color space, it returns the value associated with the
negotiated vulkan format.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6725>
2024-04-24 13:53:18 +00:00
Víctor Manuel Jáquez Leal f62574cb5f tests: vulkan: split decoder test and parameters
Thus they can be reused for the encoder test.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6721>
2024-04-24 12:54:12 +00:00
Jordan Petridis d72d79d85a pre-commit: Avoid prefixing string comparissons with x
This was working around bugs in various shells, but this
problem has been fixed for a decade now.

https://www.shellcheck.net/wiki/SC2268

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6652>
2024-04-24 12:37:31 +00:00
Jordan Petridis 490deafcbe git-hooks/pre-commit-python.hook: Fix typos
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6652>
2024-04-24 12:37:31 +00:00
Jordan Petridis a12881e2e4 git-hooks/pre-commit-python.hook: Specify encoding for the open call
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6652>
2024-04-24 12:37:31 +00:00
Jordan Petridis 7b81d081ad pre-commit: Stop using legacy backticks in shell
We can repalce them with the simpler $(foo) syntax instead

https://www.shellcheck.net/wiki/SC2006

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6652>
2024-04-24 12:37:31 +00:00
Edward Hervey 2aba1c86e9 videodecoder: Use a frame duration for QoS
We prefer to use the frame stop position for checking for QoS since we don't
want to drop a frame which is only partially late.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6689>
2024-04-24 09:19:22 +00:00
Elliot Chen a7d0b07406 gstplay: query seek information again in playing state for live stream
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6681>
2024-04-24 07:01:21 +00:00
Edward Hervey 9e4cb46bd4 validate/flvdemux: Stop spamming audio/video on test
Use the sinks specified by the runner

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6727>
2024-04-24 07:47:42 +02:00
Haihua Hu 560dc511f7 wlwindow: clear configure mutex and cond when finalize
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6722>
2024-04-24 01:02:15 +09:00
Edward Hervey 5d705ed923 ges/tools: Use new GstEncodingProfile function from pbutils
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6712>
2024-04-23 14:27:00 +00:00
Edward Hervey ad8c42ba06 encoding-profile: Make (de)serialization functions public
This is more convenient and cheaper than going through the `g_value_convert()`
hoops

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6712>
2024-04-23 14:27:00 +00:00
Edward Hervey b3c9f598aa bad/utils: Simplify get_file_extension
By using g_strrstr

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6715>
2024-04-23 12:08:19 +00:00
Edward Hervey 131679b9d0 mpegtsbase: Fix Program equality check
There was an issue with this equality check, which was to figure out what to do
with PCR pids (whether they were part of the streams present or not) and whether
we ignore PCR or not.

Turns out ... we already took care of that further up in the function.

The length check can be simplified by just checking whether the length of
the *original* PMT and the new PMT are identical. Since we don't store "magic"
PCR streams in those, we can just use them as-is.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6713>
2024-04-23 11:15:53 +00:00
Seungha Yang cecb0f2148 d3d12decoder: Lock DPB while building command
Since DPB resource can be modified in output thread, protect
it when building command list.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6709>
2024-04-23 10:08:19 +00:00
Seungha Yang 27c02a0b80 d3d12decoder: Hold reference pictures in fence data
Keep reference pictures alive during executing decoding commands

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6709>
2024-04-23 10:08:19 +00:00
Seungha Yang 0f5f170a40 d3d12vp9dec: Disallow resolution change to larger size on non-keyframe
Intel GPU seems to be crashing if the case happens.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6709>
2024-04-23 10:08:18 +00:00
Edward Hervey 376aaa828d decodebin3: Remove custom stream-start field if present
This field is added by urisourcebin so that we can avoid double-parsing. It's no
longer needed after.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6690>
2024-04-23 07:09:21 +00:00
Edward Hervey 049665ccaa urisourcebin2: Adaptive demuxers don't require another parsebin
By setting the same field on the GST_EVENT_STREAM_START decodebin3 will be able
to avoid plugging in an extra parsebin

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6690>
2024-04-23 07:09:21 +00:00
Edward Hervey 4e5a54612e adaptivedemux2: Answer GST_QUERY_CAPS
If we have a generic caps, we can answer the query.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6690>
2024-04-23 07:09:21 +00:00
Edward Hervey 6b43e4e19f adaptivedemux2: Refactor output slot creation
Set as much information as possible on the slot (including the associated
track) *before* the associated source pad is added to the element.

We need this so that incoming event/queries can be replied to if they are
received when adding the pad

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6690>
2024-04-23 07:09:21 +00:00
Johan Sternerup deddcbdc66 basesrc: protect segment_seqnum/pending with object lock
In a few places the object lock was not taken when writing to
segment_pending and segment_seqnum.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6671>
2024-04-22 18:13:46 +00:00
Johan Sternerup a3f8f036fe gstbasesrc: Do not hold LIVE_LOCK while sending events
An application that triggers a state transition from PLAYING to PAUSED
needs to acquire the LIVE_LOCK. Consequently the LIVE_LOCK must not be
taken while pushing anything on the pads because this operation might
get blocked by something that cannot be unblocked without the
application being able to proceed with the state transitions for other
elements in the pipeline. This commit extends the previous behaviour
where the live lock was released before pushing buffers (indirectly
through the unlock before subclass->create) to now also include
unlocking before pushing events.

The issue was discovered in a case for WebRTC where the application
tried to shut down a pipeline but an event originating from a video
source element (based on basesrc) was in the process of being pushed
down the pipeline when it got stuck on the STREAM_LOCK for the pad after
the rtpgccbwe element. This lock in turn was held by the rtcpgccbwe
element as it was in the process of pushing data down the pipeline but
was stuck on the blocking probes installed on dtlssrtpenc to prevent
data from flowing before dtls keys had been negotiated. What should have
happened here is that the blocking probes should be removed, but that
can only happen if the application may continue driving the state
transitions.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6671>
2024-04-22 18:13:46 +00:00
Seungha Yang 700c00eda3 d3d12decoder: Fix potential use after free
A DPB buffer held by codec picture object may not be writable
at the moment, then gst_buffer_make_writable() will unref passed buffer.

Specifically, the use after free or double free can happen if:
* Crop meta of buffer copy is required because of non-zero
  top-left crop position
* zero-copy is possible with crop meta
* A picture was duplicated, interlaced h264 stream for example

Interlaced h264 stream with non-zero top-left crop position
is not very common but it's possible configuration in theory.

Thus gst_buffer_make_writable() should be called with
GstVideoCodecFrame.output_buffer directly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6706>
2024-04-22 13:28:06 +00:00
Seungha Yang b9e51facdd d3d11decoder: Fix potential use after free
A DPB buffer held by codec picture object may not be writable
at the moment, then gst_buffer_make_writable() will unref passed buffer.

Specifically, the use after free or double free can happen if:
* Crop meta of buffer copy is required because of non-zero
  top-left crop position
* zero-copy is possible with crop meta
* A picture was duplicated, interlaced h264 stream for example

Interlaced h264 stream with non-zero top-left crop position
is not very common but it's possible configuration in theory.

Thus gst_buffer_make_writable() should be called with
GstVideoCodecFrame.output_buffer directly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6706>
2024-04-22 13:28:06 +00:00
Edward Hervey 6d228c420c tsdemux: Disable smart program update
The goal of this code was, for programs which were updates (i.e. adding/removing
streams but not completely changing) to allow dynamic addition/removal of
streams without completely removing everything.

But this wasn't 100% tested and there are a bunch of issues which make it fail
in plenty of ways.

For now disable that feature and force the legacy "add all pads again and then
remove old ones" behaviour to make it switch.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6651>
2024-04-22 11:56:30 +00:00
Loïc Le Page 9fd0f44492 gst-editing-services: add input channels reorder
- whitelist corresponding properties from audioconvert
- add input channels reorder validation test in gst-integration-testsuites/ges/scenarios

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5923>
2024-04-22 12:06:11 +02:00
Loïc Le Page 8fb96253be audioconvert: add possibility to reorder input channels
When audioconvert has unpositionned audio channels as input
it can now use reordering configurations to automatically
position those channels.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5923>
2024-04-22 12:06:11 +02:00
Seungha Yang 40f7d7f1f7 d3d11device: Add device-removed-reason property
In addition to device removed status monitoring in gst_d3d11_result()
method, if ID3D11Device4 interface is available,
an event handle will be used for device removed status update.
And "device-removed" signal is removed since applications can monitor
the device removed status via gobject notify

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6699>
2024-04-21 12:06:03 +00:00
Seungha Yang b12b04eeef d3d12utils: Fix documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6699>
2024-04-21 12:06:03 +00:00
Seungha Yang 6efeeb8300 d3d12device: Add device-removed-reason property
Adding new property in order to notify users of device removed status.
Once device removed status is detected, application should release
all ID3D12Device objects corresponding to the adapter, including
GstD3D12Device object. Otherwise D3D12CreateDevice() call for the
adapter will fail.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6699>
2024-04-21 12:06:03 +00:00
Seungha Yang b9feb47de5 mediafoundation: Fix infinite loop in device provider
Initialize source state with GST_MF_DEVICE_NOT_FOUND to terminate
loop immediately if no available capture device is available

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3492
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6704>
2024-04-21 19:21:54 +09:00
Alexander Slobodeniuk 926d5366b9 d3d11device: protect device_lock vs device_new
It seems that when D3D11CreateDevice collides in time
with other D3D11 calls, in particular the proccess of
creating a shader, it can corrupt the memory in the driver.
D3D11 spec doesn't seem to require any thread safety from
D3D11CreateDevice. Following MSDN, it is supposed to be called
in the beginning of the proccess, while GStreamer calls it with each
new pipeline.
Such crashes in the driver were frequently reproducing on the
Intel UHD 630 machine.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6686>
2024-04-20 11:22:41 +00:00
Alexander Slobodeniuk 8e0046a738 tests/d3d11: add concurrency test for gstd3d11device
We suspect that it's not thread safe to just create and
destroy the device from any thread, particularly because
of D3D11CreateDevice, that is not documented as thread-safe.
While D3D11CreateDevice is usually protected from outside
by the gst_d3d11_ensure_element_data, it still can cross
with the Release() method of another device.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6686>
2024-04-20 11:22:41 +00:00
Elliot Chen 13e17b9149 gstplay: query duration again if previous query failed
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6668>
2024-04-19 20:49:03 +00:00
Seungha Yang 5179cbccfa d3d12testsrc: Use shared 11on12 device
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6697>
2024-04-20 04:16:48 +09:00
Seungha Yang 045c9ac6b9 dwrite: Use shared 11on12 device
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6697>
2024-04-20 04:16:48 +09:00
Seungha Yang cd97275a19 d3d12device: Hold d3d11on12 device to be shared
d3d11on12 device seems to be occupying a bit of GPU memory
Hold the instance in GstD3D12Device so that it can be shared

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6697>
2024-04-20 04:16:41 +09:00
Seungha Yang 8e4fe98361 d3d12videosink: Handle mouse double click and modifier
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6693>
2024-04-19 16:11:30 +00:00
Elliot Chen 824c70d35a subparse: forward seek event first and return if succeeded
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4889>
2024-04-19 15:24:36 +00:00
Seungha Yang dabce9635d d3d12videosink: Disconnect window's signal on dispose
Same as the commit of 7b69d1758f
but for d3d12videosink.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6692>
2024-04-19 21:25:06 +09:00
Seungha Yang 6659bd6362 d3d12videosink: Handle external HWND's mouse/keyboard events
OS will not propagate the event to child HWND if it's handled by
the parent. Thus, navigation event should be handled by parent HWND's
event handler.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6692>
2024-04-19 21:24:52 +09:00
Edward Hervey a032c1e1bd ges-command-line-formatter: Handle transitions
Avoids getting a noisy g_warning

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6683>
2024-04-19 08:03:48 +00:00
Edward Hervey 37b60e5354 ges-timeline-tree: Fix debug statement
Was printing out garbage in the logs

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6683>
2024-04-19 08:03:48 +00:00
Sebastian Dröge d42ee6e48c vavp9enc: Preserve PTS and other frame metadata
See also https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4150

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6680>
2024-04-19 07:18:35 +00:00
Seungha Yang ba443e7a64 webview2: Handle double click and modifier
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6491>
2024-04-18 20:19:38 +00:00
Seungha Yang e0def6b355 d3d11videosink: Handle double click and modifier
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6491>
2024-04-18 20:19:38 +00:00
Seungha Yang e1910d2be1 navigation: Define mouse double click event
Windows and UI toolkits define mouse double click events

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6491>
2024-04-18 20:19:38 +00:00
Hou Qi 4dfdaf67db waylandsink: config buffer pool with query size when propose_allocation
If propose_allocation comes before set_caps, self->video_info
has not been extracted from caps and self->video_info.size is 0.
It causes buffer pool fail to set config . So need to use info
size got from query instead when propose_allocation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6666>
2024-04-18 18:34:30 +00:00
Sebastian Dröge 750d53d7e0 rsvgdec: Remove unused GObject::finalize implementation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6613>
2024-04-18 17:45:43 +00:00
L. E. Segovia b8db473955 rsvgdec: Fix uses of librsvg functions deprecated since 2.52
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6613>
2024-04-18 17:45:43 +00:00
Sebastian Dröge 5d876ff774 rsvgdec: Negotiate resolution with downstream and scale accordingly
Prefer the resolution given by the input but if downstream request a
specific resolution then scale to this without regards to the aspect
ratio.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1538

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6613>
2024-04-18 17:45:43 +00:00
Philipp Zabel 46a41667a3 v4l2bufferpool: Ensure freshly created buffers are not marked as queued
Otherwise, if we run in to the copy case, this can cause these
groups to stay around with queued flag set, but never actually
queued, until gst_v4l2_allocator_flush() is called, which then
erroneously frees the associated memories, causing the release
function to decrement the allocator refcount where it was never
incremented, resulting in early allocator disposal, and either
deadlock or use after free.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6552>
2024-04-18 16:42:43 +00:00
Edward Hervey f33ce4fe8b encodebin: Fix pad removal for encodebin vs encodebin2
Clarify the fact that `encodebasebin->src_pad` is set when using a static source
pad (`encodebin`) and when not set it's dynamically added source
pads (`encodebin2`).

Fixes usage of encodebin2 when profiles are updated

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6667>
2024-04-18 09:11:58 +00:00
Nicolas Dufresne e34f765a7e v4l2codecs: Don't unref allocation query caps
The caps obtained from parsing the allocation query is borrowed and
should not be unreffed. This fixes criticals assertion introduced in
1.24.1.

(gst-launch-1.0:242): GStreamer-CRITICAL **: 19:48:02.667:
    gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed

Fixes: 5189e8b956 ("v4l2codecs: decoders: Add DMA_DRM caps support")
Closes #3462

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6679>
2024-04-18 06:13:17 +00:00
Thibault Saunier a342d14ba9 ges: Add support for sources reverse playback
It introduces a `reverse` property at the `nlesource` level which will
basically reverse playback of the clip.

We guarantee that outside that clip, the data flow looks like it was
playing forward as we add an 'identity' element with `single-segment=true`.

This start making use of the newly introduced concept of
`CHILD_PROP_FLAG_SET_ON_ALL_INSTANCES` as it is natural that
doing `source_clip.set_child_property("reverse", True)` will make
the whole clip go reverse, meaning that all the GESSource children
properties will be set. To set an individual source "reverse" child
property as the desired effect.

Fixes: https://gitlab.freedesktop.org/gstreamer/gst-editing-services/-/issues/24
Depends on: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/451

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/918>
2024-04-18 00:19:31 +00:00
Thibault Saunier 526f00b07f ges: test-clip: Fix setting children asset ids
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/918>
2024-04-18 00:19:31 +00:00
Thibault Saunier 388ad9e574 validate: Add an action to group containers
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/918>
2024-04-18 00:19:31 +00:00
Thibault Saunier 38d60c9f43 ges: Also track children props 'duplicates' in TimelineElement
We used to only track the first one but this was wrong, so we start
tracking all the children properties here, adapting the test which
was already thought for this to be implemented.

At the same time add some flags to determine how children properties
need to be handled adding a mode that means that all duplicated
children props will be set together when the user sets that particular
child property. This is going to be tested in a following commit.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/918>
2024-04-18 00:19:31 +00:00
Thibault Saunier 9b43892f6e ges: Add simple backward playback test
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/918>
2024-04-18 00:19:31 +00:00
Thibault Saunier 47029ca9de ges: tools: Fix printing validate action types
We were not taking into account some arguments could have been eaten

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/918>
2024-04-18 00:19:31 +00:00
Mengkejiergeli Ba 49dee23e65 msdk: Add main-422-12 profile to hevc
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6591>
2024-04-17 19:31:09 +00:00
Philippe Normand 83b1feb4f8 debug-viewer: Fix plugin loading machinery
The previous code was failing at least with Python 3.11 and Python 3.12.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6659>
2024-04-17 16:24:15 +00:00
Edward Hervey a2254a4968 ges-launcher: Fix for forcing container profiles
If the input profile doesn't have a container, it's fine since we are overriding
it. Just add the elementary stream to the target container profile

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6674>
2024-04-17 16:07:47 +02:00
Jan Schmidt 26acd70c74 dvbsubenc: fixed some memory leaks and a crash
Fix leaks of internal GstBuffers, and a crash if subtitle segments end
up empty.

Based on a patch by Jurijs Satcs <jurijs.satcs@veset.tv>

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6661>
2024-04-17 11:37:49 +00:00
Xavier Claessens 686f74e4a4 format: Allow GST_AUDIO/VIDEO_FORMAT_UNKNOWN in _to_string() function
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6630>
2024-04-17 01:19:58 +00:00
Alexander Slobodeniuk b46383bf5e d3d11converter: fix documentation for converter_new ()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6665>
2024-04-16 23:30:51 +02:00
Loïc Le Page cbc58c0483 gst-validate: add formatting for GstAudioMeta
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6461>
2024-04-16 15:33:42 +00:00
Qian Hu (胡骞) 8d003f00e9 v4l2: add multiplane y42b(yuv422m)
for some jpg file, mediatek v4l2 jpeg decoder
hardware produce multi plane YUV 4:2:2 data

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6617>
2024-04-16 09:03:47 +00:00
F. Duncanh ac40e6b592 ximagesink: initialize mask for XISelectEvents
Fixes #3470

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6631>
2024-04-16 00:13:43 -04:00
Tim-Philipp Müller 8564118d2a ci: tag fedora amd64 docker job as placeholder job
It finishes fairly quickly in most cases and even if it
needs to rebuild the image it doesn't use a lot of cpu
resources.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6646>
2024-04-15 23:29:13 +00:00
Hou Qi 105d232fde v4l2bufferpool: queue back the buffer flagged LAST but empty
Some decoder drivers need to wait enough capture buffers before
starting to decode. But the dequeued buffer flag LAST but empty
has no chance to queue back to driver, which makes decode hang
after seek. So need to queue back such kind of buffer to driver.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6579>
2024-04-15 18:07:17 +00:00
Philipp Zabel e1f5bacf8d v4l2: bufferpool: Drop writable check on output pool process
Output buffers don't have to be writable. Accepting read-only buffers
from the V4L2 buffer pool allows upstream elements to write directly
into the V4L2 buffers without triggering a CPU copy into a new buffer
from the same V4L2 buffer pool every time.

Tested with the vivid output device:

  GST_DEBUG=GST_PERFORMANCE:7 gst-launch-1.0 videotestsrc ! v4l2sink device=/dev/video5

With this change, gst_v4l2_buffer_pool_dqbuf() must be allowed to not
resize read-only memories of output buffers.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6572>
2024-04-15 17:11:00 +00:00
Seungha Yang a7fe79c4de mediafoundation: Fix device enumeration
Do not stop device enumerate even if a device could not be opened.
Otherwise the other devices listed after the failed device will not be
reported by device provider

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3460
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6598>
2024-04-15 14:52:32 +00:00
Tim-Philipp Müller 60ac6d0883 tests: fix possible libscpp build failure in gst-plugins-bad
../subprojects/gst-plugins-bad/tests/check/libs/gstlibscpp.cc:41:
fatal error: gst/mpegts/gstmpegts-enumtypes.h: No such file or directory

Could only pass the needed deps to the libscpp test, but gets
messier to maintain, so let's at it for consistency.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6643>
2024-04-15 11:41:51 +00:00
Philippe Normand 97d4c56c8f tests: webrtcbin: Fix repaired-stream-id handling in simulcast test
The test was attempting to add the same stream-id extension twice, probably some
unfinished copy/paste.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6615>
2024-04-15 08:43:09 +00:00
Seungha Yang 15434ce51d dwrite: D3D12 integration
Adding d3d12 backend text renderer/blender by using d3d11on12 interop.
And subclassing renderer object per backend (i.e., d3d11, d3d12, and bitmap)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6620>
2024-04-14 09:55:41 +00:00
Seungha Yang f6ec4e6256 d3d12overlaycompositor: Add support for d3d12 memory
Don't allocate d3d12 texture if overlay is d3d12 memory already

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6620>
2024-04-14 09:55:41 +00:00
Seungha Yang 13d892d336 d3d12: Move gst_d3d12_buffer_copy_into method to library
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6620>
2024-04-14 09:55:41 +00:00
Seungha Yang b242f5d2ec d3d12converter: Port to GstD3D12Frame
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6620>
2024-04-14 09:55:41 +00:00
Seungha Yang cb670f8110 d3d12: Add GstD3D12Frame struct and helper method
Adding GstD3D12Frame struct with map, unmap, and copy methods.
This new struct is equivalent to GstVideoFrame but gst_d3d12_frame_map()
method will extract D3D12 specific resource handles from memory.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6620>
2024-04-14 09:55:41 +00:00
Seungha Yang 8b88fcd18b d3d12memory: Implement copy method
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6620>
2024-04-14 09:55:41 +00:00
Nirbheek Chauhan 073d8fc52a meson: Don't link to python for the gi overrides module
We only need to link to python directly for the plugin:

https://github.com/mesonbuild/meson/issues/7712#issuecomment-689357908

https://github.com/Homebrew/homebrew-core/pull/165176#issuecomment-2051835257

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6622>
2024-04-13 22:24:32 +00:00
Seungha Yang e597dcdf0d d3d12encoder: Fix buffer pool leak
Add missing buffer pool release

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6628>
2024-04-13 14:55:09 +00:00
Seungha Yang d00d8fff6b subprojects: webview2: Fix warning with meson 1.4.0
Meson 1.4.0 will warn if include dir is absolute path

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6618>
2024-04-13 14:47:29 +00:00
Philippe Normand 111cc8d796 vpxdec: Include vpx error details in errors and warnings
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6626>
2024-04-13 10:57:43 +01:00
Philippe Normand bd83046193 vp9enc: Include vpx error details in errors and warnings
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6626>
2024-04-13 10:56:29 +01:00
Philippe Normand 73ce4fd770 vpxenc: Rename GST_VPX_WARN to GST_VPX_ENC_WARN
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6626>
2024-04-13 10:55:55 +01:00
Tim-Philipp Müller 3f90dca733 ci: trigger_cerbero_pipeline: improve error in case of insufficient permissions
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6608>
2024-04-12 18:01:28 +00:00
Seungha Yang d002acdd0c d3d11videosink: Fix rendering on keyed mutex enabled handle
As of the commit 69b2e1565c,
keyed mutex will be handled by the memory object.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3468
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6600>
2024-04-12 14:46:20 +00:00
Jordan Petridis c4e0d19f13 fdkaac: Mark the dependency include_type as 'system'
When using v2.0.2 of the subproject, it triggers werror for
unused functions that come from the fdkaac headers.

This avoids errors like the following when werror is set.

```
subprojects/fdk-aac-2.0.2/fdk-aac/FDK_audio.h:757:29: error: ‘FDKlibInfo_lookup’
defined but not used [-Werror=unused-function]
  757 | static FDK_AUDIO_INLINE INT FDKlibInfo_lookup(const LIB_INFO* info,
```

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6611>
2024-04-12 13:18:40 +03:00
Qian Hu (胡骞) cd95d02032 qtdemux: fix wrong full_range offset when parsing colr box
use colr_data[18] >> 7 to get full range information, instead
of colr_data[17] >> 7

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6616>
2024-04-12 16:59:33 +08:00
William Wedler 942415dce0 fix: qml6glsink: Notify that the returned QSGNode node has changes
Sets the QSGNode::DirtyMaterial bit when a new buffer is used for the material's texture

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3469
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6609>
2024-04-11 14:21:04 +00:00
Jochen Henneberg 687b3a2027 qt6: Let plugin documentation show up
* Added qml6 to plugin cache
* Added 'since' markers
* Moved plugin to plugins-good where it really is
* Fixed section comments

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6603>
2024-04-11 12:38:59 +00:00
Jochen Henneberg 8b87d7bcf7 qt: Let plugin documentation show up
* Enabled cc file parsing from hotdoc
* Moved package to plugins-good where it really is
* Fixed section comments

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6603>
2024-04-11 12:38:59 +00:00
Sebastian Dröge 78099afdbe ci: Update to Rust 1.77.2
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6593>
2024-04-11 02:00:28 +00:00
iodar 8854b27dd1 docs: updated docs for installing on linux
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6604>
2024-04-10 17:59:39 +02:00
Sebastian Dröge 9eb3ab3a59 ptp: Silence warning about some unused trait methods
These are not used yet but will likely be useful in the future.
Rust 1.79 (nightly) is warning about them being unused.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6601>
2024-04-10 14:33:46 +00:00
Matthew Waters 7016a96bfe glcolorconvert: don't overread the end of an array
Reverse index iteration needs a - 1 for the initial value.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6595>
2024-04-10 13:32:57 +00:00
Matthew Waters 97b45246d1 glcolorconvert: remove unused swizzling using "rgba" chars
We use indices now instead.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6595>
2024-04-10 13:32:57 +00:00
Jochen Henneberg fee46dee28 qt6: Added support for NV12 input format to qml6glsink
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6582>
2024-04-10 13:45:26 +02:00
Jochen Henneberg 7065d540ee qt: Added support for NV12 input format to qmlglsink
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6582>
2024-04-10 13:45:26 +02:00
Sanchayan Maity a9c4289da7 video-converter: Fix set config not having effect after start
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6594>
2024-04-10 09:47:52 +00:00
Jimmy Ohn a6c8c6f866 pulsedeviceprovider: Add is_default_device_name function and missing lock
Add is_default_device_name function to simplify compare device type
name and fix the missing lock when accessing default_sink_name and
default_source_name.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6558>
2024-04-10 08:43:56 +00:00
Edward Hervey 24c0dc9602 parsebin: Ensure non-time subtitle streams get "parsed"
Since https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6153 ,
subtitle "decoders" (i.e. which decode to raw text) are no longer auto-plugged
by parsebin.

But if a given format does not have a parser at all, we would end up outputting
non-time/non-parsed outputs.

In order to mitigate the issue, until such parsers are available, we check if
the subtitle stream is in TIME format or not (i.e. whether it comes from a
parser or demuxer). If not, we attempt to plug in a subtitle "decoder".

Fixes #3463

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6592>
2024-04-10 09:40:54 +02:00
Tim-Philipp Müller 9ec99ac6f2 analyticsmeta: fix g-ir-scanner warnings
Fix

 gstanalyticsmeta.c:134: Warning: GstAnalytics: "@instance"
                         parameter unexpected at this location

warning (caused by the extraneous empty line in the doc chunk)
and align function arguments with documentation and header file
(handle -> instance).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6585>
2024-04-10 00:46:42 +00:00
Seungha Yang ff754dca79 ccconverter: Fix caps leak and remove unnecessary code
The removed code does the exactly same thing as the below code
except for leaking caps

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6548>
2024-04-09 18:26:18 +00:00
Seungha Yang 0cc206e939 qsvdecoder: Release too old frames
Release too old frames manually.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3163
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6583>
2024-04-09 16:49:47 +00:00
Arun Raghavan 82b10e57b0 pulsesink: Re-enable emission of stream status messages
This was disabled almost 10 years ago because we were missing libpulse API to
avoid a deadlock. That was fixed quite a long time ago, so let's enable this
again. The defer counter becomes an atomic, as we no longer have a threaded
mainloop lock protecting it.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3444
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6500>
2024-04-09 15:50:04 +00:00
Philippe Normand 8d3e7689e1 vpxenc: Include vpx error details in errors and warnings
The vpx_codec_t err_detail string usually provides additional context about the
error, so include it in GStreamer warnings and errors, when it's not NULL.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6573>
2024-04-09 14:40:21 +00:00
Jochen Henneberg 6e33a5da14 qt6: Fixes for dummy texture
* RED_OR_ALPHA8 will map value to alpha for OpenGL, use R8 to avoid
  2nd shader
* Determine texel size for proper texture memory preparation
* QByteArray::fromRawData() does shallow copy and thus leads to use of
  corrupted memory
* Make sure RGBA dummy texture is fully opaque
* QRhiTexture::create() must be called to allocate texture resources

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6578>
2024-04-08 20:05:10 +02:00
Jochen Henneberg 87dc22b053 qt: Fixup for dummy textures
* Initialize dummy texture Ids
* Ensure YUV->RGB matrix set for dummy textures

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6578>
2024-04-08 20:05:09 +02:00
Seungha Yang 448a461a40 d3d12converter: Simplify root signature build
D3DX12SerializeVersionedRootSignature() helper method will translate
RS 1.1 into 1.0 version if needed

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6557>
2024-04-08 13:24:20 +00:00
Sebastian Dröge 0596871b98 rtpbin: Don't re-use a variable for a completely different purpose temporarily
During RTP-Info synchronization, clock_base was temporarily switched
from the actual clock-base to the base RTP time and then back some lines
later.

Instead directly work with the base RTP time. The comment about using a
signed variable for convenience doesn't make any sense because all
calculations done with the value are unsigned.

Similarly, rtp_clock_base was overridden with the rtp_delta when
calculating it, which was fine because it is not used anymore
afterwards. Instead, introduce a new variable `rtp_delta` to make this
calculation clearer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6536>
2024-04-08 10:29:54 +00:00
Sebastian Dröge 11ce209ea0 rtpbin: Convert clock-base to extended RTP timestamp correctly
It's not in the same period as the current RTP base time but always in
the very first period. This avoids using it again at a much later time.

The code in question is only triggered with rtcp-sync=rtp-info.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6536>
2024-04-08 10:29:54 +00:00
Sebastian Dröge 0c34c85f7a rtpjitterbuffer: Use an extended RTP timestamp for the clock-base
It is compared to other extended RTP timestamps all over rtpjitterbuffer
and since 4df3da3bab the initial extended RTP timestamp is not equal
anymore to the plain RTP time.

Continue passing a non-extended RTP timestamp via the `sync` signal for
backwards compatibility. It will always be a timestamp inside the first
extended timestamp period anyway.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6536>
2024-04-08 10:29:54 +00:00
Sebastian Dröge 4a4eb56fc2 rtspsrc: Optionally timestamp RTP packets with their receive times in TCP/HTTP mode
Until https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6509
this was accidentally done inside rtpjitterbuffer for many years, and
doing so potentially solves problems on some streams while introducing
problems on others.

Make this configurable on rtspsrc and default to not set timestamps.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6529>
2024-04-08 08:34:38 +00:00
Jan Schmidt 362a73218b webrtc.js: Fix a small typo
Fix a typo caused by referencing the event struct after
it's already been destructured

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6547>
2024-04-07 21:50:17 +00:00
Håvard Graff b57944efda examples/gl/cocoa: add an example of a failing scenario with glimagesink
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5708>
2024-04-07 21:03:23 +00:00
Daniel Morin 93b8a1777d ci/fluster: Revert results for visl
- Make test pass without h264parse AU boundary detection changes

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6540>
2024-04-07 15:25:23 +00:00
Daniel Morin 0c8e4d4a2c h264parser: maintain API changes
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6540>
2024-04-07 15:25:23 +00:00
Daniel Morin 71659f2545 Revert "h264parse: test - AU align with SEI between frame slices"
This reverts commit 533f814fd9.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6540>
2024-04-07 15:25:23 +00:00
Daniel Morin e57f561a8e Revert "h264parse: Improved AU boundary detection"
This reverts commit 49f200cb54.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6540>
2024-04-07 15:25:23 +00:00
Daniel Morin 694c6e77b1 Revert "h264parse: Remove dead code"
This reverts commit 141cd38715.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6540>
2024-04-07 15:25:22 +00:00
Daniel Morin ac3272db40 Revert "h264parse: Fix AU collection"
This reverts commit 495390f63a.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6540>
2024-04-07 15:25:22 +00:00
Daniel Morin 64c2c8d542 Revert "h264parse: Remove un-needed check on SPS state"
This reverts commit 73dedf9a51.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6540>
2024-04-07 15:25:22 +00:00
Daniel Morin 6ff1973b5b Revert "h264parse: use AUD to detect first VCL NAL"
This reverts commit 90a3b63eed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6540>
2024-04-07 15:25:22 +00:00
Daniel Morin 0bc5d97321 Revert "h264parse: correct NAL mode backlog processing"
This reverts commit b2098849dc.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6540>
2024-04-07 15:25:22 +00:00
Jan Schmidt 832a517965 rtpjitterbuffer: Don't use estimated_dts to do default skew adjustment
When the buffer DTS is estimated based on arrival time at the
jitterbuffer (rather than provided on the incoming buffer itself),
it shouldn't be used for skew adjustment. The typical case is
packets being deinterleaved from a tunnelled TCP/HTTP RTSP stream,
and the arrival times at the jitter buffer are not well enough
correlated to usefully do skew adjustments.

This restores the original intended behaviour for the 'estimated dts'
path, that was broken years ago during other jitterbuffer refactoring.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6509>
2024-04-07 12:24:58 +00:00
Sebastian Dröge ee566b8960 flac: Add wrap file and add fallback for it to the flac plugin
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6553>
2024-04-07 11:12:51 +00:00
Tim Blechmann 1c9fe19b23 v4l2: enforce a pixel aspect ratio of 1/1 if no data are available
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6242>
2024-04-07 10:14:18 +00:00
Ruben Gonzalez 27fc705bb2 CI: Use G_DEBUG=fatal_criticals and --gst-disable-registry-fork with gst-inspect-1.0 test
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5704>
2024-04-07 06:36:44 +00:00
Philipp Zabel 6f9872cb56 v4l2: allocator: Fix unref log/trace on memory release
Use gst_object_unref() instead of g_object_unref() in
gst_v4l2_allocator_release(), so refcounting log and
tracer get to know about this unref.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6551>
2024-04-06 11:44:27 +00:00
Edward Hervey eedfb5e6d7 videoparsers: Demote CC warning message
Another warning message which isn't fatal and therefore should just be a DEBUG
line.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6550>
2024-04-06 06:11:03 +02:00
Seungha Yang f59c43c50f d3d12device: Fix typo in object name
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6549>
2024-04-06 01:14:56 +09:00
Elliot Chen e4ee4ca716 v4l2: fix error in calculating padding bottom for tile format
This is a regression while porting to arbitrary tile dimensions
introduced in !3424.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6480>
2024-04-05 13:28:47 +00:00
Elizabeth Figura c308f013a7 atdec: Handle channel counts greater than 2
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6157>
2024-04-05 06:54:24 +00:00
Elizabeth Figura 277d6ddf22 atdec: Use gst_audio_decoder_set_output_caps() directly
The code currently sets the same caps in two different ways, and neither of them correctly handle the channel mask.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6157>
2024-04-05 06:54:24 +00:00
Seungha Yang bc8a3ca526 avviddec: Fix AVPacket leak
av_packet_unref() does not release allocated memory.
av_packet_free() is the correct free function.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6544>
2024-04-04 19:39:09 +00:00
Mathieu Duponchelle 4b93581c15 ajasrc: always post details about detected format
.. instead of only when there is a mismatch.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6438>
2024-04-04 18:23:31 +00:00
Mark Nauwelaerts e019093fbf adapter: align documentation to actual behavior
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6535>
2024-04-04 16:55:35 +00:00
Sebastian Dröge 16f69acf30 wavpackparse: Use an unsigned integer for the block size calculations
It's never negative.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6498>
2024-04-04 15:10:02 +00:00
Sebastian Dröge eefb7c1638 wavpackparse: Fix potential integer overflow on ID_ODD_SIZE blocks
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6498>
2024-04-04 15:10:02 +00:00
Sebastian Dröge 6402978a48 wavpackparse: Explicitly handle ID_WVX_NEW_BITSTREAM
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6498>
2024-04-04 15:10:02 +00:00
Sebastian Dröge 2dde87710c typefind: Handle WavPack block sizes > 131072
These are valid nowadays.

Also handle ID_ODD_SIZE and ID_WVX_NEW_BITSTREAM. The parser already
handles the former but not the latter.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6498>
2024-04-04 15:10:02 +00:00
Robert Mader 0a26a92b2b jpegparse: turn some bus warnings into object ones
For some cameras `gst_jpeg_parse_app0()` fails on a invalid segment.
While this is likely a driver or firmware bug that should be addressed
accordingly, it's not fatal and likely does not deserve a bus message on
every frame, flooding journals.

Turn down the volume of the warnings by turning them into object
warnings. If we conclude that in some cases we'd still want bus
warnings, they can be done more fine-grained in the
`gst_jpeg_parse_appX()` functions.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6490>
2024-04-04 11:35:07 +00:00
Sebastian Dröge 4b5a265571 pbutils: descriptions: Don't warn on MPEG-1 audio caps without layer field
While this is not ideal and won't give too accurate codec descriptions,
it is what tsdemux produces.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6511>
2024-04-04 09:39:49 +00:00
Ruben Gonzalez a780b9ed13 subprojects: update glib-networking wrap to 2.78.1
Using same mayor/minor version than glib wrap

Origin: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5704>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6533>
2024-04-03 18:49:08 +00:00
Víctor Manuel Jáquez Leal fc0ef6ede6 vkh265dec: add missing VPS parameter
and fix coded size

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6400>
2024-04-03 16:46:14 +00:00
Víctor Manuel Jáquez Leal a6608d72e6 vkh26xdec: implement close() vmethod
Since a validation layer error is signaled at EOS because it's required to wait
for the last frame to be processed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6400>
2024-04-03 16:46:14 +00:00
Víctor Manuel Jáquez Leal 316ca23cab vkh26xdec: remove unused variables
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6400>
2024-04-03 16:46:14 +00:00
Víctor Manuel Jáquez Leal 3dd5e0d46f vkh265dec: fix resource info structure when layered DPB
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6400>
2024-04-03 16:46:14 +00:00
Robert Rosengren 8c5203ba0e audioringbuffer: set waiting to 0 when signaling
Reset the waiting thread counter in all places to be consistent
when sending signal for the audio ring buffer. This fix applies it to
pause, stop and release, which are states that will go into a callback
of the subclass. Having the waiting counter reset will avoid having
executing thread of the same subclass trying to take the mutex when
callong gst_audio_ring_buffer_advance.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6195>
2024-04-03 15:09:00 +00:00
Víctor Manuel Jáquez Leal d18d6a70ac examples: vaenc-dynamic: support target percentage change in QVBR
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6465>
2024-04-03 13:51:31 +02:00
Víctor Manuel Jáquez Leal a9d839b8a3 examples: vaenc-dynamic: ignore bitrate change with ICQ too
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6465>
2024-04-03 13:51:31 +02:00
Víctor Manuel Jáquez Leal 4b5e930bc8 va: encoders: don't assert at target percentage when QVBR
Instead of asserting, just get the max value between the current value and 10,
which is the minimum required by QVBR.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6465>
2024-04-03 13:51:31 +02:00
Víctor Manuel Jáquez Leal cd14db923e examples: vaenc-dynamic: add vp9, av1 and low power tests
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6465>
2024-04-03 13:51:31 +02:00
Chris Spencer c6a3b2ab85 vkbufferpool: correct usage flags type
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6514>
2024-04-03 09:36:44 +00:00
Víctor Manuel Jáquez Leal 3b4b979ec4 msdk: sink context reference
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6398>
2024-04-03 08:48:25 +00:00
Víctor Manuel Jáquez Leal c83b69d146 gtk: sink reference of internal wayland pool
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6398>
2024-04-03 08:48:25 +00:00
Víctor Manuel Jáquez Leal e53c3ab5db wayland: sink reference to internal pool
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6398>
2024-04-03 08:48:25 +00:00
Víctor Manuel Jáquez Leal c080e7041d dash: sink references of all MDP objects
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6398>
2024-04-03 08:48:25 +00:00
Víctor Manuel Jáquez Leal 0d48ede4a9 va: sink reference at instantiation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6398>
2024-04-03 08:48:25 +00:00
Víctor Manuel Jáquez Leal b18483a563 vulkan: sink references at instantiation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6398>
2024-04-03 08:48:25 +00:00
eri 0f1a3b6847 play: Update video_snapshot to support playbin3
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6516>
2024-04-03 07:46:23 +00:00
Xavier Claessens d129c8ebd3 clocksync: Proxy allocation queries
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6515>
2024-04-03 03:58:10 +00:00
Seungha Yang b9ebe979ee qsvencoder: Handle d3d12 context
GstD3D12Device objetct's internal resources are singletons per adapter
already though, the object itself is not a singleton.
Due to the singleton design (unlike other APIs such as d3d11),
d3d12 device context sharing is not a strict requirement
for zero-copy, but handles context ones to make things less noisy.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6513>
2024-04-03 02:05:25 +00:00
Seungha Yang ad6670ba81 d3d12decoder: Always output sharable texture
Because shared heap's additional costs is not significant,
use D3D12_HEAP_FLAG_SHARED for resource can be shared over process
boundary. And enables render target for d3d11 interop in the process.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6513>
2024-04-03 02:05:25 +00:00
Matthew Waters 2a02107c8d glcaopengllayer: NULL some fields when freed
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6504>
2024-04-02 23:50:41 +00:00
Matthew Waters b080d01b68 glwindow/cocoa: keep a window reference across an async callback
Esnures that the window is alive when the callback is fired.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6504>
2024-04-02 23:50:41 +00:00
Matthew Waters 3f29c897f8 glimagesink: avoid a possible critical on shutdown
It is possible that the close callback can be called after glimagesink
is changing state to NULL.  Protect against that by taking the glimagesink
lock and some NULL checking.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6504>
2024-04-02 23:50:41 +00:00
Matthew Waters d9b563e9b2 glimagesink: unref the potential last ref outside of the glimagesink lock
Avoids a deadlock between the state change removing the last ref and
the destructer calling the window's on_close handler and trying to
take the glimagesink lock.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6504>
2024-04-02 23:50:41 +00:00
Matthew Waters 3c5bb4bf5d glbufferpool: protect release_buffer from multiple concurrent access
If two different threads attempt to release buffers at the same time, then the
keep-alive-slightly-longer GQueue may become corrupted.  Guard against that with
some locking.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6504>
2024-04-02 23:50:41 +00:00
Matthew Waters 49a7424d1e gl/context/cocoa: ensure pixel format lives as long as the context
Under some circumstances, the CGLPixelFormatObj was being destroyed too
early which could lead to potential use-after-frees.

Fix by returning a reference when asked for the pixel format.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3154
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6504>
2024-04-02 23:50:41 +00:00
Guillaume Desmottes ed54734825 examples: set perfect-timestamp=true on opusenc
Fix audio streaming on Chrome, see https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1524

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6512>
2024-04-02 22:08:31 +00:00
Xavier Claessens 74b171e745 videorate: Reset last_ts when a new segment is received
This fix all buffers being droped when a new segment is received and
average-period property is set.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6502>
2024-04-02 21:06:21 +00:00
He Junyan cbdc22d697 va: av1enc: Change the set_property to make it atomic
The inside encoder may be set in other threads, so we should make
its accessing atomic.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6471>
2024-04-02 19:01:22 +00:00
He Junyan db74da3f6f va: vp9enc: Change the set_property to make it atomic
The inside encoder may be set in other threads, so we should make
its accessing atomic.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6471>
2024-04-02 19:01:22 +00:00
Víctor Manuel Jáquez Leal 8bede7937c va{vp9,av1}enc: reconfigure when properties change
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6471>
2024-04-02 19:01:22 +00:00
He Junyan d179fca13f va: h265enc: Change the set_property to make it atomic
The inside encoder may be set in other threads, so we should make
its accessing atomic.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6471>
2024-04-02 19:01:22 +00:00
He Junyan 33bc8d75ad va: h265enc: set the reconf flag when cpb_size updated
This feature can be changed dynamically in playing state, so we
need to set reconf flag to trigger reconfig.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6471>
2024-04-02 19:01:22 +00:00
He Junyan 045449e190 va: h264enc: Change the set_property to make it atomic
The inside encoder may be set in other threads, so we should make
its accessing atomic.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6471>
2024-04-02 19:01:22 +00:00
He Junyan 812e7efb90 va: h264enc: set the reconf flag when cpb_size updated
This feature can be changed dynamically in playing state, so we
need to set reconf flag to trigger reconfig.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6471>
2024-04-02 19:01:22 +00:00
Seungha Yang 4ede9fef07 dwrite: Fix crash on device update
Selected blend mode should not be cleared on device update

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6508>
2024-04-02 17:36:28 +00:00
L. E. Segovia 6ce27e328d gst: clock: Block futex_time64 usage on Android API level < 30
This syscall is seccomp blocked on all lower API levels:

ee7bc3002d

While at it, also fix all direct tests on __NR_futex_time64 and
__NR_futex so that they refer to the results available in
config.h.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6477>
2024-04-02 15:32:37 +00:00
Alexander Slobodeniuk b18b3d00b7 navigation: add missing sanity checks
On practice a failure happened due to a race condition, the instance
already have been freed, but it could also happen if the instance
would be null.
Instead of crashing this sanity check is a more suitable option,
since with G_DEBUG=fatal-warnings it will crash too.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6475>
2024-04-02 14:17:53 +00:00
Seungha Yang 106187cc59 nvencoder: Add support for RGB formats
Adding RGBA, RGBx, BGRA, BGRx, VUYA and RGB10A2_LE format support for performance.
However, these formats are not still recommended if upstream can support
native YUV formats (e.g., NV12, P010) since NVENC does not expose
conversion related optiones. Note that VUYA format is 4:4:4 YUV format
already but NVENC runtime will convert it to 4:2:0 format internally

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6417>
2024-04-02 13:07:29 +00:00
Seungha Yang e6f496a240 cuda: Add support for VUYA format
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6417>
2024-04-02 13:07:29 +00:00
Seungha Yang 707ac69f5f qsv: Add support for d3d12 interop in encoder
Since QSV API does not support D3D12, try to import d3d12 resource
into d3d11 texture. Note that resource sharing requires
D3D12_SHARED_RESOURCE_COMPATIBILITY_TIER_2 for NV12 texure sharing.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6501>
2024-04-02 11:54:39 +00:00
He Junyan 78f1299ce4 va: av1enc: Avoid reopen encoder or renegotiate
If parameters remain similar enough to avoid either encoder reopening
or downstream renegotiation, avoid it.

This is going to be useful for dynamic parameters setting.

To check if the stream parameters changed, so the internal encoder has
to be closed and opened again, are required two steps:

1. If input caps, format, profile, chroma or rate control mode have changed.
2. If any of the calculated variables and element properties have changed.

Later on, only if the output caps also changed, the pipeline
is renegotiated.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6441>
2024-04-02 09:06:07 +00:00
He Junyan 075937dc19 va: vp9enc: Avoid reopen encoder or renegotiate
If parameters remain similar enough to avoid either encoder reopening
or downstream renegotiation, avoid it.

This is going to be useful for dynamic parameters setting.

To check if the stream parameters changed, so the internal encoder has
to be closed and opened again, are required two steps:

1. If input caps, format, profile, chroma or rate control mode have changed.
2. If any of the calculated variables and element properties have changed.

Later on, only if the output caps also changed, the pipeline
is renegotiated.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6441>
2024-04-02 09:06:07 +00:00
Chao Guo 69f4d98844 glcolorconvert: Ensure glcolorconvert does not miss supported RGB formats
Add RGB16 and other RGB formats to rgb_formats to ensure glcolorconvert
does not miss the RGB formats it supports

Signed-off-by: Chao Guo <chao.guo@nxp.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6497>
2024-04-02 17:14:27 +09:00
U. Artie Eoff 5fb2bbc2eb libav: guard dropped AV_OPT_TYPE_CHANNEL_LAYOUT
The FF_API_OLD_CHANNEL_LAYOUT api was dropped in upstream:

https://git.ffmpeg.org/gitweb/ffmpeg.git/commit/65ddc7498824

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6341>
2024-04-02 07:12:37 +00:00
U. Artie Eoff b699341ac9 libav: guard dropped AV_CODEC_ID_AYUV api
The FF_API_AYUV_CODECID api was dropped in upstream:

https://git.ffmpeg.org/gitweb/ffmpeg.git/commit/9ee59b63f5ea

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6341>
2024-04-02 07:12:37 +00:00
He Junyan 40629b84ee va: av1enc: Improve the LAST reference assignment
The last frame which has the smallest diff should be consider as
the first choice rather than the golden frame. Especially when only
one reference available, this way can improve the BD rate about 5
percentage.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6379>
2024-04-02 03:54:52 +00:00
He Junyan 1745a82516 va: av1enc: Fix the reference number setting bug
The current way will let the total reference number surplus the
reference number set by the "ref-frames" property.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6379>
2024-04-02 03:54:52 +00:00
Robert Guziolowski 52638c1b22 qml6glsink: fix destruction of underlying texture
One should not directly delete the QRhiTexture instance.
Instead it should be marked as to be deleted once QRhi::endFrame()
is called (see: https://doc.qt.io/qt-6/qrhiresource.html#deleteLater )

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3443
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6467>
2024-04-02 11:55:16 +11:00
Seungha Yang dce4067e83 meson: d3d11: Add support for MinGW DirectXMath package
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3428
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6495>
2024-04-02 05:14:53 +09:00
Seungha Yang 5432c8fef9 subprojects: directxmath: Update to 3.1.9
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6495>
2024-04-02 05:14:53 +09:00
Seungha Yang bb268eafa1 webview2: Add support for d3d12 interop
Enable shared copy to D3D12 resource

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6499>
2024-04-02 03:43:59 +09:00
Seungha Yang d00c26cdc8 d3d12screencapturesrc: Use gst_d3d12_memory_get_d3d11_texture()
... and use fence to wait for GPU sync

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6499>
2024-04-02 03:43:59 +09:00
Seungha Yang ce34e63605 d3d12memory: Add support for d3d11 texture caching
Would be useful for various D3D11 interop use cases

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6499>
2024-04-02 03:43:59 +09:00
He Junyan e023546162 va: encoder: Fix the unit of bitrate in debug log message
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6483>
2024-04-01 15:39:13 +00:00
He Junyan 9c3bd3950e va: vp9enc: Adjust the coded buffer size to avoid failure
Some extreme case such as "videotestsrc pattern=1" can generate pure
white noise videoes, for which encoder may generate too big output
for current coded buffer size. We now consider the qindex and bitrate
to avoid that.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6483>
2024-04-01 15:39:13 +00:00
He Junyan 2560f4c581 va: vp9enc: Fix the frame size not enough issue for super frame
The current code forgets to add the current last frame size into
the total super frame size.

Fixes: #3427
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6483>
2024-04-01 15:39:13 +00:00
Cheah, Vincent Beng Keat 249a086612 msdk: Fix mjpeg BGRx encode
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6401>
2024-04-01 11:23:24 +00:00
Seungha Yang 7d0e90b7bc d3d12: Move core part to gst-libs
Move buffer pool, converter, and device abstraction layer to
public library

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6494>
2024-04-01 10:37:50 +00:00
Seungha Yang 7829315305 d3d12memory: Define new D3D12 map flags
Define GST_MAP_READ_D3D12 and GST_MAP_READ_D3D12 flags

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6494>
2024-04-01 10:37:50 +00:00
Seungha Yang abeccdd6bc d3d12: Make resource getter methods consistent
Returns COM pointer directly everywhere

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6494>
2024-04-01 10:37:49 +00:00
Seungha Yang 706d5402fa d3d12: Remove device11on12 wrapping layer
It was added to avoid symbol conflict between DirectX-header project
and Windows SDK, but symbol conflict does not happen

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6494>
2024-04-01 10:37:49 +00:00
Seungha Yang 927e249557 d3d12bufferpool: Use d3dx12.h format table
The format table in SDK header defines all required information
already.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6494>
2024-04-01 10:37:49 +00:00
Seungha Yang 0527f27204 d3d12: Add a helper method for device equality check
GstD3D12Device object itself is not singltons anymore but
underlying private struct is singltons.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6494>
2024-04-01 10:37:49 +00:00
Mengkejiergeli Ba faddaa8ba5 msdkvpp: Set colorimetry for src caps
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6316>
2024-04-01 02:20:50 +00:00
Mengkejiergeli Ba 72bb59b37c msdkenc: Set VideoFullRange according to input colorimetry range
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6316>
2024-04-01 02:20:50 +00:00
Mart Raudsepp 3649f13bb3 meson: Don't confuse voaacenc plugin with bz2 one in meson variable names
No actual issue was observed from the previous naming duplicating bz2 one, so
just a correctness tweak.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6496>
2024-04-01 00:52:16 +03:00
Seungha Yang f7bdf91ad7 webview2: Add support for javascript injection
Allow javascript injection for various custom use cases.
For example, scrollbars and scrolling can be disabled via

gst-launch-1.0 webview2src location=https://gstreamer.freedesktop.org \
    javascript="document.querySelector('body').style.overflow='hidden'" ! ...

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6487>
2024-03-30 16:44:28 +00:00
Seungha Yang 85d422f7c6 webview2: Use IContainerVisual for offscreen rendering
Capturing from hidden HWND fails sometimes for some reason.
Instead of rendering to hidden HWND, render webpage to container
visual and create WGC item from the container visual object.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6487>
2024-03-30 16:44:28 +00:00
Alexander Slobodeniuk 7b69d1758f d3d11videosink: disconnect signals before releasing the window
It might happen that the key event arrives when the d3d11videosink
is stopping. In case of GstD3D11WindowWin32 it can raise a
navigation event even when the sink is already freed, because the
window object's refcount may reach 0 in the window thread. In
other words sometimes the GstD3D11WindowWin32 lives few ms more
then the GstD3D11VideoSink, because it's freed asynchronously.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6476>
2024-03-30 16:02:12 +00:00
Ruben Gonzalez 941793c7e4 wpe: avoid crash with G_DEBUG=fatal_criticals and static build
No plugin filenames if static build.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6484>
2024-03-30 07:55:40 +00:00
Sebastian Dröge 9854c79ad6 ci: Update to Rust 1.77.1
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6482>
2024-03-29 19:55:09 +00:00
Hou Qi 1e70dea347 encodebin: Add the parser before timestamper to tosync list
Also need to sync the state of the parser before timestamper with
parent.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6481>
2024-03-29 07:59:06 +00:00
Mengkejiergeli Ba 41c52f5739 msdk: Fix session close failure
In the case of multi-channels transcoding, a context with child
sesseion can be parent for others, so we need to check if the
msdkcontext has any child session in the list to avoid session
leaks. Otherwise, we will see the failure of closing a parent
session because one of its child's child session not released.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6259>
2024-03-29 04:20:47 +00:00
Tim-Philipp Müller ef5b8dc96a tests: rtpred: fix out-of-bound writes
Don't write more data to the buffer than we allocated
space for.

Fixes #3312

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6474>
2024-03-28 19:51:47 +00:00
Haihua Hu 37e3a38ba9 v4l2src: need maintain the caps order in caps compare when fixate
if the calculated "distance" of caps A and B from the preference are
equal, need to keep the original order instead of swap them

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6451>
2024-03-28 12:53:01 +00:00
Seungha Yang d0cfada15e meson: d3d11: Disable library build if DirectXMath header was not found
DirectXMath header library is a hard dependency

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6468>
2024-03-28 11:44:14 +00:00
Seungha Yang 4888a25bac webview2: Add Microsoft WebView2 based web browser source
Adding webview2src element

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4631>
2024-03-28 10:49:39 +00:00
Seungha Yang fd3617bfef subprojects: Add Microsoft WebView2 SDK
Add WebView2 NuGet package downloader and meson file

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4631>
2024-03-28 10:49:39 +00:00
He Junyan a170fa4f46 va: {av1, vp9}enc: Use g_free() to free frames
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6466>
2024-03-28 16:29:50 +08:00
Nicolas Dufresne cee05343f0 v4l2codecs: alphadecoder: Explicitly pass 64 bit integers as such through varargs
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6452>
2024-03-27 14:01:45 -04:00
Sebastian Dröge 276329dd5d alphadecodebin: Explicitly pass 64 bit integers as such through varargs
Maybe fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3422

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6452>
2024-03-27 17:05:33 +00:00
Sebastian Dröge 6d3ed65179 basesrc: Clear submitted buffer lists consistently with buffers
And handle the case of a NULL buffer being returned cleanly, which is
valid as long as a buffer list is returned instead. Previously this
would cause an assertion because of calling gst_buffer_unref() with
NULL.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6460>
2024-03-27 16:16:10 +00:00
Taruntej Kanakamalla 6a67ae1bfa net/gstptpclock: fix double free of domain data during deinit
The attempt to free the domain data is happeing twice during the ptp deinit.
Once while iterating through the list domain_data and second while iterating
through the list domain_clocks, so this is crashing the application
trying to gst_ptp_deinit

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6443>
2024-03-27 17:54:46 +05:30
Jan Schmidt 351936aeac rtpmp4adepay: Set duration on outgoing buffers
If we can calculate timestamps for buffers, then set the duration
on outgoing buffers based on the number of samples depayloaded.

This can fix the muxing to mp4, where otherwise the last packet
in a muxed file will have 0 duration in the mp4 file.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6447>
2024-03-27 10:53:38 +00:00
Arnaud Vrac 258e9d2bca inputselector: fix possible clock leak on shutdown
Avoid leaking a GstClock object on shutdown, bail out before taking the ref when
not playing.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6442>
2024-03-27 10:10:14 +00:00
Piotr Brzeziński 82294fd665 vtdec: Fix caps criticals during negotiation
Calling gst_pad_peer_query_caps() without a filter can give us EMPTY caps, whereas all the code below
assumes that's not the case. Replacing query+intersect with a filtered query ensures we always get a subset
of the template caps back.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6429>
2024-03-27 09:04:28 +00:00
L. E. Segovia 31baaf8906 Android tutorials: add outputs to gitignore
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6419>
2024-03-27 08:20:27 +00:00
He Junyan 7ac9d26533 va: vp9enc: Correct the flags for registering properties
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6437>
2024-03-27 10:24:12 +08:00
He Junyan fa50571d3b va: av1enc: Correct the flags for registering properties
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6437>
2024-03-27 10:21:08 +08:00
He Junyan 73c1c1fe7f va: {vp9, av1}enc: Do not use g_slice_new() to create frames
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6437>
2024-03-27 10:18:04 +08:00
He Junyan fa6552b7c5 test: Fix several code style issues in vp9bitwriter test
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6437>
2024-03-27 10:17:51 +08:00
He Junyan 2688e28438 vp9bitwriter: Fix several hotdoc related format issues
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6437>
2024-03-27 10:17:45 +08:00
He Junyan 71eff7ce97 va: encoder: update the bitrate change correctly
We should update and notify the bitrate change at a common place,
no matter whether the bitrate is calculated or not.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433>
2024-03-26 18:15:20 +00:00
He Junyan 56703704a5 va: av1enc: enable ICQ and QVBR modes
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433>
2024-03-26 18:15:20 +00:00
He Junyan 5c51abfa71 va: vp9enc: enable ICQ and QVBR modes
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433>
2024-03-26 18:15:20 +00:00
He Junyan d90f718b1a va: h265enc: enable ICQ and QVBR modes
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433>
2024-03-26 18:15:20 +00:00
He Junyan f45f52a786 va: h264enc: enable ICQ and QVBR modes
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433>
2024-03-26 18:15:20 +00:00
He Junyan 85bcea1776 va: encoder: Enable ICQ and QVBR mode in rate control map
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433>
2024-03-26 18:15:20 +00:00
He Junyan 3f1ce4460a va: encoder: Set the quality_factor parameter in rate control
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6433>
2024-03-26 18:15:20 +00:00
Víctor Manuel Jáquez Leal ababe13f1c jpegparse: avi1 tag can be progressive
AVI1 tag in APP0 is trivalue: 0 not interleaved, 1 odd, 2 even.

So if avi1 is zero then the frame is progressive.

Also, this patch adds a couple log messages.

Fixes: #3414
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6445>
2024-03-26 16:17:02 +00:00
Tim-Philipp Müller 46355e31d7 tests: add check to make sure -bad lib headers are C++ compiler clean
Only non-internal libs without external deps for now.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6440>
2024-03-26 14:21:34 +00:00
Tim-Philipp Müller 9e2cc83f23 ges: add check to make sure headers are C++ compiler clean
See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3421

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6440>
2024-03-26 14:21:34 +00:00
Thibault Saunier 324c211283 ges: frame-composition-meta: Stop using keyword 'operator' for field in C++
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3421

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6440>
2024-03-26 14:21:34 +00:00
Sebastian Dröge e0dfb3d974 rtphdrext-ntp: Fix typo of the RFC number in the element metadata
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3417

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6439>
2024-03-26 14:37:47 +02:00
Matthew Waters 91e8331b52 ccconverter: fix cdp->cea608-raw field 1 60fps conversion
There was a potential busy loop occuring because when we were taking
data from the internal ccbuffer, we were not resetting which field had
written data.  This would mean that the next time data was retrieved
from ccbuffer, it was always from field 0 and never from field 1.

This only affects usage of cc_buffer_take_separated() which is only used
by cdp->raw cea608.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6423>
2024-03-26 02:23:08 +00:00
Seungha Yang bbdfa00b7b d3d12: Add support for cross-compile
... and fix bunch of GCC reported warnings

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6435>
2024-03-25 11:41:25 +00:00
Seungha Yang 6c80d2f5f8 d3d12: Allow building without WGC support
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6435>
2024-03-25 11:41:25 +00:00
Philippe Normand ce0b60b5c9 meson: Declare dav1d dependency in subproject
Fixes this error:

dav1d| Subproject dav1d finished.

gst-plugins-rs| WARNING: Subproject 'dav1d' did not override 'dav1d' dependency and no variable name specified
gst-plugins-rs| Dependency dav1d from subproject subprojects/dav1d-1.4.1 found: NO

subprojects/gst-plugins-rs/meson.build:382:14: ERROR: Dependency 'dav1d' is required but not found.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6436>
2024-03-25 10:14:13 +00:00
Seungha Yang 2649d2ae62 d3d12: Port to d3dshader library
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6434>
2024-03-25 00:02:12 +09:00
Seungha Yang cab1f3e547 d3d11: Port to d3dshader library
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6434>
2024-03-24 22:28:14 +09:00
Seungha Yang 13c90b606a d3dshader: Add HLSL shader library
Adding a new library for HLSL compile and compiled bytecode caching.
This library will be used by d3d11 and d3d12 library/plugin, in order to
reuse single HLSL code and compiled HLSL bytecode.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6434>
2024-03-24 22:05:49 +09:00
Seungha Yang 93bb362016 d3d11: Update shader to be d3d12 compatible
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6434>
2024-03-24 20:33:26 +09:00
Seungha Yang 43da9b4249 d3d12: Update shader to be Shader Model 5.0 compatible
And use fxc HLSL compiler

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6434>
2024-03-24 17:15:22 +09:00
Nirbheek Chauhan 0faff6fb5e meson: Bump pixman.wrap to latest version
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6351>
2024-03-23 13:08:15 +00:00
Nirbheek Chauhan 3885efea03 meson: Add the name of the provided dependency to pixman.wrap
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6351>
2024-03-23 13:08:15 +00:00
Nirbheek Chauhan ab7e253667 meson: Fix various build issues with opus-1.5.1
All taken from upstream, can be removed on bump.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6351>
2024-03-23 13:08:15 +00:00
Nirbheek Chauhan bd753822c4 ci: Enable opus and vpx plugins everywhere by default
Ensure that they are build-tested on the CI.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6351>
2024-03-23 13:08:15 +00:00
Nirbheek Chauhan 492d3afad3 meson: Make wrap downloads smaller
Make all git clones depth=1 and switch opus to the tarball.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6351>
2024-03-23 13:08:15 +00:00
Ruben Gonzalez 778381fba6 ristsrc: Clean caps instead of unref
Fix issue unrefering null caps. Better solution than

```
  if (src->caps)
      gst_caps_unref (src->caps);
```

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6432>
2024-03-23 10:31:57 +01:00
Sebastian Dröge cfe55115c3 ci: Update to Rust 1.77 / cargo-c 0.31 / rustup 1.27
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6426>
2024-03-22 21:31:03 +00:00
Hou Qi 024d3ab051 v4l2: Also set max_width/max_height if enum framesize fail
Some driver doesn't implement enum_framesize. The maximum supported
size can be got by trying format with a very large size. Also need
to set max_width/max_height for this case, otherwise default encoded
buffer size 256kB is too small.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6416>
2024-03-22 16:02:51 +00:00
Seungha Yang 0c148a96db d3d12: Add IPC elements
Adding d3d12ipcsink and d3d12ipcsrc elements, equivalent to D3D11 ones.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6428>
2024-03-22 23:09:12 +09:00
Seungha Yang 0006ad1f86 d3d12: Add buffer copy helper method
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6428>
2024-03-22 23:09:05 +09:00
Seungha Yang c612af6d42 d3d12commandqueue: Always invoke notify asynchronously
Otherwise the callback thread is unpredictable

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6428>
2024-03-22 20:45:01 +09:00
Seungha Yang 18091f0115 d3d12memory: Update for API interop
Add support for destroy notify in case of wrapped memory, and
allow setting external fence for interop

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6428>
2024-03-22 20:01:16 +09:00
Seungha Yang 0d559bead9 d3d12: Make primary fence sharable
Create primary fence with D3D12_FENCE_FLAG_SHARED flag so that
the fence can be shared with other APIs or processes

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6428>
2024-03-22 18:57:26 +09:00
Wojciech Kapsa 71e879236f webrtc: Change requirement to libnice 0.1.22
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6424>
2024-03-22 08:49:32 +00:00
Philippe Normand f8e524842b subprojects: Bump to dav1d 1.4.1
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6420>
2024-03-21 20:32:27 +00:00
Tim-Philipp Müller 4790a44d10 Revert "audiobasesink: Don't wait on gap events"
This reverts commit 8e923a8e2d.

This caused regressions, see #3303.

Without this commit, osxaudiosrc ! osxaudiosink won't work
right, but since that hasn't really been a huge problem
for years it's probably best to revert this until a proper
solution can be figured out.



(cherry picked from commit f04f86f3ee)



(cherry picked from commit 93255efece)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6405>
2024-03-21 03:19:03 +00:00
Thomas Goodwin fde2495218 gst-inspect: fix --atleast-version to be implicitly applied to --exists
The --atleast-version implies --exists, but the implementation in
earlier commits had the version check applied any time the --exists was
checked, and the default value of the major and minor versions were set
to the GStreamer major and minor versions.  The resulting behavior would
have gst-inspect return '1' if the plugin's version didn't match
gstreamer's even when --atleast-version was not specified in the command
line args.  The change in this patch removes that behavior and adds
tests to verify that if --exists is specified WITHOUT --atleast-version
the version check will NOT be applied.  If both arguments are specified
and the version does not match the arg-supplied version number, a new
return code of '2' is used to uniquely identify the failure.

Fixes #3246

Signed-off-by: Thomas Goodwin <thomas.goodwin@laerdal.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6191>
2024-03-20 21:19:07 +00:00
Thibault Saunier 2a4b9c8dc1 validate: reporter: Use an MT safe weak ref to reporter for GLog handling
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6412>
2024-03-20 16:45:34 +00:00
Piotr Brzeziński 982c73dfdd vtdec: Ignore output loop errors in drain() if we're flushing
In an early non-linked scenario, this was causing a ton of criticals about the queue array,
because the output callback would still fire for leftover frames that were still being processed by VT
at the time the output loop stopped. This makes sure they're flushed correctly as well.

Also renames gst_vtdec_loop to gst_vtdec_output_loop for consistency with related functions.

wip

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6397>
2024-03-20 13:07:25 +00:00
Piotr Brzeziński 112951ce55 vtdec: Fix a deadlock during ProRes playback
Sometimes a call to negotiate (and thus drain) can happen from the output loop
(via finish_frame()), which will tell VT to output all internal frames, but that won't succeed
if we happen to decide to wait for the queue to empty (because the loop is waiting for draining to finish and
will not make space in the queue!). This commit adds an override for the queue size limit if we're draining/flushing.

This bug could happen for any formats, but was especially obvious for ProRes, which has dpb_size of 0.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6397>
2024-03-20 13:07:25 +00:00
Seungha Yang 17f92ab400 asio: Add support for MinGW build
Drop MSVC specific bits and remove unused dependency

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6404>
2024-03-20 10:53:16 +00:00
Seungha Yang f0761a7358 asio: Drop external SDK header dependency
Build ASIO plugin using our tiny SDK header

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6404>
2024-03-20 10:53:16 +00:00
Edward Hervey 5280f0b733 adaptivedemux2: Add libsoup tracing debug
Provides more information for debugging

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6409>
2024-03-20 09:48:12 +00:00
He Junyan 3b57825ca6 va: Implement the vavp9enc plugin
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3293>
2024-03-20 08:53:11 +00:00
He Junyan 802a0eb9df test: add vp9 bitwriter test case
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3293>
2024-03-20 08:53:11 +00:00
He Junyan 142448bbed vp9bitwriter: Add the VP9 bit writer helper functions
In this first version, we only implement the "show existing frame"
and super frame writting. Other frame header types writting can
be added when needed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3293>
2024-03-20 08:53:11 +00:00
Edward Hervey 3d500636a9 adaptivedemux2: Don't use g_str_equal on potentially NULL strings
It is only meant to be used as a callback. The fallback macro uses strcmp which
doesn't handle NULL strings gracefully. Instead use g_strcmp0

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6392>
2024-03-19 13:25:41 +00:00
Edward Hervey ab11c20d59 hlsdemux2: Avoid NULL pointer usage
The pending/current variant are both NULL when the demuxer is resetted.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6392>
2024-03-19 13:25:41 +00:00
Edward Hervey 46bb0bfa57 adaptivedemux2: Handle context going away
This issue can happen when the scheduler loop was stopped (and context went
away). We no longer want to push/pop main context threads.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6392>
2024-03-19 13:25:41 +00:00
Edward Hervey 8438c3f567 hlsdemux2: Improve detection of playlist updates
In the case we are not updating an existing playlist, we only want to reset the
download error count if the URI we are downloading was not the previous one we
were trying to load

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6392>
2024-03-19 13:25:41 +00:00
Seungha Yang b417c62940 d3d12device: Set debugging friendly object name
Build object name with DXGI adapter index

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6395>
2024-03-19 12:03:55 +00:00
Seungha Yang 6de5eab1e4 d3d12: Suppress expected leak reports
Such leaks are expected and intended ones

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6395>
2024-03-19 12:03:55 +00:00
Seungha Yang a1c8fc6163 d3d12device: Keep device object permanently
Because ID3D12Device objects are singletons per adapter,
GstD3D12Device was following the API design, that is, keep track
of global GstD3D12Device objects and reuses it.
That means ID3D12Device object can be released at the time
when GstD3D12Device is destroyed.

But exetrnal APIs such as NVENC does not seem to be happy
with the released ID3D12Device, that could be a driver bug though.

Let's hold already opened ID3D12Device permanently without releasing
it for now.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6395>
2024-03-19 12:03:55 +00:00
Seungha Yang 17d6c7350c d3d12commandqueue: Add drain method
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6395>
2024-03-19 12:03:55 +00:00
Seungha Yang 393fb4733c d3d12: Use native device handle if possible
Various abstraction objects such as command queue/list/allocator
can be constructed without GstD3D12Device

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6395>
2024-03-19 12:03:55 +00:00
Seungha Yang 331522210f d3d12commandqueue: Allow empty command list
Just increase fence value and signal the queue in that case

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6395>
2024-03-19 12:03:54 +00:00
Seungha Yang 3e912a2214 examples: d3d11: Add inter-device synchronization example
Adding an example to demonstrate resource sharing between
D3D11 device and GPU synchronization

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6303>
2024-03-19 10:55:19 +00:00
Edward Hervey 42e24c32e5 uridecodebin3: Don't hold lock when posting messages or signals
There's a very good chance that the receiver might react on those synchronously
and call back into uridecodebin3 (ex: for setting the next URI).

Make sure we release the lock if we need to do that.

Fixes #3400

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6402>
2024-03-19 09:34:18 +01:00
Ruijing Dong bc858976db va: enc : checking surface alignment attribute
Apply surface alignment attribute when availalbe,
also fix frame cropping issue for va h265 encoder.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6282>
2024-03-18 16:34:42 +00:00
L. E. Segovia 1f119b2035 soundtouch: Fix build failure with Apple Clang caused by missing cpp_std
Apple Clang sets C++98 by default. I'm applying C++14 to account for Meson's
lack of support/fallback for `cpp_std=c++11`.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6374>
2024-03-18 14:28:38 +00:00
Edward Hervey c1ac015325 uridecodebin3: Handle potential double redirection errors
Some elements (like qtdemux) might post a redirection error message twice. We
only want to handle it once.

Fixes #3390

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6389>
2024-03-18 13:30:24 +00:00
Mark Nauwelaerts 324563b158 dvdspu: avoid null dereference
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6386>
2024-03-18 09:49:13 +00:00
Philippe Normand 76d1bd05b2 play: Fix a critical warning in error callback
`on_error()` can be called with a NULL details structure, so in that situation
the `gst_structure_copy()` would raise a critical warning. Create an empty
structure instead of attempting to copy a NULL one.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6385>
2024-03-17 11:18:37 +00:00
Seungha Yang 8acf844fed d3d12: Fix SDK debug layer activation
Debug layer must be enabled before creating device. Otherwise
already opened devices before the activation will be removed

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6382>
2024-03-16 21:25:38 +09:00
Piotr Brzeziński 2ec7f9f9b3 avaudenc: Add simple 16 channel encoding test
Used to be crashing because of a double-free introduced years ago and never really noticed, so let's add a test to
make sure it doesn't happen again.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6373>
2024-03-15 12:30:04 +00:00
Edward Hervey b1f4dcb068 decodebin3: Post error messages if there are no streams to output
This could happen because:
* No streams were selected
* Or we end up with no stream selected

Also post a warning message if we are missing plugins but there are other
streams to output

Fixes #3360

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6323>
2024-03-14 18:15:33 +00:00
Edward Hervey 11b1f70aea decodebin3: Remove failing stream from active selection also
It gets added in get_output_slot()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6323>
2024-03-14 18:15:33 +00:00
Robert Mader 5189e8b956 v4l2codecs: decoders: Add DMA_DRM caps support
In order to simplify caps negotiations for clients and, notably, be more
compatible with va* decoders.
Crucially this allows clients to know ahead of time whether buffers will
actually be DMABufs.

Similar to GstVaBaseDec we only announce system memory caps if the peer
has ANY caps. Further more, and again like va decoders, we fail in
`decide_allocation()` if DMA_DRM caps are used without VideoMeta.
Apart from buggy peers this can happen e.g. when a peer with ANY caps
is used in combination with caps filters.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5890>
2024-03-14 17:32:13 +00:00
Robert Mader 513d0d8cbb v4l2codecs: decoders: Introduce and use set_output_state helper class
Allowing us to avoid some code duplication. This will become more
important with upcoming changes to caps generation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5890>
2024-03-14 17:32:13 +00:00
Robert Mader a95acbcc11 v4l2codecs: decoder: Clean up select_src_format()
Most importantly rely on video info helpers instead of manual parsing
of caps, which will allow us to use additional helpers in the future.

While on it, tighen the check for supported formats - failing that
indicates a bug in caps negotiation - and make some style changes.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5890>
2024-03-14 17:32:13 +00:00
Robert Mader 73b69d8ca0 v4l2codecs: decoder: Generalize size enumeration caps
By reducing the generated caps to the minimal number of fields and
using intersections instead of merges. This will allow us to reuse the
result in the future.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5890>
2024-03-14 17:32:13 +00:00
Robert Mader 65896dab75 v4l2codecs: decoders: Use src template for negotiation filter
This ensures we don't create filter caps that are not supported by the
individual codec implementations, as well as that the resulting caps
have the required fields so they can be turned into a GstVideoFormat.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5890>
2024-03-14 17:32:13 +00:00
Piotr Brzeziński 55136c30c4 avaudenc: Avoid double-freeing frame's extended data
This occured when attempting to encode 16 channel audio, would crash on the first buffer.
We only need to store ext_data, old ext_data_array (frame->extended_data) is already freed by `av_frame_unref`.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6359>
2024-03-14 16:35:21 +00:00
Piotr Brzeziński a53ea3c61c avcodecmap: Increase max AAC channels to 16
This is the maximum amount supported by aacenc. 8-channel output fully works.
16-channel also encodes fine, but codec-utils isn't able to parse its channel config,
so output level will not be shown in caps. For that to work, GASpecificConfig parsing
needs to be implemented. It's not a critical issue and can be worked on at a later date.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6359>
2024-03-14 16:35:21 +00:00
Seungha Yang 7aff9c8600 asio: Fix {input,output}-channels property handling
Fixing regression introduced by the commit 06dc931b52

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6370>
2024-03-14 21:01:40 +09:00
Sebastian Dröge 6c3d09e279 ptp: Initialize expected DELAY_REQ seqnum to an invalid value
This allows distinguishing pending syncs that didn't have a DELAY_REQ
sent from ones that did but used a seqnum of 0, like the very first one.

Specifically, if the first one or more syncs are still pending and we
send the first DELAY_REQ for a later pending sync, then the DELAY_RESP
would've been wrongly associated to the very first pending sync because
of the seqnum.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6361>
2024-03-13 22:24:56 +00:00
Seungha Yang 1d8138fd18 d3d11device: Fix adapter LUID comparison in wrapped device mode
Fix integer type mismatching

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3382
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6358>
2024-03-13 20:18:29 +00:00
Alexander Slobodeniuk 650534c940 rtspsrc: remove 'deprecated' flag from the 'push-backchannel-sample' signal
It seems that it was added by accident when copying from push-backchannel-buffer

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6355>
2024-03-13 19:32:46 +00:00
Thomas Klausner 4632c623bf shmallocator: fix build on Illumos
Closes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3370

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6321>
2024-03-13 18:48:27 +00:00
Alexander Slobodeniuk 6a6a4bf1a4 d3d11device: raise 'device-removed' signal on DXGI_ERROR_DEVICE_REMOVED
When this error gets caught the GstD3D11Device object raises the new
"device-removed" signal. This allows to handle the error from outside:
stop the playback, re-create the player, replace the catched GstContext by
the new one.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6193>
2024-03-13 17:25:31 +00:00
Michiel Westerbeek a4aa9e197e gstcudaconvertscale, gstvavpp, videoconvertscale: downgrade 'Can't keep DAR' to debug
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5730>
2024-03-13 16:06:56 +00:00
Sebastian Dröge 38011a01dc mpg123audiodec: Correctly handle the case of clipping all decoded samples
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3365

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6318>
2024-03-13 12:48:36 +00:00
He Junyan a953dc3b1a test: Correct the API return type of {h264,h265,av1}bitwriter
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6354>
2024-03-13 18:49:13 +08:00
Seungha Yang 94dfef68e1 d3d12device: Fix IDXGIFactory2 leak
factory passed to gst_d3d12_device_find_adapter() method is valid
handle already

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6340>
2024-03-12 22:06:01 +00:00
Sebastian Dröge 121e52886b videoparsers: Don't verbosely warn about CEA_708_PROCESS_EM_DATA_FLAG not being set
And the same for CEA_708_PROCESS_CC_DATA_FLAG. This is not really a
problem and was polluting logs with warnings for every single frame.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6336>
2024-03-12 21:26:18 +00:00
L. E. Segovia 71510860af meson: Require tinyalsa >= 1.1.0 when building its plugin
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6311>
2024-03-12 20:30:11 +00:00
L. E. Segovia 9c8549c31c tinyalsasink: Fix missing const and deprecations with tinyalsa v2
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6311>
2024-03-12 20:30:11 +00:00
Piotr Brzeziński e9802f5f41 macos: Add Apple AAC encoder (atenc)
Adds the `atenc` element capable of encoding AAC-LC audio, using the AudioToolbox framework.
It's able to encode up to 7.1 channel configurations.
Comes with basic knobs for rate control (bitrate for CBR, quality for VBR).

Support for more profiles (LD, HE-AAC) should be simple, but is not included here because of bugs
with parsing of the AudioSpecificConfig.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6254>
2024-03-12 19:50:06 +00:00
Nicolas Dufresne bcad005d05 glupload: Do not propose allocators with sysmem
None of the GL allocators actually offer a generic alloc() implementation. As a
side effect, they cannot be offered as they don't work with generic video
buffer pool.

Our specialized buffer pool can be dropped by tee or alphacombine as sharing the
same buffer pool over two branch is not supported by the pool API.

Fixes #3372

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6327>
2024-03-12 19:02:54 +00:00
Seungha Yang c9aaf39279 cuda,d3d11,d3d12bufferpool: Disable preallocation
Do not chain up to parent's GstBufferPool::start() which will do
preallocation. We don't want it to be preallocated
since there are various cases where negotiated downstream buffer pool is
not used at all (e.g., zero-copy decoding, IPC elements).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6326>
2024-03-12 18:07:29 +00:00
Antonio Larrosa edb7b787d8 gitlint: Allow curly brackets in commit prefix
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6319>
2024-03-12 16:58:07 +00:00
Antonio Larrosa 7b8fa42f8a va{h264,h265,av1}enc: fix potential crash on devices without rate control
This fixes a crash in `gst_va_h264_enc_class_init` and `gst_va_h265_enc_class_init`
(and probably also in gst_va_av1_enc_class_init) when calling
`g_object_class_install_properties (object_class, n_props, properties);`

When rate_control_type is 0, the following code is executed in :

```
  } else {
    n_props--;
    properties[PROP_RATE_CONTROL] = NULL;
  }
```

n_props has initially a value of N_PROPERTIES but PROP_RATE_CONTROL
is not the last element in the array, so it's making
g_object_class_install_properties fail to iterate over the
properties array.

This applies the same fix to gstvah264enc.c, gstvah265enc.c and
gstvaav1enc.c.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6319>
2024-03-12 16:58:07 +00:00
Antonio Larrosa bd97973ce0 registry, ptp: Canonicalize the library path returned by dladdr
On systems using UsrMerge (like openSUSE or Fedora), /lib64 is
a symlink to /usr/lib64. So dladdr is returning the path to
the gstreamer library in /lib64 in priv_gst_get_relocated_libgstreamer.
Later gst_plugin_loader_spawn tries to build the path to the
gst-plugin-scanner helper from /lib64 and ends up trying to use
/lib64/../libexec/gstreamer-1.0/gst-plugin-scanner which doesn't exist.

By canonicalizing the path with a call to realpath, gst-plugin-scanner
is found correctly under
/usr/lib64/../libexec/gstreamer-1.0/gst-plugin-scanner

Similar change applied to gstreamer/libs/gst/net/gstptpclock.c

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6322>
2024-03-12 15:51:36 +00:00
Nirbheek Chauhan 77831d6142 gsturi: Sort by feature name to break a feature rank tie
This matches autoplug in other places such as decodebin, otherwise we
will pick "randomly" based on the order in which plugins are
registered, which is mostly dependent on the order in which readdir()
returns items.

So let's make it predictable.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6227>
2024-03-12 14:25:10 +00:00
Jurijs Satcs 6a9bf8592a mpegtsmux: allow to disable SCTE NULL by setting interval to 0
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6284>
2024-03-12 11:15:58 +00:00
Piotr Brzeziński d3fba31da0 macos: Move atdec from applemedia (-bad) to osxaudio (-good)
osxaudio has a few helper methods potentially useful in atdec (or future atenc), like GStreamer -> CoreAudio
channel mapping. Doesn't make sense to duplicate them in applemedia, and atdec is the only audio-oriented
element there anyway.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6223>
2024-03-12 09:55:10 +00:00
Matthew Waters a26b363d3e closedcaption: produce valid cea608 padding by default
Cea608 (valid) padding removal is available on the input side of ccconverter
or configurable on cccombiner.  cccombiner can now configure whether
valid or invalid cea608 padding is used and for valid padding, how long
after valid non-padding to keep sending valid padding.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6300>
2024-03-12 02:49:01 +00:00
Piotr Brzeziński 3243c5fe94 audiovisualizer: Don't wrap temporary memory in buffers
Avoids potentially ending up with the buffermemory pointing to already-freed or reused addresses.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6320>
2024-03-11 18:18:01 +00:00
Piotr Brzeziński 9c084faa75 qtdemux: Fix wrapping temporary memory in buffers
That memory can disappear at any moment, doesn't cost much to just copy those few bytes.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6320>
2024-03-11 18:18:01 +00:00
Piotr Brzeziński 15e0affc98 audioencoder: Avoid wrapping temporarily mapped memory with a GstBuffer and passing that to subclass
Memory from gst_adapter_map() could live shorter than the GstMemory that the GstBuffer wraps around it, which in lucky
cases 'just' caused a re-use of the same memory for multiple (potentially still in use!) input buffers, but could easily
end up pointing to an already-freed memory.

Manifested when an AudioToolbox encoder kept getting silence inserted in seemingly random circumstances, turned out
to be the memory being re-used by GStreamer at the same time that the AT API was processing it...

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6320>
2024-03-11 18:18:01 +00:00
Edward Hervey 0f1dfc2db0 playbin3: Remove un-needed URI NULL check
This will mimic the playbin2 behaviour, which sets the "next" entry to be
NULL.

The biggest impact this has is that when going back to READY the current play
entry will be discarded (instead of being kept around for when you go back to
PAUSED/PLAYING).

Fixes #3371

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6324>
2024-03-11 17:33:04 +00:00
Mikhail Rudenko 05ef1bbc06 rtsp-stream: clear sockets when leaving bin
Since commit 4d86f994, when setting an RTSP media both shared and
reusable, streaming cannot be restarted after the first time all the
clients disconnect. That happens because the sockets (unlike
addresses) of GstRTSPStream are not cleared in
gst_rtsp_stream_leave_bin, and on restart sockets and addresses are
not allocated in gst_rtsp_stream_allocate_udp_sockets, and then the
check in create_sender_part fails. Fix this by clearing sockets in
gst_rtsp_stream_leave_bin.

Fixes gstreamer/gst-rtsp-server#113

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6325>
2024-03-11 18:22:38 +03:00
He Junyan 861c1a44be va: av1enc: Init the output_frame_num when resetting gf group
Fixes: #3359
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6308>
2024-03-11 12:38:57 +00:00
Edward Hervey 5f7062136d decodebin3: Handle race switching on pending streams
find_slot_for_stream_id() will return a slot which has the request stream-id as
active_stream *or* pending_stream (i.e. the slot on which that stream is
currently being outputted or will be outputted).

When figuring out which slot to use (if any) we want to consider stream-id
which *will* appear on a given slot which isn't outputting anything yet the same
way as if we didn't find a slot yet.

Fixes races when doing intensive state changes

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6270>
2024-03-11 11:13:59 +00:00
Edward Hervey e03e2308d7 decodebin3: Clear select streams seqnum when resetting
At this point there's definitely no pending select streams

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6270>
2024-03-11 11:13:59 +00:00
Edward Hervey 344acfe4e8 decodebin3: Only post collection message on actual updates
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6270>
2024-03-11 11:13:59 +00:00
Edward Hervey 33fe063f50 decodebin3: Clear the global collection when resetting
This avoids having stray collections when re-using decodebin3

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6270>
2024-03-11 11:13:59 +00:00
Edward Hervey 086ecb008f avviddec: Fix how we get back the codec frame
With the new copy_opaque system, the corresponding frame is stored in the
picture opaque ref.

This also handles the case where the "regular" opaque might be empty in the
case of "DECODE_ONLY" frames, since it that field is set in `get_buffer2()`
which might not be called for those frames

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6301>
2024-03-11 10:17:41 +00:00
Edward Hervey eacd5c1cb1 avviddec: Improve debug statements
Add SFN to better track what is going on

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6301>
2024-03-11 10:17:41 +00:00
Nirbheek Chauhan 3bed35c342 rtspsrc: Don't invoke close when stopping if we've started cleanup
When we're doing a state change from PLAYING to NULL, first we invoke
gst_rtspsrc_loop_send_cmd_and_wait (..., CMD_CLOSE, ...) during
PAUSED_TO_READY which will schedule a TEARDOWN to happen async on the
task thread.

The task thread will call gst_rtspsrc_close(), which will send the
TEARDOWN and once it's complete, it will call gst_rtspsrc_cleanup()
without taking any locks, which frees src->streams.

At the same time however, the state change in the app thread will
progress further and in READY_TO_NULL it will call gst_rtspsrc_stop()
which calls gst_rtspsrc_close() a second time, which accesses
src->streams (without a lock again), which leads to simultaneous
access of src->streams, and a segfault.

So the state change and the cleanup are racing, but they almost always
complete sequentially. Either the cleanup sets src->streams to NULL or
_stop() completes first. Very rarely, _stop() can start while
src->streams is being freed in a for loop. That causes the segfault.

This is unlocked access is unfixable with more locking, it just leads
to deadlocks. This pattern has been observed in rtspsrc a lot: state
changes and cleanup in the element are unfixably racy, and that
foundational issue is being addressed separately via a rewrite.

The bandage fix here is to prevent gst_rtspsrc_stop() from accessing
src->streams after it has already been freed by setting src->state to
INVALID.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6302>
2024-03-11 09:15:50 +00:00
Edward Hervey 73152b53ff decodebin3: Provide clear error message if no decoders present
If we don't do this we will end up with a more cryptic error message (not-linked
error from some upstream component).

Fixes #3198

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6317>
2024-03-11 09:17:09 +01:00
Chris Spencer 1032d58187 vkmemory: invalidate non-coherent memory when mapping for read
Mapping non-coherent memory does not implicitly invalidate the host caches.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6310>
2024-03-11 01:55:44 +00:00
Chris Spencer 9412565221 vulkan/operation: use timeline semaphore fallback if sync2 not supported
gst_vulkan_operation_add_dependency_frame does not fall back to the
timeline semaphore implementation if VK_KHR_synchronization2 is compiled
in, but not supported by the driver.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6309>
2024-03-11 00:58:40 +00:00
Chris Spencer 7701e9ffeb vulkan/operation: add missing unlock
gst_vulkan_operation_add_dependency_frame does not release its lock if
support for VK_KHR_timeline_semaphore/VK_KHR_synchronization2 is compiled
in, but not supported by the driver.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6309>
2024-03-11 00:58:40 +00:00
Jordan Petridis 95bafc4934 rsvg: Add direct dependency on cairo
We include cairo.h in the element so we should also
declare it in meson.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6306>
2024-03-08 19:01:30 +02:00
Seungha Yang 2e1eaaec5e ges: Fix critical warning
GStreamer-CRITICAL **: 20:44:38.256: gst_debug_log_full_valist:
assertion 'category != NULL' failed

Make sure debug category initialized.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6304>
2024-03-08 21:00:51 +09:00
François Laignel 7d5bb1ea7a webrtc: add all SSRC attributes getting CAPS for a PT
The transport stream only returned the CAPS for the first matching PT entry
from the `ptmap`. Other SSRC with the same PT where not included. For a stream
which bundled multiple audio streams for instance, only the first SSRC was
knowed to the SSRC demux and downstream elements.

This commit adds all the `ssrc-` attributes from the matching PT entries.

The RTP jitter buffer can now find the CNAME corresponding its SSRC even if it
was not the first to be registered for a particular PT.

The RTP PT demux removes `ssrc-*` attributes cooresponding to other SSRCs
before pushing SSRC specific CAPS to downstream elements.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6119>
2024-03-08 10:28:15 +00:00
François Laignel d83184cf9a sdp: accept empty attribute value represented as a NULL pointer
Some empty media attribute values are set to an empty string, others as a NULL
pointer. It seems that code is able to deal with both, except for the UTF8
validation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6119>
2024-03-08 10:28:15 +00:00
François Laignel aeaef7a7f0 webrtcbin: RFC5576 - early CNAME support
See RFC5576: have CNAME available to the rtpjitterbuffer before the the first
RTCP SR is received, for rapid synchronization. Similar to what was done for
RTSP (last 2 commits) of [MR 2132].

[RFC5576]: https://www.rfc-editor.org/rfc/rfc5576
[MR 2132]: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2132

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6119>
2024-03-08 10:28:15 +00:00
Jan Schmidt d3e79077dc identity: Don't refuse seeks unless single-segment=true
identity only needs to configure the internal seek segment if it's
aggregating upstream segments into 1. If it's not, don't break
other seek behaviour by refusing (for example) instant-rate change
seeks.

Fixes: #3363
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6299>
2024-03-08 17:07:25 +11:00
Michael Tretter 5b3082257e meson: Fix description in qt options
The qt-x11 description contains a copy/paste error from the qt-wayland option.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6292>
2024-03-08 02:14:11 +00:00
Seungha Yang 4db7eb0290 d3d12screencapturesrc: Add support for WGC API
Adding support for window and monitor capturing by using
Windows Graphics Capture API.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6256>
2024-03-08 01:05:24 +09:00
Seungha Yang 63ef405131 d3d12memory: Implement NT handle caching and custom user data support
Same as the d3d11 memory implementation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6256>
2024-03-08 01:03:28 +09:00
Mathieu Duponchelle 04077ce906 onvif: tests: check for T flag on all packets
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5173>
2024-03-07 14:02:33 +00:00
Mathieu Duponchelle 519546aea3 rtpgstpay: flush on EOS
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5173>
2024-03-07 14:02:33 +00:00
Mathieu Duponchelle 0631a59803 rtponviftimestamp: make sure to set E and T bits on last buffer of lists
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5173>
2024-03-07 14:02:33 +00:00
Sebastian Dröge b88d69b722 rtpgstpay: Delay pushing of event packets until the next buffer
And also re-timestamp them with the current buffer's PTS.

Not doing so keeps the timestamps of event packets as
GST_CLOCK_TIME_NONE or the timestamp of the previous buffer, both of
which are bogus.

Making sure that (especially) the first packet has a valid timestamp
allows putting e.g. the NTP timestamp RTP header extension on it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5173>
2024-03-07 14:02:33 +00:00
Seungha Yang 37578454b9 avviddec: Fix interlaced mode detection
Fixing regression introduced by the commit b46559102b

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6285>
2024-03-07 11:53:07 +00:00
Elizabeth Figura e2167867d5 qtdemux: Do not set channel-mask to zero
Leave it uninitialized, so that the downstream decoder will initialize it appropriately. Setting it to zero is wrong.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6225>
2024-03-07 12:52:30 +02:00
Jan Schmidt f53dbb28b2 rtspsrc: Parse Speed/Scale before Range in responses
Parse the speed and scale in the server's response
*before* the range, so that the range start/stop
are swapped (or not swapped) correctly based
on the server's actual chosen values. Otherwise,
the old rate from the segment is used - what the
last seek asked for, but not necessarily what
the server chooses.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6248>
2024-03-06 17:50:53 +00:00
Jan Schmidt 57013e1a7c rtspsrc: Handle queries and events with no manager
When doing direct output with no session manager, we still
want to respond to queries and events from downstream, so
install the handlers

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6248>
2024-03-06 17:50:53 +00:00
Jan Schmidt 4d2f000125 rtspsrc: return NO_PREROLL on PLAYING->PAUSED too
When transitioning back to PAUSED and rtspsrc is live, return
NO_PREROLL so the pipeline knows to skip preroll here too.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6248>
2024-03-06 17:50:53 +00:00
Jan Schmidt 8356bd04a8 rtponviftimestamp: Use gst_segment_to_stream_time_full()
In the situation where playback starts from a keyframe before
the target playback segment, then the first buffers will be
outside the configured segment and gst_segment_to_stream_time()
will return GST_CLOCK_TIME_NONE unconditionally.

If drop-out-of-segment is false, the RTP buffers will not be
dropped, but will be sent witout ONVIF extension timestamps
and given GST_CLOCK_TIME_NONE timestamps on the receiver.

Instead, use gst_segment_to_stream_time_full() to extrapolate
stream time outside the segment so that such buffers still
get assigned their correct timestamps on the receiver.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6248>
2024-03-06 17:50:53 +00:00
Jan Schmidt 4b107b60e7 dvbsubenc: Fix bottom field size calculation
Don't accidentally include the stuffing byte (if present)
into the bottom field size. It should only be included in the
total segment length.

Fixes problems with FFmpeg not rendering the subtitles
with a stuffing byte, giving a "Invalid object location!" error.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6250>
2024-03-06 16:47:38 +00:00
Piotr Brzeziński ca0d4dd6cc macos: Fix glimagesink not respecting preferred size
Cocoa version of glwindow only checks the preferred size upon window creation. glimagesink sets the size right before
calling gst_gl_window_show(), which might be way after the window is created in some cases. If the size was set too
late, glimagesink on macOS would remain 320x240 unless manually resized.

This change makes sure to resize the existing window when _show() is called.

Curiously, this has always been an issue, but went from manifesting every once in a while to being almost completely
broken once old event loop workarounds were removed and gst_macos_main() was introduced.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6185>
2024-03-06 15:48:03 +00:00
Jan Schmidt cca0bc31a7 gstsegment: Don't use g_return_val_if_fail()
Don't use g_return_val_if_fail() to catch the
open-ended segment or empty segment cases in
gst_segment_to_running_time_full()

g_return_val_if_fail() is for programmer errors,
and can be compiled out with a flag.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6219>
2024-03-06 14:48:50 +00:00
François Laignel 7b5a5afa3a ptp clock: fix annotations for gst_ptp_clock_new
* Set `name` as `nullable` same as for gst_ntp_clock_new.
* Set return value as nullable as the constructor can fail.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6251>
2024-03-06 12:17:17 +00:00
Sebastian Dröge df00962cb8 ajasink: Make logging between ajasrc and ajasink more consistent
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6208>
2024-03-06 11:09:58 +00:00
Sebastian Dröge 396aa55958 ajasrc: Improve clock handling
Provide a clock from the source that is a monotonic system clock with
the rate corrected based on the measured and ideal capture rate of the
frames.

If this clock is selected as pipeline clock, then provide perfect
timestamps to downstream.

Otherwise, if the pipeline clock is the monotonic system clock, use the
internal clock for converting back to the monotonic system clock.

Otherwise, use the monotonic system clock time calculated in the above
case and convert that to the pipeline clock.

In all cases this will give a smoother time than the previous code,
which simply took the difference between the driver provided capture
time and the current real-time clock time, and applied that to the
current pipeline clock time.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6208>
2024-03-06 11:09:58 +00:00
Sebastian Dröge 86e3009448 ajasrc: Move frame drop detection after the frame transfer
Otherwise there's a small window between querying the state and doing
the transfer in which a frame could be dropped, and we would then output
the frame right after the dropped one as if it was the dropped frame.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6208>
2024-03-06 11:09:58 +00:00
Sebastian Dröge 170bf0cc8e ajasrc: Improve debug output related to frame transfers
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6208>
2024-03-06 11:09:58 +00:00
Sebastian Dröge 9ab9ceb964 ptp-helper: Fix clippy warning and simplify code a bit
warning: you seem to be trying to use `match` for an equality check. Consider using `if`
   --> ../subprojects/gstreamer/libs/gst/helpers/ptp/main.rs:246:17
    |
246 | /                 match ptp_message.message_type {
247 | |                     PtpMessageType::DELAY_REQ => {
248 | |                         if args.verbose {
249 | |                             trace!("Ignoring our own PTP message");
...   |
253 | |                     _ => (),
254 | |                 }
    | |_________________^

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6245>
2024-03-06 09:17:53 +00:00
He Junyan a5a1944db4 MSDK: Set the job type when create context from external handle
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6221>
2024-03-06 05:22:23 +00:00
He Junyan 1a78d61b9f vah265enc: Set backward_num to 1 in low delay mode
In low delay B mode, the P frame is converted as B frame with forward
references. For example, One P frame may refers to P-1, P-2 and P-3 in
list0 and refers to P-3, P-2 and P-1 in list1.
So the num in list0 and list1 does not reflect the forward_num and
backward_num. The vaapi does not provide ref num for forward or backward
so far. In this case, we just consider the backward_num to be 1 conservatively.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6249>
2024-03-05 23:39:43 +00:00
He Junyan b9c28920e0 vah265enc: Improve B pyramid mode in HEVC
If the reference frame number is bigger than 2, we can enable the
pyramid B mode. We do not need to assign a reference frame to each
pyramid level.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6249>
2024-03-05 23:39:43 +00:00
He Junyan 196de61035 vah265enc: Expand log2_max_pic_order_cnt if needed
In b_pyramid mode, B frames can be ref and prevPicOrderCntLsb can
be the B frame POC which is smaller than the P frame. This can cause
POC diff bigger than MaxPicOrderCntLsb/2 and generate wrong POC value.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6249>
2024-03-05 23:39:43 +00:00
Xi Ruoyao 7e8873c100 gst-plugins-base: meson: Fix the condition to skip theoradec test
Due to operator priority "not a and b" is interpreted "(not a) and b".

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6260>
2024-03-05 20:13:39 +00:00
Sebastian Dröge 8859f257c2 ptp: Don't install test executable
And handle it like all our other test executables.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6262>
2024-03-05 18:55:00 +00:00
Tim-Philipp Müller 4db25f1500 rtspsrc: Consider 503 Service Not Available when handling broken control urls
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6213>
2024-03-05 17:45:18 +00:00
Tim-Philipp Müller a827c7e2b4 subprojects: track orc main branch again
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6261>
2024-03-05 13:25:19 +00:00
Tim-Philipp Müller 756064b9c3 Back to development
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6261>
2024-03-05 12:58:57 +00:00
788 changed files with 52438 additions and 23406 deletions

3
.gitignore vendored
View file

@ -67,3 +67,6 @@ subprojects/*/
# clangd integration
.cache/*
# apk files from CI (or following its commands)
*.apk

View file

@ -33,6 +33,7 @@ variables:
value: ""
FEDORA_AMD64_SUFFIX: 'amd64/fedora'
DEBIAN_AMD64_SUFFIX: 'amd64/debian'
INDENT_AMD64_SUFFIX: 'amd64/gst-indent'
COMMITLINT_AMD64_SUFFIX: 'amd64/commitlint'
WINDOWS_AMD64_SUFFIX: 'amd64/windows'
@ -45,7 +46,9 @@ variables:
-Dlibnice:examples=disabled
-Dlibnice:gupnp=disabled
-Dopenh264:tests=disabled
-Dgst-plugins-base:opus=enabled
-Dgst-plugins-good:soup-lookup-dep=true
-Dgst-plugins-good:vpx=enabled
-Dpygobject:tests=false
-Dpython=enabled
-Dlibav=enabled
@ -59,6 +62,7 @@ variables:
-Drs=disabled
-Dgpl=enabled
-Dintrospection=enabled
--force-fallback-for=soundtouch
SIMPLE_BUILD: >-
${DEFAULT_MESON_ARGS}
@ -122,6 +126,7 @@ trigger:
.fedora image:
variables:
CCACHE_DIR: '/cache/gstreamer/gstreamer/ccache/'
FDO_BASE_IMAGE: 'registry.fedoraproject.org/fedora-toolbox:34'
FDO_DISTRIBUTION_VERSION: '34'
FDO_REPO_SUFFIX: "$FEDORA_AMD64_SUFFIX"
@ -134,8 +139,28 @@ fedora amd64 docker:
- '.fdo.container-build@fedora'
stage: 'preparation'
needs: []
tags:
- 'packet.net'
# Note: assumption is that placeholder jobs run on a packet runner
# (which has faster network connectivity to the registry).
tags: [ 'placeholder-job' ]
.debian image:
variables:
CCACHE_DIR: '/cache/gstreamer/gstreamer/ccache_debian/'
FDO_BASE_IMAGE: "quay.io/toolbx-images/debian-toolbox:12"
FDO_DISTRIBUTION_VERSION: '12'
FDO_REPO_SUFFIX: "$DEBIAN_AMD64_SUFFIX"
FDO_DISTRIBUTION_TAG: "$DEBIAN_TAG-$GST_UPSTREAM_BRANCH"
FDO_DISTRIBUTION_EXEC: 'GIT_BRANCH=$CI_COMMIT_REF_NAME GIT_URL=$CI_REPOSITORY_URL bash ci/docker/debian/prepare.sh'
debian amd64 docker:
extends:
- '.debian image'
- '.fdo.container-build@debian'
stage: 'preparation'
needs: []
# Note: assumption is that placeholder jobs run on a packet runner
# (which has faster network connectivity to the registry).
tags: [ 'placeholder-job' ]
.gst-indent image:
tags: [ 'placeholder-job' ]
@ -261,7 +286,6 @@ commitlint:
CCACHE_COMPILERCHECK: 'content'
CCACHE_COMPRESS: 'true'
CCACHE_BASEDIR: '/cache/gstreamer/gstreamer'
CCACHE_DIR: '/cache/gstreamer/gstreamer/ccache/'
# shared across everything really
CCACHE_MAXSIZE: '10G'
@ -326,27 +350,31 @@ commitlint:
- changes:
- subprojects/gstreamer-vaapi/**/*
.build fedora x86_64:
.build simple:
extends:
- '.fedora image'
- '.fdo.suffixed-image@fedora'
- '.build'
- '.build_ccache_vars'
needs:
- "trigger"
- "fedora amd64 docker"
variables:
GST_WERROR: "true"
MESON_ARGS: "${SIMPLE_BUILD}"
SUBPROJECTS_CACHE_DIR: "/subprojects"
script:
- $CI_PROJECT_DIR/ci/scripts/build.sh
- ./gst-env.py gst-inspect-1.0 --version
- ./gst-env.py gst-inspect-1.0
- G_DEBUG=fatal_criticals ./gst-env.py gst-inspect-1.0 --print-all --gst-disable-registry-fork > /dev/null
- meson install --destdir $CI_PROJECT_DIR/destdir -C build
- rm -rf $CI_PROJECT_DIR/destdir
.build fedora x86_64:
extends:
- '.fedora image'
- '.fdo.suffixed-image@fedora'
- '.build simple'
needs:
- "trigger"
- "fedora amd64 docker"
build fedora gcc:
extends: '.build fedora x86_64'
variables:
@ -402,6 +430,18 @@ build fedora clang:
-Dgstreamer-sharp:tests=disabled
--force-fallback-for=glib
build debian x86_64:
extends:
- '.debian image'
- '.fdo.suffixed-image@debian'
- '.build simple'
needs:
- "trigger"
- "debian amd64 docker"
variables:
BUILD_TYPE: "--default-library=shared"
BUILD_GST_DEBUG: "-Dgstreamer:gst_debug=true"
.build windows:
image: $WINDOWS_IMAGE
stage: 'build'

View file

@ -5,10 +5,12 @@ variables:
# If you are hacking on them or need a them to rebuild, its enough
# to change any part of the string of the image you want.
###
FEDORA_TAG: '2024-02-13.0'
FEDORA_TAG: '2024-04-22.4'
DEBIAN_TAG: '2024-04-22.4'
INDENT_TAG: '2023-08-24.3'
LINT_TAG: '2024-02-20.0'
WINDOWS_TAG: '2024-02-08.0'
WINDOWS_TAG: '2024-04-10.0'

View file

@ -13,7 +13,7 @@ min-length=10
# Ensure every title starts with a prefix
[title-match-regex]
regex=^[\w]+[\w, -\\/]*[\w]+: .*
regex=^[\w]+[\w, -\\/{}]*[\w]+: .*
# Ignore GDB backtraces
[ignore-body-lines]

View file

@ -1,6 +1,7 @@
subprojects/gst-plugins-bad/ext/qt6d3d11
subprojects/gst-plugins-bad/gst-libs/gst/cuda
subprojects/gst-plugins-bad/gst-libs/gst/d3d11
subprojects/gst-plugins-bad/gst-libs/gst/d3d12
subprojects/gst-plugins-bad/gst-libs/gst/dxva
subprojects/gst-plugins-bad/gst-libs/gst/va
subprojects/gst-plugins-bad/gst-libs/gst/winrt
@ -13,5 +14,6 @@ subprojects/gst-plugins-bad/sys/nvcodec
^(subprojects/gst-plugins-bad/sys/qsv/)+(\w)+([^/])+(cpp$)
subprojects/gst-plugins-bad/sys/va
subprojects/gst-plugins-bad/sys/wasapi2
subprojects/gst-plugins-bad/sys/webview2
subprojects/gst-plugins-bad/sys/wic
^(subprojects/gst-plugins-bad/sys/win32ipc/)+(\w)+([^/])+(cpp$)

283
ci/docker/debian/deps.txt Normal file
View file

@ -0,0 +1,283 @@
apertium-regtest
appstream-util
autopoint
bash-completion
bat
bison
bubblewrap
busybox
ccache
clang
clang-tools
cmake
coinor-libcgl-dev
curl
desktop-file-utils
docutils-common
doxygen
dwz
elfutils
emscripten
ffmpeg
flex
flite1-dev
g++
gcc
gdb
gettext
git
git-lfs
glslc
googletest
graphviz
gtk-doc-tools
guile-cairo-dev
iproute2
iso-codes
itstool
ladspa-sdk
liba52-0.7.4-dev
libaa1-dev
liballeggl4-dev
libaom-dev
libasound2-dev
libass-dev
libatk1.0-dev
libavahi-client-dev
libavahi-common-dev
libavc1394-dev
libavcodec-dev
libavdevice-dev
libavfilter-dev
libavformat-dev
libavif-dev
libavutil-dev
libbluetooth-dev
libboost-system-dev
libbs2b-dev
libcaca-dev
libcairo2-dev
libcamera-dev
libcanberra-dev
libcap-dev
libcdio-dev
libcdparanoia-dev
libchromaprint-dev
libclang-dev
libcoap3-dev
libcurl4-openssl-dev
libdbus-glib2.0-cil-dev
libdca-dev
libde265-dev
libdirectfb-dev
libdrm-dev
libdrumstick-dev
libdv4-dev
libdvdnav-dev
libdvdread-dev
libdw-dev
libebur128-dev
libegl-dev
libespeak-ng-dev
libespeak-ng-libespeak-dev
libevdev-dev
libevent-dev
libexempi-dev
libexif-dev
libfaad-dev
libfftw3-bin
libfftw3-dev
libflac-dev
libfluidsynth-dev
libframe-dev
libfreeaptx-dev
libftgl-dev
libgbm-dev
libgdk-pixbuf-2.0-dev
libgeocode-glib-dev
libgirepository1.0-dev
libgl-dev
libgl1-mesa-dev
libgles-dev
libglib2.0-dev
libglib2.0-doc
libglx-dev
libgme-dev
libgnutls28-dev
libgraphene-1.0-dev
libgridsite-dev
libgsl-dev
libgsm1-dev
libgssdp-1.6-dev
libgtest-dev
libgtk-3-dev
libgtk-4-dev
libgtkmm-3.0-dev
libgudev-1.0-dev
libgupnp-igd-1.0-dev
libiec61883-dev
libinput-dev
libiptcdata0-dev
libjack-jackd2-dev
libjpeg62-turbo-dev
libjson-glib-dev
libjwt-gnutls-dev
libkate-dev
liblc3-dev
liblcms2-dev
libldacbt-abr-dev
libldacbt-enc-dev
liblilv-dev
liblogg4-dev
libltc-dev
liblttng-ust-dev
liblxi-dev
libmfx-dev
libmjpegtools-dev
libmodplug-dev
libmono-cil-dev
libmp3lame-dev
libmpcdec-dev
libmpeg2-4-dev
libmpeg3-dev
libmpg123-dev
libneon27-dev
libngtcp2-crypto-gnutls-dev
libnice-dev
libnx-x11-dev
libogg-dev
libopenal-dev
libopencore-amrnb-dev
libopencore-amrwb-dev
libopencv-dev
libopenexr-dev
libopengl-dev
libopenh264-dev
libopenjp2-7-dev
libopenmpt-dev
libopenni2-dev
libopus-dev
libpango1.0-dev
libpng-dev
libpolkit-gobject-1-dev
libpulse-dev
libpython3-all-dev
libqrencode-dev
libqt5waylandclient5-dev
libqt5x11extras5-dev
libraw1394-dev
librsvg2-dev
librtmp-dev
librust-wayland-protocols-dev
libsbc-dev
libsdl2-dev
libshaderc1
libshout-dev
libsidplay1-dev
libsigc++-2.0-dev
libsndfile1-dev
libsndifsdl2-dev
libsoundtouch-dev
libsoup-3.0-dev
libsoup2.4-dev
libspandsp-dev
libspeex-dev
libsphinxbase-dev
libspice-client-glib-2.0-dev
libsrt-openssl-dev
libsrtp2-dev
libssh2-1-dev
libssl-dev
libsvtav1-dev
libsvtav1dec-dev
libsvtav1enc-dev
libsysprof-4-dev
libtag1-dev
libtaoframework-openal-cil-dev
libtaoframework-opengl-cil-dev
libtheora-dev
libtwolame-dev
libudev-dev
libunwind-dev
liburcu-dev
libusb-1.0-0-dev
libv4l-dev
libva-dev
libvisual-0.4-dev
libvo-aacenc-dev
libvo-amrwbenc-dev
libvorbis-dev
libvpx-dev
libvulkan-dev
libwacom-dev
libwavpack-dev
libwayland-dev
libwebp-dev
libwebrtc-audio-processing-dev
libwildmidi-dev
libwpe-1.0-dev
libwpebackend-fdo-1.0-dev
libwpewebkit-1.1-dev
libx11-dev
libx11-xcb-dev
libx264-dev
libx265-dev
libxcb-dri3-dev
libxcb-glx0-dev
libxcb-xfixes0-dev
libxcb-xv0-dev
libxcb1-dev
libxdamage-dev
libxext-dev
libxfixes-dev
libxi-dev
libxkbcommon-dev
libxkbcommon-x11-dev
libxml2-dev
libxmlsec1-dev
libxrandr-dev
libxslt1-dev
libxtst-dev
libxv-dev
libxvidcore-dev
libyajl-dev
libyaml-dev
libz-mingw-w64-dev
libzbar-dev
libzita-convolver-dev
libzvbi-dev
libzxing-dev
libzxingcore-dev
llvm-dev
lua-zlib-dev
make
modemmanager-dev
mono-complete
mono-devel
nasm
nettle-dev
ninja-build
patch
python-gi-dev
python3-all-dev
python3-cairo-dev
python3-dev
python3-pip
qconf
qt5-qmake
qtbase5-dev
qtbase5-private-dev
qtdeclarative5-dev
qtdeclarative5-dev-tools
qttools5-dev-tools
sudo
svt-av1
valgrind
wayland-protocols
x11-xserver-utils
xdg-utils
xfonts-jmk
xfonts-kaname
xvfb
yasm
zlib1g-dev

View file

@ -0,0 +1,10 @@
#! /bin/bash
set -eux
apt update -y && apt full-upgrade -y
apt install -y $(<./ci/docker/debian/deps.txt)
pip3 install --break-system-packages meson hotdoc python-gitlab tomli junitparser
apt clean all

View file

@ -0,0 +1,13 @@
#! /bin/bash
set -eux
bash ./ci/docker/debian/install-deps.sh
bash ./ci/scripts/install-rust.sh
# Configure git for various usage
git config --global user.email "gstreamer@gstreamer.net"
git config --global user.name "Gstbuild Runner"
bash ./ci/scripts/create-subprojects-cache.sh

View file

@ -32,7 +32,7 @@ dnf builddep -y gstreamer1 \
python3-gstreamer1
dnf remove -y meson -x ninja-build
pip3 install meson==1.2.3 hotdoc==0.16 python-gitlab tomli junitparser
pip3 install meson hotdoc python-gitlab tomli junitparser
# Remove gst-devel packages installed by builddep above
dnf remove -y "gstreamer1*devel"

View file

@ -12,8 +12,8 @@ bash ./ci/docker/fedora/install-gdk-pixbuf.sh
bash ./ci/docker/fedora/install-wayland-protocols.sh
bash ./ci/docker/fedora/install-rust.sh
bash ./ci/scripts/install-rust.sh
bash ./ci/docker/fedora/virtme-fluster-setup.sh
bash ./ci/docker/fedora/create-subprojects-cache.sh
bash ./ci/scripts/create-subprojects-cache.sh

View file

@ -1,6 +1,6 @@
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
$rust_version = '1.76.0'
$rust_version = '1.77.2'
$rustup_url = 'https://win.rustup.rs/x86_64'
Invoke-WebRequest -Uri $rustup_url -OutFile C:\rustup-init.exe

View file

@ -753,7 +753,7 @@
"source_checksum": "43da4cb7e244219d4ca423419d27cde8",
"input_file": "FM1_BT_B.h264",
"output_format": "yuv420p",
"result": "b76dc7f54eef4279c1769ac4ae5cb877"
"result": "f21ad956409cfa237099f7ac28390614"
},
{
"name": "FM1_FT_E",
@ -761,7 +761,7 @@
"source_checksum": "3644489dab877ffbf5497594098f63e2",
"input_file": "FM1_FT_E.264",
"output_format": "yuv420p",
"result": "b3997865c7ecbda4acfaff6b46b712bf"
"result": "46b584c89e359c39619bc144f9f29162"
},
{
"name": "FM2_SVA_C",

View file

@ -91,11 +91,26 @@ if __name__ == "__main__":
variables['MESON_COMMIT'] = meson_commit
del variables['CI_GSTREAMER_TRIGGERED']
pipe = cerbero.trigger_pipeline(
token=os.environ['CI_JOB_TOKEN'],
ref=cerbero_branch,
variables=variables,
)
try:
pipe = cerbero.trigger_pipeline(
token=os.environ['CI_JOB_TOKEN'],
ref=cerbero_branch,
variables=variables,
)
except gitlab.exceptions.GitlabCreateError as e:
if e.response_code == 400:
exit('''
Could not start cerbero sub-pipeline due to insufficient permissions.
This is not a problem and is expected if you are not a GStreamer
developer with merge permission in the cerbero project.
When your Merge Request is assigned to Marge (our merge bot), it
will trigger the cerbero sub-pipeline with the correct permissions.
''')
else:
exit(f'Could not create cerbero sub-pipeline. Error: {e}')
fprint(f'Cerbero pipeline running at {pipe.web_url} ')
while True:

View file

@ -3,8 +3,8 @@
set -eux
# Install Rust
RUSTUP_VERSION=1.26.0
RUST_VERSION=1.76.0
RUSTUP_VERSION=1.27.0
RUST_VERSION=1.77.2
RUST_ARCH="x86_64-unknown-linux-gnu"
RUSTUP_URL=https://static.rust-lang.org/rustup/archive/$RUSTUP_VERSION/$RUST_ARCH/rustup-init
@ -19,7 +19,7 @@ chmod +x rustup-init;
rm rustup-init;
chmod -R a+w $RUSTUP_HOME $CARGO_HOME
cargo install cargo-c --version 0.9.30+cargo-0.77.0
cargo install cargo-c --version 0.9.31+cargo-0.78.0
rustup --version
cargo --version

View file

@ -15462,11 +15462,11 @@ contains one frame)</doc>
<source-position filename="../subprojects/gst-editing-services/ges/ges-version.h"/>
<type name="gint" c:type="gint"/>
</constant>
<constant name="VERSION_MINOR" value="24" c:type="GES_VERSION_MINOR">
<constant name="VERSION_MINOR" value="25" c:type="GES_VERSION_MINOR">
<source-position filename="../subprojects/gst-editing-services/ges/ges-version.h"/>
<type name="gint" c:type="gint"/>
</constant>
<constant name="VERSION_NANO" value="0" c:type="GES_VERSION_NANO">
<constant name="VERSION_NANO" value="1" c:type="GES_VERSION_NANO">
<source-position filename="../subprojects/gst-editing-services/ges/ges-version.h"/>
<type name="gint" c:type="gint"/>
</constant>

View file

@ -30985,7 +30985,10 @@ of the peer sink pad, if present.</doc>
</parameters>
</method>
<method name="set_offset" c:identifier="gst_pad_set_offset">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpad.c">Set the offset that will be applied to the running time of @pad.</doc>
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpad.c">Set the offset that will be applied to the running time of @pad. Upon next
buffer, every sticky events (notably segment) will be pushed again with
their running time adjusted. For that reason this is only reliable on
source pads.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstpad.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -49391,12 +49394,12 @@ determine a order for the two provided values.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstversion.h"/>
<type name="gint" c:type="gint"/>
</constant>
<constant name="VERSION_MINOR" value="24" c:type="GST_VERSION_MINOR">
<constant name="VERSION_MINOR" value="25" c:type="GST_VERSION_MINOR">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstversion.h">The minor version of GStreamer at compile time:</doc>
<source-position filename="../subprojects/gstreamer/gst/gstversion.h"/>
<type name="gint" c:type="gint"/>
</constant>
<constant name="VERSION_NANO" value="0" c:type="GST_VERSION_NANO">
<constant name="VERSION_NANO" value="1" c:type="GST_VERSION_NANO">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstversion.h">The nano version of GStreamer at compile time:
Actual releases have 0, GIT versions have 1, prerelease versions have 2-...</doc>
<source-position filename="../subprojects/gstreamer/gst/gstversion.h"/>
@ -49765,6 +49768,463 @@ Free-function: g_free</doc>
</array>
</field>
</record>
<record name="VecDeque" c:type="GstVecDeque" disguised="1" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">#GstVecDeque is an object that provides standard double-ended queue (deque)
functionality based on an array instead of linked lists. This reduces the
overhead caused by memory management by a large factor.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<method name="clear" c:identifier="gst_vec_deque_clear" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Clears queue @array and frees all memory associated to it.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
</parameters>
</method>
<method name="drop_element" c:identifier="gst_vec_deque_drop_element" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Drops the queue element at position @idx from queue @array.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">the dropped element</doc>
<type name="gpointer" c:type="gpointer"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
<parameter name="idx" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">index to drop</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
</parameters>
</method>
<method name="drop_struct" c:identifier="gst_vec_deque_drop_struct" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Drops the queue element at position @idx from queue @array and copies the
data of the element or structure that was removed into @p_struct if
@p_struct is set (not NULL).</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">TRUE on success, or FALSE on error</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
<parameter name="idx" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">index to drop</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
<parameter name="p_struct" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">address into which to store the data of the dropped structure, or NULL</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
</method>
<method name="find" c:identifier="gst_vec_deque_find" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Finds an element in the queue @array, either by comparing every element
with @func or by looking up @data if no compare function @func is provided,
and returning the index of the found element.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Index of the found element or -1 if nothing was found.</doc>
<type name="gsize" c:type="gsize"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
<parameter name="func" transfer-ownership="none" nullable="1" allow-none="1" closure="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">comparison function, or %NULL to find @data by value</doc>
<type name="GLib.CompareFunc" c:type="GCompareFunc"/>
</parameter>
<parameter name="data" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">data for comparison function</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
</method>
<method name="free" c:identifier="gst_vec_deque_free" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Frees queue @array and all memory associated to it.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_length" c:identifier="gst_vec_deque_get_length" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Returns the length of the queue @array</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">the length of the queue @array.</doc>
<type name="gsize" c:type="gsize"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
</parameters>
</method>
<method name="is_empty" c:identifier="gst_vec_deque_is_empty" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Checks if the queue @array is empty.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">%TRUE if the queue @array is empty</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
</parameters>
</method>
<method name="peek_head" c:identifier="gst_vec_deque_peek_head" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Returns the head of the queue @array and does not
remove it from the queue.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">The head of the queue</doc>
<type name="gpointer" c:type="gpointer"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
</parameters>
</method>
<method name="peek_head_struct" c:identifier="gst_vec_deque_peek_head_struct" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Returns the head of the queue @array without removing it from the queue.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">pointer to element or struct, or NULL if @array was empty. The
data pointed to by the returned pointer stays valid only as long as
the queue array is not modified further!</doc>
<type name="gpointer" c:type="gpointer"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
</parameters>
</method>
<method name="peek_nth" c:identifier="gst_vec_deque_peek_nth" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Returns the item at @idx in @array, but does not remove it from the queue.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">The item, or %NULL if @idx was out of bounds</doc>
<type name="gpointer" c:type="gpointer"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
<parameter name="idx" transfer-ownership="none">
<type name="gsize" c:type="gsize"/>
</parameter>
</parameters>
</method>
<method name="peek_nth_struct" c:identifier="gst_vec_deque_peek_nth_struct" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Returns the item at @idx in @array, but does not remove it from the queue.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">The item, or %NULL if @idx was out of bounds</doc>
<type name="gpointer" c:type="gpointer"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
<parameter name="idx" transfer-ownership="none">
<type name="gsize" c:type="gsize"/>
</parameter>
</parameters>
</method>
<method name="peek_tail" c:identifier="gst_vec_deque_peek_tail" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Returns the tail of the queue @array, but does not remove it from the queue.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">The tail of the queue</doc>
<type name="gpointer" c:type="gpointer"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
</parameters>
</method>
<method name="peek_tail_struct" c:identifier="gst_vec_deque_peek_tail_struct" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Returns the tail of the queue @array, but does not remove it from the queue.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">The tail of the queue</doc>
<type name="gpointer" c:type="gpointer"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
</parameters>
</method>
<method name="pop_head" c:identifier="gst_vec_deque_pop_head" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Returns and head of the queue @array and removes
it from the queue.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">The head of the queue</doc>
<type name="gpointer" c:type="gpointer"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
</parameters>
</method>
<method name="pop_head_struct" c:identifier="gst_vec_deque_pop_head_struct" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Returns the head of the queue @array and removes it from the queue.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">pointer to element or struct, or NULL if @array was empty. The
data pointed to by the returned pointer stays valid only as long as
the queue array is not modified further!</doc>
<type name="gpointer" c:type="gpointer"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
</parameters>
</method>
<method name="pop_tail" c:identifier="gst_vec_deque_pop_tail" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Returns the tail of the queue @array and removes
it from the queue.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">The tail of the queue</doc>
<type name="gpointer" c:type="gpointer"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
</parameters>
</method>
<method name="pop_tail_struct" c:identifier="gst_vec_deque_pop_tail_struct" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Returns the tail of the queue @array and removes
it from the queue.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">The tail of the queue</doc>
<type name="gpointer" c:type="gpointer"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
</parameters>
</method>
<method name="push_sorted" c:identifier="gst_vec_deque_push_sorted" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Pushes @data to the queue @array, finding the correct position
by comparing @data with each array element using @func.
This has a time complexity of O(n), so depending on the size of the queue
and expected access patterns, a different data structure might be better.
Assumes that the array is already sorted. If it is not, make sure
to call gst_vec_deque_sort() first.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
<parameter name="data" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">object to push</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
<parameter name="func" transfer-ownership="none" closure="2">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">comparison function</doc>
<type name="GLib.CompareDataFunc" c:type="GCompareDataFunc"/>
</parameter>
<parameter name="user_data" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">data for comparison function</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
</method>
<method name="push_sorted_struct" c:identifier="gst_vec_deque_push_sorted_struct" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Pushes the element at address @p_struct into the queue @array
(copying the contents of a structure of the struct_size specified
when creating the queue into the array), finding the correct position
by comparing the element at @p_struct with each element in the array using @func.
This has a time complexity of O(n), so depending on the size of the queue
and expected access patterns, a different data structure might be better.
Assumes that the array is already sorted. If it is not, make sure
to call gst_vec_deque_sort() first.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
<parameter name="p_struct" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">address of element or structure to push into the queue</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
<parameter name="func" transfer-ownership="none" closure="2">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">comparison function</doc>
<type name="GLib.CompareDataFunc" c:type="GCompareDataFunc"/>
</parameter>
<parameter name="user_data" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">data for comparison function</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
</method>
<method name="push_tail" c:identifier="gst_vec_deque_push_tail" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Pushes @data to the tail of the queue @array.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
<parameter name="data" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">object to push</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
</method>
<method name="push_tail_struct" c:identifier="gst_vec_deque_push_tail_struct">
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
<parameter name="p_struct" transfer-ownership="none" nullable="1" allow-none="1">
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
</method>
<method name="set_clear_func" c:identifier="gst_vec_deque_set_clear_func" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Sets a function to clear an element of @array.
The @clear_func will be called when an element in the array
data segment is removed and when the array is freed and data
segment is deallocated as well. @clear_func will be passed a
pointer to the element to clear, rather than the element itself.
Note that in contrast with other uses of #GDestroyNotify
functions, @clear_func is expected to clear the contents of
the array element it is given, but not free the element itself.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
<parameter name="clear_func" transfer-ownership="none" scope="async">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a function to clear an element of @array</doc>
<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
</parameter>
</parameters>
</method>
<method name="sort" c:identifier="gst_vec_deque_sort" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Sorts the queue @array by comparing elements against each other using
the provided @compare_func.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="array" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</instance-parameter>
<parameter name="compare_func" transfer-ownership="none" closure="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">comparison function</doc>
<type name="GLib.CompareDataFunc" c:type="GCompareDataFunc"/>
</parameter>
<parameter name="user_data" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">data for comparison function</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
</method>
<function name="new" c:identifier="gst_vec_deque_new" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Allocates a new #GstVecDeque object with an initial
queue size of @initial_size.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value>
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a new #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</return-value>
<parameters>
<parameter name="initial_size" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Initial size of the new queue</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
</parameters>
</function>
<function name="new_for_struct" c:identifier="gst_vec_deque_new_for_struct" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Allocates a new #GstVecDeque object for elements (e.g. structures)
of size @struct_size, with an initial queue size of @initial_size.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value>
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a new #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</return-value>
<parameters>
<parameter name="struct_size" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Size of each element (e.g. structure) in the array</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
<parameter name="initial_size" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Initial size of the new queue</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
</parameters>
</function>
</record>
<function-macro name="WRITE_UINT16_BE" c:identifier="GST_WRITE_UINT16_BE" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstutils.h">Store a 16 bit unsigned integer value in big endian format into the memory buffer.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstutils.h"/>
@ -56118,6 +56578,40 @@ Note that this means subtraction as in sets, not as in mathematics.</doc>
</parameter>
</parameters>
</function>
<function name="vec_deque_new" c:identifier="gst_vec_deque_new" moved-to="VecDeque.new" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Allocates a new #GstVecDeque object with an initial
queue size of @initial_size.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value>
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a new #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</return-value>
<parameters>
<parameter name="initial_size" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Initial size of the new queue</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
</parameters>
</function>
<function name="vec_deque_new_for_struct" c:identifier="gst_vec_deque_new_for_struct" moved-to="VecDeque.new_for_struct" version="1.26" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Allocates a new #GstVecDeque object for elements (e.g. structures)
of size @struct_size, with an initial queue size of @initial_size.</doc>
<source-position filename="../subprojects/gstreamer/gst/gstvecdeque.h"/>
<return-value>
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">a new #GstVecDeque object</doc>
<type name="VecDeque" c:type="GstVecDeque*"/>
</return-value>
<parameters>
<parameter name="struct_size" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Size of each element (e.g. structure) in the array</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
<parameter name="initial_size" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstvecdeque.c">Initial size of the new queue</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
</parameters>
</function>
<function name="version" c:identifier="gst_version">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gst.c">Gets the version number of the GStreamer library.</doc>
<source-position filename="../subprojects/gstreamer/gst/gst.h"/>

View file

@ -794,6 +794,11 @@ format.</doc>
</parameter>
</parameters>
</function-macro>
<constant name="AUDIO_FORMAT_LAST" value="32" c:type="GST_AUDIO_FORMAT_LAST" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/audio-format.h">Number of audio formats in #GstAudioFormat.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/audio-format.h"/>
<type name="gint" c:type="gint"/>
</constant>
<function-macro name="AUDIO_INFO_BPF" c:identifier="GST_AUDIO_INFO_BPF" introspectable="0">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/audio-info.h"/>
<parameters>
@ -6413,12 +6418,18 @@ string is not a known format.</doc>
</parameters>
</function>
<function name="to_string" c:identifier="gst_audio_format_to_string">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/audio-format.c">Returns a string containing a descriptive name for the #GstAudioFormat.
Since 1.26 this can also be used with %GST_AUDIO_FORMAT_UNKNOWN, previous
versions were printing a critical warning and returned %NULL.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/audio-format.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/audio-format.c">the name corresponding to @format</doc>
<type name="utf8" c:type="const gchar*"/>
</return-value>
<parameters>
<parameter name="format" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/audio-format.c">a #GstAudioFormat audio format</doc>
<type name="AudioFormat" c:type="GstAudioFormat"/>
</parameter>
</parameters>
@ -7882,6 +7893,38 @@ MT safe.</doc>
</instance-parameter>
</parameters>
</method>
<method name="get_segbase" c:identifier="gst_audio_ring_buffer_get_segbase" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.c">Gets the current segment base number of the ringbuffer.
MT safe.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.c">Current segment base number of the ringbuffer.</doc>
<type name="guint64" c:type="guint64"/>
</return-value>
<parameters>
<instance-parameter name="buf" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.c">the #GstAudioRingBuffer to use</doc>
<type name="AudioRingBuffer" c:type="GstAudioRingBuffer*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_segdone" c:identifier="gst_audio_ring_buffer_get_segdone" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.c">Gets the current segment number of the ringbuffer.
MT safe.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.c">Current segment number of the ringbuffer.</doc>
<type name="guint64" c:type="guint64"/>
</return-value>
<parameters>
<instance-parameter name="buf" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.c">the #GstAudioRingBuffer to use</doc>
<type name="AudioRingBuffer" c:type="GstAudioRingBuffer*"/>
</instance-parameter>
</parameters>
</method>
<method name="is_acquired" c:identifier="gst_audio_ring_buffer_is_acquired">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.c">Check if the ringbuffer is acquired and ready to use.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.h"/>
@ -8223,6 +8266,25 @@ MT safe.</doc>
</parameter>
</parameters>
</method>
<method name="set_segdone" c:identifier="gst_audio_ring_buffer_set_segdone" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.c">Sets the current segment number of the ringbuffer.
MT safe.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="buf" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.c">the #GstAudioRingBuffer to use</doc>
<type name="AudioRingBuffer" c:type="GstAudioRingBuffer*"/>
</instance-parameter>
<parameter name="segdone" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.c">the segment number to set</doc>
<type name="guint64" c:type="guint64"/>
</parameter>
</parameters>
</method>
<method name="set_timestamp" c:identifier="gst_audio_ring_buffer_set_timestamp">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.h"/>
<return-value transfer-ownership="none">
@ -8352,8 +8414,11 @@ MT safe.</doc>
<field name="cb_data_notify" readable="0" private="1">
<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
</field>
<field name="priv" readable="0" private="1">
<type name="AudioRingBufferPrivate" c:type="GstAudioRingBufferPrivate*"/>
</field>
<field name="_gst_reserved" readable="0" private="1">
<array zero-terminated="0" fixed-size="3">
<array zero-terminated="0" fixed-size="2">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
@ -8676,6 +8741,9 @@ with a flush or stop.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.h">samples in DSD format (Since: 1.24)</doc>
</member>
</enumeration>
<record name="AudioRingBufferPrivate" c:type="GstAudioRingBufferPrivate" disguised="1">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.h"/>
</record>
<record name="AudioRingBufferSpec" c:type="GstAudioRingBufferSpec">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioringbuffer.h">The structure containing the format specification of the ringbuffer.
@ -10919,12 +10987,18 @@ string is not a known format.</doc>
</return-value>
</function>
<function name="audio_format_to_string" c:identifier="gst_audio_format_to_string" moved-to="AudioFormat.to_string">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/audio-format.c">Returns a string containing a descriptive name for the #GstAudioFormat.
Since 1.26 this can also be used with %GST_AUDIO_FORMAT_UNKNOWN, previous
versions were printing a critical warning and returned %NULL.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/audio-format.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/audio-format.c">the name corresponding to @format</doc>
<type name="utf8" c:type="const gchar*"/>
</return-value>
<parameters>
<parameter name="format" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/audio/audio-format.c">a #GstAudioFormat audio format</doc>
<type name="AudioFormat" c:type="GstAudioFormat"/>
</parameter>
</parameters>

View file

@ -629,7 +629,7 @@ position is returned.
The dts is reset to GST_CLOCK_TIME_NONE and the distance is set to 0 when
the adapter is first created or when it is cleared. This also means that before
the first byte with a dts is removed from the adapter, the dts
the first byte with a dts is added to the adapter, the dts
and distance returned are GST_CLOCK_TIME_NONE and 0 respectively.</doc>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstadapter.h"/>
<return-value transfer-ownership="none">
@ -654,7 +654,7 @@ position is returned.
The dts is reset to GST_CLOCK_TIME_NONE and the distance is set to 0 when
the adapter is first created or when it is cleared. This also means that before
the first byte with a dts is removed from the adapter, the dts
the first byte with a dts is added to the adapter, the dts
and distance returned are GST_CLOCK_TIME_NONE and 0 respectively.</doc>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstadapter.h"/>
<return-value transfer-ownership="none">
@ -683,7 +683,7 @@ position is returned.
The offset is reset to GST_BUFFER_OFFSET_NONE and the distance is set to 0
when the adapter is first created or when it is cleared. This also means that
before the first byte with an offset is removed from the adapter, the offset
before the first byte with an offset is added to the adapter, the offset
and distance returned are GST_BUFFER_OFFSET_NONE and 0 respectively.</doc>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstadapter.h"/>
<return-value transfer-ownership="none">
@ -708,7 +708,7 @@ position is returned.
The pts is reset to GST_CLOCK_TIME_NONE and the distance is set to 0 when
the adapter is first created or when it is cleared. This also means that before
the first byte with a pts is removed from the adapter, the pts
the first byte with a pts is added to the adapter, the pts
and distance returned are GST_CLOCK_TIME_NONE and 0 respectively.</doc>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstadapter.h"/>
<return-value transfer-ownership="none">
@ -733,7 +733,7 @@ position is returned.
The pts is reset to GST_CLOCK_TIME_NONE and the distance is set to 0 when
the adapter is first created or when it is cleared. This also means that before
the first byte with a pts is removed from the adapter, the pts
the first byte with a pts is added to the adapter, the pts
and distance returned are GST_CLOCK_TIME_NONE and 0 respectively.</doc>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstadapter.h"/>
<return-value transfer-ownership="none">
@ -2407,6 +2407,20 @@ the first buffer that is received.</doc>
selected by the `start-time` property.</doc>
</member>
</enumeration>
<function-macro name="BASE_DEPRECATED_FOR" c:identifier="GST_BASE_DEPRECATED_FOR" introspectable="0">
<source-position filename="../subprojects/gstreamer/libs/gst/base/base-prelude.h"/>
<parameters>
<parameter name="f">
</parameter>
</parameters>
</function-macro>
<function-macro name="BASE_DEPRECATED_TYPE_FOR" c:identifier="GST_BASE_DEPRECATED_TYPE_FOR" introspectable="0">
<source-position filename="../subprojects/gstreamer/libs/gst/base/base-prelude.h"/>
<parameters>
<parameter name="f">
</parameter>
</parameters>
</function-macro>
<function-macro name="BASE_PARSE" c:identifier="GST_BASE_PARSE" introspectable="0">
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstbaseparse.h"/>
<parameters>
@ -13052,13 +13066,15 @@ buffers.</doc>
</array>
</field>
</record>
<record name="QueueArray" c:type="GstQueueArray" disguised="1" introspectable="0">
<record name="QueueArray" c:type="GstQueueArray" disguised="1" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">#GstQueueArray is an object that provides standard queue functionality
based on an array instead of linked lists. This reduces the overhead
caused by memory management by a large factor.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<method name="clear" c:identifier="gst_queue_array_clear" version="1.16" introspectable="0">
<method name="clear" c:identifier="gst_queue_array_clear" version="1.16" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Clears queue @array and frees all memory associated to it.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -13070,8 +13086,9 @@ caused by memory management by a large factor.</doc>
</instance-parameter>
</parameters>
</method>
<method name="drop_element" c:identifier="gst_queue_array_drop_element" version="1.2" introspectable="0">
<method name="drop_element" c:identifier="gst_queue_array_drop_element" version="1.2" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Drops the queue element at position @idx from queue @array.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">the dropped element</doc>
@ -13088,10 +13105,11 @@ caused by memory management by a large factor.</doc>
</parameter>
</parameters>
</method>
<method name="drop_struct" c:identifier="gst_queue_array_drop_struct" version="1.6" introspectable="0">
<method name="drop_struct" c:identifier="gst_queue_array_drop_struct" version="1.6" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Drops the queue element at position @idx from queue @array and copies the
data of the element or structure that was removed into @p_struct if
@p_struct is set (not NULL).</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">TRUE on success, or FALSE on error</doc>
@ -13112,10 +13130,11 @@ data of the element or structure that was removed into @p_struct if
</parameter>
</parameters>
</method>
<method name="find" c:identifier="gst_queue_array_find" version="1.2" introspectable="0">
<method name="find" c:identifier="gst_queue_array_find" version="1.2" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Finds an element in the queue @array, either by comparing every element
with @func or by looking up @data if no compare function @func is provided,
and returning the index of the found element.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Index of the found element or -1 if nothing was found.</doc>
@ -13136,8 +13155,9 @@ and returning the index of the found element.</doc>
</parameter>
</parameters>
</method>
<method name="free" c:identifier="gst_queue_array_free" version="1.2" introspectable="0">
<method name="free" c:identifier="gst_queue_array_free" version="1.2" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Frees queue @array and all memory associated to it.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -13149,8 +13169,9 @@ and returning the index of the found element.</doc>
</instance-parameter>
</parameters>
</method>
<method name="get_length" c:identifier="gst_queue_array_get_length" version="1.2" introspectable="0">
<method name="get_length" c:identifier="gst_queue_array_get_length" version="1.2" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Returns the length of the queue @array</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">the length of the queue @array.</doc>
@ -13163,8 +13184,9 @@ and returning the index of the found element.</doc>
</instance-parameter>
</parameters>
</method>
<method name="is_empty" c:identifier="gst_queue_array_is_empty" version="1.2" introspectable="0">
<method name="is_empty" c:identifier="gst_queue_array_is_empty" version="1.2" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Checks if the queue @array is empty.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">%TRUE if the queue @array is empty</doc>
@ -13177,9 +13199,10 @@ and returning the index of the found element.</doc>
</instance-parameter>
</parameters>
</method>
<method name="peek_head" c:identifier="gst_queue_array_peek_head" version="1.2" introspectable="0">
<method name="peek_head" c:identifier="gst_queue_array_peek_head" version="1.2" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Returns the head of the queue @array and does not
remove it from the queue.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">The head of the queue</doc>
@ -13192,8 +13215,9 @@ remove it from the queue.</doc>
</instance-parameter>
</parameters>
</method>
<method name="peek_head_struct" c:identifier="gst_queue_array_peek_head_struct" version="1.6" introspectable="0">
<method name="peek_head_struct" c:identifier="gst_queue_array_peek_head_struct" version="1.6" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Returns the head of the queue @array without removing it from the queue.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">pointer to element or struct, or NULL if @array was empty. The
@ -13208,8 +13232,9 @@ remove it from the queue.</doc>
</instance-parameter>
</parameters>
</method>
<method name="peek_nth" c:identifier="gst_queue_array_peek_nth" version="1.16" introspectable="0">
<method name="peek_nth" c:identifier="gst_queue_array_peek_nth" version="1.16" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Returns the item at @idx in @array, but does not remove it from the queue.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">The item, or %NULL if @idx was out of bounds</doc>
@ -13224,8 +13249,9 @@ remove it from the queue.</doc>
</parameter>
</parameters>
</method>
<method name="peek_nth_struct" c:identifier="gst_queue_array_peek_nth_struct" version="1.16" introspectable="0">
<method name="peek_nth_struct" c:identifier="gst_queue_array_peek_nth_struct" version="1.16" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Returns the item at @idx in @array, but does not remove it from the queue.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">The item, or %NULL if @idx was out of bounds</doc>
@ -13240,8 +13266,9 @@ remove it from the queue.</doc>
</parameter>
</parameters>
</method>
<method name="peek_tail" c:identifier="gst_queue_array_peek_tail" version="1.14" introspectable="0">
<method name="peek_tail" c:identifier="gst_queue_array_peek_tail" version="1.14" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Returns the tail of the queue @array, but does not remove it from the queue.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">The tail of the queue</doc>
@ -13254,8 +13281,9 @@ remove it from the queue.</doc>
</instance-parameter>
</parameters>
</method>
<method name="peek_tail_struct" c:identifier="gst_queue_array_peek_tail_struct" version="1.14" introspectable="0">
<method name="peek_tail_struct" c:identifier="gst_queue_array_peek_tail_struct" version="1.14" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Returns the tail of the queue @array, but does not remove it from the queue.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">The tail of the queue</doc>
@ -13268,9 +13296,10 @@ remove it from the queue.</doc>
</instance-parameter>
</parameters>
</method>
<method name="pop_head" c:identifier="gst_queue_array_pop_head" version="1.2" introspectable="0">
<method name="pop_head" c:identifier="gst_queue_array_pop_head" version="1.2" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Returns and head of the queue @array and removes
it from the queue.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">The head of the queue</doc>
@ -13283,8 +13312,9 @@ it from the queue.</doc>
</instance-parameter>
</parameters>
</method>
<method name="pop_head_struct" c:identifier="gst_queue_array_pop_head_struct" version="1.6" introspectable="0">
<method name="pop_head_struct" c:identifier="gst_queue_array_pop_head_struct" version="1.6" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Returns the head of the queue @array and removes it from the queue.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">pointer to element or struct, or NULL if @array was empty. The
@ -13299,9 +13329,10 @@ it from the queue.</doc>
</instance-parameter>
</parameters>
</method>
<method name="pop_tail" c:identifier="gst_queue_array_pop_tail" version="1.14" introspectable="0">
<method name="pop_tail" c:identifier="gst_queue_array_pop_tail" version="1.14" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Returns the tail of the queue @array and removes
it from the queue.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">The tail of the queue</doc>
@ -13314,9 +13345,10 @@ it from the queue.</doc>
</instance-parameter>
</parameters>
</method>
<method name="pop_tail_struct" c:identifier="gst_queue_array_pop_tail_struct" version="1.14" introspectable="0">
<method name="pop_tail_struct" c:identifier="gst_queue_array_pop_tail_struct" version="1.14" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Returns the tail of the queue @array and removes
it from the queue.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">The tail of the queue</doc>
@ -13329,7 +13361,7 @@ it from the queue.</doc>
</instance-parameter>
</parameters>
</method>
<method name="push_sorted" c:identifier="gst_queue_array_push_sorted" version="1.24" introspectable="0">
<method name="push_sorted" c:identifier="gst_queue_array_push_sorted" version="1.24" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Pushes @data to the queue @array, finding the correct position
by comparing @data with each array element using @func.
@ -13338,6 +13370,7 @@ and expected access patterns, a different data structure might be better.
Assumes that the array is already sorted. If it is not, make sure
to call gst_queue_array_sort() first.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -13361,7 +13394,7 @@ to call gst_queue_array_sort() first.</doc>
</parameter>
</parameters>
</method>
<method name="push_sorted_struct" c:identifier="gst_queue_array_push_sorted_struct" version="1.24" introspectable="0">
<method name="push_sorted_struct" c:identifier="gst_queue_array_push_sorted_struct" version="1.24" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Pushes the element at address @p_struct into the queue @array
(copying the contents of a structure of the struct_size specified
when creating the queue into the array), finding the correct position
@ -13372,6 +13405,7 @@ and expected access patterns, a different data structure might be better.
Assumes that the array is already sorted. If it is not, make sure
to call gst_queue_array_sort() first.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -13395,8 +13429,9 @@ to call gst_queue_array_sort() first.</doc>
</parameter>
</parameters>
</method>
<method name="push_tail" c:identifier="gst_queue_array_push_tail" version="1.2" introspectable="0">
<method name="push_tail" c:identifier="gst_queue_array_push_tail" version="1.2" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Pushes @data to the tail of the queue @array.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -13426,7 +13461,7 @@ to call gst_queue_array_sort() first.</doc>
</parameter>
</parameters>
</method>
<method name="set_clear_func" c:identifier="gst_queue_array_set_clear_func" version="1.16" introspectable="0">
<method name="set_clear_func" c:identifier="gst_queue_array_set_clear_func" version="1.16" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Sets a function to clear an element of @array.
The @clear_func will be called when an element in the array
@ -13437,6 +13472,7 @@ pointer to the element to clear, rather than the element itself.
Note that in contrast with other uses of #GDestroyNotify
functions, @clear_func is expected to clear the contents of
the array element it is given, but not free the element itself.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -13452,9 +13488,10 @@ the array element it is given, but not free the element itself.</doc>
</parameter>
</parameters>
</method>
<method name="sort" c:identifier="gst_queue_array_sort" version="1.24" introspectable="0">
<method name="sort" c:identifier="gst_queue_array_sort" version="1.24" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Sorts the queue @array by comparing elements against each other using
the provided @compare_func.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -13489,9 +13526,10 @@ queue size of @initial_size.</doc>
</parameter>
</parameters>
</function>
<function name="new_for_struct" c:identifier="gst_queue_array_new_for_struct" version="1.6" introspectable="0">
<function name="new_for_struct" c:identifier="gst_queue_array_new_for_struct" version="1.6" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Allocates a new #GstQueueArray object for elements (e.g. structures)
of size @struct_size, with an initial queue size of @initial_size.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value>
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">a new #GstQueueArray object</doc>
@ -13875,9 +13913,10 @@ queue size of @initial_size.</doc>
</parameter>
</parameters>
</function>
<function name="queue_array_new_for_struct" c:identifier="gst_queue_array_new_for_struct" moved-to="QueueArray.new_for_struct" version="1.6" introspectable="0">
<function name="queue_array_new_for_struct" c:identifier="gst_queue_array_new_for_struct" moved-to="QueueArray.new_for_struct" version="1.6" introspectable="0" deprecated="1" deprecated-version="1.26">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">Allocates a new #GstQueueArray object for elements (e.g. structures)
of size @struct_size, with an initial queue size of @initial_size.</doc>
<doc-deprecated xml:space="preserve">Use #GstVecDeque instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.h"/>
<return-value>
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstqueuearray.c">a new #GstQueueArray object</doc>

View file

@ -587,12 +587,12 @@ GstPtpClock::internal-clock property will become non-NULL. You can
check this with gst_clock_wait_for_sync(), the GstClock::synced signal and
gst_clock_is_synced().</doc>
<source-position filename="../subprojects/gstreamer/libs/gst/net/gstptpclock.h"/>
<return-value transfer-ownership="full">
<return-value transfer-ownership="full" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/net/gstptpclock.c">A new #GstClock</doc>
<type name="Gst.Clock" c:type="GstClock*"/>
</return-value>
<parameters>
<parameter name="name" transfer-ownership="none">
<parameter name="name" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/net/gstptpclock.c">Name of the clock</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>

View file

@ -1733,6 +1733,23 @@ subtitles), are currently ignored.</doc>
</parameter>
</parameters>
</function>
<function name="from_string" c:identifier="gst_encoding_profile_from_string" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">Converts a string in the "encoding profile serialization format" into a
GstEncodingProfile. Refer to the encoding-profile documentation for details
on the format.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.h"/>
<return-value transfer-ownership="full" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">A newly created GstEncodingProfile or NULL if the
input string is not a valid encoding profile serialization format.</doc>
<type name="EncodingProfile" c:type="GstEncodingProfile*"/>
</return-value>
<parameters>
<parameter name="string" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">The string to convert into a GstEncodingProfile.</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>
</parameters>
</function>
<method name="copy" c:identifier="gst_encoding_profile_copy" version="1.12">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">Makes a deep copy of @self</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.h"/>
@ -2099,9 +2116,26 @@ container profile. If 0, it is not a mandatory stream</doc>
</parameters>
</method>
<method name="set_preset" c:identifier="gst_encoding_profile_set_preset">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">Sets the name of the #GstElement that implements the #GstPreset interface
to use for the profile.
This is the name that has been set when saving the preset.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">Sets the name of the preset to be used in the profile.
This is the name that has been set when saving the preset.
You can list the available presets for a specific element factory
using `$ gst-inspect-1.0 element-factory-name`, for example for
`x264enc`:
``` bash
$ gst-inspect-1.0 x264enc
...
Presets:
"Profile Baseline": Baseline Profile
"Profile High": High Profile
"Profile Main": Main Profile
"Profile YouTube": YouTube recommended settings (https://support.google.com/youtube/answer/1722171)
"Quality High": High quality
"Quality Low": Low quality
"Quality Normal": Normal quality
"Zero Latency"
```
}</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -2118,7 +2152,9 @@ This is the name that has been set when saving the preset.</doc>
</parameters>
</method>
<method name="set_preset_name" c:identifier="gst_encoding_profile_set_preset_name">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">Sets the name of the #GstPreset's factory to be used in the profile.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">Sets the name of the #GstPreset's factory to be used in the profile. This
is the name of the **element factory** that implements the #GstPreset interface not
the name of the preset itself (see #gst_encoding_profile_set_preset).</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -2129,7 +2165,7 @@ This is the name that has been set when saving the preset.</doc>
<type name="EncodingProfile" c:type="GstEncodingProfile*"/>
</instance-parameter>
<parameter name="preset_name" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">The name of the preset to use in this @profile.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">The name of the element factory to use in this @profile.</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>
</parameters>
@ -2175,6 +2211,21 @@ single segment before the encoder, #FALSE otherwise.</doc>
</parameter>
</parameters>
</method>
<method name="to_string" c:identifier="gst_encoding_profile_to_string" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">Converts a GstEncodingProfile to a string in the "Encoding Profile
serialization format".</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.h"/>
<return-value transfer-ownership="full">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">A string representation of the GstEncodingProfile.</doc>
<type name="utf8" c:type="gchar*"/>
</return-value>
<parameters>
<instance-parameter name="profile" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">The GstEncodingProfile to convert.</doc>
<type name="EncodingProfile" c:type="GstEncodingProfile*"/>
</instance-parameter>
</parameters>
</method>
<property name="element-properties" version="1.20" writable="1" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/encoding-profile.c">A #GstStructure defining the properties to be set to the element
the profile represents.
@ -2904,12 +2955,12 @@ in debugging.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstpluginsbaseversion.h"/>
<type name="gint" c:type="gint"/>
</constant>
<constant name="PLUGINS_BASE_VERSION_MINOR" value="24" c:type="GST_PLUGINS_BASE_VERSION_MINOR">
<constant name="PLUGINS_BASE_VERSION_MINOR" value="25" c:type="GST_PLUGINS_BASE_VERSION_MINOR">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstpluginsbaseversion.h">The minor version of GStreamer's gst-plugins-base libraries at compile time.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstpluginsbaseversion.h"/>
<type name="gint" c:type="gint"/>
</constant>
<constant name="PLUGINS_BASE_VERSION_NANO" value="0" c:type="GST_PLUGINS_BASE_VERSION_NANO">
<constant name="PLUGINS_BASE_VERSION_NANO" value="1" c:type="GST_PLUGINS_BASE_VERSION_NANO">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstpluginsbaseversion.h">The nano version of GStreamer's gst-plugins-base libraries at compile time.
Actual releases have 0, GIT versions have 1, prerelease versions have 2-...</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstpluginsbaseversion.h"/>
@ -3115,6 +3166,34 @@ rate.</doc>
</parameter>
</parameters>
</function>
<function name="codec_utils_av1_get_level" c:identifier="gst_codec_utils_av1_get_level" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/codec-utils.c">Transform a seq_level_idx into the level string</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/codec-utils.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/codec-utils.c">the level string or %NULL if the seq_level_idx is unknown</doc>
<type name="utf8" c:type="const gchar*"/>
</return-value>
<parameters>
<parameter name="seq_level_idx" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/codec-utils.c">A seq_level_idx</doc>
<type name="guint8" c:type="guint8"/>
</parameter>
</parameters>
</function>
<function name="codec_utils_av1_get_seq_level_idx" c:identifier="gst_codec_utils_av1_get_seq_level_idx" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/codec-utils.c">Transform a level string from the caps into the seq_level_idx</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/codec-utils.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/codec-utils.c">the seq_level_idx or 31 (max-level) if the level is unknown</doc>
<type name="guint8" c:type="guint8"/>
</return-value>
<parameters>
<parameter name="level" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/codec-utils.c">A level string from caps</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>
</parameters>
</function>
<function name="codec_utils_caps_from_mime_codec" c:identifier="gst_codec_utils_caps_from_mime_codec" version="1.22">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/codec-utils.c">Converts a RFC 6381 compatible codec string to #GstCaps. More than one codec
string can be present (separated by `,`).
@ -3790,6 +3869,7 @@ Moreover, you can set the extra properties:
* `|single-segment=true` (See #gst_encoding_profile_set_single_segment)
* `|single-segment=true` (See
#gst_encoding_video_profile_set_variableframerate)
* `|factory-name=element-factory-name` (See #gst_encoding_profile_set_preset_name)
for example:

View file

@ -345,7 +345,10 @@ of its queued messages, thus breaking any possible reference cycle.</doc>
Video is going to be rendered by @video_renderer, or if %NULL is provided
no special video set up will be done and some default handling will be
performed.</doc>
performed.
This also initializes GStreamer via `gst_init()` on the first call if this
didn't happen before.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.h"/>
<return-value transfer-ownership="full">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.c">a new #GstPlay instance</doc>

View file

@ -337,7 +337,10 @@ passed. See gst_player_g_main_context_signal_dispatcher_new().
Video is going to be rendered by @video_renderer, or if %NULL is provided
no special video set up will be done and some default handling will be
performed.</doc>
performed.
This also initializes GStreamer via `gst_init()` on the first call if this
didn't happen before.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/player/gstplayer.h"/>
<return-value transfer-ownership="full">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/player/gstplayer.c">a new #GstPlayer instance</doc>

View file

@ -2100,7 +2100,7 @@ packets, basically it accepts other types than RR and SR</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/rtp/gstrtcpbuffer.h"/>
<type name="gint" c:type="gint"/>
</constant>
<constant name="RTCP_VALID_VALUE" value="200" c:type="GST_RTCP_VALID_VALUE">
<constant name="RTCP_VALID_VALUE" value="32968" c:type="GST_RTCP_VALID_VALUE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/rtp/gstrtcpbuffer.h">Valid value for the first two bytes of an RTCP packet after applying
#GST_RTCP_VALID_MASK to them.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/rtp/gstrtcpbuffer.h"/>

View file

@ -991,6 +991,33 @@ Shift and Alt).</doc>
</parameter>
<parameter name="state" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">a bit-mask representing the state of the modifier keys (e.g. Control,
Shift and Alt).</doc>
<type name="NavigationModifierType" c:type="GstNavigationModifierType"/>
</parameter>
</parameters>
</function>
<function name="event_new_mouse_double_click" c:identifier="gst_navigation_event_new_mouse_double_click" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">Create a new navigation event for the given key mouse double click.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.h"/>
<return-value transfer-ownership="full">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">a new #GstEvent</doc>
<type name="Gst.Event" c:type="GstEvent*"/>
</return-value>
<parameters>
<parameter name="button" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">The number of the pressed mouse button.</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="x" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">The x coordinate of the mouse cursor.</doc>
<type name="gdouble" c:type="gdouble"/>
</parameter>
<parameter name="y" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">The y coordinate of the mouse cursor.</doc>
<type name="gdouble" c:type="gdouble"/>
</parameter>
<parameter name="state" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">a bit-mask representing the state of the modifier keys (e.g. Control,
Shift and Alt).</doc>
<type name="NavigationModifierType" c:type="GstNavigationModifierType"/>
</parameter>
@ -1876,7 +1903,7 @@ implementing the #GstNavigation interface.</doc>
</instance-parameter>
<parameter name="event" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">The type of mouse event, as a text string. Recognised values are
"mouse-button-press", "mouse-button-release" and "mouse-move".</doc>
"mouse-button-press", "mouse-button-release", "mouse-move" and "mouse-double-click".</doc>
<type name="utf8" c:type="const char*"/>
</parameter>
<parameter name="button" transfer-ownership="none">
@ -2062,6 +2089,11 @@ from the event.</doc>
<member name="touch_cancel" value="12" c:identifier="GST_NAVIGATION_EVENT_TOUCH_CANCEL" version="1.22" glib:nick="touch-cancel">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.h">An event cancelling all currently active touch points.</doc>
</member>
<member name="mouse_double_click" value="13" c:identifier="GST_NAVIGATION_EVENT_MOUSE_DOUBLE_CLICK" version="1.26" glib:nick="mouse-double-click">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.h">A mouse button double click event.
Use gst_navigation_event_parse_mouse_button_event() to extract the details
from the event.</doc>
</member>
</enumeration>
<record name="NavigationInterface" c:type="GstNavigationInterface" glib:is-gtype-struct-for="Navigation">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.h">Navigation interface.</doc>
@ -3027,7 +3059,7 @@ Formats are sorted by decreasing "quality", using these criteria by priority:
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h"/>
<type name="utf8" c:type="gchar*"/>
</constant>
<constant name="VIDEO_FORMATS_ALL_STR" value="A444_16BE, A444_16LE, AYUV64, ARGB64, RGBA64_BE, ARGB64_BE, BGRA64_BE, ABGR64_BE, RGBA64_LE, ARGB64_LE, BGRA64_LE, ABGR64_LE, A422_16BE, A422_16LE, A420_16BE, A420_16LE, A444_12BE, GBRA_12BE, A444_12LE, GBRA_12LE, Y412_BE, Y412_LE, A422_12BE, A422_12LE, A420_12BE, A420_12LE, A444_10BE, GBRA_10BE, A444_10LE, GBRA_10LE, A422_10BE, A422_10LE, A420_10BE, A420_10LE, Y410, BGR10A2_LE, RGB10A2_LE, A444, GBRA, AYUV, VUYA, RGBA, RBGA, ARGB, BGRA, ABGR, A422, A420, AV12, Y444_16BE, GBR_16BE, Y444_16LE, GBR_16LE, v216, P016_BE, P016_LE, Y444_12BE, GBR_12BE, Y444_12LE, GBR_12LE, I422_12BE, I422_12LE, Y212_BE, Y212_LE, I420_12BE, I420_12LE, P012_BE, P012_LE, Y444_10BE, GBR_10BE, Y444_10LE, GBR_10LE, r210, I422_10BE, I422_10LE, NV16_10LE32, Y210, UYVP, v210, I420_10BE, I420_10LE, P010_10BE, MT2110R, MT2110T, NV12_10BE_8L128, NV12_10LE40_4L4, P010_10LE, NV12_10LE40, NV12_10LE32, Y444, BGRP, GBR, RGBP, NV24, v308, IYU2, RGBx, xRGB, BGRx, xBGR, RGB, BGR, Y42B, NV16, NV61, YUY2, YVYU, UYVY, VYUY, I420, YV12, NV12, NV21, NV12_16L32S, NV12_32L32, NV12_4L4, NV12_64Z32, NV12_8L128, Y41B, IYU1, YUV9, YVU9, BGR16, RGB16, BGR15, RGB15, RGB8P, GRAY16_BE, GRAY16_LE, GRAY10_LE32, GRAY8" c:type="GST_VIDEO_FORMATS_ALL_STR" version="1.24">
<constant name="VIDEO_FORMATS_ALL_STR" value="A444_16BE, A444_16LE, AYUV64, ARGB64, Y416_BE, RGBA64_BE, ARGB64_BE, BGRA64_BE, ABGR64_BE, Y416_LE, RGBA64_LE, ARGB64_LE, BGRA64_LE, ABGR64_LE, A422_16BE, A422_16LE, A420_16BE, A420_16LE, A444_12BE, GBRA_12BE, A444_12LE, GBRA_12LE, Y412_BE, Y412_LE, A422_12BE, A422_12LE, A420_12BE, A420_12LE, A444_10BE, GBRA_10BE, A444_10LE, GBRA_10LE, A422_10BE, A422_10LE, A420_10BE, A420_10LE, Y410, BGR10A2_LE, RGB10A2_LE, A444, GBRA, AYUV, VUYA, RGBA, RBGA, ARGB, BGRA, ABGR, A422, A420, AV12, Y444_16BE, GBR_16BE, Y444_16LE, GBR_16LE, Y216_BE, v216, Y216_LE, P016_BE, P016_LE, Y444_12BE, GBR_12BE, Y444_12LE, GBR_12LE, I422_12BE, I422_12LE, Y212_BE, Y212_LE, I420_12BE, I420_12LE, P012_BE, P012_LE, Y444_10BE, GBR_10BE, Y444_10LE, GBR_10LE, r210, I422_10BE, I422_10LE, NV16_10LE32, Y210, UYVP, v210, I420_10BE, I420_10LE, P010_10BE, MT2110R, MT2110T, NV12_10BE_8L128, NV12_10LE40_4L4, P010_10LE, NV12_10LE40, NV12_10LE32, Y444, BGRP, GBR, RGBP, NV24, v308, IYU2, RGBx, xRGB, BGRx, xBGR, RGB, BGR, Y42B, NV16, NV61, YUY2, YVYU, UYVY, VYUY, I420, YV12, NV12, NV21, NV12_16L32S, NV12_32L32, NV12_4L4, NV12_64Z32, NV12_8L128, Y41B, IYU1, YUV9, YVU9, BGR16, RGB16, BGR15, RGB15, RGB8P, GRAY16_BE, GRAY16_LE, GRAY10_LE32, GRAY8" c:type="GST_VIDEO_FORMATS_ALL_STR" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h">Declare all video formats as a string.
Formats are sorted by decreasing "quality", using these criteria by priority:
@ -3403,6 +3435,11 @@ Return the width of one tile in pixels, zero if its not an integer.</doc>
</parameter>
</parameters>
</function-macro>
<constant name="VIDEO_FORMAT_LAST" value="138" c:type="GST_VIDEO_FORMAT_LAST" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h">Number of video formats in #GstVideoFormat.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h"/>
<type name="gint" c:type="gint"/>
</constant>
<constant name="VIDEO_FPS_RANGE" value="(fraction) [ 0, max ]" c:type="GST_VIDEO_FPS_RANGE">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h"/>
<type name="utf8" c:type="gchar*"/>
@ -10292,6 +10329,18 @@ bits.</doc>
<member name="rbga" value="133" c:identifier="GST_VIDEO_FORMAT_RBGA" version="1.24" glib:nick="rbga">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h">packed RGB with alpha, 8 bits per channel</doc>
</member>
<member name="y216_le" value="134" c:identifier="GST_VIDEO_FORMAT_Y216_LE" version="1.26" glib:nick="y216-le">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h">packed 4:2:2 YUV, 16 bits per channel (Y-U-Y-V)</doc>
</member>
<member name="y216_be" value="135" c:identifier="GST_VIDEO_FORMAT_Y216_BE" version="1.26" glib:nick="y216-be">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h">packed 4:2:2 YUV, 16 bits per channel (Y-U-Y-V)</doc>
</member>
<member name="y416_le" value="136" c:identifier="GST_VIDEO_FORMAT_Y416_LE" version="1.26" glib:nick="y416-le">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h">packed 4:4:4:4 YUV, 16 bits per channel(U-Y-V-A)</doc>
</member>
<member name="y416_be" value="137" c:identifier="GST_VIDEO_FORMAT_Y416_BE" version="1.26" glib:nick="y416-be">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h">packed 4:4:4:4 YUV, 16 bits per channel(U-Y-V-A)</doc>
</member>
<function name="from_fourcc" c:identifier="gst_video_format_from_fourcc">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.c">Converts a FOURCC value into the corresponding #GstVideoFormat.
If the FOURCC cannot be represented by #GstVideoFormat,
@ -10414,8 +10463,10 @@ no corresponding FOURCC value, 0 is returned.</doc>
</parameters>
</function>
<function name="to_string" c:identifier="gst_video_format_to_string">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.c">Returns a string containing a descriptive name for
the #GstVideoFormat if there is one, or NULL otherwise.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.c">Returns a string containing a descriptive name for the #GstVideoFormat.
Since 1.26 this can also be used with %GST_VIDEO_FORMAT_UNKNOWN, previous
versions were printing a critical warning and returned %NULL.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.c">the name corresponding to @format</doc>
@ -16761,6 +16812,33 @@ Shift and Alt).</doc>
</parameter>
<parameter name="state" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">a bit-mask representing the state of the modifier keys (e.g. Control,
Shift and Alt).</doc>
<type name="NavigationModifierType" c:type="GstNavigationModifierType"/>
</parameter>
</parameters>
</function>
<function name="navigation_event_new_mouse_double_click" c:identifier="gst_navigation_event_new_mouse_double_click" moved-to="Navigation.event_new_mouse_double_click" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">Create a new navigation event for the given key mouse double click.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.h"/>
<return-value transfer-ownership="full">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">a new #GstEvent</doc>
<type name="Gst.Event" c:type="GstEvent*"/>
</return-value>
<parameters>
<parameter name="button" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">The number of the pressed mouse button.</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="x" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">The x coordinate of the mouse cursor.</doc>
<type name="gdouble" c:type="gdouble"/>
</parameter>
<parameter name="y" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">The y coordinate of the mouse cursor.</doc>
<type name="gdouble" c:type="gdouble"/>
</parameter>
<parameter name="state" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/navigation.c">a bit-mask representing the state of the modifier keys (e.g. Control,
Shift and Alt).</doc>
<type name="NavigationModifierType" c:type="GstNavigationModifierType"/>
</parameter>
@ -18669,8 +18747,10 @@ no corresponding FOURCC value, 0 is returned.</doc>
</parameters>
</function>
<function name="video_format_to_string" c:identifier="gst_video_format_to_string" moved-to="VideoFormat.to_string">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.c">Returns a string containing a descriptive name for
the #GstVideoFormat if there is one, or NULL otherwise.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.c">Returns a string containing a descriptive name for the #GstVideoFormat.
Since 1.26 this can also be used with %GST_VIDEO_FORMAT_UNKNOWN, previous
versions were printing a critical warning and returned %NULL.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.c">the name corresponding to @format</doc>

View file

@ -1115,7 +1115,7 @@ multiple times. This must be called before any other #GstVulkanBufferMemory ope
</parameter>
<parameter name="usage" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkbufferpool.c">The Vulkan buffer usage flags.</doc>
<type name="Vulkan.ImageUsageFlags" c:type="VkImageUsageFlags"/>
<type name="Vulkan.BufferUsageFlags" c:type="VkBufferUsageFlags"/>
</parameter>
<parameter name="mem_properties" transfer-ownership="none">
<type name="Vulkan.MemoryPropertyFlags" c:type="VkMemoryPropertyFlags"/>
@ -1314,21 +1314,6 @@ need to use this function.</doc>
<record name="VulkanCommandPoolPrivate" c:type="GstVulkanCommandPoolPrivate" disguised="1">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/vulkan_fwd.h"/>
</record>
<record name="VulkanDecoder" c:type="GstVulkanDecoder" disguised="1">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/vulkan_fwd.h"/>
</record>
<record name="VulkanDecoderClass" c:type="GstVulkanDecoderClass" disguised="1">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/vulkan_fwd.h"/>
</record>
<union name="VulkanDecoderParameters" c:type="GstVulkanDecoderParameters">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/vulkan_fwd.h"/>
</union>
<record name="VulkanDecoderPicture" c:type="GstVulkanDecoderPicture" disguised="1">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/vulkan_fwd.h"/>
</record>
<record name="VulkanDecoderPrivate" c:type="GstVulkanDecoderPrivate" disguised="1">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/vulkan_fwd.h"/>
</record>
<class name="VulkanDescriptorCache" c:symbol-prefix="vulkan_descriptor_cache" c:type="GstVulkanDescriptorCache" version="1.18" parent="VulkanHandlePool" glib:type-name="GstVulkanDescriptorCache" glib:get-type="gst_vulkan_descriptor_cache_get_type" glib:type-struct="VulkanDescriptorCacheClass">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkdescriptorcache.h"/>
<constructor name="new" c:identifier="gst_vulkan_descriptor_cache_new" version="1.18">
@ -2284,6 +2269,22 @@ second argument is @data.</doc>
</parameters>
</function>
</bitfield>
<record name="VulkanEncodeQueryResult" c:type="GstVulkanEncodeQueryResult" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkoperation.h">Encoder query result. Expected to be used in gst_vulkan_operation_get_query()</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkoperation.h"/>
<field name="offset" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkoperation.h">buffer offset</doc>
<type name="guint32" c:type="guint32"/>
</field>
<field name="data_size" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkoperation.h">data size</doc>
<type name="guint32" c:type="guint32"/>
</field>
<field name="status" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkoperation.h">status</doc>
<type name="guint32" c:type="guint32"/>
</field>
</record>
<enumeration name="VulkanError" version="1.18" glib:type-name="GstVulkanError" glib:get-type="gst_vulkan_error_get_type" c:type="GstVulkanError" glib:error-domain="gst-vulkan-error">
<member name="failed" value="0" c:identifier="GST_VULKAN_FAILED" glib:nick="failed">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkerror.h">undetermined error</doc>
@ -3530,6 +3531,24 @@ dest or DPB images.</doc>
</parameter>
</parameters>
</function>
<function name="config_set_encode_caps" c:identifier="gst_vulkan_image_buffer_pool_config_set_encode_caps" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkimagebufferpool.c">Encode @caps are used when the buffers are going to be used either as encoded
src or DPB images.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkimagebufferpool.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="config" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkimagebufferpool.c">the #GstStructure with the pool's configuration.</doc>
<type name="Gst.Structure" c:type="GstStructure*"/>
</parameter>
<parameter name="caps" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkimagebufferpool.c">Upstream encode caps.</doc>
<type name="Gst.Caps" c:type="GstCaps*"/>
</parameter>
</parameters>
</function>
<field name="bufferpool">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkimagebufferpool.h">parent #GstBufferPool</doc>
<type name="Gst.BufferPool" c:type="GstBufferPool"/>
@ -5178,24 +5197,6 @@ surrounding elements of @element.</doc>
</instance-parameter>
</parameters>
</method>
<method name="create_decoder" c:identifier="gst_vulkan_queue_create_decoder" version="1.24" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkqueue.c">Creates a #GstVulkanDecoder object if @codec decoding is supported by @queue</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkqueue.h"/>
<return-value transfer-ownership="full" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkqueue.c">the #GstVulkanDecoder object</doc>
<type name="VulkanDecoder" c:type="GstVulkanDecoder*"/>
</return-value>
<parameters>
<instance-parameter name="queue" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkqueue.c">a #GstVulkanQueue</doc>
<type name="VulkanQueue" c:type="GstVulkanQueue*"/>
</instance-parameter>
<parameter name="codec" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkqueue.c">the VkVideoCodecOperationFlagBitsKHR to decode</doc>
<type name="guint" c:type="guint"/>
</parameter>
</parameters>
</method>
<method name="get_device" c:identifier="gst_vulkan_queue_get_device" version="1.18">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkqueue.h"/>
<return-value transfer-ownership="full" nullable="1">

View file

@ -1,5 +1,5 @@
project('gstreamer-full', 'c',
version : '1.24.0',
version : '1.25.0.1',
meson_version : '>= 1.1',
default_options : ['buildtype=debugoptimized',
# Needed due to https://github.com/mesonbuild/meson/issues/1889,

View file

@ -11,12 +11,12 @@ NOT_PYCODESTYLE_COMPLIANT_MESSAGE_PRE = \
NOT_PYCODESTYLE_COMPLIANT_MESSAGE_POST = \
"Please fix these errors and commit again, you can do so "\
"from the root directory automatically like this, assuming the whole "\
"file is to be commited:"
"file is to be committed:"
NO_PYCODESTYLE_MESSAGE = \
"You should install the pycodestyle style checker to be able"\
" to commit in this repo.\nIt allows us to garantee that "\
"anything that is commited respects the pycodestyle coding style "\
" to commit in this repo.\nIt allows us to guarantee that "\
"anything that is committed respects the pycodestyle coding style "\
"standard.\nYou can install it:\n"\
" * on ubuntu, debian: $sudo apt-get install pycodestyle \n"\
" * on fedora: #yum install python3-pycodestyle \n"\
@ -40,7 +40,7 @@ def copy_files_to_tmp_dir(files):
filepath = os.path.dirname(filename)
if not os.path.exists(filepath):
os.makedirs(filepath)
with open(filename, 'w') as f:
with open(filename, 'w', encoding="utf-8") as f:
system('git', 'show', ':' + name, stdout=f)
return tempdir

View file

@ -7,12 +7,12 @@
# On some *bsd systems the binary seems to be called gnunindent,
# so check for that first.
version=`gnuindent --version 2>/dev/null`
if test "x$version" = "x"; then
version=`gindent --version 2>/dev/null`
if test "x$version" = "x"; then
version=`indent --version 2>/dev/null`
if test "x$version" = "x"; then
version=$(gnuindent --version 2>/dev/null)
if test -z "$version"; then
version=$(gindent --version 2>/dev/null)
if test -z "$version"; then
version=$(indent --version 2>/dev/null)
if test -z "$version"; then
echo "GStreamer git pre-commit hook:"
echo "Did not find GNU indent, please install it before continuing."
exit 1
@ -26,7 +26,7 @@ else
INDENT=gnuindent
fi
case `$INDENT --version` in
case $($INDENT --version) in
GNU*)
;;
default)
@ -52,11 +52,11 @@ INDENT_PARAMETERS="--braces-on-if-line \
--leave-preprocessor-space"
echo "--Checking style--"
for file in `git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "\.c$"` ; do
for file in $(git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "\.c$") ; do
# nf is the temporary checkout. This makes sure we check against the
# revision in the index (and not the checked out version).
nf=`git checkout-index --temp ${file} | cut -f 1`
newfile=`mktemp /tmp/${nf}.XXXXXX` || exit 1
nf=$(git checkout-index --temp ${file} | cut -f 1)
newfile=$(mktemp /tmp/${nf}.XXXXXX) || exit 1
$INDENT ${INDENT_PARAMETERS} \
$nf -o $newfile 2>> /dev/null
# FIXME: Call indent twice as it tends to do line-breaks
@ -91,10 +91,10 @@ echo "==========================================================================
exit 1
fi
csharp_files=` git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "^subprojects/gstreamer-sharp/.*cs$" `
if test "x$csharp_files" != "x"; then
version=`dotnet-format --version 2>/dev/null`
if test "x$version" = "x"; then
csharp_files=$( git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "^subprojects/gstreamer-sharp/.*cs$" )
if test -n "$csharp_files"; then
version=$(dotnet-format --version 2>/dev/null)
if test -z "$version"; then
echo "GStreamer git pre-commit hook:"
echo "Did not find dotnet-format required to format C# files, please install it before continuing."
exit 1

View file

@ -3,3 +3,4 @@ directory=FFmpeg
url=https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg.git
push-url=git@gitlab.freedesktop.org:gstreamer/meson-ports/ffmpeg.git
revision=meson-6.1
depth=1

View file

@ -1,6 +1,9 @@
[wrap-file]
directory=dav1d-1.1.0
source_url = https://download.videolan.org/pub/videolan/dav1d/1.1.0/dav1d-1.1.0.tar.xz
source_filename = dav1d-1.1.0.tar.xz
source_fallback_url = https://gstreamer.freedesktop.org/src/mirror/dav1d-1.1.0.tar.xz
source_hash = fb57aae7875f28c30fb3dbae4a3683d27e2f91dde09ce5c60c22cef9bc58dfd1
directory=dav1d-1.4.1
source_url = https://download.videolan.org/pub/videolan/dav1d/1.4.1/dav1d-1.4.1.tar.xz
source_filename = dav1d-1.4.1.tar.xz
source_fallback_url = https://gstreamer.freedesktop.org/src/mirror/dav1d-1.4.1.tar.xz
source_hash = 8d407dd5fe7986413c937b14e67f36aebd06e1fa5cfec679d10e548476f2d5f8
[provide]
dav1d = dav1d_dep

View file

@ -1,14 +1,13 @@
[wrap-file]
directory = DirectXMath-dec2022
source_url = https://github.com/microsoft/DirectXMath/archive/refs/tags/dec2022.tar.gz
source_filename = dec2022.tar.gz
source_hash = 70a18f35343ff07084d31afa7a7978b3b59160f0533424365451c72475ff480f
patch_filename = directxmath_3.1.8-1_patch.zip
patch_url = https://wrapdb.mesonbuild.com/v2/directxmath_3.1.8-1/get_patch
patch_hash = 854f9c065319885f3de5b381cc77454913377a84c8ae6756795fe3eaa99b81f7
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/directxmath_3.1.8-1/dec2022.tar.gz
wrapdb_version = 3.1.8-1
diff_files = DirectXMath-dec2022/0001-Inc-Use-two-argument-cpuid-when-using-recent-MinGW.patch
directory = DirectXMath-feb2024
source_url = https://github.com/microsoft/DirectXMath/archive/refs/tags/feb2024.tar.gz
source_filename = feb2024.tar.gz
source_hash = f78bb400dcbedd987f2876b2fb6fe12199d795cd6a912f965ef3a2141c78303d
patch_filename = directxmath_3.1.9-1_patch.zip
patch_url = https://wrapdb.mesonbuild.com/v2/directxmath_3.1.9-1/get_patch
patch_hash = d2475b7de8deb6c801139b96ad91904b9062c9ea6432d62c1cb490a3d449ad12
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/directxmath_3.1.9-1/feb2024.tar.gz
wrapdb_version = 3.1.9-1
[provide]
directxmath = directxmath_dep

13
subprojects/flac.wrap Normal file
View file

@ -0,0 +1,13 @@
[wrap-file]
directory = flac-1.4.3
source_url = https://github.com/xiph/flac/releases/download/1.4.3/flac-1.4.3.tar.xz
source_filename = flac-1.4.3.tar.xz
source_hash = 6c58e69cd22348f441b861092b825e591d0b822e106de6eb0ee4d05d27205b70
patch_filename = flac_1.4.3-2_patch.zip
patch_url = https://wrapdb.mesonbuild.com/v2/flac_1.4.3-2/get_patch
patch_hash = 3eace1bd0769d3e0d4ff099960160766a5185d391c8f583293b087a1f96c2a9c
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/flac_1.4.3-2/flac-1.4.3.tar.xz
wrapdb_version = 1.4.3-2
[provide]
flac = flac_dep

View file

@ -1,6 +1,6 @@
[wrap-file]
directory = glib-networking-2.74.0
source_url = https://download.gnome.org/sources/glib-networking/2.74/glib-networking-2.74.0.tar.xz
source_fallback_url = https://ftp.acc.umu.se/pub/gnome/sources/glib-networking/2.74/glib-networking-2.74.0.tar.xz
source_filename = glib-networking-2.74.0.tar.xz
source_hash = 1f185aaef094123f8e25d8fa55661b3fd71020163a0174adb35a37685cda613b
directory = glib-networking-2.78.1
source_url = https://download.gnome.org/sources/glib-networking/2.78/glib-networking-2.78.1.tar.xz
source_fallback_url = https://ftp.acc.umu.se/pub/gnome/sources/glib-networking/2.78/glib-networking-2.78.1.tar.xz
source_filename = glib-networking-2.78.1.tar.xz
source_hash = e48f2ddbb049832cbb09230529c5e45daca9f0df0eda325f832f7379859bf09f

View file

@ -1,17 +1,15 @@
This is GStreamer gst-devtools 1.24.0.
This is GStreamer gst-devtools 1.25.0.1.
The GStreamer team is thrilled to announce a new major feature release
of your favourite cross-platform multimedia framework!
As always, this release is again packed with new features, bug fixes and
other improvements.
GStreamer 1.25 is the unstable development branch leading up to the next major
stable version which will be 1.26.
The 1.24 release series adds new features on top of the 1.22 series and is
part of the API and ABI-stable 1.x release series.
The 1.25 development series adds new features on top of the 1.24 series and is
part of the API and ABI-stable 1.x release series of the GStreamer multimedia
framework.
Full release notes can be found at:
Full release notes will one day be found at:
https://gstreamer.freedesktop.org/releases/1.24/
https://gstreamer.freedesktop.org/releases/1.26/
Binaries for Android, iOS, Mac OS X and Windows will usually be provided
shortly after the release.

View file

@ -41,22 +41,18 @@ def _load_plugins(path):
import glob
files = glob.glob(os.path.join(path, "*.py"))
for filename in files:
name = os.path.basename(os.path.splitext(filename)[0])
if name == "__init__":
continue
finder = importlib.machinery.PathFinder()
spec = finder.find_spec(
name,
os.environ.get('_GI_OVERRIDES_PATH', '').split(os.pathsep)
)
loader = importlib.machinery.SourceFileLoader(name, filename)
spec = importlib.util.spec_from_file_location(name, filename, loader=loader)
if spec is None:
raise ModuleNotFoundError(name)
module = importlib.util.module_from_spec(spec)
loader.exec_module(module)
yield module

View file

@ -1,5 +1,5 @@
project('gst-devtools', 'c',
version : '1.24.0',
version : '1.25.0.1',
meson_version : '>= 1.1',
default_options : [ 'warning_level=1',
'c_std=gnu99',

View file

@ -31,6 +31,7 @@
#include <gst/gst.h>
#include <gst/video/video.h>
#include <gst/audio/gstaudiometa.h>
#include <string.h>
#include <stdio.h>
#include <glib/gprintf.h>
@ -216,30 +217,55 @@ validate_flow_format_caps (const GstCaps * caps, gchar ** wanted_fields,
return caps_str;
}
/* Returns a newly-allocated string for the provided enum nickname, or NULL */
static gchar *
buffer_get_flags_string (GstBuffer * buffer)
validate_flow_get_enum_nickname (GType enum_type, gint enum_value)
{
GFlagsClass *flags_class =
G_FLAGS_CLASS (g_type_class_ref (gst_buffer_flags_get_type ()));
GstBufferFlags flags = GST_BUFFER_FLAGS (buffer);
GString *string = NULL;
gchar *nickname = NULL;
while (1) {
GFlagsValue *value = g_flags_get_first_value (flags_class, flags);
if (!value)
break;
GEnumClass *enum_class = G_ENUM_CLASS (g_type_class_ref (enum_type));
if (enum_class) {
GEnumValue *value = g_enum_get_value (enum_class, enum_value);
if (value)
nickname = g_strdup (value->value_nick);
if (string == NULL)
string = g_string_new (NULL);
else
g_string_append (string, " ");
g_string_append (string, value->value_nick);
flags &= ~value->value;
g_type_class_unref (enum_class);
}
return (string != NULL) ? g_string_free (string, FALSE) : NULL;
return nickname;
}
/* Returns a newly-allocated string with the space-separated list of nicknames of the provided flags, or NULL */
static gchar *
validate_flow_get_flags_nicknames (GType flags_type, guint flags_value)
{
GString *nicknames = NULL;
GFlagsClass *flags_class = G_FLAGS_CLASS (g_type_class_ref (flags_type));
if (flags_class) {
guint flags = flags_value;
for (;;) {
GFlagsValue *value = g_flags_get_first_value (flags_class, flags);
if (!value)
break;
if (nicknames)
g_string_append (nicknames, " ");
else
nicknames = g_string_new (NULL);
g_string_append (nicknames, value->value_nick);
flags &= ~value->value;
if (flags == 0)
break;
}
g_type_class_unref (flags_class);
}
return nicknames ? g_string_free (nicknames, FALSE) : NULL;
}
/* Returns a newly-allocated string describing the metas on this buffer, or NULL */
@ -270,6 +296,40 @@ buffer_get_meta_string (GstBuffer * buffer)
"GstVideoRegionOfInterestMeta[x=%" G_GUINT32_FORMAT ", y=%"
G_GUINT32_FORMAT ", width=%" G_GUINT32_FORMAT ", height=%"
G_GUINT32_FORMAT "]", roi->x, roi->y, roi->w, roi->h);
} else if (meta->info->api == GST_AUDIO_META_API_TYPE) {
GstAudioMeta *audio_meta = (GstAudioMeta *) meta;
gint channels = GST_AUDIO_INFO_CHANNELS (&audio_meta->info);
gchar *layout = validate_flow_get_enum_nickname (GST_TYPE_AUDIO_LAYOUT,
GST_AUDIO_INFO_LAYOUT (&audio_meta->info));
gchar *flags = validate_flow_get_flags_nicknames (GST_TYPE_AUDIO_FLAGS,
GST_AUDIO_INFO_FLAGS (&audio_meta->info));
g_string_append_printf (s,
"GstAudioMeta[format=%s, layout=%s, rate=%d, bpf=%d, flags=%s, channels=%d, position=[",
GST_AUDIO_INFO_NAME (&audio_meta->info), layout,
GST_AUDIO_INFO_RATE (&audio_meta->info),
GST_AUDIO_INFO_BPF (&audio_meta->info), flags, channels);
if (!GST_AUDIO_INFO_IS_UNPOSITIONED (&audio_meta->info)) {
for (gint i = 0; i < channels; ++i) {
if (i > 0)
g_string_append (s, ", ");
gchar *position =
validate_flow_get_enum_nickname (GST_TYPE_AUDIO_CHANNEL_POSITION,
GST_AUDIO_INFO_POSITION (&audio_meta->info, i));
g_string_append (s, position);
g_free (position);
}
}
g_string_append (s, "]]");
g_free (layout);
g_free (flags);
} else {
g_string_append (s, desc);
}
@ -358,7 +418,9 @@ validate_flow_format_buffer (GstBuffer * buffer, gint checksum_type,
buffer_parts[buffer_parts_index++] = g_strdup_printf ("dur=%s", time_str);
}
flags_str = buffer_get_flags_string (buffer);
flags_str =
validate_flow_get_flags_nicknames (GST_TYPE_BUFFER_FLAGS,
GST_BUFFER_FLAGS (buffer));
if (flags_str && use_field ("flags", logged_fields, ignored_fields)) {
buffer_parts[buffer_parts_index++] =
g_strdup_printf ("flags=%s", flags_str);

View file

@ -48,6 +48,7 @@ typedef struct _GstValidateReporterPrivate
} GstValidateReporterPrivate;
static GstValidateReporterPrivate *g_log_handler = NULL;
static GWeakRef log_reporter;
G_DEFINE_INTERFACE (GstValidateReporter, gst_validate_reporter, G_TYPE_OBJECT);
@ -284,28 +285,25 @@ gst_validate_default_log_hanlder (const gchar * log_domain,
g_log_default_handler (log_domain, log_level, message, user_data);
}
static void
gst_validate_reporter_destroyed (gpointer udata, GObject * freed_reporter)
{
g_log_set_handler ("GStreamer",
G_LOG_LEVEL_MASK, (GLogFunc) gst_validate_default_log_hanlder, NULL);
g_log_set_handler ("GLib",
G_LOG_LEVEL_MASK, (GLogFunc) gst_validate_default_log_hanlder, NULL);
g_log_set_handler ("GLib-GObject",
G_LOG_LEVEL_MASK, (GLogFunc) gst_validate_default_log_hanlder, NULL);
}
static void
gst_validate_reporter_g_log_func (const gchar * log_domain,
GLogLevelFlags log_level, const gchar * message,
GstValidateReporter * reporter)
GLogLevelFlags log_level, const gchar * message, gpointer udata)
{
GstValidateReporter *reporter = g_weak_ref_get (&log_reporter);
g_printerr ("G_LOG: %s\n", message);
if (!reporter) {
gst_validate_default_log_hanlder (log_domain, log_level, message, NULL);
return;
}
if (log_level & G_LOG_LEVEL_ERROR)
gst_validate_default_log_hanlder (log_domain, log_level, message, reporter);
else if (log_level & G_LOG_LEVEL_CRITICAL)
GST_VALIDATE_REPORT (reporter, G_LOG_CRITICAL, "%s", message);
else if (log_level & G_LOG_LEVEL_WARNING)
GST_VALIDATE_REPORT (reporter, G_LOG_WARNING, "%s", message);
gst_object_unref (reporter);
}
/**
@ -487,23 +485,21 @@ gst_validate_reporter_set_runner (GstValidateReporter * reporter,
void
gst_validate_reporter_set_handle_g_logs (GstValidateReporter * reporter)
{
g_log_set_default_handler ((GLogFunc) gst_validate_reporter_g_log_func,
reporter);
g_weak_ref_set (&log_reporter, reporter);
g_log_set_default_handler ((GLogFunc) gst_validate_reporter_g_log_func, NULL);
g_log_set_handler ("GStreamer",
G_LOG_LEVEL_MASK, (GLogFunc) gst_validate_reporter_g_log_func, reporter);
G_LOG_LEVEL_MASK, (GLogFunc) gst_validate_reporter_g_log_func, NULL);
g_log_set_handler ("GLib",
G_LOG_LEVEL_MASK, (GLogFunc) gst_validate_reporter_g_log_func, reporter);
G_LOG_LEVEL_MASK, (GLogFunc) gst_validate_reporter_g_log_func, NULL);
g_log_set_handler ("GLib-GObject",
G_LOG_LEVEL_MASK, (GLogFunc) gst_validate_reporter_g_log_func, reporter);
G_LOG_LEVEL_MASK, (GLogFunc) gst_validate_reporter_g_log_func, NULL);
g_log_handler = gst_validate_reporter_get_priv (reporter);
g_object_weak_ref (G_OBJECT (reporter), gst_validate_reporter_destroyed,
NULL);
}
/**

View file

@ -1,4 +1,4 @@
.externalNativeBuild/
assets/
gst-build-*/
gst-android-build/
src/org/freedesktop/gstreamer/GStreamer.java

View file

@ -1,4 +1,4 @@
.externalNativeBuild/
assets/
gst-build-*/
gst-android-build/
src/org/freedesktop/gstreamer/GStreamer.java

View file

@ -1,4 +1,4 @@
.externalNativeBuild/
assets/
gst-build-*/
gst-android-build/
src/org/freedesktop/gstreamer/GStreamer.java

View file

@ -1,4 +1,4 @@
.externalNativeBuild/
assets/
gst-build-*/
gst-android-build/
src/org/

View file

@ -1,4 +1,4 @@
.externalNativeBuild/
assets/
gst-build-*/
gst-android-build/
src/org/

View file

@ -22,7 +22,9 @@ dnf install gstreamer1-devel gstreamer1-plugins-base-tools gstreamer1-doc gstrea
Run the following command:
`apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio`
```
apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
```
## Building applications using GStreamer

View file

@ -1,5 +1,5 @@
project('GStreamer manuals and tutorials', 'c',
version: '1.24.0',
version: '1.25.0.1',
meson_version : '>= 1.1')
hotdoc_p = find_program('hotdoc')

View file

@ -1351,6 +1351,10 @@
"GST_AV1_WARP_MODEL_ROTZOOM",
"GST_AV1_WARP_MODEL_TRANSLATION",
"GST_BASE_API",
"GST_BASE_DEPRECATED",
"GST_BASE_DEPRECATED_FOR",
"GST_BASE_DEPRECATED_TYPE",
"GST_BASE_DEPRECATED_TYPE_FOR",
"GST_BASE_CAMERA_SRC_CAST",
"GST_BASE_CAMERA_SRC_IMAGE_PAD_NAME",
"GST_BASE_CAMERA_SRC_PREVIEW_MESSAGE_NAME",
@ -19449,23 +19453,6 @@
"GstVulkanCommandPool.pool",
"GstVulkanCommandPool.queue",
"GstVulkanCommandPoolClass.parent_class",
"GstVulkanDecoder",
"GstVulkanDecoder.codec",
"GstVulkanDecoder.dedicated_dpb",
"GstVulkanDecoder.input_buffer",
"GstVulkanDecoder.layered_buffer",
"GstVulkanDecoder.layered_dpb",
"GstVulkanDecoder.parent",
"GstVulkanDecoder.profile",
"GstVulkanDecoder.queue",
"GstVulkanDecoderClass.parent",
"GstVulkanDecoderPicture",
"GstVulkanDecoderPicture.dpb",
"GstVulkanDecoderPicture.img_view_out",
"GstVulkanDecoderPicture.img_view_ref",
"GstVulkanDecoderPicture.out",
"GstVulkanDecoderPicture.refs",
"GstVulkanDecoderPicture.slice_offs",
"GstVulkanDescriptorCache",
"GstVulkanDescriptorCache.parent",
"GstVulkanDescriptorCache.pool",
@ -44795,22 +44782,6 @@
"gst_vulkan_command_pool_lock",
"gst_vulkan_command_pool_unlock",
"gst_vulkan_create_shader",
"gst_vulkan_decoder_append_slice",
"gst_vulkan_decoder_caps",
"gst_vulkan_decoder_create_dpb_pool",
"gst_vulkan_decoder_decode",
"gst_vulkan_decoder_flush",
"gst_vulkan_decoder_is_started",
"gst_vulkan_decoder_out_format",
"gst_vulkan_decoder_picture_create_view",
"gst_vulkan_decoder_picture_init",
"gst_vulkan_decoder_picture_release",
"gst_vulkan_decoder_profile_caps",
"gst_vulkan_decoder_start",
"gst_vulkan_decoder_stop",
"gst_vulkan_decoder_update_video_session_parameters",
"gst_vulkan_decoder_update_ycbcr_sampler",
"gst_vulkan_decoder_wait",
"gst_vulkan_descriptor_cache_acquire",
"gst_vulkan_descriptor_cache_new",
"gst_vulkan_descriptor_pool_create",
@ -44965,7 +44936,6 @@
"gst_vulkan_physical_device_type_to_string",
"gst_vulkan_present_mode_to_string",
"gst_vulkan_queue_create_command_pool",
"gst_vulkan_queue_create_decoder",
"gst_vulkan_queue_flags_to_string",
"gst_vulkan_queue_get_device",
"gst_vulkan_queue_handle_context_query",

View file

@ -1,17 +1,15 @@
This is GStreamer gst-editing-services 1.24.0.
This is GStreamer gst-editing-services 1.25.0.1.
The GStreamer team is thrilled to announce a new major feature release
of your favourite cross-platform multimedia framework!
As always, this release is again packed with new features, bug fixes and
other improvements.
GStreamer 1.25 is the unstable development branch leading up to the next major
stable version which will be 1.26.
The 1.24 release series adds new features on top of the 1.22 series and is
part of the API and ABI-stable 1.x release series.
The 1.25 development series adds new features on top of the 1.24 series and is
part of the API and ABI-stable 1.x release series of the GStreamer multimedia
framework.
Full release notes can be found at:
Full release notes will one day be found at:
https://gstreamer.freedesktop.org/releases/1.24/
https://gstreamer.freedesktop.org/releases/1.26/
Binaries for Android, iOS, Mac OS X and Windows will usually be provided
shortly after the release.

View file

@ -265,7 +265,20 @@
"presence": "always"
}
},
"properties": {},
"properties": {
"reverse": {
"blurb": "Whether to playback the source reverse or not",
"conditionally-available": false,
"construct": false,
"construct-only": false,
"controllable": false,
"default": "false",
"mutable": "null",
"readable": true,
"type": "gboolean",
"writable": true
}
},
"rank": "none",
"signals": {}
},

View file

@ -129,9 +129,24 @@
#include <gst/gst.h>
GST_DEBUG_CATEGORY_STATIC (ges_asset_debug);
#undef GST_CAT_DEFAULT
#define GST_CAT_DEFAULT ges_asset_debug
#ifndef GST_DISABLE_GST_DEBUG
#define GST_CAT_DEFAULT ensure_debug_category()
static GstDebugCategory *
ensure_debug_category (void)
{
static gsize cat_gonce = 0;
if (g_once_init_enter (&cat_gonce)) {
gsize cat_done = (gsize) _gst_debug_category_new ("ges-asset",
GST_DEBUG_FG_BLUE | GST_DEBUG_BOLD, "GES Asset");
g_once_init_leave (&cat_gonce, cat_done);
}
return (GstDebugCategory *) cat_gonce;
}
#endif /* GST_DISABLE_GST_DEBUG */
enum
{
@ -538,9 +553,6 @@ ges_asset_class_init (GESAssetClass * klass)
klass->extract = ges_asset_extract_default;
klass->request_id_update = ges_asset_request_id_update_default;
klass->inform_proxy = NULL;
GST_DEBUG_CATEGORY_INIT (ges_asset_debug, "ges-asset",
GST_DEBUG_FG_BLUE | GST_DEBUG_BOLD, "GES Asset");
}
void

View file

@ -128,7 +128,10 @@ ges_audio_source_create_element (GESTrackElement * trksrc)
GPtrArray *elements;
GESSourceClass *source_class = GES_SOURCE_GET_CLASS (trksrc);
const gchar *volume_props[] = { "volume", "mute", NULL };
const gchar *audioconvert_props[] = { "mix-matrix", NULL };
const gchar *audioconvert_props[] = {
"mix-matrix", "input-channels-reorder",
"input-channels-reorder-mode", NULL
};
GESAudioSource *self = GES_AUDIO_SOURCE (trksrc);
g_assert (source_class->create_source);

View file

@ -1135,6 +1135,9 @@ ges_command_line_formatter_get_timeline_uri (GESTimeline * timeline)
_sanitize_argument (ges_uri_clip_get_uri (GES_URI_CLIP (clip)), res);
option = &options[CLIP];
} else if (GES_IS_TRANSITION_CLIP (clip)) {
g_string_append (res, " +transition");
option = &options[CLIP];
} else {
g_warning ("Unhandled clip type: %s", G_OBJECT_TYPE_NAME (clip));
continue;

View file

@ -211,7 +211,8 @@ _add_childs_child_property (GESTimelineElement * container_child,
* instance who the property comes from */
gboolean res =
ges_timeline_element_add_child_property_full (GES_TIMELINE_ELEMENT
(container), container_child, property, prop_child);
(container), container_child, property, prop_child,
GES_TIMELINE_ELEMENT_CHILD_PROP_FLAG_INHERIT);
if (!res)
GST_INFO_OBJECT (container, "Could not register the child property '%s' "
"of our child %" GES_FORMAT " for the object %" GST_PTR_FORMAT,
@ -233,10 +234,14 @@ _ges_container_add_child_properties (GESContainer * container,
for (i = 0; i < n_props; i++) {
GParamSpec *property = child_props[i];
GObject *prop_child =
ges_timeline_element_get_child_from_child_property (child, property);
if (prop_child)
_add_childs_child_property (child, prop_child, property, container);
GList *tmp, *children =
ges_timeline_element_get_children_from_child_property (child, property);
for (tmp = children; tmp; tmp = tmp->next)
ges_timeline_element_add_child_property_full (GES_TIMELINE_ELEMENT
(container), child, property, tmp->data,
GES_TIMELINE_ELEMENT_CHILD_PROP_FLAG_INHERIT);
g_list_free (children);
g_param_spec_unref (property);
}
@ -247,37 +252,8 @@ static void
_remove_childs_child_property (GESTimelineElement * container_child,
GObject * prop_child, GParamSpec * property, GESContainer * container)
{
/* NOTE: some children may share the same GParamSpec. Currently, only
* the first such child added will have its children properties
* successfully registered for the container (even though the GObject
* child who the properties belong to will be a different instance). As
* such, we only want to remove the child property if it corresponds to
* the same instance that the parent container has.
* E.g. if we add child1 and child2, that have the same (or some
* overlapping) children properties. And child1 is added before child2,
* then child2's overlapping children properties would not be registered.
* If we remove child2, we do *not* want to removed the child properties
* for child1 because they belong to a GObject instance that we still
* have in our control.
* If we remove child1, we *do* want to remove the child properties for
* child1, even though child2 may overlap with some of them, because we
* are loosing the specific GObject instance that it belongs to!
* We could try and register the ones that match for the other children.
* However, it is probably simpler to change
* ges_timeline_element_add_child_property_full to accept the same
* GParamSpec, for different instances.
*/
GESTimelineElement *element = GES_TIMELINE_ELEMENT (container);
GObject *our_prop_child =
ges_timeline_element_get_child_from_child_property (element, property);
if (our_prop_child == prop_child)
ges_timeline_element_remove_child_property (element, property);
else
GST_INFO_OBJECT (container, "Not removing child property '%s' for child"
" %" GES_FORMAT " because it derives from the object %" GST_PTR_FORMAT
"(%p) rather than the object %" GST_PTR_FORMAT "(%p)", property->name,
GES_ARGS (container_child), prop_child, prop_child, our_prop_child,
our_prop_child);
ges_timeline_element_remove_child_property_full (GES_TIMELINE_ELEMENT
(container), property, prop_child);
}
static void
@ -295,10 +271,13 @@ _ges_container_remove_child_properties (GESContainer * container,
for (i = 0; i < n_props; i++) {
GParamSpec *property = child_props[i];
GObject *prop_child =
ges_timeline_element_get_child_from_child_property (child, property);
if (prop_child)
_remove_childs_child_property (child, prop_child, property, container);
GList *tmp, *children =
ges_timeline_element_get_children_from_child_property (child, property);
for (tmp = children; tmp; tmp = tmp->next)
ges_timeline_element_remove_child_property_full (GES_TIMELINE_ELEMENT
(container), property, tmp->data);
g_list_free (children);
g_param_spec_unref (property);
}

View file

@ -66,7 +66,11 @@ struct _GESFrameCompositionMeta {
gdouble height;
gdouble width;
guint zorder;
#ifdef __cplusplus
gint _operator;
#else
gint operator;
#endif
};
GES_API

View file

@ -551,18 +551,32 @@ typedef enum
} GESTimelineElementFlags;
G_GNUC_INTERNAL GESTimelineElement * ges_timeline_element_peak_toplevel (GESTimelineElement * self);
typedef enum
{
GES_TIMELINE_ELEMENT_CHILD_PROP_FLAG_NONE = (1 << 0),
/* Inherit flags from the owner child property registration */
GES_TIMELINE_ELEMENT_CHILD_PROP_FLAG_INHERIT = (1 << 1),
/* When setting child property, ensure to set value on every registered instances */
GES_TIMELINE_ELEMENT_CHILD_PROP_FLAG_SET_ON_ALL_INSTANCES = (1 << 2),
} GESTimelineElementChildPropertyFlags;
G_GNUC_INTERNAL GESTimelineElement * ges_timeline_element_get_copied_from (GESTimelineElement *self);
G_GNUC_INTERNAL GESTimelineElementFlags ges_timeline_element_flags (GESTimelineElement *self);
G_GNUC_INTERNAL void ges_timeline_element_set_flags (GESTimelineElement *self, GESTimelineElementFlags flags);
G_GNUC_INTERNAL gboolean ges_timeline_element_add_child_property_full (GESTimelineElement *self,
GESTimelineElement *owner,
GParamSpec *pspec,
GObject *child);
GObject *child,
GESTimelineElementChildPropertyFlags flags);
G_GNUC_INTERNAL GObject * ges_timeline_element_get_child_from_child_property (GESTimelineElement * self,
GParamSpec * pspec);
G_GNUC_INTERNAL GList * ges_timeline_element_get_children_from_child_property (GESTimelineElement * self,
GParamSpec * pspec);
G_GNUC_INTERNAL GParamSpec ** ges_timeline_element_get_children_properties (GESTimelineElement * self,
guint * n_properties);
G_GNUC_INTERNAL gboolean ges_timeline_element_remove_child_property_full (GESTimelineElement * self,
GParamSpec * pspec,
GObject *child);
#define ELEMENT_FLAGS(obj) (ges_timeline_element_flags (GES_TIMELINE_ELEMENT(obj)))
#define ELEMENT_SET_FLAG(obj,flag) (ges_timeline_element_set_flags(GES_TIMELINE_ELEMENT(obj), (ELEMENT_FLAGS(obj) | (flag))))

View file

@ -1270,6 +1270,8 @@ ges_pipeline_set_mode (GESPipeline * pipeline, GESPipelineFlags mode)
return FALSE;
}
g_object_set (pipeline->priv->encodebin, "avoid-reencoding",
!(!(mode & GES_PIPELINE_MODE_SMART_RENDER)), NULL);
if (!gst_bin_add (GST_BIN_CAST (pipeline), pipeline->priv->encodebin)) {
GST_ERROR_OBJECT (pipeline, "Couldn't add encodebin");
return FALSE;
@ -1294,8 +1296,6 @@ ges_pipeline_set_mode (GESPipeline * pipeline, GESPipelineFlags mode)
GST_INFO_OBJECT (pipeline,
"Using an muxing sink, not adding any sink element");
}
g_object_set (pipeline->priv->encodebin, "avoid-reencoding",
!(!(mode & GES_PIPELINE_MODE_SMART_RENDER)), NULL);
}
if (pipeline->priv->timeline) {

View file

@ -266,6 +266,36 @@ ges_source_get_rendering_smartly (GESSource * source)
return source->priv->is_rendering_smartly;
}
static GstElement *
ges_source_create_nle_object (GESTrackElement * self)
{
GParamSpec *pspec;
GstElement *nleobject;
nleobject =
GES_TRACK_ELEMENT_CLASS (ges_source_parent_class)->create_gnl_object
(self);
if (!nleobject)
return NULL;
pspec =
g_object_class_find_property (G_OBJECT_GET_CLASS (nleobject), "reverse");
g_assert (pspec);
if (!ges_timeline_element_add_child_property_full (GES_TIMELINE_ELEMENT
(self), NULL, pspec, G_OBJECT (nleobject),
GES_TIMELINE_ELEMENT_CHILD_PROP_FLAG_SET_ON_ALL_INSTANCES))
GST_ERROR_OBJECT (self,
"Could not register the child property 'reverse' for %" GST_PTR_FORMAT,
nleobject);
g_param_spec_unref (pspec);
return nleobject;
}
static void
ges_source_dispose (GObject * object)
{
@ -290,6 +320,7 @@ ges_source_class_init (GESSourceClass * klass)
track_class->nleobject_factorytype = "nlesource";
track_class->create_element = NULL;
track_class->create_gnl_object = ges_source_create_nle_object;
object_class->dispose = ges_source_dispose;
GES_TRACK_ELEMENT_CLASS_DEFAULT_HAS_INTERNAL_SOURCE (klass) = TRUE;

View file

@ -301,7 +301,7 @@ static void
ges_test_clip_class_init (GESTestClipClass * klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GESClipClass *timobj_class = GES_CLIP_CLASS (klass);
GESClipClass *clip_class = GES_CLIP_CLASS (klass);
object_class->get_property = ges_test_clip_get_property;
object_class->set_property = ges_test_clip_set_property;
@ -347,7 +347,7 @@ ges_test_clip_class_init (GESTestClipClass * klass)
g_param_spec_boolean ("mute", "Mute", "Mute audio track",
FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
timobj_class->create_track_element = ges_test_clip_create_track_element;
clip_class->create_track_element = ges_test_clip_create_track_element;
}
static void
@ -532,7 +532,7 @@ ges_test_clip_create_track_element (GESClip * clip, GESTrackType type)
gst_structure_from_string (ges_asset_get_id (asset), NULL);
if (structure) {
id = g_strdup (gst_structure_get_name (structure));
id = gst_structure_to_string (structure);
gst_structure_free (structure);
}
}

View file

@ -165,19 +165,18 @@ static GParamSpec *properties[PROP_LAST] = { NULL, };
typedef struct
{
GObject *child;
GParamSpec *pspec;
GESTimelineElement *owner;
gulong handler_id;
GESTimelineElement *self;
} ChildPropHandler;
GESTimelineElementChildPropertyFlags flags;
} ChildPropSpec;
struct _GESTimelineElementPrivate
{
gboolean serialize;
/* We keep a link between properties name and elements internally
* The hashtable should look like
* {GParamaSpec ---> child}*/
GHashTable *children_props;
GArray *children_props;
GESTimelineElement *copied_from;
@ -210,6 +209,31 @@ _set_child_property (GESTimelineElement * self G_GNUC_UNUSED, GObject * child,
g_object_set_property (child, pspec->name, value);
}
static ChildPropSpec *
_find_child_prop (GESTimelineElement * self,
GParamSpec * pspec, GObject * child, gint * index)
{
gint i;
for (i = 0; i < self->priv->children_props->len; i++) {
ChildPropSpec *childprop =
&g_array_index (self->priv->children_props, ChildPropSpec, i);
if (child && childprop->child != child) {
continue;
}
if (ges_pspec_hash (childprop->pspec) == ges_pspec_hash (pspec)) {
if (index)
*index = i;
return childprop;
}
}
return NULL;
}
static gboolean
_set_child_property_full (GESTimelineElement * self, GObject * child,
GParamSpec * pspec, const GValue * value, GError ** error)
@ -223,10 +247,9 @@ static gboolean
_lookup_child (GESTimelineElement * self, const gchar * prop_name,
GObject ** child, GParamSpec ** pspec)
{
GHashTableIter iter;
gpointer key, value;
gchar **names, *name, *classename;
gboolean res;
gint i;
classename = NULL;
res = FALSE;
@ -238,22 +261,22 @@ _lookup_child (GESTimelineElement * self, const gchar * prop_name,
} else
name = names[0];
g_hash_table_iter_init (&iter, self->priv->children_props);
while (g_hash_table_iter_next (&iter, &key, &value)) {
if (g_strcmp0 (G_PARAM_SPEC (key)->name, name) == 0) {
ChildPropHandler *handler = (ChildPropHandler *) value;
if (classename == NULL ||
g_strcmp0 (G_OBJECT_TYPE_NAME (G_OBJECT (handler->child)),
classename) == 0 ||
g_strcmp0 (g_type_name (G_PARAM_SPEC (key)->owner_type),
for (i = 0; i < self->priv->children_props->len; i++) {
ChildPropSpec *childprop =
&g_array_index (self->priv->children_props, ChildPropSpec, i);
if (g_strcmp0 (childprop->pspec->name, name) == 0) {
if (classename == NULL
|| g_strcmp0 (G_OBJECT_TYPE_NAME (G_OBJECT (childprop->child)),
classename) == 0
|| g_strcmp0 (g_type_name (childprop->pspec->owner_type),
classename) == 0) {
GST_DEBUG_OBJECT (self, "The %s property from %s has been found", name,
classename);
if (child)
*child = gst_object_ref (handler->child);
*child = gst_object_ref (childprop->child);
if (pspec)
*pspec = g_param_spec_ref (key);
*pspec = g_param_spec_ref (childprop->pspec);
res = TRUE;
break;
}
@ -268,20 +291,17 @@ GParamSpec **
ges_timeline_element_get_children_properties (GESTimelineElement * self,
guint * n_properties)
{
GParamSpec **pspec, *spec;
GHashTableIter iter;
gpointer key, value;
GParamSpec **pspec;
guint i = 0;
*n_properties = g_hash_table_size (self->priv->children_props);
*n_properties = self->priv->children_props->len;
pspec = g_new (GParamSpec *, *n_properties);
g_hash_table_iter_init (&iter, self->priv->children_props);
while (g_hash_table_iter_next (&iter, &key, &value)) {
spec = G_PARAM_SPEC (key);
pspec[i] = g_param_spec_ref (spec);
i++;
for (i = 0; i < *n_properties; i++) {
pspec[i] =
g_param_spec_ref (g_array_index (self->priv->children_props,
ChildPropSpec, i).pspec);
}
return pspec;
@ -370,10 +390,7 @@ ges_timeline_element_dispose (GObject * object)
{
GESTimelineElement *self = GES_TIMELINE_ELEMENT (object);
if (self->priv->children_props) {
g_hash_table_unref (self->priv->children_props);
self->priv->children_props = NULL;
}
g_clear_pointer (&self->priv->children_props, g_array_unref);
g_clear_object (&self->priv->copied_from);
@ -391,17 +408,16 @@ ges_timeline_element_finalize (GObject * self)
}
static void
_child_prop_handler_free (ChildPropHandler * handler)
_child_prop_spec_free (ChildPropSpec * childprop)
{
g_object_freeze_notify (handler->child);
if (handler->handler_id)
g_signal_handler_disconnect (handler->child, handler->handler_id);
g_object_thaw_notify (handler->child);
g_object_freeze_notify (childprop->child);
if (childprop->handler_id)
g_signal_handler_disconnect (childprop->child, childprop->handler_id);
g_object_thaw_notify (childprop->child);
if (handler->child != (GObject *) handler->self &&
handler->child != (GObject *) handler->owner)
gst_object_unref (handler->child);
g_free (handler);
if (childprop->child != (GObject *) childprop->self &&
childprop->child != (GObject *) childprop->owner)
gst_object_unref (childprop->child);
}
static gboolean
@ -420,10 +436,9 @@ ges_timeline_element_init (GESTimelineElement * self)
self->priv->serialize = TRUE;
self->priv->children_props =
g_hash_table_new_full ((GHashFunc) ges_pspec_hash, ges_pspec_equal,
(GDestroyNotify) g_param_spec_unref,
(GDestroyNotify) _child_prop_handler_free);
self->priv->children_props = g_array_new (TRUE, TRUE, sizeof (ChildPropSpec));
g_array_set_clear_func (self->priv->children_props,
(GDestroyNotify) _child_prop_spec_free);
}
static void
@ -792,52 +807,92 @@ child_prop_changed_cb (GObject * child, GParamSpec * arg,
}
static gboolean
set_child_property_by_pspec (GESTimelineElement * self,
GParamSpec * pspec, const GValue * value, GError ** error)
set_child_property (GESTimelineElement * self, ChildPropSpec * childprop,
const GValue * value, GError ** error)
{
GESTimelineElementClass *klass;
GESTimelineElement *setter = self;
ChildPropHandler *handler =
g_hash_table_lookup (self->priv->children_props, pspec);
GESTimelineElementClass *klass;
if (!handler) {
GST_ERROR_OBJECT (self, "The %s property doesn't exist", pspec->name);
return FALSE;
}
if (handler->owner) {
klass = GES_TIMELINE_ELEMENT_GET_CLASS (handler->owner);
setter = handler->owner;
if (childprop->owner) {
klass = GES_TIMELINE_ELEMENT_GET_CLASS (childprop->owner);
setter = childprop->owner;
} else {
klass = GES_TIMELINE_ELEMENT_GET_CLASS (self);
}
if (klass->set_child_property_full)
return klass->set_child_property_full (setter, handler->child, pspec,
value, error);
return klass->set_child_property_full (setter, childprop->child,
childprop->pspec, value, error);
g_assert (klass->set_child_property);
klass->set_child_property (setter, handler->child, pspec, (GValue *) value);
klass->set_child_property (setter, childprop->child, childprop->pspec,
(GValue *) value);
return TRUE;
}
static gboolean
set_child_property_by_pspec (GESTimelineElement * self,
GParamSpec * pspec, const GValue * value, GError ** error)
{
gint i;
ChildPropSpec *childprop;
gboolean found = FALSE, res = TRUE;
for (i = 0; i < self->priv->children_props->len; i++) {
childprop = &g_array_index (self->priv->children_props, ChildPropSpec, i);
if (ges_pspec_hash (childprop->pspec) != ges_pspec_hash (pspec))
continue;
found = TRUE;
res &= set_child_property (self, childprop, value, error);
if (!(childprop->flags &
GES_TIMELINE_ELEMENT_CHILD_PROP_FLAG_SET_ON_ALL_INSTANCES))
break;
}
if (!found) {
GST_ERROR_OBJECT (self, "The %s property doesn't exist", pspec->name);
return FALSE;
}
GST_DEBUG_OBJECT (self, "Set child property %s", pspec->name);
return res;
}
gboolean
ges_timeline_element_add_child_property_full (GESTimelineElement * self,
GESTimelineElement * owner, GParamSpec * pspec, GObject * child)
GESTimelineElement * owner, GParamSpec * pspec, GObject * child,
GESTimelineElementChildPropertyFlags flags)
{
gchar *signame;
ChildPropHandler *handler;
ChildPropSpec childprop, *prev;
/* FIXME: allow the same pspec, provided the child is different. This
* is important for containers that may have duplicate children
* If this is changed, _remove_childs_child_property in ges-container.c
* should be changed to reflect this.
* We could hack around this by copying the pspec into a new instance
* of GParamSpec, but there is no such GLib method, and it would break
* the usage of get_..._from_pspec and set_..._from_pspec */
if (g_hash_table_contains (self->priv->children_props, pspec)) {
if (_find_child_prop (self, pspec, child, NULL)) {
GST_INFO_OBJECT (self, "Child property already exists: %s", pspec->name);
return FALSE;
}
prev = _find_child_prop (self, pspec, NULL, NULL);
if (flags & GES_TIMELINE_ELEMENT_CHILD_PROP_FLAG_INHERIT) {
if (!owner) {
g_warning ("Trying to inherit child property flags without an owner");
} else {
ChildPropSpec *owner_prop = _find_child_prop (owner, pspec, NULL, NULL);
g_return_val_if_fail (owner_prop, FALSE);
flags |= owner_prop->flags;
}
}
if (prev && prev->flags != flags) {
GST_ERROR_OBJECT (self,
"Trying to add child property with flags %d but the same"
" property had flags %d - this is not supported", flags, prev->flags);
return FALSE;
}
@ -845,18 +900,18 @@ ges_timeline_element_add_child_property_full (GESTimelineElement * self,
child, pspec->name);
signame = g_strconcat ("notify::", pspec->name, NULL);
handler = (ChildPropHandler *) g_new0 (ChildPropHandler, 1);
handler->self = self;
childprop.self = self;
if (child == G_OBJECT (self) || child == G_OBJECT (owner))
handler->child = child;
childprop.child = child;
else
handler->child = gst_object_ref (child);
handler->owner = owner;
handler->handler_id =
childprop.child = gst_object_ref (child);
childprop.pspec = g_param_spec_ref (pspec);
childprop.owner = owner;
childprop.flags = flags;
childprop.handler_id =
g_signal_connect (child, signame, G_CALLBACK (child_prop_changed_cb),
self);
g_hash_table_insert (self->priv->children_props, g_param_spec_ref (pspec),
handler);
g_array_append_val (self->priv->children_props, childprop);
g_signal_emit (self, ges_timeline_element_signals[CHILD_PROPERTY_ADDED], 0,
child, pspec);
@ -865,15 +920,22 @@ ges_timeline_element_add_child_property_full (GESTimelineElement * self,
return TRUE;
}
GObject *
ges_timeline_element_get_child_from_child_property (GESTimelineElement * self,
GParamSpec * pspec)
GList *
ges_timeline_element_get_children_from_child_property (GESTimelineElement *
self, GParamSpec * pspec)
{
ChildPropHandler *handler =
g_hash_table_lookup (self->priv->children_props, pspec);
if (handler)
return handler->child;
return NULL;
gint i;
GList *res = NULL;
for (i = 0; i < self->priv->children_props->len; i++) {
ChildPropSpec *childprop =
&g_array_index (self->priv->children_props, ChildPropSpec, i);
if (ges_pspec_hash (childprop->pspec) == ges_pspec_hash (pspec))
res = g_list_append (res, childprop->child);
}
return res;
}
@ -1778,7 +1840,7 @@ ges_timeline_element_add_child_property (GESTimelineElement * self,
g_return_val_if_fail (G_IS_OBJECT (child), FALSE);
return ges_timeline_element_add_child_property_full (self, NULL, pspec,
child);
child, 0);
}
/**
@ -1795,16 +1857,16 @@ void
ges_timeline_element_get_child_property_by_pspec (GESTimelineElement * self,
GParamSpec * pspec, GValue * value)
{
ChildPropHandler *handler;
ChildPropSpec *childprop;
g_return_if_fail (GES_IS_TIMELINE_ELEMENT (self));
g_return_if_fail (G_IS_PARAM_SPEC (pspec));
handler = g_hash_table_lookup (self->priv->children_props, pspec);
if (!handler)
childprop = _find_child_prop (self, pspec, NULL, NULL);
if (!childprop)
goto not_found;
g_object_get_property (G_OBJECT (handler->child), pspec->name, value);
g_object_get_property (G_OBJECT (childprop->child), pspec->name, value);
return;
@ -2232,28 +2294,37 @@ gboolean
ges_timeline_element_remove_child_property (GESTimelineElement * self,
GParamSpec * pspec)
{
gpointer key, value;
GParamSpec *found_pspec;
ChildPropHandler *handler;
return ges_timeline_element_remove_child_property_full (self, pspec, NULL);
}
gboolean
ges_timeline_element_remove_child_property_full (GESTimelineElement * self,
GParamSpec * pspec, GObject * child)
{
gint index;
ChildPropSpec *childprop, handler_copy;
g_return_val_if_fail (GES_IS_TIMELINE_ELEMENT (self), FALSE);
g_return_val_if_fail (G_IS_PARAM_SPEC (pspec), FALSE);
g_return_val_if_fail ((!child || G_IS_OBJECT (child)), FALSE);
if (!g_hash_table_lookup_extended (self->priv->children_props, pspec,
&key, &value)) {
if (!(childprop = _find_child_prop (self, pspec, child, &index))) {
GST_WARNING_OBJECT (self, "No child property with pspec %p (%s) found",
pspec, pspec->name);
return FALSE;
}
g_hash_table_steal (self->priv->children_props, pspec);
found_pspec = G_PARAM_SPEC (key);
handler = (ChildPropHandler *) value;
GST_DEBUG_OBJECT (child, "Removing %s", pspec->name);
handler_copy = *childprop;
g_array_set_clear_func (self->priv->children_props, NULL);
g_array_remove_index (self->priv->children_props, index);
g_array_set_clear_func (self->priv->children_props,
(GDestroyNotify) _child_prop_spec_free);
g_signal_emit (self, ges_timeline_element_signals[CHILD_PROPERTY_REMOVED], 0,
handler->child, found_pspec);
handler_copy.child, handler_copy.pspec);
g_param_spec_unref (found_pspec);
_child_prop_handler_free (handler);
_child_prop_spec_free (&handler_copy);
return TRUE;
}

View file

@ -2484,7 +2484,7 @@ create_transitions (GNode * node,
if (!ges_layer_get_auto_transition (layer))
return FALSE;
GST_LOG (node->data, "Checking for overlaps");
GST_LOG_OBJECT (node->data, "Checking for overlaps");
data.root = g_node_get_root (node);
check_all_overlaps_with_element (node, &data);

View file

@ -279,9 +279,9 @@ ges_track_element_dispose (GObject * object)
static void
ges_track_element_set_asset (GESExtractable * extractable, GESAsset * asset)
{
gchar *tmp;
GESTrackElementClass *class;
GstElement *nleobject;
gchar *tmp;
GESTrackElement *object = GES_TRACK_ELEMENT (extractable);
if (ges_track_element_get_track_type (object) == GES_TRACK_TYPE_UNKNOWN) {
@ -300,8 +300,7 @@ ges_track_element_set_asset (GESExtractable * extractable, GESAsset * asset)
return;
}
tmp = g_strdup_printf ("%s:%s", G_OBJECT_TYPE_NAME (object),
GST_OBJECT_NAME (nleobject));
tmp = g_strdup_printf ("nleges%s", GES_TIMELINE_ELEMENT_NAME (object));
gst_object_set_name (GST_OBJECT (nleobject), tmp);
g_free (tmp);

View file

@ -833,6 +833,48 @@ beach:
GST_END_VALIDATE_ACTION;
GES_START_VALIDATE_ACTION (_group)
{
gint i;
GESContainer *group;
GList *containers = NULL;
gchar **container_names;
const gchar *container_name =
gst_structure_get_string (action->structure, "container-name");
REPORT_UNLESS ((container_names =
gst_validate_utils_get_strv (action->structure, "containers")), beach,
"Could not get container names from structure %" GST_PTR_FORMAT,
action->structure);
for (i = 0; container_names[i]; i++) {
GESContainer *container =
(GESContainer *) ges_timeline_get_element (timeline,
container_names[i]);
REPORT_UNLESS (GES_IS_CONTAINER (container), beach, "Could not find %s",
container_names[i]);
containers = g_list_prepend (containers, container);
}
REPORT_UNLESS ((group = ges_container_group (containers)), beach,
"Grouping failed");
if (container_name) {
REPORT_UNLESS (ges_timeline_element_set_name (GES_TIMELINE_ELEMENT (group),
container_name), beach, "Could not set element name %s",
container_name);
}
beach:
g_clear_pointer (&container_names, g_strfreev);
g_list_free_full (containers, gst_object_unref);
}
GST_END_VALIDATE_ACTION;
GES_START_VALIDATE_ACTION (_ungroup)
{
GESContainer *container;
@ -1677,6 +1719,29 @@ ges_validate_register_action_types (void)
{NULL}
}, "Remove a child from @container-name.", FALSE);
gst_validate_register_action_type ("group", "ges", _group,
(GstValidateActionParameter []) {
{
.name = "container-name",
.description = "The name of the resulting group",
.types = "string",
.mandatory = FALSE,
},
{
.name = "containers",
.description = "Array of GESContainer names to group",
.types = "{ container-name, }",
.mandatory = TRUE,
},
{
.name = "project-uri",
.description = "The project URI with the serialized timeline to execute the action on",
.types = "string",
.mandatory = FALSE,
},
{NULL}
}, "Group containers together.", FALSE);
gst_validate_register_action_type ("ungroup-container", "ges", _ungroup,
(GstValidateActionParameter []) {
{

View file

@ -1,5 +1,5 @@
project('gst-editing-services', 'c',
version : '1.24.0',
version : '1.25.0.1',
meson_version : '>= 1.1',
default_options : [ 'warning_level=1',
'buildtype=debugoptimized' ])

View file

@ -72,6 +72,12 @@ nle_object_translate_incoming_seek (NleObject * object, GstEvent * event)
if (G_UNLIKELY (format != GST_FORMAT_TIME))
goto invalid_format;
if (NLE_IS_SOURCE (object) && NLE_SOURCE (object)->reverse) {
GST_DEBUG_OBJECT (object, "Reverse playback! %d", seqnum);
rate = -rate;
}
/* convert cur */
ncurtype = GST_SEEK_TYPE_SET;
if (G_LIKELY ((curtype == GST_SEEK_TYPE_SET)

View file

@ -38,12 +38,20 @@ GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_ALWAYS,
GST_STATIC_CAPS_ANY);
enum
{
PROP_0,
PROP_REVERSE,
PROP_LAST,
};
GST_DEBUG_CATEGORY_STATIC (nlesource);
#define GST_CAT_DEFAULT nlesource
#define _do_init \
GST_DEBUG_CATEGORY_INIT (nlesource, "nlesource", GST_DEBUG_FG_BLUE | GST_DEBUG_BOLD, "GNonLin Source Element");
#define nle_source_parent_class parent_class
struct _NleSourcePrivate
{
gboolean dispose_has_run;
@ -62,6 +70,10 @@ struct _NleSourcePrivate
GstEvent *seek_event;
guint32 flush_seqnum;
gulong probeid;
/* Identity automatically created to handle reverse playback */
GstElement *identity;
};
G_DEFINE_TYPE_WITH_CODE (NleSource, nle_source, NLE_TYPE_OBJECT,
@ -80,6 +92,57 @@ nle_source_control_element_func (NleSource * source, GstElement * element);
static GstStateChangeReturn nle_source_change_state (GstElement * element,
GstStateChange transition);
static gboolean
nle_source_commit (NleObject * object, gboolean recurse)
{
NleSource *self = NLE_SOURCE (object);
if (!NLE_OBJECT_CLASS (parent_class)->commit (object, recurse))
return FALSE;
self->reverse = self->pending_reverse;
g_object_set (self->priv->identity, "single-segment", self->reverse, NULL);
return TRUE;
}
static void
nle_source_get_property (GObject * object, guint property_id,
GValue * value, GParamSpec * pspec)
{
NleSource *self = NLE_SOURCE (object);
GST_OBJECT_LOCK (self);
switch (property_id) {
case PROP_REVERSE:
g_value_set_boolean (value, self->pending_reverse);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
GST_OBJECT_UNLOCK (self);
}
static void
nle_source_set_property (GObject * object, guint property_id,
const GValue * value, GParamSpec * pspec)
{
NleSource *self = NLE_SOURCE (object);
GST_OBJECT_LOCK (self);
switch (property_id) {
case PROP_REVERSE:
self->pending_reverse = g_value_get_boolean (value);
if (self->pending_reverse != self->reverse)
nle_object_set_commit_needed ((NleObject *) self);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
GST_OBJECT_UNLOCK (self);
}
static void
nle_source_class_init (NleSourceClass * klass)
{
@ -93,6 +156,20 @@ nle_source_class_init (NleSourceClass * klass)
gstbin_class = (GstBinClass *) klass;
nleobject_class = (NleObjectClass *) klass;
gobject_class->get_property = nle_source_get_property;
gobject_class->set_property = nle_source_set_property;
/**
* NleSource:reverse:
* @reverse: Whether to playback the source reverse or not
*
* Since: 1.26
*/
g_object_class_install_property (gobject_class, PROP_REVERSE,
g_param_spec_boolean ("reverse", "Reverse",
"Whether to playback the source reverse or not", FALSE,
G_PARAM_READWRITE));
gst_element_class_set_static_metadata (gstelement_class, "GNonLin Source",
"Filter/Editor",
"Manages source elements",
@ -106,6 +183,7 @@ nle_source_class_init (NleSourceClass * klass)
klass->control_element = GST_DEBUG_FUNCPTR (nle_source_control_element_func);
nleobject_class->prepare = GST_DEBUG_FUNCPTR (nle_source_prepare);
nleobject_class->commit = GST_DEBUG_FUNCPTR (nle_source_commit);
gstbin_class->add_element = GST_DEBUG_FUNCPTR (nle_source_add_element);
gstbin_class->remove_element = GST_DEBUG_FUNCPTR (nle_source_remove_element);
@ -139,10 +217,19 @@ srcpad_probe_cb (GstPad * pad, GstPadProbeInfo * info, NleSource * source)
static void
nle_source_init (NleSource * source)
{
NleSourcePrivate *priv;
NleObject *nleobject = NLE_OBJECT (source);
GST_OBJECT_FLAG_SET (source, NLE_OBJECT_SOURCE);
source->element = NULL;
source->priv = nle_source_get_instance_private (source);
g_mutex_init (&source->priv->seek_lock);
priv = source->priv = nle_source_get_instance_private (source);
priv->identity = gst_element_factory_make ("identity", NULL);
gst_bin_add (GST_BIN (source), priv->identity);
nle_object_ghost_pad_set_target (nleobject, nleobject->srcpad,
priv->identity->srcpads->data);
g_mutex_init (&priv->seek_lock);
gst_pad_add_probe (NLE_OBJECT_SRC (source),
GST_PAD_PROBE_TYPE_EVENT_UPSTREAM, (GstPadProbeCallback) srcpad_probe_cb,
@ -158,6 +245,8 @@ nle_source_dispose (GObject * object)
NleObject *nleobject = (NleObject *) object;
NleSource *source = (NleSource *) object;
NleSourcePrivate *priv = source->priv;
GstElement *tmpidentity;
GST_DEBUG_OBJECT (object, "dispose");
@ -173,26 +262,18 @@ nle_source_dispose (GObject * object)
}
GST_OBJECT_UNLOCK (object);
if (source->element) {
gst_object_unref (source->element);
source->element = NULL;
}
gst_clear_object (&source->element);
tmpidentity = priv->identity;
priv->identity = NULL;
gst_bin_remove (GST_BIN (source), tmpidentity);
priv->dispose_has_run = TRUE;
if (priv->ghostedpad)
nle_object_ghost_pad_set_target (nleobject, nleobject->srcpad, NULL);
nle_object_ghost_pad_set_target (nleobject, nleobject->srcpad, NULL);
if (priv->staticpad) {
gst_object_unref (priv->staticpad);
priv->staticpad = NULL;
}
gst_clear_object (&priv->staticpad);
g_mutex_lock (&priv->seek_lock);
if (priv->seek_event) {
gst_event_unref (priv->seek_event);
priv->seek_event = NULL;
}
gst_clear_event (&priv->seek_event);
g_mutex_unlock (&priv->seek_lock);
G_OBJECT_CLASS (parent_class)->dispose (object);
@ -225,12 +306,14 @@ element_pad_added_cb (GstElement * element G_GNUC_UNUSED, GstPad * pad,
}
gst_caps_unref (srccaps);
priv->ghostedpad = pad;
GST_DEBUG_OBJECT (nleobject, "SET target %" GST_PTR_FORMAT, pad);
nle_object_ghost_pad_set_target (nleobject, nleobject->srcpad, pad);
GST_DEBUG_OBJECT (source, "Using pad pad %s:%s as a target now!",
GST_DEBUG_PAD_NAME (pad));
if (gst_pad_link (pad, priv->identity->sinkpads->data) != GST_PAD_LINK_OK) {
GST_ERROR_OBJECT (source, "Could not link pads: %" GST_PTR_FORMAT
" and %" GST_PTR_FORMAT, pad, priv->identity->sinkpads->data);
} else {
GST_DEBUG_OBJECT (source, "Linked pads: %" GST_PTR_FORMAT
" and %" GST_PTR_FORMAT, pad, priv->identity->sinkpads->data);
priv->ghostedpad = pad;
}
}
static void
@ -238,7 +321,6 @@ element_pad_removed_cb (GstElement * element G_GNUC_UNUSED, GstPad * pad,
NleSource * source)
{
NleSourcePrivate *priv = source->priv;
NleObject *nleobject = (NleObject *) source;
GST_DEBUG_OBJECT (source, "pad %s:%s (controlled pad %s:%s)",
GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (priv->ghostedpad));
@ -249,9 +331,9 @@ element_pad_removed_cb (GstElement * element G_GNUC_UNUSED, GstPad * pad,
GST_DEBUG_OBJECT (source, "Clearing up ghostpad");
if (nleobject->srcpad)
nle_object_ghost_pad_set_target (NLE_OBJECT (source), nleobject->srcpad,
NULL);
if (priv->identity && !gst_pad_unlink (pad, priv->identity->sinkpads->data))
GST_ERROR_OBJECT (source, "Could not unlink pads: %" GST_PTR_FORMAT
" and %" GST_PTR_FORMAT, pad, priv->identity->sinkpads->data);
priv->ghostedpad = NULL;
} else {
GST_DEBUG_OBJECT (source, "The removed pad is NOT our controlled pad");
@ -343,6 +425,9 @@ nle_source_control_element_func (NleSource * source, GstElement * element)
NleSourcePrivate *priv = source->priv;
GstPad *pad = NULL;
if (element == priv->identity)
return TRUE;
g_return_val_if_fail (source->element == NULL, FALSE);
GST_DEBUG_OBJECT (source, "element: %" GST_PTR_FORMAT ", source->element:%"
@ -353,8 +438,13 @@ nle_source_control_element_func (NleSource * source, GstElement * element)
if (get_valid_src_pad (source, source->element, &pad)) {
priv->staticpad = pad;
nle_object_ghost_pad_set_target (NLE_OBJECT (source),
NLE_OBJECT_SRC (source), pad);
if (gst_pad_link (pad, priv->identity->sinkpads->data) != GST_PAD_LINK_OK) {
GST_ERROR_OBJECT (source, "Could not link pads: %" GST_PTR_FORMAT
" and %" GST_PTR_FORMAT, pad, priv->identity->sinkpads->data);
} else {
GST_DEBUG_OBJECT (source, "Linked pads: %" GST_PTR_FORMAT
" and %" GST_PTR_FORMAT, pad, priv->identity->sinkpads->data);
}
priv->dynamicpads = FALSE;
} else {
priv->dynamicpads = has_dynamic_srcpads (element);
@ -544,7 +634,8 @@ nle_source_prepare (NleObject * object)
stop = object->inpoint + object->duration;
g_mutex_lock (&source->priv->seek_lock);
source->priv->seek_event = gst_event_new_seek (1.0, GST_FORMAT_TIME,
source->priv->seek_event = gst_event_new_seek (source->reverse ? -1.0 : 1.0,
GST_FORMAT_TIME,
GST_SEEK_FLAG_ACCURATE | GST_SEEK_FLAG_FLUSH,
GST_SEEK_TYPE_SET, start, GST_SEEK_TYPE_SET, stop);
g_mutex_unlock (&source->priv->seek_lock);

View file

@ -45,6 +45,8 @@ typedef struct _NleSourcePrivate NleSourcePrivate;
struct _NleSource
{
NleObject parent;
gboolean reverse;
gboolean pending_reverse;
/* controlled source element, acces with gst_bin_[add|remove]_element */
GstElement *element;

View file

@ -635,7 +635,6 @@ static void
project_loaded_cb (GESProject * project, GESTimeline * timeline,
GMainLoop * mainloop)
{
GST_ERROR ("LOADED!");
g_main_loop_quit (mainloop);
}
@ -728,7 +727,7 @@ GST_START_TEST (test_children_properties_contain)
GESTimeline *timeline;
GESLayer *layer;
GESAsset *asset;
GESTimelineElement *c1, *c2, *c3, *g1, *g2;
GESTimelineElement *audioc0, *videoc, *audioc1, *g1, *g2;
GParamSpec **child_props1, **child_props2;
guint num_props1, num_props2;
@ -739,99 +738,92 @@ GST_START_TEST (test_children_properties_contain)
asset = ges_asset_request (GES_TYPE_TEST_CLIP, NULL, NULL);
/* choose one audio and one video to give them different properties */
c1 = GES_TIMELINE_ELEMENT (ges_layer_add_asset (layer, asset, 0, 0, 10,
audioc0 = GES_TIMELINE_ELEMENT (ges_layer_add_asset (layer, asset, 0, 0, 10,
GES_TRACK_TYPE_AUDIO));
c2 = GES_TIMELINE_ELEMENT (ges_layer_add_asset (layer, asset, 20, 0, 10,
videoc = GES_TIMELINE_ELEMENT (ges_layer_add_asset (layer, asset, 20, 0, 10,
GES_TRACK_TYPE_VIDEO));
/* but c3 will have the same child properties as c1! */
c3 = GES_TIMELINE_ELEMENT (ges_layer_add_asset (layer, asset, 40, 0, 10,
/* but audioc1 will have the same child properties as audioc0! */
audioc1 = GES_TIMELINE_ELEMENT (ges_layer_add_asset (layer, asset, 40, 0, 10,
GES_TRACK_TYPE_AUDIO));
fail_unless (c1);
fail_unless (c2);
fail_unless (audioc0);
fail_unless (videoc);
g1 = GES_TIMELINE_ELEMENT (ges_group_new ());
g2 = GES_TIMELINE_ELEMENT (ges_group_new ());
/* group should have the same as its children */
fail_unless (ges_container_add (GES_CONTAINER (g1), c1));
fail_unless (ges_container_add (GES_CONTAINER (g1), audioc0));
num_props1 = 0;
child_props1 = append_children_properties (NULL, c1, &num_props1);
child_props1 = append_children_properties (NULL, audioc0, &num_props1);
num_props2 = 0;
child_props2 = append_children_properties (NULL, g1, &num_props2);
/* audioc0 VS g1 */
assert_property_list_match (child_props1, num_props1,
child_props2, num_props2);
/* add next child and gain its children properties as well */
fail_unless (ges_container_add (GES_CONTAINER (g1), c2));
fail_unless (ges_container_add (GES_CONTAINER (g1), videoc));
/* add the child properties of c2 to the existing list for c1 */
child_props1 = append_children_properties (child_props1, c2, &num_props1);
/* add the child properties of videoc to the existing list for audioc0 */
child_props1 = append_children_properties (child_props1, videoc, &num_props1);
free_children_properties (child_props2, num_props2);
num_props2 = 0;
child_props2 = append_children_properties (NULL, g1, &num_props2);
/* audioc0+videoc VS g1 */
assert_property_list_match (child_props1, num_props1,
child_props2, num_props2);
/* FIXME: if c1 and c3 have the same child properties (they use the
* same GParamSpec) then ges_timeline_element_add_child_property_full
* will fail, even though the corresponding GObject child is not the
* same instance */
fail_unless (ges_container_add (GES_CONTAINER (g1), c3));
/* FIXME: regarding the above comment, ideally we would append the
* children properties for c3 to child_props1, so that its children
* properties appear twice in the list:
* child_props1 =
* append_children_properties (child_props1, c3, &num_props1); */
fail_unless (ges_container_add (GES_CONTAINER (g1), audioc1));
child_props1 =
append_children_properties (child_props1, audioc1, &num_props1);
free_children_properties (child_props2, num_props2);
num_props2 = 0;
child_props2 = append_children_properties (NULL, g1, &num_props2);
/* audioc0+videoc+audioc1 VS g1 */
assert_property_list_match (child_props1, num_props1,
child_props2, num_props2);
/* remove c3 */
fail_unless (ges_container_remove (GES_CONTAINER (g1), c3));
/* FIXME: regarding the above comment, ideally we would reset
* child_props1 to only contain the child properties for c1 and c2
* Currently, we at least want to make sure that the child properties
* for c1 remain.
* Currently, if we removed c1 first, all its children properties would
* be removed from g1, and this would *not* automatically register the
* children properties for c3. */
free_children_properties (child_props2, num_props2);
num_props2 = 0;
child_props2 = append_children_properties (NULL, g1, &num_props2);
assert_property_list_match (child_props1, num_props1,
child_props2, num_props2);
/* remove c1 */
fail_unless (ges_container_remove (GES_CONTAINER (g1), c1));
/* remove audioc1 */
fail_unless (ges_container_remove (GES_CONTAINER (g1), audioc1));
free_children_properties (child_props1, num_props1);
num_props1 = 0;
child_props1 = append_children_properties (NULL, c2, &num_props1);
child_props1 = append_children_properties (NULL, audioc0, &num_props1);
child_props1 = append_children_properties (child_props1, videoc, &num_props1);
free_children_properties (child_props2, num_props2);
num_props2 = 0;
child_props2 = append_children_properties (NULL, g1, &num_props2);
/* audioc0+videoc VS g1 */
assert_property_list_match (child_props1, num_props1,
child_props2, num_props2);
/* add g1 and c1 to g2 */
/* remove audioc0 */
fail_unless (ges_container_remove (GES_CONTAINER (g1), audioc0));
free_children_properties (child_props1, num_props1);
num_props1 = 0;
child_props1 = append_children_properties (NULL, videoc, &num_props1);
free_children_properties (child_props2, num_props2);
num_props2 = 0;
child_props2 = append_children_properties (NULL, g1, &num_props2);
/* videoc VS g1 */
assert_property_list_match (child_props1, num_props1,
child_props2, num_props2);
/* add g1 and audioc0 to g2 */
fail_unless (ges_container_add (GES_CONTAINER (g2), g1));
fail_unless (ges_container_add (GES_CONTAINER (g2), c1));
fail_unless (ges_container_add (GES_CONTAINER (g2), audioc0));
free_children_properties (child_props1, num_props1);
num_props1 = 0;
@ -839,9 +831,10 @@ GST_START_TEST (test_children_properties_contain)
free_children_properties (child_props2, num_props2);
num_props2 = 0;
child_props2 = append_children_properties (NULL, c1, &num_props2);
child_props2 = append_children_properties (NULL, audioc0, &num_props2);
child_props2 = append_children_properties (child_props2, g1, &num_props2);
/* g2+audioc0 VS g2 */
assert_property_list_match (child_props1, num_props1,
child_props2, num_props2);

View file

@ -0,0 +1,49 @@
/* GStreamer
* Copyright (C) 2024 Tim-Philipp Müller <tim centricular net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <gst/check/check.h>
#include <ges/ges.h>
/* we mostly just want to make sure that our library headers don't
* contain anything a C++ compiler might not like */
GST_START_TEST (test_nothing)
{
gst_init (NULL, NULL);
}
GST_END_TEST;
static Suite *
gescpp_suite (void)
{
Suite *s = suite_create ("GstGESCpp");
TCase *tc_chain = tcase_create ("C++ GES headers tests");
suite_add_tcase (s, tc_chain);
tcase_add_test (tc_chain, test_nothing);
return s;
}
GST_CHECK_MAIN (gescpp);

View file

@ -25,6 +25,13 @@ ges_tests = [
['nle/tempochange']
]
# Make sure our headers are C++ clean
if add_languages('cpp', native: false, required: false)
ges_tests += [
[ 'gescpp.cc', false ],
]
endif
fsmod = import('fs')
test_defines = [
'-UG_DISABLE_ASSERT',
@ -50,7 +57,11 @@ endif
gst_plugin_scanner_path = join_paths(gst_plugin_scanner_dir, 'gst-plugin-scanner')
foreach t : ges_tests
fname = '@0@.c'.format(t.get(0))
if t.get(0).endswith('.cc')
fname = t.get(0)
else
fname = '@0@.c'.format(t.get(0))
endif
test_name = t.get(0).underscorify()
if t.length() == 2
skip_test = t.get(1)

View file

@ -618,10 +618,10 @@ _set_rendering_details (GESLauncher * self)
smart_profile = TRUE;
else {
opts->format = get_file_extension (opts->outputuri);
prof = parse_encoding_profile (opts->format);
prof = gst_encoding_profile_from_string (opts->format);
}
} else {
prof = parse_encoding_profile (opts->format);
prof = gst_encoding_profile_from_string (opts->format);
if (!prof) {
ges_printerr ("Invalid format specified: %s", opts->format);
goto done;
@ -636,7 +636,7 @@ _set_rendering_details (GESLauncher * self)
opts->format =
g_strdup ("application/ogg:video/x-theora:audio/x-vorbis");
prof = parse_encoding_profile (opts->format);
prof = gst_encoding_profile_from_string (opts->format);
}
if (!prof) {
@ -649,7 +649,8 @@ _set_rendering_details (GESLauncher * self)
GstEncodingProfile *new_prof;
GList *tmp;
if (!(new_prof = parse_encoding_profile (opts->container_profile))) {
if (!(new_prof =
gst_encoding_profile_from_string (opts->container_profile))) {
ges_printerr ("Failed to parse container profile %s",
opts->container_profile);
gst_object_unref (prof);
@ -671,12 +672,20 @@ _set_rendering_details (GESLauncher * self)
goto done;
}
for (tmp = (GList *)
gst_encoding_container_profile_get_profiles
(GST_ENCODING_CONTAINER_PROFILE (prof)); tmp; tmp = tmp->next) {
/* Existing profile is a single-elementary-stream profile, put it in the
* new target container profile */
if (!GST_IS_ENCODING_CONTAINER_PROFILE (prof)) {
gst_encoding_container_profile_add_profile
(GST_ENCODING_CONTAINER_PROFILE (new_prof),
GST_ENCODING_PROFILE (gst_encoding_profile_ref (tmp->data)));
GST_ENCODING_PROFILE (gst_encoding_profile_ref (prof)));
} else {
for (tmp = (GList *)
gst_encoding_container_profile_get_profiles
(GST_ENCODING_CONTAINER_PROFILE (prof)); tmp; tmp = tmp->next) {
gst_encoding_container_profile_add_profile
(GST_ENCODING_CONTAINER_PROFILE (new_prof),
GST_ENCODING_PROFILE (gst_encoding_profile_ref (tmp->data)));
}
}
gst_encoding_profile_unref (prof);
@ -1562,7 +1571,7 @@ _local_command_line (GApplication * application, gchar ** arguments[],
if (opts->inspect_action_type) {
ges_validate_print_action_types ((const gchar **) &((*arguments)[1]),
argc - 1);
g_strv_length (*arguments) - 1);
goto done;
}

View file

@ -183,26 +183,6 @@ ensure_uri (const gchar * location)
return gst_filename_to_uri (location, NULL);
}
GstEncodingProfile *
parse_encoding_profile (const gchar * format)
{
GstEncodingProfile *profile;
GValue value = G_VALUE_INIT;
g_value_init (&value, GST_TYPE_ENCODING_PROFILE);
if (!gst_value_deserialize (&value, format)) {
g_value_reset (&value);
return NULL;
}
profile = g_value_dup_object (&value);
g_value_reset (&value);
return profile;
}
void
print_enum (GType enum_type)
{

View file

@ -58,7 +58,6 @@ typedef struct
gchar * sanitize_timeline_description (gchar **args, GESLauncherParsedOptions *opts);
gboolean get_flags_from_string (GType type, const gchar * str_flags, guint *val);
gchar * ensure_uri (const gchar * location);
GstEncodingProfile * parse_encoding_profile (const gchar * format);
void print_enum (GType enum_type);
void ges_print (GstDebugColorFlags c, gboolean err, gboolean nline, const gchar * format, va_list var_args);

View file

@ -1,4 +1,4 @@
project('gst-examples', 'c', version : '1.24.0', license : 'LGPL')
project('gst-examples', 'c', version : '1.25.0.1', license : 'LGPL')
static_build = get_option('default_library') == 'static'
cc = meson.get_compiler('c')

View file

@ -1,5 +1,5 @@
.externalNativeBuild/
assets/
gst-build-*/
gst-android-build/
src/main/java/org/freedesktop/gstreamer/GStreamer.java
src/main/java/org/freedesktop/gstreamer/androidmedia/

View file

@ -4,7 +4,7 @@
.idea/
assets/
build/
gst-build-*/
gst-android-build/
local.properties
src/org/freedesktop/gstreamer/GStreamer.java
*.iml

View file

@ -1,5 +1,5 @@
.externalNativeBuild/
assets/
gst-build-*/
gst-android-build/
src/main/java/org/freedesktop/gstreamer/GStreamer.java
src/main/java/org/freedesktop/gstreamer/androidmedia/

View file

@ -390,7 +390,7 @@ start_pipeline (WebRTC * webrtc)
"ahcsrc device-facing=front ! video/x-raw,width=[320,1280] ! queue max-size-buffers=1 ! videoconvert ! "
"vp8enc keyframe-max-dist=30 deadline=1 error-resilient=default ! rtpvp8pay picture-id-mode=15-bit mtu=1300 ! "
"queue max-size-time=300000000 ! " RTP_CAPS_VP8 " ! sendrecv.sink_0 "
"openslessrc ! queue ! audioconvert ! audioresample ! audiorate ! queue ! opusenc ! rtpopuspay ! "
"openslessrc ! queue ! audioconvert ! audioresample ! audiorate ! queue ! opusenc perfect-timestamp=true ! rtpopuspay ! "
"queue ! " RTP_CAPS_OPUS " ! sendrecv.sink_1 ", &error);
if (error) {

View file

@ -458,7 +458,7 @@ start_pipeline (void)
* inside the same pipeline. We start by connecting it to a fakesink so that
* we can preroll early. */
pipeline = gst_parse_launch ("tee name=audiotee ! queue ! fakesink "
"audiotestsrc is-live=true wave=red-noise ! queue ! opusenc ! rtpopuspay ! "
"audiotestsrc is-live=true wave=red-noise ! queue ! opusenc perfect-timestamp=true ! rtpopuspay ! "
"queue ! " RTP_CAPS_OPUS (96) " ! audiotee. ", &error);
if (error) {

View file

@ -329,7 +329,7 @@ create_receiver_entry (SoupWebsocketConnection * connection)
receiver_entry->pipeline =
gst_parse_launch ("webrtcbin name=webrtcbin stun-server=stun://"
STUN_SERVER " "
"audiotestsrc is-live=true wave=red-noise ! audioconvert ! audioresample ! queue ! opusenc ! rtpopuspay ! "
"audiotestsrc is-live=true wave=red-noise ! audioconvert ! audioresample ! queue ! opusenc perfect-timestamp=true ! rtpopuspay ! "
"queue ! " RTP_CAPS_OPUS "97 ! webrtcbin. ", &error);
if (error != NULL) {
g_error ("Could not create WebRTC pipeline: %s\n", error->message);

View file

@ -249,7 +249,7 @@ create_receiver_entry (SoupWebsocketConnection * connection)
"application/x-rtp,media=video,encoding-name=H264,payload="
RTP_PAYLOAD_TYPE " ! webrtcbin. "
"autoaudiosrc ! queue max-size-buffers=1 leaky=downstream"
" ! audioconvert ! audioresample ! opusenc ! rtpopuspay pt="
" ! audioconvert ! audioresample ! opusenc perfect-timestamp=true ! rtpopuspay pt="
RTP_AUDIO_PAYLOAD_TYPE " ! application/x-rtp, encoding-name=OPUS !"
" webrtcbin. ", &error);
if (error != NULL) {

View file

@ -30,7 +30,7 @@ public class WebrtcSendRecv {
private static final Logger logger = LoggerFactory.getLogger(WebrtcSendRecv.class);
private static final String REMOTE_SERVER_URL = "wss://webrtc.gstreamer.net:8443";
private static final String VIDEO_BIN_DESCRIPTION = "videotestsrc ! videoconvert ! queue ! vp8enc deadline=1 ! rtpvp8pay ! queue ! capsfilter caps=application/x-rtp,media=video,encoding-name=VP8,payload=97";
private static final String AUDIO_BIN_DESCRIPTION = "audiotestsrc ! audioconvert ! audioresample ! queue ! opusenc ! rtpopuspay ! queue ! capsfilter caps=application/x-rtp,media=audio,encoding-name=OPUS,payload=96";
private static final String AUDIO_BIN_DESCRIPTION = "audiotestsrc ! audioconvert ! audioresample ! queue ! opusenc perfect-timestamp=true ! rtpopuspay ! queue ! capsfilter caps=application/x-rtp,media=audio,encoding-name=OPUS,payload=96";
private final String serverUrl;
private final String peerId;

View file

@ -19,7 +19,7 @@ namespace GstWebRTCDemo
const string PIPELINE_DESC = @"webrtcbin name=sendrecv bundle-policy=max-bundle
videotestsrc is-live=true pattern=ball ! videoconvert ! queue ! vp8enc deadline=1 ! rtpvp8pay !
queue ! application/x-rtp,media=video,encoding-name=VP8,payload=97 ! sendrecv.
audiotestsrc is-live=true wave=red-noise ! audioconvert ! audioresample ! queue ! opusenc ! rtpopuspay !
audiotestsrc is-live=true wave=red-noise ! audioconvert ! audioresample ! queue ! opusenc perfect-timestamp=true ! rtpopuspay !
queue ! application/x-rtp,media=audio,encoding-name=OPUS,payload=96 ! sendrecv.";
readonly int _id;

View file

@ -490,7 +490,7 @@ start_pipeline (gboolean create_offer, guint opus_pt, guint vp8_pt)
audio_desc =
g_strdup_printf
("audiotestsrc is-live=true wave=red-noise ! audioconvert ! audioresample"
"! queue ! opusenc ! rtpopuspay name=audiopay pt=%u "
"! queue ! opusenc perfect-timestamp=true ! rtpopuspay name=audiopay pt=%u "
"! application/x-rtp, encoding-name=OPUS ! queue", opus_pt);
audio_bin = gst_parse_bin_from_description (audio_desc, TRUE, &audio_error);
g_free (audio_desc);

View file

@ -39,7 +39,7 @@ PIPELINE_DESC_VP8 = WEBRTCBIN + '''
{vsrc} ! videoconvert ! queue !
vp8enc deadline=1 keyframe-max-dist=2000 ! rtpvp8pay picture-id-mode=15-bit !
queue ! application/x-rtp,media=video,encoding-name=VP8,payload={video_pt} ! sendrecv.
{asrc} ! audioconvert ! audioresample ! queue ! opusenc ! rtpopuspay !
{asrc} ! audioconvert ! audioresample ! queue ! opusenc perfect-timestamp=true ! rtpopuspay !
queue ! application/x-rtp,media=audio,encoding-name=OPUS,payload={audio_pt} ! sendrecv.
'''
PIPELINE_DESC_H264 = WEBRTCBIN + '''
@ -47,7 +47,7 @@ PIPELINE_DESC_H264 = WEBRTCBIN + '''
x264enc tune=zerolatency speed-preset=ultrafast key-int-max=30 intra-refresh=true !
rtph264pay aggregate-mode=zero-latency config-interval=-1 !
queue ! application/x-rtp,media=video,encoding-name=H264,payload={video_pt} ! sendrecv.
{asrc} ! audioconvert ! audioresample ! queue ! opusenc ! rtpopuspay !
{asrc} ! audioconvert ! audioresample ! queue ! opusenc perfect-timestamp=true ! rtpopuspay !
queue ! application/x-rtp,media=audio,encoding-name=OPUS,payload={audio_pt} ! sendrecv.
'''
# Force I420 because dav1d bundled with Chrome doesn't support 10-bit choma/luma (I420_10LE)
@ -55,7 +55,7 @@ PIPELINE_DESC_AV1 = WEBRTCBIN + '''
{vsrc} ! videoconvert ! queue !
video/x-raw,format=I420 ! svtav1enc preset=13 ! av1parse ! rtpav1pay !
queue ! application/x-rtp,media=video,encoding-name=AV1,payload={video_pt} ! sendrecv.
{asrc} ! audioconvert ! audioresample ! queue ! opusenc ! rtpopuspay !
{asrc} ! audioconvert ! audioresample ! queue ! opusenc perfect-timestamp=true ! rtpopuspay !
queue ! application/x-rtp,media=audio,encoding-name=OPUS,payload={audio_pt} ! sendrecv.
'''
PIPELINE_DESC = {

View file

@ -360,7 +360,7 @@ function createCall() {
peer_connection.ontrack = ({track, streams}) => {
console.log("ontrack triggered");
var videoElem = getVideoElement();
if (event.track.kind === 'audio')
if (track.kind === 'audio')
videoElem.style.display = 'none';
videoElem.srcObject = streams[0];

View file

@ -0,0 +1,31 @@
meta,
tool = "ges-launch-$(gst_api_version)",
args = {
--track-types, video,
--disable-mixing,
--videosink, "$(videosink) name=videosink",
--audiosink, "$(audiosink) name=audiosink",
--video-caps, "video/x-raw,width=1280,height=720,framerate=30/1,format=I420",
},
handles-states = true,
ignore-eos = true,
configs = {
"$(validateflow), pad=videosink:sink, buffers-checksum=true, ignored-fields=\"stream-start={stream-id, group-id, stream}\"",
}
# timecodestamper doesn't allow reverse playback yet
add-clip, name=c0, asset-id="disable-timecodestamper=true", layer-priority=0, type=GESTestClip, start=0, duration=1.0
set-child-properties, element-name=c0, pattern=blue
add-clip, name=c1, asset-id="disable-timecodestamper=true", layer-priority=0, type=GESTestClip, start=1.0, duration=1.0
set-child-properties, element-name=c1, pattern=red
pause
seek, start=0.0, stop=0.5, flags=accurate+flush, rate=-1.0
play
seek, on-message=eos, start=0.0, stop=0.5, flags=accurate+flush, rate=-1.0
seek, on-message=eos, start=0.0, stop=1.0, flags=accurate+flush, rate=-1.0
seek, on-message=eos, start=1.0, stop=1.5, flags=accurate+flush, rate=-1.0
stop, on-message=eos

View file

@ -0,0 +1,95 @@
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE;
event caps: video/x-raw, format=(string)I420, framerate=(fraction)30/1, height=(int)720, interlace-mode=(string)progressive, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, width=(int)1280;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:01.000000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.000000000, dur=0:00:00.033333333, flags=discont, meta=GstVideoMeta, GESFrameCompositionMeta
event flush-start: (no structure)
event flush-stop: GstEventFlushStop, reset-time=(boolean)true;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:00.500000000, rate=-1.000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.500000000
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.466666667, dur=0:00:00.033333333, flags=discont, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.433333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.400000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.366666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.333333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.300000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.266666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.233333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.200000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.166666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.133333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.100000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.066666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.033333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.000000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
event eos: (no structure)
event flush-start: (no structure)
event flush-stop: GstEventFlushStop, reset-time=(boolean)true;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:00.500000000, rate=-1.000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.500000000
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.466666667, dur=0:00:00.033333333, flags=discont, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.433333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.400000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.366666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.333333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.300000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.266666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.233333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.200000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.166666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.133333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.100000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.066666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.033333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.000000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
event eos: (no structure)
event flush-start: (no structure)
event flush-stop: GstEventFlushStop, reset-time=(boolean)true;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:01.000000000, rate=-1.000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:01.000000000
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.966666667, dur=0:00:00.033333333, flags=discont, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.933333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.900000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.866666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.833333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.800000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.766666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.733333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.700000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.666666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.633333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.600000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.566666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.533333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.500000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.466666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.433333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.400000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.366666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.333333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.300000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.266666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.233333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.200000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.166666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.133333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.100000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.066666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.033333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=3568d63c95a3de452fcea83a9c55560c44bb8f1e, pts=0:00:00.000000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
event eos: (no structure)
event flush-start: (no structure)
event flush-stop: GstEventFlushStop, reset-time=(boolean)true;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:00.500000000, rate=-1.000000, flags=0x01, time=0:00:01.000000000, base=0:00:00.000000000, position=0:00:00.500000000
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.466666667, dur=0:00:00.033333333, flags=discont, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.433333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.400000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.366666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.333333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.300000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.266666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.233333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.200000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.166666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.133333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.100000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.066666667, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.033333334, dur=0:00:00.033333333, meta=GstVideoMeta, GESFrameCompositionMeta
buffer: checksum=f4ac50f63869dcb2da348734f6bf66f37216b484, pts=0:00:00.000000000, dur=0:00:00.033333334, meta=GstVideoMeta, GESFrameCompositionMeta
event eos: (no structure)

View file

@ -0,0 +1,25 @@
meta,
tool = "ges-launch-$(gst_api_version)",
args = {
--videosink, "fakevideosink name=videosink qos=false",
--audiosink, "fakeaudiosink name=audiosink qos=false",
--video-caps, "video/x-raw,width=1280,height=720,framerate=30/1,format=I420",
--audio-caps, "audio/x-raw,rate=44100,format=S32LE,channels=2,layout=interleaved",
},
handles-states = true,
ignore-eos = true,
configs = {
# We can't record buffers on sources as we have no timing guarantees
"$(validateflow), pad=videosrcbin:src, ignored-fields=\"stream-start={stream-id, group-id, stream}\"",
"$(validateflow), pad=videosink:sink, record-buffers=true, ignored-fields=\"stream-start={stream-id, group-id, stream}\"",
"$(validateflow), pad=audiosrcbin:src, ignored-fields=\"stream-start={stream-id, group-id, stream}\"",
"$(validateflow), pad=audiosink:sink, record-buffers=true, ignored-fields=\"stream-start={stream-id, group-id, stream}\"",
}
add-clip, name=c0, asset-id="time-overlay,disable-timecodestamper=true", layer-priority=0, type=GESTestClip, start=0, duration=1.0
set-child-properties, element-name=c0, pattern=blue, valignment=center, halignment=center, reverse=true
play
pause, on-message=eos
check-position, expected-position=1000000001
stop

View file

@ -0,0 +1,107 @@
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE;
event caps: audio/x-raw, channel-mask=(bitmask)0x0000000000000003, channels=(int)2, format=(string)S32LE, layout=(string)interleaved, rate=(int)44100;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:01.000000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
buffer: pts=0:00:00.000000000, dur=0:00:00.010000000
buffer: pts=0:00:00.010000000, dur=0:00:00.010000000
buffer: pts=0:00:00.020000000, dur=0:00:00.010000000
buffer: pts=0:00:00.030000000, dur=0:00:00.010000000
buffer: pts=0:00:00.040000000, dur=0:00:00.010000000
buffer: pts=0:00:00.050000000, dur=0:00:00.010000000
buffer: pts=0:00:00.060000000, dur=0:00:00.010000000
buffer: pts=0:00:00.070000000, dur=0:00:00.010000000
buffer: pts=0:00:00.080000000, dur=0:00:00.010000000
buffer: pts=0:00:00.090000000, dur=0:00:00.010000000
buffer: pts=0:00:00.100000000, dur=0:00:00.010000000
buffer: pts=0:00:00.110000000, dur=0:00:00.010000000
buffer: pts=0:00:00.120000000, dur=0:00:00.010000000
buffer: pts=0:00:00.130000000, dur=0:00:00.010000000
buffer: pts=0:00:00.140000000, dur=0:00:00.010000000
buffer: pts=0:00:00.150000000, dur=0:00:00.010000000
buffer: pts=0:00:00.160000000, dur=0:00:00.010000000
buffer: pts=0:00:00.170000000, dur=0:00:00.010000000
buffer: pts=0:00:00.180000000, dur=0:00:00.010000000
buffer: pts=0:00:00.190000000, dur=0:00:00.010000000
buffer: pts=0:00:00.200000000, dur=0:00:00.010000000
buffer: pts=0:00:00.210000000, dur=0:00:00.010000000
buffer: pts=0:00:00.220000000, dur=0:00:00.010000000
buffer: pts=0:00:00.230000000, dur=0:00:00.010000000
buffer: pts=0:00:00.240000000, dur=0:00:00.010000000
buffer: pts=0:00:00.250000000, dur=0:00:00.010000000
buffer: pts=0:00:00.260000000, dur=0:00:00.010000000
buffer: pts=0:00:00.270000000, dur=0:00:00.010000000
buffer: pts=0:00:00.280000000, dur=0:00:00.010000000
buffer: pts=0:00:00.290000000, dur=0:00:00.010000000
buffer: pts=0:00:00.300000000, dur=0:00:00.010000000
buffer: pts=0:00:00.310000000, dur=0:00:00.010000000
buffer: pts=0:00:00.320000000, dur=0:00:00.010000000
buffer: pts=0:00:00.330000000, dur=0:00:00.010000000
buffer: pts=0:00:00.340000000, dur=0:00:00.010000000
buffer: pts=0:00:00.350000000, dur=0:00:00.010000000
buffer: pts=0:00:00.360000000, dur=0:00:00.010000000
buffer: pts=0:00:00.370000000, dur=0:00:00.010000000
buffer: pts=0:00:00.380000000, dur=0:00:00.010000000
buffer: pts=0:00:00.390000000, dur=0:00:00.010000000
buffer: pts=0:00:00.400000000, dur=0:00:00.010000000
buffer: pts=0:00:00.410000000, dur=0:00:00.010000000
buffer: pts=0:00:00.420000000, dur=0:00:00.010000000
buffer: pts=0:00:00.430000000, dur=0:00:00.010000000
buffer: pts=0:00:00.440000000, dur=0:00:00.010000000
buffer: pts=0:00:00.450000000, dur=0:00:00.010000000
buffer: pts=0:00:00.460000000, dur=0:00:00.010000000
buffer: pts=0:00:00.470000000, dur=0:00:00.010000000
buffer: pts=0:00:00.480000000, dur=0:00:00.010000000
buffer: pts=0:00:00.490000000, dur=0:00:00.010000000
buffer: pts=0:00:00.500000000, dur=0:00:00.010000000
buffer: pts=0:00:00.510000000, dur=0:00:00.010000000
buffer: pts=0:00:00.520000000, dur=0:00:00.010000000
buffer: pts=0:00:00.530000000, dur=0:00:00.010000000
buffer: pts=0:00:00.540000000, dur=0:00:00.010000000
buffer: pts=0:00:00.550000000, dur=0:00:00.010000000
buffer: pts=0:00:00.560000000, dur=0:00:00.010000000
buffer: pts=0:00:00.570000000, dur=0:00:00.010000000
buffer: pts=0:00:00.580000000, dur=0:00:00.010000000
buffer: pts=0:00:00.590000000, dur=0:00:00.010000000
buffer: pts=0:00:00.600000000, dur=0:00:00.010000000
buffer: pts=0:00:00.610000000, dur=0:00:00.010000000
buffer: pts=0:00:00.620000000, dur=0:00:00.010000000
buffer: pts=0:00:00.630000000, dur=0:00:00.010000000
buffer: pts=0:00:00.640000000, dur=0:00:00.010000000
buffer: pts=0:00:00.650000000, dur=0:00:00.010000000
buffer: pts=0:00:00.660000000, dur=0:00:00.010000000
buffer: pts=0:00:00.670000000, dur=0:00:00.010000000
buffer: pts=0:00:00.680000000, dur=0:00:00.010000000
buffer: pts=0:00:00.690000000, dur=0:00:00.010000000
buffer: pts=0:00:00.700000000, dur=0:00:00.010000000
buffer: pts=0:00:00.710000000, dur=0:00:00.010000000
buffer: pts=0:00:00.720000000, dur=0:00:00.010000000
buffer: pts=0:00:00.730000000, dur=0:00:00.010000000
buffer: pts=0:00:00.740000000, dur=0:00:00.010000000
buffer: pts=0:00:00.750000000, dur=0:00:00.010000000
buffer: pts=0:00:00.760000000, dur=0:00:00.010000000
buffer: pts=0:00:00.770000000, dur=0:00:00.010000000
buffer: pts=0:00:00.780000000, dur=0:00:00.010000000
buffer: pts=0:00:00.790000000, dur=0:00:00.010000000
buffer: pts=0:00:00.800000000, dur=0:00:00.010000000
buffer: pts=0:00:00.810000000, dur=0:00:00.010000000
buffer: pts=0:00:00.820000000, dur=0:00:00.010000000
buffer: pts=0:00:00.830000000, dur=0:00:00.010000000
buffer: pts=0:00:00.840000000, dur=0:00:00.010000000
buffer: pts=0:00:00.850000000, dur=0:00:00.010000000
buffer: pts=0:00:00.860000000, dur=0:00:00.010000000
buffer: pts=0:00:00.870000000, dur=0:00:00.010000000
buffer: pts=0:00:00.880000000, dur=0:00:00.010000000
buffer: pts=0:00:00.890000000, dur=0:00:00.010000000
buffer: pts=0:00:00.900000000, dur=0:00:00.010000000
buffer: pts=0:00:00.910000000, dur=0:00:00.010000000
buffer: pts=0:00:00.920000000, dur=0:00:00.010000000
buffer: pts=0:00:00.930000000, dur=0:00:00.010000000
buffer: pts=0:00:00.940000000, dur=0:00:00.010000000
buffer: pts=0:00:00.950000000, dur=0:00:00.010000000
buffer: pts=0:00:00.960000000, dur=0:00:00.010000000
buffer: pts=0:00:00.970000000, dur=0:00:00.010000000
buffer: pts=0:00:00.980000000, dur=0:00:00.010000000
buffer: pts=0:00:00.990000000, dur=0:00:00.010000000
event segment: format=TIME, start=0:00:01.000000000, offset=0:00:00.000000000, stop=0:00:01.000000001, flags=0x01, time=0:00:01.000000000, base=0:00:01.000000000, position=0:00:01.000000000
buffer: pts=0:00:01.000000000, dur=0:00:00.000000001, flags=gap
event gap: GstEventGap, duration=(guint64)18446744073709551615, timestamp=(guint64)1000022675;
event eos: (no structure)

View file

@ -0,0 +1,8 @@
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE;
event caps: audio/x-raw, channel-mask=(bitmask)0x0000000000000003, channels=(int)2, format=(string)S32LE, layout=(string)interleaved, rate=(int)44100;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=none, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
event tag: GstTagList-stream, taglist=(taglist)"taglist\,\ description\=\(string\)\"audiotest\\\ wave\"\;";
event flush-start: (no structure)
event flush-stop: GstEventFlushStop, reset-time=(boolean)true;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:01.000000000, rate=-1.000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:01.000000000
event eos: (no structure)

View file

@ -0,0 +1,37 @@
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE;
event caps: video/x-raw, colorimetry=(string)bt709, format=(string)I420, framerate=(fraction)30/1, height=(int)720, width=(int)1280;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:01.000000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=none
buffer: pts=0:00:00.000000000, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.033333333, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.066666666, dur=0:00:00.033333334, meta=GstVideoMeta
buffer: pts=0:00:00.100000000, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.133333333, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.166666666, dur=0:00:00.033333334, meta=GstVideoMeta
buffer: pts=0:00:00.200000000, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.233333333, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.266666666, dur=0:00:00.033333334, meta=GstVideoMeta
buffer: pts=0:00:00.300000000, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.333333333, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.366666666, dur=0:00:00.033333334, meta=GstVideoMeta
buffer: pts=0:00:00.400000000, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.433333333, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.466666666, dur=0:00:00.033333334, meta=GstVideoMeta
buffer: pts=0:00:00.500000000, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.533333333, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.566666666, dur=0:00:00.033333334, meta=GstVideoMeta
buffer: pts=0:00:00.600000000, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.633333333, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.666666666, dur=0:00:00.033333334, meta=GstVideoMeta
buffer: pts=0:00:00.700000000, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.733333333, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.766666666, dur=0:00:00.033333334, meta=GstVideoMeta
buffer: pts=0:00:00.800000000, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.833333333, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.866666666, dur=0:00:00.033333334, meta=GstVideoMeta
buffer: pts=0:00:00.900000000, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.933333333, dur=0:00:00.033333333, meta=GstVideoMeta
buffer: pts=0:00:00.966666666, dur=0:00:00.033333334, meta=GstVideoMeta
event caps: video/x-raw, colorimetry=(string)bt601, format=(string)I420, framerate=(fraction)30/1, height=(int)720, width=(int)1280;
event segment: format=TIME, start=0:00:01.000000000, offset=0:00:00.000000000, stop=0:00:01.000000001, flags=0x01, time=0:00:01.000000000, base=0:00:01.000000000, position=none
buffer: pts=0:00:01.000000000, dur=0:00:00.000000001, meta=GstVideoMeta
event eos: (no structure)

View file

@ -0,0 +1,7 @@
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE;
event caps: video/x-raw, format=(string)AYUV, framerate=(fraction)30/1, height=(int)720, interlace-mode=(string)progressive, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, width=(int)1280;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=none, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
event flush-start: (no structure)
event flush-stop: GstEventFlushStop, reset-time=(boolean)true;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:01.000000000, rate=-1.000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:01.000000000
event eos: (no structure)

View file

@ -0,0 +1,58 @@
set-globals, media_file="$(test_dir)/../../medias/defaults/ogg/audio_5.1_separated_frequencies.ogg"
meta,
tool = "ges-launch-$(gst_api_version)",
handles-states=true,
seek=true,
needs_preroll=true,
args = {
--track-types, audio,
--audio-caps, "audio/x-raw, channels=2",
--audiosink, "$(audiosink) name=audiosink",
},
configs = {
"$(validateflow), pad=audiosink:sink, buffers-checksum=true, ignored-fields=\"stream-start={stream-id,group-id,stream}\"",
}
# Add a 5.1 audio clip with forced default order (gst)
add-clip, name=clip, asset-id="file://$(media_file)", layer-priority=0, type=GESUriClip
set-child-properties, element-name=clip, input-channels-reorder-mode=force
checkpoint, text="Checking default GST order."
pause
# Change order to smpte
checkpoint, text="Checking SMPTE order."
set-state, state=null
set-child-properties, element-name=clip, input-channels-reorder=smpte
pause
# Change order to cine
checkpoint, text="Checking CINE order."
set-state, state=null
set-child-properties, element-name=clip, input-channels-reorder=cine
pause
# Change order to ac3
checkpoint, text="Checking AC3 order."
set-state, state=null
set-child-properties, element-name=clip, input-channels-reorder=ac3
pause
# Change order to aac
checkpoint, text="Checking AAC order."
set-state, state=null
set-child-properties, element-name=clip, input-channels-reorder=aac
pause
# Change order to mono
checkpoint, text="Checking MONO order."
set-state, state=null
set-child-properties, element-name=clip, input-channels-reorder=mono
pause
# Change order to alternate
checkpoint, text="Checking ALTERNATE order."
set-state, state=null
set-child-properties, element-name=clip, input-channels-reorder=alternate
pause
stop

View file

@ -0,0 +1,49 @@
CHECKPOINT: Checking default GST order.
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE;
event caps: audio/x-raw, channel-mask=(bitmask)0x0000000000000003, channels=(int)2, format=(string)F32LE, layout=(string)interleaved, rate=(int)48000;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:30.000000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
buffer: checksum=a8466458c3dc435159d9df2f7ca37345017013fb, pts=0:00:00.000000000, dur=0:00:00.010000000
CHECKPOINT: Checking SMPTE order.
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE;
event caps: audio/x-raw, channel-mask=(bitmask)0x0000000000000003, channels=(int)2, format=(string)F32LE, layout=(string)interleaved, rate=(int)48000;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:30.000000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
buffer: checksum=a8466458c3dc435159d9df2f7ca37345017013fb, pts=0:00:00.000000000, dur=0:00:00.010000000
CHECKPOINT: Checking CINE order.
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE;
event caps: audio/x-raw, channel-mask=(bitmask)0x0000000000000003, channels=(int)2, format=(string)F32LE, layout=(string)interleaved, rate=(int)48000;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:30.000000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
buffer: checksum=203fce4efef89b9526b608b0d4f5f5c0097be3a3, pts=0:00:00.000000000, dur=0:00:00.010000000
CHECKPOINT: Checking AC3 order.
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE;
event caps: audio/x-raw, channel-mask=(bitmask)0x0000000000000003, channels=(int)2, format=(string)F32LE, layout=(string)interleaved, rate=(int)48000;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:30.000000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
buffer: checksum=18ea51cc5086625305ea18e4d0abbabc66616136, pts=0:00:00.000000000, dur=0:00:00.010000000
CHECKPOINT: Checking AAC order.
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE;
event caps: audio/x-raw, channel-mask=(bitmask)0x0000000000000003, channels=(int)2, format=(string)F32LE, layout=(string)interleaved, rate=(int)48000;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:30.000000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
buffer: checksum=70620194e45b76eb1469b7221f8dec05a5505c93, pts=0:00:00.000000000, dur=0:00:00.010000000
CHECKPOINT: Checking MONO order.
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE;
event caps: audio/x-raw, channel-mask=(bitmask)0x0000000000000003, channels=(int)2, format=(string)F32LE, layout=(string)interleaved, rate=(int)48000;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:30.000000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
buffer: checksum=3cffd73a8ddcafa0d0cd17151af4d2bd6c26f620, pts=0:00:00.000000000, dur=0:00:00.010000000
CHECKPOINT: Checking ALTERNATE order.
event stream-start: GstEventStreamStart, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE;
event caps: audio/x-raw, channel-mask=(bitmask)0x0000000000000003, channels=(int)2, format=(string)F32LE, layout=(string)interleaved, rate=(int)48000;
event segment: format=TIME, start=0:00:00.000000000, offset=0:00:00.000000000, stop=0:00:30.000000000, flags=0x01, time=0:00:00.000000000, base=0:00:00.000000000, position=0:00:00.000000000
buffer: checksum=e1472a1300859dea1e3ecf4ac6a16298d6fb4e63, pts=0:00:00.000000000, dur=0:00:00.010000000

View file

@ -0,0 +1,39 @@
meta,
tool = "ges-launch-$(gst_api_version)",
handles-states = true
add-clip, name=c0, asset-id="time-overlay", layer-priority=0, type=GESTestClip, start=0, duration=1.0
check-child-properties, element-name=videotestsource0, reverse=false
check-child-properties, element-name=audiotestsource0, reverse=false
set-child-properties, element-name=c0, pattern=blue, valignment=center, halignment=center, reverse=true
check-child-properties, element-name=videotestsource0, reverse=true
check-child-properties, element-name=audiotestsource0, reverse=true
set-child-properties, element-name=videotestsource0, reverse=false
check-child-properties, element-name=videotestsource0, reverse=false
check-child-properties, element-name=audiotestsource0, reverse=true
add-clip, name=c1, asset-id=GESTestClip, layer-priority=0, type=GESTestClip, start=1.0, duration=2.0
group, containers={c0, c1}, container-name=g0
set-child-properties, element-name=g0, reverse=true
check-child-properties, element-name=videotestsource0, reverse=true
check-child-properties, element-name=audiotestsource0, reverse=true
check-child-properties, element-name=videotestsource1, reverse=true
check-child-properties, element-name=audiotestsource1, reverse=true
set-child-properties, element-name=audiotestsource1, reverse=false
check-child-properties, element-name=videotestsource0, reverse=true
check-child-properties, element-name=audiotestsource0, reverse=true
check-child-properties, element-name=videotestsource1, reverse=true
check-child-properties, element-name=audiotestsource1, reverse=false
ungroup-container, container-name=g0
check-child-properties, element-name=videotestsource0, reverse=true
check-child-properties, element-name=audiotestsource0, reverse=true
check-child-properties, element-name=videotestsource1, reverse=true
check-child-properties, element-name=audiotestsource1, reverse=false
stop

@ -1 +1 @@
Subproject commit cba2a17a35049f76b5a1501da877b550dd795bef
Subproject commit fa0b7ec4a3e48371ff25d608ff5278e6fac1060c

View file

@ -1 +1 @@
project('gst-integration-testsuites', [], version: '1.24.0', meson_version : '>= 1.1', license: 'LGPL')
project('gst-integration-testsuites', [], version: '1.25.0.1', meson_version : '>= 1.1', license: 'LGPL')

View file

@ -761,3 +761,7 @@ ges.test.play_deeply_nested_back_to_back
ges.test.play_two_nested_back_to_back
ges.test.seek_on_stack_change_on_internal_subtimeline
ges.test.videoscale_effect
ges.test.backward_playback_with_start
ges.test.check_reverse_source
ges.test.timelineelement.set_child_prop_on_all_instances
ges.test.input_audio_channels_reorder

View file

@ -4,6 +4,6 @@ meta,
"change-issue-severity, issue-id=event::eos-has-wrong-seqnum, new-severity=critical",
},
args = {
"playbin uri=file://$(media_dir)/defaults/flv/819290236.flv",
"playbin uri=file://$(media_dir)/defaults/flv/819290236.flv audio-sink=\"$(audiosink)\" video-sink=\"$(videosink)\"",
},
scenario=seek_with_stop

View file

@ -1,17 +1,15 @@
This is GStreamer gst-libav 1.24.0.
This is GStreamer gst-libav 1.25.0.1.
The GStreamer team is thrilled to announce a new major feature release
of your favourite cross-platform multimedia framework!
As always, this release is again packed with new features, bug fixes and
other improvements.
GStreamer 1.25 is the unstable development branch leading up to the next major
stable version which will be 1.26.
The 1.24 release series adds new features on top of the 1.22 series and is
part of the API and ABI-stable 1.x release series.
The 1.25 development series adds new features on top of the 1.24 series and is
part of the API and ABI-stable 1.x release series of the GStreamer multimedia
framework.
Full release notes can be found at:
Full release notes will one day be found at:
https://gstreamer.freedesktop.org/releases/1.24/
https://gstreamer.freedesktop.org/releases/1.26/
Binaries for Android, iOS, Mac OS X and Windows will usually be provided
shortly after the release.

Some files were not shown because too many files have changed in this diff Show more