Compare commits

...

756 commits
1.23.1 ... 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
Tim-Philipp Müller b125253cad Release 1.24.0 2024-03-04 23:59:25 +00:00
Mathieu Duponchelle f1e2c7918e analytics: whitespace matters for gtk-doc syntax
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6253>
2024-03-04 17:33:00 +00:00
Olivier Crête caac280466 analytics: Add documentation to hotdoc build
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6253>
2024-03-04 17:33:00 +00:00
Olivier Crête 7a14b48dad analytics: Add missing documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6253>
2024-03-04 17:33:00 +00:00
Olivier Crête 0aecef9b63 analytics: Fix various typos in the documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6253>
2024-03-04 09:59:12 -05:00
Edward Hervey 3f7f9145d2 playback: Remove USE_PLAYBIN3 registration override
This was only introduced as a convenience for testing playbin3 instead of
playbin2.

Now that playbin3 is (explicitely) default in many cases, we should not do this
hack anymore

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6255>
2024-03-04 12:23:34 +01:00
Jurijs Satcs 23f654a943 audioconvert: set mix-matrix when user changes it to empty
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6243>
2024-03-01 11:58:57 +00:00
Seungha Yang d0713e029c d3d11memory, d3d12memory: Fix outstanding memory count tracing
Gets being released memory back to queue even if allocator is flushing
in order to count the number of outstanding memory objects.
Also, clear queue if there's no outstanding memory object and
allocator is flushing

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6240>
2024-02-29 11:57:50 +00:00
Seungha Yang 27d5e269cc tests: d3d11: Add buffer pool test
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6240>
2024-02-29 11:57:50 +00:00
Seungha Yang f77f3e83ed cudamemory: Fix outstanding memory count tracing
Gets being released memory back to queue even if allocator is flushing
in order to count the number of outstanding memory objects.
And fixing double count increment

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6240>
2024-02-29 11:57:50 +00:00
Seungha Yang 05aae3dd02 tests: cuda: Add buffer pool test
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6240>
2024-02-29 11:57:50 +00:00
Thibault Saunier 14d6773aba ges: framepositioner: Expose positioning properties as doubles
Making it possible to properly handle compositors that have those
properties as doubles and handle antialiasing.

Internally we were handling those values as doubles in framepositioner,
so expose new properties so user can set values as doubles also.

This changes the GESFramePositionMeta API but we are still on time for 1.24

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6241>
2024-02-29 00:56:30 +00:00
Marvin Schmidt 1b74f039ab allocators: drmdumb: Remove extra semicolon after G_DECLARE_FINAL_TYPE
The `G_DECLARE_FINAL_TYPE` macro does not need to be terminated with a
semicolon and the extra semicolon breaks building e.g. libcamera with
clang because `-Wextra-semi` is used which produces the following
error in conjunction with `-Werror`:
```
gstreamer-1.0/gst/allocators/gstdrmdumb.h:61:43: error: extra ';' outside
of a function is incompatible with C++98 [-Werror,-Wc++98-compat-extra-semi]
   61 |     GST, DRM_DUMB_ALLOCATOR, GstAllocator);
      |                                           ^
1 error generated.
```

Fix this by removing the extra semicolon

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6239>
2024-02-28 23:56:53 +01:00
Thibault Saunier 3077e4d8a5 docs: Update lumen theme
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6224>
2024-02-28 14:35:16 +00:00
Damian Hobson-Garcia dd8ef3ec1b waylandsink: Move buffer commits to the display thread
Syncrhonizing buffer commits to the streaming thread can lead to
dropped frames when frame callbacks are not processed before the
next frame is ready for rendering.  Depending on the drift between
the wayland compositor and buffer source timings, this can lead to
periods of significant frame drop, especially when the media frame
rate is close to the display frame rate.

Cache buffers in the streaming thread and peform commits on the
display thread to eliminate the buffer commit racing.

The implementation is the same for both waylandsink and gtkwaylandsink,
so move it to the common wayland library under gst-lib.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6133>
2024-02-27 17:20:42 +00:00
Damian Hobson-Garcia 612ee3b591 wayland: Add API to ref/unref current GstBuffer inside a GstWlBuffer
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6133>
2024-02-27 17:20:42 +00:00
Damian Hobson-Garcia 1b3bb334eb wayland: Add synchronized requests to WlDisplay
Add synchonized versions of wl_display_sync() and wl_callback_destroy()
that will ensure that to callbacks can be managed in a thread safe way
on the display queue even when they are dispatched from a separate
thread.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6133>
2024-02-27 17:20:42 +00:00
Thibault Saunier 1baa36c14a volume: Expose the volume-full-range as another property
In https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5063
the range of volume value has changed which breaks backward compatibility
when  using a GstDirectControlBinding which is not acceptable. To avoid
breaking compatibility add the feature of allowing the full range  using
another property with the full range. When using that full range, the
value of the `volume` property might end up being out of its valid
range but we do not really have a good solution for that.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3257
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6222>
2024-02-27 12:33:44 +00:00
Nirbheek Chauhan cf2238a522 rtspsrc: Increase rank to PRIMARY for autoplug purposes
This affects autoplug by gst_element_make_from_uri() in, for example,
uridecodebin. The element should've already been PRIMARY rank, but it
was NONE because gst_element_make_from_uri() doesn't ignore NONE rank
elements when searching for element factories, unlike decodebin.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/502

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6226>
2024-02-27 11:36:01 +00:00
Edward Hervey a3980f4838 docs: Use Discourse and Matrix as prefered communication channels
Part of: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6220
2024-02-27 09:35:47 +01:00
Edward Hervey 760793e843 gitlab_template: Remove duplicate entry and remove mention of IRC
Part of: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6220
2024-02-27 09:35:41 +01:00
Alexander Slobodeniuk f92c27a49e d3d11window_win32: fix crash on RC unprepare() vs window_proc()
Unprepare method posts WM_GST_D3D11_DESTROY_INTERNAL_WINDOW
command to the window queue, and from that moment considers
internal_hwnd to be released, and so it sets it to null.
The problem is that it's possible that right at that moment
the window thread might be already processing some other
command, or just another command might be already in the queue.
On practice we met a crash when WM_PAINT got processed in between
(unprepare already finished and WM_GST_D3D11_DESTROY_INTERNAL_WINDOW
was not handled yet)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6187>
2024-02-26 23:17:05 +00:00
Arnaud Vrac 49fa99737b queue2: post 100% buffering message even when waiting for space to be freed
In the case where the queue shrinks due to a property change and the queue
becomes full, we would set the waiting_del flag, which would prevent posting the
100% buffering message on the bus. Since the pipeline is not aware of the new
buffering value, in the common case where the pipeline is paused during
buffering, it would never resume.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6165>
2024-02-26 18:53:08 +00:00
Arnaud Vrac 7293c313d4 queue2: move gst_queue2_get_buffering_message code to the only call site
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6165>
2024-02-26 18:53:08 +00:00
Arnaud Vrac 15a18281d7 queue2: remove redundant check to avoid posting the same buffering value twice
Remove the percent_changed check to determine whether a buffering message should
be posted. The check on the last posted buffering value is sufficient, and the
removal doesn't introduce additional complexity.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6165>
2024-02-26 18:53:08 +00:00
Arnaud Vrac 517498dd11 queue2: consolidate buffering message posting code
No need to copy paste the code, simply call the common gst_queue2_post_buffering
function.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6165>
2024-02-26 18:53:07 +00:00
Arnaud Vrac 54aa6b66d8 queue2: make sure update_buffering is called with the lock taken
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6165>
2024-02-26 18:53:07 +00:00
Seungha Yang 125c89319a jpegdec: Fix progressive/interlaced detection
If input height and parsed one are identical, do not consider it as interlaced

Fixing below pipeline:
gst-launch-1.0 videotestsrc ! video/x-raw,format=I420,width=640,height=10 \
  ! jpegenc ! jpegparse ! jpegdec ! videoconvert ! autovideosink

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6181>
2024-02-26 23:21:44 +09:00
Seungha Yang 3afeb73538 jpegdec: Remove trailing white space
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6181>
2024-02-26 23:14:54 +09:00
Tim-Philipp Müller d474de8ff0 Release 1.23.90 2024-02-23 18:20:11 +00:00
He Junyan a734f95790 vabasedec: Fix a possible NULL pointer dereference
The format in _get_preferred_format_and_caps_features() may be NULL.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6206>
2024-02-23 16:55:50 +00:00
Edward Hervey 489f310881 urisourcebin: Handle legacy pad replacements from parsebin
When dealing with demuxers which aren't streams-aware, we need to handle the
old-school "stream replacement" dance from `parsebin` and hide that in such a
way that output pads are re-used (if compatible).

By analyzing the collection posted by parsebin, we can:
* Identify whether some output slots are no longer used (because the stream they
  currently handle is not present in the collection)
* Decide if some upcoming streams could re-use the existing slot

This supports both buffering and non-buffering modes.

Fixes #1651

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6201>
2024-02-23 16:05:44 +00:00
Sebastian Dröge e690b53d05 theoradec: Remove mis-leading and redundant uncropped_info
It's actually the cropped info, and equivalent to the info that is
already stored as part of the output state.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6203>
2024-02-23 15:03:35 +00:00
Sebastian Dröge 43fb350c42 theoradec: Don't leak input state if a second type packet is received
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6203>
2024-02-23 15:03:35 +00:00
Sebastian Dröge be4388c249 theoradec: Don't overwrite width/height of the input state
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6203>
2024-02-23 15:03:35 +00:00
Sebastian Dröge ee06666507 theoradec: Don't use custom allocation logic and always crop locally
All video frames have to be copied from libtheora's memory to the output
frame anyway, so we can as well do the cropping here directly instead of
copying the full frames and having downstream do the cropping.

This reduces the complexity of the code considerably, and among other
things gets rid of a bug related to buffer pool configuration.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6203>
2024-02-23 15:03:35 +00:00
Víctor Manuel Jáquez Leal 95436d1eb4 vabasedec: disable derived images for i965 driver
Since it has a very poor performance at reading derived images, which is the
most common use case for decoders.

Partially fixes: #3325

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6202>
2024-02-23 14:20:14 +00:00
Sebastian Dröge 00bbd6961c libav: Don't add -Werror=deprecated-declarations
It will fail the build for anybody who has an older FFmpeg version
than 6.1 and doesn't use the FFmpeg subproject.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6199>
2024-02-23 13:24:22 +00:00
Sebastian Dröge dc8d744789 ffmpeg: Update subproject to 6.1
Otherwise the build will fail after the recent changes because of
deprecated API usage.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6199>
2024-02-23 13:24:22 +00:00
Víctor Manuel Jáquez Leal 9567f8f444 vapostproc: optimization for va memory to system memory only
When the conversion is only caps feature from memory:VAMemory to system memory,
it's possible to optimize by doing a pseudo pass-through since the va-backed
buffers are the same for system memory buffers.

This change will also mitigates #2940

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6174>
2024-02-23 12:40:38 +00:00
Seungha Yang 06dc931b52 asiosink: Fix channel selection
Fixing copy paste mistake

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3321
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6170>
2024-02-23 11:21:08 +00:00
Víctor Manuel Jáquez Leal cc7726ea39 vabase: fail decide allocation if dmabuf without videometa
If the allocation query received from downstream doesn't handle GstVideoMeta but
it requests memory:DMABuf caps feature, it's incomplete, so we rather reject the
negotiation.

Both in base decoder, base transform and compositor.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6155>
2024-02-23 09:52:50 +00:00
Edward Hervey 5422c6c6d4 uridecodebin3: Atomically switch urisourcebin
When switching urisourcebin, ensure that we first unlink *all* pads from
decodebin3 before linking them again.

This is to ensure that decodebin3 completely knows that all previous pads are no
longer needed and can prepare itself to being re-used.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6179>
2024-02-23 08:29:47 +00:00
Edward Hervey 3da09ba971 uridecodebin3: Unify urisourcebin probe handling
Instead of handling events from urisourcebin pads in different probes (a
blocking and regular one), move it all to the non-blocking one.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6179>
2024-02-23 08:29:47 +00:00
Nirbheek Chauhan 4fc56a08ee soup: Re-add soup-lookup-dep option
It's still useful on Linux since it ensures that the tests are going
to be built, since they use the same dep lookup as the plugin now.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6197>
2024-02-23 11:47:47 +05:30
Sebastian Dröge eb641af450 rtp: Fix constant for maximum two-byte RTP header extension length
The value is stored as an 8 bit integer, with 0 meaning that there is
not data for this extension. That means that the maximum length is 255
bytes and not 256 bytes.

On the other hand, the one-byte RTP header extensions are storing the
length as a 4 bit integer with an offset of 1 (i.e. 0 means 1 byte
extension length), so here 16 is the correct maximum length.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6180>
2024-02-23 02:18:28 +00:00
naglis 476a34cfdb gstplay: Fix typos in documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6177>
2024-02-23 00:35:58 +00:00
Seungha Yang 5d62f408f2 nvcodec: Add plugin status message
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6167>
2024-02-22 23:30:29 +00:00
Seungha Yang fa477a4a25 amfcodec: Add plugin status message
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6167>
2024-02-22 23:30:29 +00:00
Víctor Manuel Jáquez Leal 301e281777 vabasedec: refactor format and capsfeature selection
This is a simplification of the venerable
gst_va_base_dec_get_preferred_format_and_caps_features() function, which
predates since gstreamer-vaapi. It's used to select the format and the
capsfeature to use when setting the output state. It was complex and hard to
follow. This refactor simplifies a lot the algorithm.

The first thing to remove _downstream_has_video_meta() since, most of the time
it will be called before the caps negotiation, and allocation queries make sense
only after caps negotiation. It might work during renegotiation but, in that
case, caps feature change is uncommon. Better a simple and common approach.

Also, for performance, instead of dealing with caps features as strings, GQuarks
are used.

The refactor works like this:

1. If peer pad returns any caps, the returned caps feature is system memory and
   looks for a proper format in the allowed caps.

2. The allowed caps are traversed at most 3 times: one per each valid caps
   feature. First VAMemory, later DMABuf, and last system memory. The first to
   match in allowed caps is picked, and the first format matching with the
   chroma is picked too.

Notice that, right now, using playbin videoconvert never return any.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6154>
2024-02-22 20:59:13 +00:00
Jeongki Kim 576dbcbd88 appsrc: clear eos flag on flush stop event
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6186>
2024-02-22 19:46:50 +00:00
Seungha Yang 781fc4a1b6 avviddec: Fix crash with FFmpeg n6.0
FFmpeg version 6.0 has an AV_CODEC_FLAG_COPY_OPAQUE related bug.

See a3bf63c26e

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6184>
2024-02-22 18:54:45 +00:00
Edward Hervey 03f8968119 urisourcebin: Use atomic lock for detecting shutdown
This fixes lock ordering issues

Fixes #3323

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6178>
2024-02-22 18:15:12 +00:00
Edward Hervey 3ce62be851 subtitleoverlay: Also use "Decoder/Subtitle" elements
Elements that "decoded" subtitle formats to raw text were historically
classified as "Parser" and not "Decoder. This is being gradually fixed.

This commit ensures that both classification are allowed

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6153>
2024-02-22 14:39:54 +00:00
Edward Hervey c1d33126aa playbin3: Inform (uri)decodebin3 of the subtitle caps from playsink
Subtitles are better handled by overlayers/renderers within playsink. By
informing (uri)decodebin3 of the formats that can be handled we can avoid those
being "decoded" too early.

Fixes #1081

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6153>
2024-02-22 14:39:54 +00:00
Edward Hervey 479c0c5bb4 parsebin: Use pbutils utils to identify more stream types
Handles all cases provided they are identified in the pbutils descriptions
list.

Fixes #1081

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6153>
2024-02-22 14:39:54 +00:00
Edward Hervey 34a1245905 subparsers: Give proper category to subtitle "decoders"
Some subtitle "decoders" had a wrong category of "Parser", which `parsebin`
relies on to identify elements which do not *decode* streams but *parse* them.

This would cause such subtitle decoders to be plugged in within parsebin,
preventing the original stream to be properly used by (more efficient)
downstream decoders or subtitle renderers.

Fixes #1757

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6153>
2024-02-22 14:39:54 +00:00
Piotr Brzeziński bf4cf0d9c1 ci: Ensure gtk-sharp uses the same revision in both places
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6182>
2024-02-22 13:21:07 +00:00
Piotr Brzeziński 2832cc1267 csharp: Change gtk-sharp revision in gstreamer-sharp subproject to match monorepo subproject
Fixes build issues when building gstreamer-sharp separately from the monorepo.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6182>
2024-02-22 13:21:06 +00:00
Mengkejiergeli Ba fc38459e50 msdk: Fix possible memory leaks
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6161>
2024-02-22 11:53:06 +00:00
Matthew Waters 697b35fe58 examples/qmlsinnk-multisink: allow running with leaks tracer
Include a gst_deinit() after the qml engine has been destroyed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6160>
2024-02-22 10:26:39 +00:00
Matthew Waters f1637a3601 examples/qml: fix some leaks in the multisink example
A GstPad was being leaked and possibly the qmlglsink element depending
on if Qt runs the scenegraph thread again when destroying the example
video item.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6160>
2024-02-22 10:26:39 +00:00
Matthew Waters 392fd00f4c qml, qml6: Fix leak of QSGMaterial/Geometry (and therefore a possible GstBuffer)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6160>
2024-02-22 10:26:31 +00:00
Matthew Waters 2dae3775d9 qml6: fix a leak of the wrapped QSGTextures
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6160>
2024-02-22 10:24:24 +00:00
Matthew Waters 3e13fc4f88 gl/x11: fix memory leak when retrieiving a foreign context's info
The FBConfig's were being leaked.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6160>
2024-02-22 10:24:24 +00:00
Jochen Henneberg c6636533d4 ptp-helper: Allow sync to master clock on same host
If we drop all messages with the same clock id as ours we will also
drop all messages coming from a PTP clock on our host since both clock
ids are build from the same MAC address.

At least for Linux we do not see our own messages anyway since the
network stack can well distinguish between multicast send from our
socket or from another socket on the same machine. To make sure that
this works for all supported platforms just drop delay requests since
this is the only message that is sent from the GStreamer PTP clock.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6172>
2024-02-22 07:52:35 +00:00
Nirbheek Chauhan b5b7064419 gst-python: Print exception if pygobject fails to initialize
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6159>
2024-02-21 21:47:12 +00:00
Nirbheek Chauhan 768aeb739a meson: Use cdata.set_quoted() for configuration data
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6159>
2024-02-21 21:47:12 +00:00
Nirbheek Chauhan 64fdded13a ges, gst-python: Fix libpython dlopen on macOS
First encountered at https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1171#note_2290789

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6159>
2024-02-21 21:47:12 +00:00
Nirbheek Chauhan 2cc9a181f9 ges, gst-python: Rework libpython loading to be relocatable
If we don't specify a path for loading, the runtime linker will search
for the library instead, which will use the usual mechanisms: RPATHs,
LD_LIBRARY_PATH, PATH (on Windows), etc.

Also try harder to load a non-devel libpython using INSTSONAME, if
available.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6159>
2024-02-21 21:47:12 +00:00
Nirbheek Chauhan ad8ea38e0a meson: Use host_system for the host_machine system
This is a convention everywhere else in gstreamer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6159>
2024-02-21 21:47:12 +00:00
Seungha Yang 911d840288 wasapi: Fix alloc/free function mismatch
... and fix leak in wasapi device provider

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3326
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6169>
2024-02-21 21:03:32 +00:00
Seungha Yang 06b9864dae wasapi2: Fix task memory leak
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6169>
2024-02-21 21:03:32 +00:00
Piotr Brzeziński 57eb69ff89 csharp: Add RTSP server example
Port of the test-launch.c example from gst-rtsp-server.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5961>
2024-02-21 19:00:50 +00:00
Piotr Brzeziński 4e31f2def5 csharp: Add GstRtspServer bindings
With a few unnecessary gst_rtsp_stream_transport_* methods manually disabled to avoid compilation errors.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5961>
2024-02-21 19:00:50 +00:00
Piotrek Brzeziński 2bc9abd60b csharp: Make nuget targets depend on underlying libraries
Without this, build will fail if meson/ninja decides to call nuget before building gstreamer-sharp.dll.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5961>
2024-02-21 19:00:49 +00:00
ekwange 0cbb396ab9 mse: Add logging init for mediasource sample map
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6033>
2024-02-21 18:11:25 +00:00
Sebastian Dröge 69e4564c87 rtphdrext-clientaudiolevel: Fix typo in documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6175>
2024-02-21 17:25:43 +00:00
Arnaud Vrac 9e2e456d9f adaptivedemux2: fix build with recent meson
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6168>
2024-02-21 13:53:40 +00:00
Nirbheek Chauhan 40774c2607 ci: vs2022 x86 was only configuring, was not building
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6166>
2024-02-21 13:03:43 +00:00
Sebastian Dröge 5ec73afe75 rtpbasedepayload: Add "extensions" property for the currently enabled extensions
This works the same way as the one from `rtpbasepayload`.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6163>
2024-02-21 12:17:24 +00:00
Sebastian Dröge 08d4527d22 rtpbasepayload: Use gst_value_array_append_and_take_value() as a micro optimization
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6163>
2024-02-21 12:17:24 +00:00
Sebastian Dröge ea261a58e0 rtpbasepayload: Also notify "extensions" property when changing list during negotiation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6163>
2024-02-21 12:17:24 +00:00
Tim-Philipp Müller 0a6948ee20 rtppassthroughpay: fix critical in gst-inspect
gst_segment_to_running_time() will fail noisily
if the segment has not been initialised yet.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6151>
2024-02-21 11:25:10 +00:00
Kamal Mostafa ce45e63dcc tests: cudafilter: actually check for cudascale
Actually check for availability of 'cudascale' instead of accidentally
checking for 'cudadownload' twice.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3327
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6158>
2024-02-21 10:16:02 +00:00
Stéphane Cerveau 977a59a3fb test: vkimagebufferpool: fix queue leak
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6143>
2024-02-21 04:50:47 +00:00
Nirbheek Chauhan 11f6984bf5 soup: Link to libsoup in all cases on non-Linux
We have unsolvable issues on macOS because of this, and the feature
was added specifically for issues that occur on Linux distros since
they ship both libsoup 2.4 and 3.0.

Everyone else should just pick one and use it, since you cannot mix
the two in a single process anyway.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6156>
2024-02-21 09:27:59 +05:30
Jan Schmidt f7e494f348 rtspsrc: Reset combined flows after a seek before restarting
After a flushing seek, rtspsrc doesn't reset the last_ret value for
streams, so might immediately shut down again when it resumes pushing
buffers to pads due to a cached `GST_FLOW_FLUSHING` result

Prevent a stored flushing value from immediately stopping
playback again by resetting pad flows before (re)starting
playback.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6137>
2024-02-21 01:50:13 +00:00
Tim-Philipp Müller 9b84d6398a qsv: use new plugin status message API
Minimal example.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3832>
2024-02-21 00:58:19 +00:00
Tim-Philipp Müller 28f262b9ad gst-inspect: print plugin error/warning/info status messages
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3832>
2024-02-21 00:58:19 +00:00
Tim-Philipp Müller bc4f7040fa plugin: add API for plugins to provide status info messages
This can be used to store informational messages, errors or
warnings which can later be shown to the user in gst-inspect-1.0,
which can be useful for plugins that expose elements dynamically
based on external libraries or hardware capabilities.

Status messages can then provide an indication as to why a
plugin doesn't have any elements listed, for example.

Plus unit test to make sure code paths are exercised a little.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3832>
2024-02-21 00:58:19 +00:00
Tim-Philipp Müller 59c09eb029 gstobject: add CONSTRUCTED flag
This can be used later by base class APIs to know whether they're
called from a subclass instance init function (where the object
isn't properly constructed yet and one should only really poke
at the instance structure but not much else) or after object
construction has been finished.

Fix up GstBin unit test for CONSTRUCTED flag addition.

See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2794

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6150>
2024-02-20 19:16:54 +00:00
Jordan Petridis dc5b866d87 ci: Run the commit lint job as a user
Part of #2433

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5938>
2024-02-20 18:28:52 +02:00
Edward Hervey 157471889e meta: Skip gst_meta_info_new in gir
```
gstmeta.c:500: Warning: Gst: gst_meta_info_new: return value: Invalid
non-constant return of bare structure or union; register as boxed type or (skip)
```

Skip this for now

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6147>
2024-02-20 12:30:39 +00:00
Seungha Yang 354af30d9f wasapi2: Respect ringbuffer buffer/latency time
Decide buffer size based on configured buffer/latency time
if low-latency is disabled, so that ringbuffer can buffer more
than minimum required size.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2870
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6141>
2024-02-20 11:37:09 +00:00
Edward Hervey 62b9049d20 mpegst: Fix ownership of return value
This inherits from the same rule as gst_buffer_add_meta

```
gst-mpegtspesmetadatameta.h:98: Warning: GstMpegts:
gst_buffer_add_mpegts_pes_metadata_meta: return value: Invalid non-constant
return of bare structure or union; register as boxed type or (skip)
```

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6146>
2024-02-20 11:33:33 +02:00
Maksym Khomenko ccf544a50e osxaudio: add mapping for top/left/right surround channels
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5731>
2024-02-20 08:03:15 +00:00
Maksym Khomenko f1e02ebb92 osxaudio: correct mapping for left/right surround
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5731>
2024-02-20 08:03:15 +00:00
Philippe Normand 6059391e10 protection: Document original-media-type caps field
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6142>
2024-02-19 18:35:03 +00:00
Guillaume Desmottes d972acd3c5 uridecodebin3: fix deadlock when switching input item
There was a race between urisourcebin src pad handlers.
One was starting the next item before the other was blocked.

See
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3297#note_2288799
for details.

Fix #3297

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6145>
2024-02-19 16:22:12 +01:00
Marc Leeman eb17de27d6 qt6: search in /usr/lib/qt6/bin/ for qsb
In Debian and possibly other distributions, qsb (qt6-shader-baker) is
not in the default path, but in a QT6 specific path. Search there too

Applied changes from Nirbheek

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6095>
2024-02-19 12:29:32 +00:00
Jochen Henneberg 6608b89977 rtpxqtdepay: Enabled header extension aggregation
Because this depayloader may build several output buffers within one
process run we push them all into a GstBufferList and push them out at
once to make sure that each buffer gets notified about each header
extension.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:17 +00:00
Jochen Henneberg 4788a3da0d rtpasfdepay: Enabled header extension aggregation
Because this depayloader may build several output buffers within one
process run we push them all into a GstBufferList and push them out at
once to make sure that each buffer gets notified about each header
extension.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:17 +00:00
Jochen Henneberg 5d1d0cf9a5 rtpmp4gdepay: Enabled header extension aggregation
Because this depayloader may build several output buffers within one
process run we push them all into a GstBufferList and push them out at
once to make sure that each buffer gets notified about each header
extension.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:17 +00:00
Jochen Henneberg 75849c63c8 rtpsbcdepay: Enabled header extension aggregation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:17 +00:00
Jochen Henneberg 3fffcd021a rtpvorbisdepay: Enabled header extension aggregation
Because this depayloader may build several output buffers within one
process run we push them all into a GstBufferList and push them out at
once to make sure that each buffer gets notified about each header
extension.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:17 +00:00
Jochen Henneberg e1e7421982 rtpmp4vdepay: Enabled header extension aggregation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:17 +00:00
Jochen Henneberg 334ceaca21 rtptheoradepay: Enabled header extension aggregation
Because this depayloader may build several output buffers within one
process run we push them all into a GstBufferList and push them out at
once to make sure that each buffer gets notified about each header
extension.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:17 +00:00
Jochen Henneberg 0a4918a509 rtpsv3vdepay: Enabled header extension aggregation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:17 +00:00
Jochen Henneberg d810049f01 rtpmp4adepay: Enabled header extension aggregation
Because this depayloader may build several output buffers within one process
run we push them all into a GstBufferList and push them out at once to
make sure that each buffer gets notified about each header extension.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:17 +00:00
Jochen Henneberg 90b5d2eb93 rtpklvdepay: Enabled header extension aggregation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:17 +00:00
Jochen Henneberg 2c3f169ebb rtpjpegdepay: Enabled header extension aggregation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:16 +00:00
Jochen Henneberg 460813f7ee rtpj2kdepay: Enabled header extension aggregation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:16 +00:00
Jochen Henneberg ae3a00abd2 rtph263pdepay: Enabled header extension aggregation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:16 +00:00
Jochen Henneberg 4fd4c240e0 rtph263depay: Enabled header extensions aggregation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:16 +00:00
Jochen Henneberg ae5bdaa7e1 rtph261depay: Enabled header extension aggregation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
2024-02-19 11:23:16 +00:00
Philippe Normand 2834973d55 parsebin: Fix stream type for encrypted streams
Without this patch the stream type for encrypted streams would be 'unknown'.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6138>
2024-02-19 09:50:03 +00:00
Priit Laes 4e782da32e cacasink: add driver selection support from the pipeline
https://bugzilla.gnome.org/show_bug.cgi?id=599018

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5491>
2024-02-19 07:50:15 +00:00
Guillaume Desmottes b4752ef792 docs: initialize values when GST_PLUGIN_API_FLAG_IGNORE_ENUM_MEMBERS is set
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5491>
2024-02-19 07:50:15 +00:00
Seungha Yang 93f0135798 wasapi2: Fix choppy rendering
This reverts questionable commit 009bc15f33
which looks completely wrong.

The GstWasapi2RingBuffer:buffer_size variable is used to
calculate available buffer size we can write
(i.e., available size = buffer_size - padding_size).
But the commit makes the size to be exactly same as buffer period.
Then, it can confuse this element as if the endpoint buffer is full on
I/O event callback (if padding size is equal to buffer period)
but it's not true.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2870
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6132>
2024-02-19 04:39:25 +00:00
Loïc Molinari fb02516b75 video: Fix NV12_16L32S video frame size
The size of a NV12_16L32S video frame is bigger than expected because
it uses the size of a Y tile to compute the interleaved UV plane
size. Get the right UV tile size instead.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6118>
2024-02-16 17:07:03 +00:00
Víctor Manuel Jáquez Leal 03d7082657 gstreamer-vaapi: tests: test vaapipostproc only if exists
Fix: #2491
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6129>
2024-02-16 15:11:23 +00:00
Robert Mader 6b024b50ab v4l2codecs: h264: Fix a memory leak on renegotiation
We only use this anchor when streaming, in which case output_state is
set and needs to get unreffed.
This is in line with how it is handled for all other codecs.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6127>
2024-02-15 22:37:11 +01:00
Xavier Claessens 22b7200d60 bus: do not leak message on invalid handler return value
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6124>
2024-02-15 18:37:48 +00:00
Xavier Claessens 57f12dd2fa bus: do not leak messages if there is no async handler
This does not typically happen because "enable-async" property is TRUE
by default. The only place where it is set to FALSE is in GstBin where a
sync handler is used and always returns GST_BUS_DROP.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6124>
2024-02-15 18:37:48 +00:00
Xavier Claessens 350345150e bus: warn when message queue grows too much
It usually means application is not handling messages causing memory
consumption to grow infinitely.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3313>
2024-02-15 17:45:06 +00:00
Tim-Philipp Müller 88412ef100 Back to development
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6126>
2024-02-15 16:38:53 +00:00
Tim-Philipp Müller 88751d4110 Release 1.23.2 2024-02-15 15:37:17 +00:00
Tim-Philipp Müller 28b64bc28a Revert "audiobuffersplit: Update out_segment even without discont"
This reverts commit c0dc65d40a.
2024-02-15 15:37:11 +00:00
Jan Alexander Steffens (heftig) 9426eaae6a videoparseutils: Don't double-attach AFD, Bar or unregistered data
We already did this for captions. We also need to do it for the other
meta types to ensure our parsers are idempotent and don't attach
duplicates.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5450>
2024-02-15 13:32:30 +00:00
Jan Alexander Steffens (heftig) 92017b983e videoparseutils: Store multiple user data unregistered messages
A frame can have multiple unregistered messages attached. We need to
store them all.

For: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3008
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5450>
2024-02-15 13:32:30 +00:00
Jan Alexander Steffens (heftig) 75f61cba80 videoparsers: Clear user_data_unregistered explicitly in _reset_frame
This fits better with the model used by the parser elements. It also
properly resets the data when the parser is reset.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5450>
2024-02-15 13:32:30 +00:00
Jan Alexander Steffens (heftig) 3577fdec51 videoparsers: Clear user data explicitly in _reset_frame
This fits better with the model used by the parser elements. It also
properly resets the data when the parser is reset.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5450>
2024-02-15 13:32:30 +00:00
Jan Alexander Steffens (heftig) b3c03cec8d videoparseutils: Minor improvements to _parse_afd
- Add the missing field parameter and put the output parameter at the
  end.
- Use a switch to verify valid values instead of hard-to-follow range
  checks.
- Don't consider bad values a programming error, just a regular failure.
- Set all data fields at the end so we can pass a pointer to an
  uninitialized structure without GCC complaining.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5450>
2024-02-15 13:32:30 +00:00
Jan Alexander Steffens (heftig) 5c0cad5f02 videoparseutils: Minor improvements to _parse_bar
Use the enum type for the argument and loudly complain when not passing
a place to output.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5450>
2024-02-15 13:32:30 +00:00
Jan Alexander Steffens (heftig) c0dc65d40a audiobuffersplit: Update out_segment even without discont
We need to forward the segments we get even if we don't see a discont
buffer, or discont was suppressed by gapless mode.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5450>
2024-02-15 13:32:29 +00:00
Edward Hervey d62c6e1084 urisourcebin: Don't acquire STATE_LOCK if shutting down
If we are shutting down (PAUSED->READY) we shouldn't take the STATE LOCK since
this function is being called from a streaming thread (which is trying to be
deactivated while the STATE LOCK is held)

Fixes #3292

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6121>
2024-02-15 10:09:10 +00:00
Xavier Claessens d86a6715e1 aja: Replace global semaphore with per-device flock()
The global semaphore was never closed/unlinked, causing permission
denied issue if the device is later used by another user. Properly
removing the semaphore when stopping the pipeline would still leave it
open in case of a crash.

With a GStreamer specific name, it was also not preventing other apps to access
the device concurrently.

Finally, if the system has multiple cards, the lock should be per card
and not global (to be confirmed).

Fixes: #3283.

Sponsored-by: Netflix Inc.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6117>
2024-02-15 09:30:20 +00:00
Edward Hervey d26194db0e libgstplay: Use playbin3 by default
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6120>
2024-02-15 09:00:45 +01:00
Sebastian Dröge 499474a76d Revert "rtpvp8pay: Use GstBitReader instead of dboolhuff implementation from libvpx"
This reverts commit b730e7a1b2.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6116>
2024-02-14 15:45:24 +00:00
Seungha Yang d98c922995 h265decoder: Fix DPB size calculation
MaxDpbSize specified in A.4.2 tells upper bound of decoded picture
buffer size but does not tell actual required size.
Use max_dec_pic_buffering value as a dpb size. Some backends
such as DXVA and NVDEC might require pre-allocated DPB buffer
and unnecessary large DPB size will result in waste of GPU memory.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6101>
2024-02-14 15:05:59 +00:00
Edward Hervey 144657dc0d gst-play: Default to using playbin3
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6115>
2024-02-14 12:27:25 +01:00
Mathieu Duponchelle 91317aacaf webrtcbin, rtpbin: check before setting properties on jitterbuffer
In rtpbin we already systematically check for all property names
except latency, correct that.

In webrtcbin we need to check before trying to use the do-retransmission
property.

This is useful for the case where an element like identity gets passed
to rtpbin's request-jitterbuffer property, when the application wants
to use webrtcbin in an SFU situation, with no reordering and no added
latency

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6112>
2024-02-14 08:52:50 +00:00
Sebastian Dröge c726add352 rtpfunnel: Handle NTP-64 RTP header extension in caps similar to TWCC
This is another header extension that is handled by rtpsession and needs
to be preserved in the caps that are created by rtpfunnel.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6109>
2024-02-14 08:05:33 +00:00
Tim-Philipp Müller 6cfe6299d2 gst-plugins-bad: update translations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6113>
2024-02-14 04:43:00 +00:00
Tim-Philipp Müller a3de2b48ba gst-plugins-ugly: update translations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6113>
2024-02-14 04:43:00 +00:00
Tim-Philipp Müller b87093207c gst-plugins-good: update translations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6113>
2024-02-14 04:43:00 +00:00
Tim-Philipp Müller 39acedf053 gst-plugins-base: update translations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6113>
2024-02-14 04:43:00 +00:00
Tim-Philipp Müller c127a4fd74 gstreamer: update translations
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6113>
2024-02-14 04:43:00 +00:00
Sebastian Dröge 17e7af7181 rtpfunnel: Also write TWCC RTP header extension into buffer list buffers
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6110>
2024-02-14 01:56:20 +00:00
Sebastian Dröge d49a2ae00f ci: Update to cargo-c 0.9.30
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6106>
2024-02-13 21:25:08 +00:00
Daniel Morin b2098849dc h264parse: correct NAL mode backlog processing
- Only process what is left in backlog when AU was completed, draining or next
  nal is AUD.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6093>
2024-02-13 13:58:13 +00:00
Seungha Yang cfa8386dd0 nvdecoder: Enable zero-copy only if explicitly enabled
Keep pre-1.24 behavior unless user specifies the number of
output surface size. We are calculating output surface size
conservatively, and it can result in over allocation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6102>
2024-02-13 12:37:07 +00:00
Seungha Yang 59358e439d nvh265dec: Don't convert unknown video format to string
gst_video_format_to_string() method does not allow unknown format

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6102>
2024-02-13 12:37:06 +00:00
Tim-Philipp Müller 68d62a8433 realmedia: remove RealServer RTSP extension, RDT handling and PNM source
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6091>
2024-02-13 11:44:29 +00:00
Damian Hobson-Garcia 1ef7e9be73 GstShmAllocator: Map/unmap full buffer when padding is added
When allocating buffers with alignment parameters specified, it
may be necessary to overallocate memory to adjust to the requested
alignment.  Previously the padding length was not included in the mmaped
buffer size, leaving unmapped bytes at the end of the buffer.
This caused intermittent SEGV faults and valgrind failures when running
the wayland_threads example.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6104>
2024-02-12 16:19:35 -05:00
Jonas K Danielsson f0b8a33f10 check: Add valgrind leak exception for srt test
The srt unittest test_src_listener_sink_call will sometimes fail under
valgrind with the following splat:

 Memcheck, a memory error detector
 Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
 Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
 Parent PID: 14579

 HEAP SUMMARY:
     in use at exit: 799,848 bytes in 2,182 blocks
   total heap usage: 64,090 allocs, 61,908 frees, 37,891,032 bytes allocated

 120 bytes in 1 blocks are definitely lost in loss record 1,563 of 1,681
    at 0x4842FF5: operator new(unsigned long) (vg_replace_malloc.c:422)
    by 0x6031E29: srt::sync::SetThreadLocalError(CUDTException const&) (sync_posix.cpp:461)
    by 0x5FCD77E: CUDT::epoll_wait(int, std::set<int, std::less<int>,
    std::allocator<int> >*, std::set<int, std::less<int>,
    std::allocator<int> >*, long, std::set<int, std::less<int>,
    std::allocator<int> >*, std::set<int, std::less<int>, std::allocator<int> >*) [clone .cold] (api.cpp:3796)
    by 0x5FE2F79: UDT::epoll_wait2(int, int*, int*, int*, int*, long, int*, int*, int*, int*) (api.cpp:4277)
    by 0x5F0C626: gst_srt_object_read (gstsrtobject.c:1569)
    by 0x5F0F978: gst_srt_src_fill (gstsrtsrc.c:180)
    by 0x5F5A2A1: gst_base_src_default_create (gstbasesrc.c:1620)
    by 0x5F5C9AE: gst_base_src_get_range (gstbasesrc.c:2630)
    by 0x5F5EF5A: gst_base_src_loop (gstbasesrc.c:2959)
    by 0x4918B13: gst_task_func (gsttask.c:399)
    by 0x4A60B33: g_thread_pool_thread_proxy.lto_priv.0 (gthreadpool.c:354)
    by 0x4A5DC41: g_thread_proxy (gthread.c:826)
    by 0x4F532A4: start_thread (pthread_create.c:481)
    by 0x4C71322: clone (clone.S:95)

An issue has been started against libsrt here:

https://github.com/Haivision/srt/issues/2867

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6098>
2024-02-12 13:24:21 +00:00
Philippe Normand 6f778eebf9 dashdemux2: Basic support for container-specific-track-id tag
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6041>
2024-02-12 10:37:29 +00:00
Philippe Normand 080320609c dashdemux: Basic support for container-specific-track-id tag
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6041>
2024-02-12 10:37:29 +00:00
Philippe Normand e9ecde83a7 matroska-demux: Basic support for container-specific-track-id tag
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6041>
2024-02-12 10:37:29 +00:00
Philippe Normand 30bb88a91b qtdemux: Basic support for container-specific-track-id tag
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6041>
2024-02-12 10:37:29 +00:00
Philippe Normand 1ecabcd1c5 taglist: Register new tag for container specific track ID
Unique identifier for the audio, video or text track this tag is associated
with. The mappings for several container formats are defined in the [Sourcing
In-band Media Resource Tracks from Media Containers into HTML
specification](https://dev.w3.org/html5/html-sourcing-inband-tracks).

Based on previous patch by Brendan Long.
Fixes #45

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6041>
2024-02-12 10:37:29 +00:00
Seungha Yang 75ddcd7566 pluginloader-win32: Early terminate if plugin loader binary is not installed
External plugin loader support for Windows is introduced
in this dev cycle. Since helper binary was not required (useless)
before this version, people may not ship the binary
with new GStreamer version, then they will observe warning message.

Instead of displaying the warning at plugin loading time,
checks helper bin earlier and disable external plugin loader
if helper binary is not installed.

Fixes: https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/448
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6083>
2024-02-11 13:49:34 +00:00
Seungha Yang 693dbc9667 d3d12screencapturesrc: Fix choppy display
According to recommendation from MS, IDXGIOutputDuplication::ReleaseFrame()
needs to be called just before IDXGIOutputDuplication::AcquireNextFrame()
for performance reasons, so that driver can accumulate dirty rects
and update texture at once. But it seems to cause choppy output.
Do release acquired frame immediately once processing done,
like d3d11 implementation does.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6092>
2024-02-11 13:13:18 +00:00
Víctor Manuel Jáquez Leal b485417d03 vulkanh265dec: add H.265 decoder
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6089>
2024-02-10 17:17:24 +00:00
Víctor Manuel Jáquez Leal 4268268a79 tests: vkvideodecode: add H.265 decoding test
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6089>
2024-02-10 17:17:24 +00:00
Víctor Manuel Jáquez Leal 8a4a619c32 tests: vkvideodecode: choose the queue's codec
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6089>
2024-02-10 17:17:24 +00:00
Víctor Manuel Jáquez Leal d581690f61 tests: vkvideodecode: h264 prefix to global variables
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6089>
2024-02-10 17:17:24 +00:00
Víctor Manuel Jáquez Leal a853cc419f tests: vkvideodecode: refactor functions for later reuse
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6089>
2024-02-10 17:17:24 +00:00
Víctor Manuel Jáquez Leal 50791d66e1 vulkanh264dec: don't remove graphics queue if it's the same as decoder
Since graphics queue is used for the context transference. So lets' keep it with
its own reference.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6089>
2024-02-10 17:17:23 +00:00
Víctor Manuel Jáquez Leal 5d27f09740 vulkanh264dec: small cleanups
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6089>
2024-02-10 17:17:23 +00:00
Víctor Manuel Jáquez Leal 2011dec249 vulkan/decoder: fix documentation generation
GstVulkanDecoderParameters is an union, not a struct, and that isn't handled by
hotdoc.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6089>
2024-02-10 17:17:23 +00:00
Víctor Manuel Jáquez Leal f0c5a853a6 vulkan/decoder: don't initialize function table once
Since it has to be associated with the device and it gets destroyed when the
decoder is freed.

Now it's created when the decoder starts and it's flagged.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6089>
2024-02-10 17:17:23 +00:00
Markus Ebner bf936fa6c0 docs: Minor correction in keyframe-force.md
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6090>
2024-02-10 16:03:51 +00:00
Seungha Yang 36c4ef361b d3d12: Add VP8 decoder
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6088>
2024-02-10 21:23:51 +09:00
Seungha Yang e2eff3e4a3 d3d12decoder: Fix bitstream buffer usage
Resource state of a buffer in upload heap should stay in
generic-read although it's effectively in common state. Some drivers
complains about the wrong state.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6088>
2024-02-10 21:23:28 +09:00
Seungha Yang b3a29b61c5 dxvavp8decoder: Fix reference frame setting
Fixing typo

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6088>
2024-02-10 21:18:44 +09:00
Tim-Philipp Müller 9fe9e60012 aja: suppress compiler warnings for aja ntv2 subproject
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6087>
2024-02-10 10:10:06 +00:00
Seungha Yang c5e241932c amfcodec: Update plugin cache
Adding AV1 encoder documentation (added in 1.22) with various
new properties

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6084>
2024-02-10 01:18:27 +00:00
Jonas K Danielsson 87ab5adf7e meson: srt: make sure srt_dep is defined
Without this we will get errors when we try to build with srt disabled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6082>
2024-02-09 17:45:29 +00:00
Xavier Claessens d4de8f4b16 girs: update
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5829>
2024-02-09 15:45:33 +00:00
Xavier Claessens 561f8b71ee structure: Allow STRICT flag only in _serialize_full()
The STRICT flag makes _serialize() nullable which is an API break for
bindings. Forbid it and add _serialize_full() that accepts it and is
properly annotated.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5829>
2024-02-09 15:45:33 +00:00
Sebastian Dröge 2c8f232d79 sdpdemux: Add SDP message (aka session) attributes to the caps too
They apply to all medias, and if overridden by the specific media then
they would also be overridden just below in the created caps.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6079>
2024-02-09 14:54:29 +00:00
Seungha Yang b4ee86d1e7 ksdeviceprovider: Fix crash while probing device caps
Ignore unexpected media type reported by driver, instead of abort

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6081>
2024-02-09 14:09:07 +00:00
Edward Hervey a1cbe351ec musepack: Prefer using FFmpeg musepack decoder/demuxer
* Bump the rank of the musepack v7/v8 FFmpeg demuxers to SECONDARY
* Bump the rank of the musepack v7/v8 FFmpeg audio decoders to SECONDARY
* Demote the rank of the musepackdec element to MARGINAL

This is for two reasons:
* The musepack library is no longer maintained, whereas the FFmpeg
  implementation can/will receive fixes
* The `musepackdec` implementation was a all-in-one "parsing and decoding" blob
  which doesn't play nicely with decodebin3 and others

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6074>
2024-02-09 12:15:14 +00:00
Seungha Yang d2d2ac43e8 ccconverter: Send gap event if generated output is empty
Sends a gap event if nothing to output for a given input buffer.
For example, an input buffer might not contain any caption data
for downstream requested field, then we need to inform downstream
of the case.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6073>
2024-02-09 11:03:21 +00:00
Guillaume Desmottes 550a21ccbe avdtpsink: post error message when failing to start
Subclasses are supposed to report errors messages if their start
implementation failed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1678>
2024-02-09 10:09:13 +00:00
Sebastian Dröge 0871d1edc4 examples: webrtc: Update dependencies in Rust examples
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6078>
2024-02-09 09:35:10 +00:00
Sebastian Dröge 6bb47a125f orc: Pin subproject to 0.4.37
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6076>
2024-02-09 07:58:38 +00:00
Sebastian Dröge 728646cb12 gst-plugins-rs: Follow the 0.12 branch
After 1.24 release this should be switched to main.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6076>
2024-02-09 07:58:38 +00:00
Nirbheek Chauhan d0ae93771e meson: Don't use fs.copyfile() for qt6 resources
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3285

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6077>
2024-02-09 11:14:09 +05:30
Sebastian Dröge 847eac6e16 ci: Update to Rust 1.76
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6075>
2024-02-08 22:00:59 +00:00
Marvin Schmidt da6b28d90b wpe: Rename WPEView to GstWPEThreadedView
WebKit commit b12e7ed2ad3a ("[WPE] Upstream the new WPE platform API
https://bugs.webkit.org/show_bug.cgi?id=265286")[1] added a `WPEView` typedef
which clashes with our `WPEView` class.

Rename the `WPEView` class to `GstWPEThreadedView` to avoid the collision.
Also prefix the `WPEContextThread` class with `Gst` and rename the
source files to reflect the new class name and use lowercase while at it
for consistency

[1] b12e7ed2ad

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6065>
2024-02-08 20:06:08 +00:00
Carlos Rafael Giani cea5d19665 switchbin: Rework gst_switch_bin_get_allowed_caps() to limit path lock
Previously, the path lock was held even while issuing caps queries to
other elements. This can lead to deadlocks in more complex pipelines.
Avoid this by reworking gst_switch_bin_get_allowed_caps() to acquire
references to switchbin paths and then releasing the path lock.
Subsequent operations in that function then act on the acquired
references, thus eliminating the need for holding the path lock for
the entirety of that function.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4632>
2024-02-08 18:33:29 +00:00
Carlos Rafael Giani cfe484d983 switchbin: Always respond to caps query with all allowed caps
The caps query specifies _all_ caps that the element can handle, not just
caps from the current path element. If for example a switchbin has two
paths, with one having an element that handles video/x-h264, and another
path whose element handles video/x-raw, and the second path is the
current path, then the existing code would report only video/x-raw as
supported. Fix this by report all allowed caps, even if there is a
current path defined.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4632>
2024-02-08 18:33:29 +00:00
Carlos Rafael Giani c994f27f34 switchbin: Update and improve documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4632>
2024-02-08 18:33:29 +00:00
Carlos Rafael Giani fcc3420929 switchbin: Forward filter caps to internal caps queries
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4632>
2024-02-08 18:33:29 +00:00
Carlos Rafael Giani d0b9f9fc27 switchbin: Rework allowed-caps computation to allow for passthrough paths
The rationale is that a passthrough path (= one with no element) behaves
as if the switchbin's sink- and srcpad were one. In particular, internal
caps queries (needed for computing the allowed caps) then go to the peers
instead to path elements. Rework gst_switch_bin_get_allowed_caps () for
a clear handling of NULL path elements and for proper dataflow passthrough
and caps & accept-caps query handling.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4632>
2024-02-08 18:33:29 +00:00
Carlos Rafael Giani 0f279cdb86 switchbin: Improve filter caps application
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4632>
2024-02-08 18:33:29 +00:00
Carlos Rafael Giani 9429a69f1c switchbin: Remove leftover drop probe code bits
The drop probe was present in early switchbin versions to implement paths
that drop dataflow. However, this feature turned out to be too problematic
and thus was removed. Some bits remained though. This commit removes those
bits and clarifies that in the current switchbin version, a NULL path
element instead means passthrough.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4632>
2024-02-08 18:33:29 +00:00
Sebastian Dröge 3ca5a2554f ajasink: Add HANC/VANC ancillary data from GstAncillaryMeta
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5488>
2024-02-08 15:28:39 +00:00
Sebastian Dröge efa7e70d16 ajasrc: Add GstAncillaryMeta for any HANC/VANC ancillary data that is captured
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5488>
2024-02-08 15:28:39 +00:00
Edward Hervey b0de86ff68 video-anc: New GstMeta for SMPTE ST-291M Ancillary Data
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5488>
2024-02-08 15:28:39 +00:00
Ignazio Pillai 34741e1db2 cutter: add audio-level-meta
Set GstAudioLevelMeta on buffers

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5771>
2024-02-08 13:52:40 +00:00
Vivia Nikolaidou 60d9cfc954 videorate: Correct segment-based calculations
It was adding and subtracting the segment base here and there, but it
was also doing so incorrectly, leading to various calculation errors.

Fixed a few bugs uncovered, related to getting a new segment:
* If we reset base_ts/next_ts/out_frame_count, also reset prevbuf
* Only do so if the new segment is different than the previous one

Also replaced a few occurrences of GST_BUFFER_TIMESTAMP with
GST_BUFFER_PTS for consistency.

Integrated the tests of
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2186
, now passing. The test_segment_update_same test had to be fixed,
because it was wrongly assuming that we would not fill the gap inside
the new-but-same segment.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6031>
2024-02-08 12:08:08 +00:00
Guillaume Desmottes b6d8a55103 basesrc: add FIXME 2.0 about automatic_eos
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1334>
2024-02-08 10:51:56 +01:00
Daniel Morin afa41ec3bc analyticsoverlay: fix gst-launch exemple
- Adapt example to new onnx elements.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6062>
2024-02-07 22:39:57 +00:00
Seungha Yang d444fe3fdc nvcodec: Update plugin cache
Updating plugin cache for IPC elements, JPEG encoder, and newly added
properties. Also removing Gst*SLDec which does not exist anymore
but renamed to Gst*Dec.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6070>
2024-02-07 22:06:39 +00:00
Sebastian Dröge 77a09c1781 analytics: Allow getting a related meta with ANY type
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6068>
2024-02-07 14:07:52 +00:00
Jan Schmidt 6f652ec8a1 tsdemux: Detect reaching the end of configured segment
If the current segment has a configured stop point, detect
when when pad timestamps proceed past that point and mark
them as EOS. Otherwise, tsdemux continues streaming
the whole input downstream (unless something downstream detects
and returns EOS for us)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6023>
2024-02-07 07:36:02 +00:00
Jan Schmidt 61aefda664 tsdemux: Support segment seeking
Add support for segment seeks and posting segment-done for
seamless non-flushing looping

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6023>
2024-02-07 07:36:02 +00:00
Hosang Lee df0be57d38 tracing: Fix some typos
Fix example commands to work when copied/pasted to the terminal.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6064>
2024-02-07 03:59:31 +00:00
Nirbheek Chauhan f6f448bb80 meson: Fix several warnings in the build
Deprecations, incorrect options, etc.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6058>
2024-02-06 23:57:17 +00:00
Nirbheek Chauhan 63322705c8 good/tests: Don't enable soup tests if soup is disabled
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3268

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6058>
2024-02-06 23:57:17 +00:00
Tim-Philipp Müller 2111d6f015 Back to development
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6066>
2024-02-06 18:29:31 +00:00
1136 changed files with 101021 additions and 34516 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

@ -1,9 +1,9 @@
include:
- project: 'freedesktop/ci-templates'
ref: 185ede0e9b9b1924b92306ab8b882a6294e92613
ref: "801093be0b88f23c8dbabe9cfce7134548f7ccdc"
file: '/templates/fedora.yml'
- project: 'freedesktop/ci-templates'
ref: 185ede0e9b9b1924b92306ab8b882a6294e92613
ref: "801093be0b88f23c8dbabe9cfce7134548f7ccdc"
file: '/templates/debian.yml'
###
# IMPORTANT
@ -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,6 +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
@ -58,6 +62,7 @@ variables:
-Drs=disabled
-Dgpl=enabled
-Dintrospection=enabled
--force-fallback-for=soundtouch
SIMPLE_BUILD: >-
${DEFAULT_MESON_ARGS}
@ -121,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"
@ -133,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' ]
@ -161,6 +187,7 @@ gst-indent amd64 docker:
FDO_DISTRIBUTION_TAG: "$LINT_TAG-$GST_UPSTREAM_BRANCH"
FDO_DISTRIBUTION_PACKAGES: 'python3-pip git'
FDO_DISTRIBUTION_EXEC: 'ci/docker/lint/prepare.sh'
FDO_USER: "ciuser"
commitlint docker:
extends:
@ -214,6 +241,8 @@ gst indent:
script:
- ./scripts/check-format-c
- ./scripts/format-csharp --check
# We want both wraps to use the same version, overkill to create a separate job for this
- cmp subprojects/gtk-sharp.wrap subprojects/gstreamer-sharp/subprojects/gtk-sharp.wrap
rules:
- !reference [.upstream-branch-rules, rules]
- if: '$CI_PROJECT_NAMESPACE != "gstreamer" || $CI_COMMIT_BRANCH != $GST_UPSTREAM_BRANCH'
@ -242,6 +271,8 @@ commitlint:
needs:
- job: 'commitlint docker'
artifacts: false
before_script:
- git config --global --add safe.directory $CI_PROJECT_DIR
script:
- echo $CI_MERGE_REQUEST_DIFF_BASE_SHA
- gitlint --commits $CI_MERGE_REQUEST_DIFF_BASE_SHA..HEAD
@ -255,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'
@ -320,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:
@ -396,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'
@ -415,7 +461,6 @@ build fedora clang:
-Dgst-plugins-base:pango=enabled
-Dgst-plugins-good:cairo=enabled
-Dgst-plugins-good:soup=enabled
-Dgst-plugins-good:soup-lookup-dep=true
-Dgst-plugins-bad:d3d11-wgc=enabled
rules:
- !reference [.upstream-branch-rules, rules]
@ -483,9 +528,8 @@ build vs2022 amd64 full-static:
# Setting up a cross build with MSVC is still non-trivial because
# the --vsenv argument cannot be used to set it up
- echo $env:MESON_CROSS_ARGS
- cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
meson setup build $env:MESON_ARGS $env:MESON_CROSS_ARGS &&
meson compile -C build --jobs $env:FDO_CI_CONCURRENT"
- cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH && meson setup build $env:MESON_ARGS $env:MESON_CROSS_ARGS"
- cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH && meson compile -C build --jobs $env:FDO_CI_CONCURRENT"
build vs2022 x86:
extends: '.build windows cross'
@ -510,7 +554,6 @@ build vs2022 arm64:
MESON_CROSS_ARGS: >-
-Dgst-plugins-base:pango=disabled
-Dgst-plugins-good:cairo=disabled
-Dgst-plugins-good:soup-lookup-dep=false
-Dgst-devtools:cairo=disabled
-Dpython=disabled
-Dintrospection=disabled
@ -562,7 +605,6 @@ build macos:
-Dgst-plugins-base:pango=enabled
-Dgst-plugins-good:cairo=enabled
-Dgst-plugins-good:soup=enabled
-Dgst-plugins-good:soup-lookup-dep=true
# ---- Tests ----- #

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-01-16.0'
FEDORA_TAG: '2024-04-22.4'
DEBIAN_TAG: '2024-04-22.4'
INDENT_TAG: '2023-08-24.3'
LINT_TAG: '2023-02-16.5'
LINT_TAG: '2024-02-20.0'
WINDOWS_TAG: '2023-12-29.0'
WINDOWS_TAG: '2024-04-10.0'

View file

@ -4,7 +4,7 @@
<!-- For any GStreamer usage questions or application development support
please head over to our new GStreamer Discourse forum at
https://discourse.gstreamer.org/ instead, or find us on
the #gstreamer IRC channel on https://www.oftc.net -->
the GStreamer Matrix room at https://matrix.to/#/#gstreamer:gstreamer.org -->
#### Expected Behavior
<!-- What did you expect to happen -->

View file

@ -1,4 +1,5 @@
For any GStreamer usage questions or application development support
please head over to our new GStreamer Discourse forum at
https://discourse.gstreamer.org instead, or find us on the
`#gstreamer` IRC channel on the OFTC IRC network (https://www.oftc.net).
GStreamer Matrix room at https://matrix.to/#/#gstreamer:gstreamer.org

View file

@ -13,11 +13,11 @@ 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]
regex=^ \#\d(.*):\d+$
[ignore-by-title]
regex=^Release(.*)
regex=^(Release|Back to development)

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$)

View file

@ -12,17 +12,17 @@ Our documentation, including tutorials, API reference and FAQ can be found at
https://gstreamer.freedesktop.org/documentation/
You can subscribe to our mailing lists:
You can ask questions on the GStreamer Discourse at
https://lists.freedesktop.org/mailman/listinfo/gstreamer-announce
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
https://discourse.gstreamer.org/
We track bugs, feature requests and merge requests (patches) in GitLab at
https://gitlab.freedesktop.org/gstreamer/
You can join us on IRC - #gstreamer on irc.oftc.net
You can join us on our Matrix room at
https://matrix.to/#/#gstreamer:gstreamer.org
This repository contains all official modules supported by the GStreamer
community which can be found in the `subprojects/` directory.

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,3 +1,5 @@
#! /bin/bash
set -eux
python3 -m pip install gitlint

View file

@ -1,6 +1,6 @@
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
$rust_version = '1.75.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.75.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.28+cargo-0.75.0
cargo install cargo-c --version 0.9.31+cargo-0.78.0
rustup --version
cargo --version

View file

@ -4487,21 +4487,21 @@ composition.</doc>
</field>
<field name="posx" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-editing-services/ges/ges-frame-composition-meta.h">The desired x position.</doc>
<type name="gint" c:type="gint"/>
<type name="gdouble" c:type="gdouble"/>
</field>
<field name="posy" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-editing-services/ges/ges-frame-composition-meta.h">The desired y position.</doc>
<type name="gint" c:type="gint"/>
<type name="gdouble" c:type="gdouble"/>
</field>
<field name="height" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-editing-services/ges/ges-frame-composition-meta.h">The desired height of the video. -1 means that no scaling should be
applied.</doc>
<type name="gint" c:type="gint"/>
<type name="gdouble" c:type="gdouble"/>
</field>
<field name="width" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-editing-services/ges/ges-frame-composition-meta.h">The desired width of the video. -1 means that no scaling should beapplied
applied.</doc>
<type name="gint" c:type="gint"/>
<type name="gdouble" c:type="gdouble"/>
</field>
<field name="zorder" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-editing-services/ges/ges-frame-composition-meta.h">The desired z order.</doc>
@ -15458,15 +15458,15 @@ 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_MICRO" value="1" c:type="GES_VERSION_MICRO">
<constant name="VERSION_MICRO" value="0" c:type="GES_VERSION_MICRO">
<source-position filename="../subprojects/gst-editing-services/ges/ges-version.h"/>
<type name="gint" c:type="gint"/>
</constant>
<constant name="VERSION_MINOR" value="23" 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

@ -27929,6 +27929,14 @@ the elements contained in that bin.</doc>
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstobject.h">the object is expected to stay alive even
after gst_deinit() has been called and so should be ignored by leak
detection tools. (Since: 1.10)</doc>
</member>
<member name="constructed" value="2" c:identifier="GST_OBJECT_FLAG_CONSTRUCTED" version="1.24" glib:nick="constructed">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstobject.h">Flag that's set when the object has been constructed. This can be used by
API such as base class setters to differentiate between the case where
they're called from a subclass's instance init function (and where the
object isn't fully constructed yet, and so one shouldn't do anything but
set values in the instance structure), and the case where the object is
constructed.</doc>
</member>
<member name="last" value="16" c:identifier="GST_OBJECT_FLAG_LAST" glib:nick="last">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstobject.h">subclasses can add additional flags starting from this flag</doc>
@ -30977,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"/>
@ -33420,6 +33431,54 @@ arguments separated by predefined delimiters (see above).</doc>
</parameter>
</parameters>
</method>
<method name="add_status_error" c:identifier="gst_plugin_add_status_error" version="1.24">
<source-position filename="../subprojects/gstreamer/gst/gstplugin.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="plugin" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">a #GstPlugin</doc>
<type name="Plugin" c:type="GstPlugin*"/>
</instance-parameter>
<parameter name="message" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">the status error message</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>
</parameters>
</method>
<method name="add_status_info" c:identifier="gst_plugin_add_status_info" version="1.24">
<source-position filename="../subprojects/gstreamer/gst/gstplugin.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="plugin" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">a #GstPlugin</doc>
<type name="Plugin" c:type="GstPlugin*"/>
</instance-parameter>
<parameter name="message" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">the status info message</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>
</parameters>
</method>
<method name="add_status_warning" c:identifier="gst_plugin_add_status_warning" version="1.24">
<source-position filename="../subprojects/gstreamer/gst/gstplugin.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="plugin" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">a #GstPlugin</doc>
<type name="Plugin" c:type="GstPlugin*"/>
</instance-parameter>
<parameter name="message" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">the status warning message</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>
</parameters>
</method>
<method name="get_cache_data" c:identifier="gst_plugin_get_cache_data">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">Gets the plugin specific data cache. If it is %NULL there is no cached data
stored. This is the case when the registry is getting rebuilt.</doc>
@ -33556,6 +33615,51 @@ available.</doc>
</instance-parameter>
</parameters>
</method>
<method name="get_status_errors" c:identifier="gst_plugin_get_status_errors" version="1.24">
<source-position filename="../subprojects/gstreamer/gst/gstplugin.h"/>
<return-value transfer-ownership="full" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">an array of plugin status error messages, or NULL</doc>
<array c:type="gchar**">
<type name="utf8"/>
</array>
</return-value>
<parameters>
<instance-parameter name="plugin" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">a #GstPlugin</doc>
<type name="Plugin" c:type="GstPlugin*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_status_infos" c:identifier="gst_plugin_get_status_infos" version="1.24">
<source-position filename="../subprojects/gstreamer/gst/gstplugin.h"/>
<return-value transfer-ownership="full" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">an array of plugin status info messages, or NULL</doc>
<array c:type="gchar**">
<type name="utf8"/>
</array>
</return-value>
<parameters>
<instance-parameter name="plugin" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">a #GstPlugin</doc>
<type name="Plugin" c:type="GstPlugin*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_status_warnings" c:identifier="gst_plugin_get_status_warnings" version="1.24">
<source-position filename="../subprojects/gstreamer/gst/gstplugin.h"/>
<return-value transfer-ownership="full" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">an array of plugin status warning messages, or NULL</doc>
<array c:type="gchar**">
<type name="utf8"/>
</array>
</return-value>
<parameters>
<instance-parameter name="plugin" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">a #GstPlugin</doc>
<type name="Plugin" c:type="GstPlugin*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_version" c:identifier="gst_plugin_get_version">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstplugin.c">get the version of the plugin</doc>
<source-position filename="../subprojects/gstreamer/gst/gstplugin.h"/>
@ -41180,7 +41284,7 @@ a-struct, nested=[nested-struct, nested=true]
```
&gt; *note*: gst_structure_to_string() won't use that syntax for backward
&gt; compatibility reason, gst_structure_serialize() has been added for
&gt; compatibility reason, gst_structure_serialize_full() has been added for
&gt; that purpose.</doc>
<source-position filename="../subprojects/gstreamer/gst/gststructure.h"/>
<field name="type" writable="1">
@ -42630,7 +42734,7 @@ argument is ignored.</doc>
</parameter>
</parameters>
</method>
<method name="serialize" c:identifier="gst_structure_serialize" version="1.20">
<method name="serialize" c:identifier="gst_structure_serialize" version="1.20" deprecated="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gststructure.c">Converts @structure to a human-readable string representation.
This version of the caps serialization function introduces support for nested
@ -42638,10 +42742,35 @@ structures and caps but the resulting strings won't be parsable with
GStreamer prior to 1.20 unless #GST_SERIALIZE_FLAG_BACKWARD_COMPAT is passed
as @flag.
%GST_SERIALIZE_FLAG_STRICT flags is not allowed because it would make this
function nullable which is an API break for bindings.
Use gst_structure_serialize_full() instead.
Free-function: g_free</doc>
<doc-deprecated xml:space="preserve">Use gst_structure_serialize_full() instead.</doc-deprecated>
<source-position filename="../subprojects/gstreamer/gst/gststructure.h"/>
<return-value transfer-ownership="full">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gststructure.c">a pointer to string allocated by g_malloc().
g_free() after usage.</doc>
<type name="utf8" c:type="gchar*"/>
</return-value>
<parameters>
<instance-parameter name="structure" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gststructure.c">a #GstStructure</doc>
<type name="Structure" c:type="const GstStructure*"/>
</instance-parameter>
<parameter name="flags" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gststructure.c">The flags to use to serialize structure</doc>
<type name="SerializeFlags" c:type="GstSerializeFlags"/>
</parameter>
</parameters>
</method>
<method name="serialize_full" c:identifier="gst_structure_serialize_full" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gststructure.c">Alias for gst_structure_serialize() but with nullable annotation because it
can return %NULL when %GST_SERIALIZE_FLAG_STRICT flag is set.</doc>
<source-position filename="../subprojects/gstreamer/gst/gststructure.h"/>
<return-value transfer-ownership="full" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gststructure.c">a pointer to string allocated by g_malloc().
g_free() after usage.</doc>
<type name="utf8" c:type="gchar*"/>
</return-value>
@ -42845,7 +42974,7 @@ This prints the structure in human readable form.
This function will lead to unexpected results when there are nested #GstCaps
/ #GstStructure deeper than one level, you should user
gst_structure_serialize() instead for those cases.
gst_structure_serialize_full() instead for those cases.
Free-function: g_free</doc>
<source-position filename="../subprojects/gstreamer/gst/gststructure.h"/>
@ -43172,6 +43301,14 @@ attachment)</doc>
<source-position filename="../subprojects/gstreamer/gst/gsttaglist.h"/>
<type name="utf8" c:type="gchar*"/>
</constant>
<constant name="TAG_CONTAINER_SPECIFIC_TRACK_ID" value="container-specific-track-id" c:type="GST_TAG_CONTAINER_SPECIFIC_TRACK_ID" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gsttaglist.h">Unique identifier for the audio, video or text track this tag is associated
with. The mappings for several container formats are defined in the [Sourcing
In-band Media Resource Tracks from Media Containers into HTML
specification](https://dev.w3.org/html5/html-sourcing-inband-tracks/).</doc>
<source-position filename="../subprojects/gstreamer/gst/gsttaglist.h"/>
<type name="utf8" c:type="gchar*"/>
</constant>
<constant name="TAG_COPYRIGHT" value="copyright" c:type="GST_TAG_COPYRIGHT">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gsttaglist.h">copyright notice of the data (string)</doc>
<source-position filename="../subprojects/gstreamer/gst/gsttaglist.h"/>
@ -49252,17 +49389,17 @@ 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_MICRO" value="1" c:type="GST_VERSION_MICRO">
<constant name="VERSION_MICRO" value="0" c:type="GST_VERSION_MICRO">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstversion.h">The micro 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_MINOR" value="23" 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"/>
@ -49631,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"/>
@ -51851,7 +52445,16 @@ which is then encapsulated in a GstProtectionMeta object and attached to
the corresponding output buffer using the gst_buffer_add_protection_meta()
function. The information in this attached GstProtectionMeta would be
used by a downstream decrypter element to recover the original unencrypted
frame.</doc>
frame.
In addition to the #GstProtectionMeta demuxers signal encrypted streams with
specific caps. The caps #GstStructure name will usually depend on the
encryption scheme, for instance Common Encryption will be signaled with
`application/x-cenc`. To prevent loss of information the media type of the
decrypted stream will be stored in a `original-media-type` string field.
Downstream elements can re-use that information, for instance decryptors can
set their source pad caps according to the `original-media-type` received on
their sink pad.</doc>
</docsection>
<docsection name="gststreams">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gststreams.c">A #GstStream is a high-level object defining a stream of data which is, or
@ -52347,6 +52950,57 @@ not allow to determine that size, @consumed is set to 0.</doc>
</parameter>
</parameters>
</function>
<function name="meta_info_new" c:identifier="gst_meta_info_new" moved-to="MetaInfo.new" version="1.24" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstmeta.c">Creates a new structure that needs to be filled before being
registered. This structure should filled and then registered with
gst_meta_info_register().
Example:
```c
const GstMetaInfo *
gst_my_meta_get_info (void)
{
static const GstMetaInfo *meta_info = NULL;
if (g_once_init_enter ((GstMetaInfo **) &amp; meta_info)) {
GstMetaInfo *info = gst_meta_info_new (
gst_my_meta_api_get_type (),
"GstMyMeta",
sizeof (GstMyMeta));
const GstMetaInfo *meta = NULL;
info-&gt;init_func = my_meta_init;
info-&gt;free_func = my_meta_free;
info-&gt;transform_func = my_meta_transform;
info-&gt;serialize_func = my_meta_serialize;
info-&gt;deserialize_func = my_meta_deserialize;
meta = gst_meta_info_register (info);
g_once_init_leave ((GstMetaInfo **) &amp; meta_info, (GstMetaInfo *) meta);
}
return meta_info;
}
```</doc>
<source-position filename="../subprojects/gstreamer/gst/gstmeta.h"/>
<return-value>
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstmeta.c">a new #GstMetaInfo that needs to be filled</doc>
<type name="MetaInfo" c:type="GstMetaInfo*"/>
</return-value>
<parameters>
<parameter name="api" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstmeta.c">the type of the #GstMeta API</doc>
<type name="GType" c:type="GType"/>
</parameter>
<parameter name="impl" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstmeta.c">the name of the #GstMeta implementation</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>
<parameter name="size" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstmeta.c">the size of the #GstMeta structure</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
</parameters>
</function>
<function name="meta_register" c:identifier="gst_meta_register" moved-to="Meta.register" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstmeta.c">Register a new #GstMeta implementation.
@ -55924,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

@ -11,10 +11,6 @@ and/or use gtk-doc annotations. -->
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<type name="guintptr" c:type="guintptr"/>
</alias>
<constant name="AN_RELATION_META_TAG" value="GST-ANALYSIS-RELATION-META-TAG" c:type="GST_AN_RELATION_META_TAG">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<type name="utf8" c:type="gchar*"/>
</constant>
<record name="ClsMtd" c:type="GstAnalyticsClsMtd" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.h">Handle containing data required to use gst_analytics_cls_mtd APIs. This type
is generally expected to be allocated on the stack.</doc>
@ -98,7 +94,7 @@ Get quark of the class at @index</doc>
</parameters>
</method>
<function name="get_mtd_type" c:identifier="gst_analytics_cls_mtd_get_mtd_type" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">Get a id identifying #GstAnalyticsMtd type.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">Get an id identifying #GstAnalyticsMtd type.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">opaque id of #GstAnalyticsMtd type</doc>
@ -106,11 +102,13 @@ Get quark of the class at @index</doc>
</return-value>
</function>
</record>
<constant name="INF_RELATION_SPAN" value="-1" c:type="GST_INF_RELATION_SPAN">
<constant name="INF_RELATION_SPAN" value="-1" c:type="GST_INF_RELATION_SPAN" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h">Passes to functions asking for a relation span when the span is
infinite.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<type name="gint" c:type="gint"/>
</constant>
<function-macro name="MTD_CAST" c:identifier="GST_ANALYTICS_MTD_CAST" introspectable="0">
<function-macro name="MTD_CAST" c:identifier="GST_ANALYTICS_MTD_CAST" version="1.24" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<parameters>
<parameter name="mtd">
@ -136,6 +134,7 @@ identified by @id is stored.</doc>
<type name="RelationMeta" c:type="GstAnalyticsRelationMeta*"/>
</field>
<method name="get_id" c:identifier="gst_analytics_mtd_get_id" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Get instance id</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Id of @instance</doc>
@ -143,8 +142,7 @@ identified by @id is stored.</doc>
</return-value>
<parameters>
<instance-parameter name="instance" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Instance of #GstAnalyticsMtd
Get instance id</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Instance of #GstAnalyticsMtd</doc>
<type name="Mtd" c:type="GstAnalyticsMtd*"/>
</instance-parameter>
</parameters>
@ -164,8 +162,7 @@ Get analysis result type.</doc>
</parameters>
</method>
<method name="get_size" c:identifier="gst_analytics_mtd_get_size" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">@instance Instance of #GstAnalyticsRelatableMtd
Get instance size</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Get instance size</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Size (in bytes) of this instance or 0 on failure.</doc>
@ -173,6 +170,7 @@ Get instance size</doc>
</return-value>
<parameters>
<instance-parameter name="instance" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Instance of #GstAnalyticsMtd</doc>
<type name="Mtd" c:type="GstAnalyticsMtd*"/>
</instance-parameter>
</parameters>
@ -192,9 +190,12 @@ Get instance size</doc>
</parameters>
</function>
</record>
<record name="MtdImpl" c:type="GstAnalyticsMtdImpl">
<record name="MtdImpl" c:type="GstAnalyticsMtdImpl" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h">This structure must be provided when registering a new type of Mtd. It must
have a static lifetime (never be freed).</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<field name="name" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h">The name of the metadata type</doc>
<type name="utf8" c:type="const char*"/>
</field>
<field name="mtd_meta_transform">
@ -222,7 +223,7 @@ Get instance size</doc>
</parameters>
</callback>
</field>
<field name="_reserved" writable="1">
<field name="_reserved" readable="0" private="1">
<array zero-terminated="0" fixed-size="20">
<type name="gpointer" c:type="gpointer"/>
</array>
@ -311,7 +312,7 @@ identified by @id is stored.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Get an id that represent object-detection metadata type</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Opaqu id of the #GstAnalyticsMtd type</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Opaque id of the #GstAnalyticsMtd type</doc>
<type name="MtdType" c:type="GstAnalyticsMtdType"/>
</return-value>
</function>
@ -336,7 +337,11 @@ identified by @id is stored.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h">Only use for criteria.</doc>
</member>
</bitfield>
<record name="RelationMeta" c:type="GstAnalyticsRelationMeta" disguised="1">
<record name="RelationMeta" c:type="GstAnalyticsRelationMeta" disguised="1" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h">An opaque #GstMeta that can be used to hold various types of results
from analysis processes.
The content should be accessed through the API.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<method name="add_cls_mtd" c:identifier="gst_analytics_relation_meta_add_cls_mtd" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">Add analytic classification metadata to @instance.</doc>
@ -374,14 +379,12 @@ identified by @id is stored.</doc>
</parameter>
</parameters>
</method>
<method name="add_mtd" c:identifier="gst_analytics_relation_meta_add_mtd" introspectable="0">
<method name="add_mtd" c:identifier="gst_analytics_relation_meta_add_mtd" version="1.24" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Add a relatable metadata to @meta. This method is meant to be used by
new struct sub-classing GstAnalyticsRelatableMtd.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">A pointer to a memory area of size @size where to put the data
Since 1.24</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">A pointer to a memory area of size @size where to put the data</doc>
<type name="gpointer" c:type="gpointer"/>
</return-value>
<parameters>
@ -499,7 +502,7 @@ Add an analytic tracking metadata to @instance.</doc>
</parameter>
</parameters>
</method>
<method name="exist" c:identifier="gst_analytics_relation_meta_exist">
<method name="exist" c:identifier="gst_analytics_relation_meta_exist" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Verify existence of relation(s) between @an_meta_first_d and
@an_meta_second_id according to relation condition @cond_types. It optionally
also return a shortest path of relations ( compliant with @cond_types)
@ -507,9 +510,7 @@ between @an_meta_first_id and @an_meta_second_id.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">TRUE if a relation between exit between @an_meta_first_id and
@an_meta_second_id, otherwise FALSE.
Since 1.24</doc>
@an_meta_second_id, otherwise FALSE.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
@ -550,14 +551,12 @@ Since 1.24</doc>
</parameter>
</parameters>
</method>
<method name="get_cls_mtd" c:identifier="gst_analytics_relation_meta_get_cls_mtd">
<method name="get_cls_mtd" c:identifier="gst_analytics_relation_meta_get_cls_mtd" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">Fill @rlt if a analytics-meta with id == @an_meta_id exist in @meta instance,
otherwise this method return FALSE and @rlt is invalid.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">TRUE if successful.
Since 1.24</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">TRUE if successful.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
@ -576,12 +575,10 @@ Since 1.24</doc>
</parameter>
</parameters>
</method>
<method name="get_direct_related" c:identifier="gst_analytics_relation_meta_get_direct_related">
<method name="get_direct_related" c:identifier="gst_analytics_relation_meta_get_direct_related" version="1.24">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">TRUE if @rlt_mtd was updated, other wise FALSE
Since 1.24</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">TRUE if @rlt_mtd was updated, other wise FALSE</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
@ -614,14 +611,12 @@ Since 1.24</doc>
</parameter>
</parameters>
</method>
<method name="get_mtd" c:identifier="gst_analytics_relation_meta_get_mtd">
<method name="get_mtd" c:identifier="gst_analytics_relation_meta_get_mtd" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Fill @rlt if a analytics-meta with id == @an_meta_id exist in @meta instance,
otherwise this method return FALSE and @rlt is invalid.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">TRUE if successful.
Since 1.24</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">TRUE if successful.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
@ -645,12 +640,10 @@ Since 1.24</doc>
</parameter>
</parameters>
</method>
<method name="get_mtd_data" c:identifier="gst_analytics_relation_meta_get_mtd_data" introspectable="0">
<method name="get_mtd_data" c:identifier="gst_analytics_relation_meta_get_mtd_data" version="1.24" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Analytics data pointer
Since 1.24</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Analytics data pointer</doc>
<type name="gpointer" c:type="gpointer"/>
</return-value>
<parameters>
@ -664,14 +657,12 @@ Since 1.24</doc>
</parameter>
</parameters>
</method>
<method name="get_od_mtd" c:identifier="gst_analytics_relation_meta_get_od_mtd">
<method name="get_od_mtd" c:identifier="gst_analytics_relation_meta_get_od_mtd" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Fill @rlt if a analytics-meta with id == @an_meta_id exist in @meta instance,
otherwise this method return FALSE and @rlt is invalid.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">TRUE if successful.
Since 1.24</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">TRUE if successful.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
@ -680,7 +671,7 @@ Since 1.24</doc>
<type name="RelationMeta" c:type="GstAnalyticsRelationMeta*"/>
</instance-parameter>
<parameter name="an_meta_id" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Id of #GstAnalyticsOdMtd instance to retrieve</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Id of #GstAnalyticsODMtd instance to retrieve</doc>
<type name="guint" c:type="guint"/>
</parameter>
<parameter name="rlt" direction="out" caller-allocates="1" transfer-ownership="none">
@ -691,13 +682,12 @@ Since 1.24</doc>
</parameters>
</method>
<method name="get_relation" c:identifier="gst_analytics_relation_meta_get_relation" version="1.24">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">relation description between first and second analysis-meta.
Get relations between first and second analysis-meta.
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Get relations between first and second analysis-meta.
Ids (@an_meta_first_id and @an_meta_second_id) must be from a call to
@gst_analytics_mtd_get_id (handle).</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">relation description between first and second analysis-meta.</doc>
<type name="RelTypes" c:type="GstAnalyticsRelTypes"/>
</return-value>
<parameters>
@ -715,14 +705,12 @@ Ids (@an_meta_first_id and @an_meta_second_id) must be from a call to
</parameter>
</parameters>
</method>
<method name="get_tracking_mtd" c:identifier="gst_analytics_relation_meta_get_tracking_mtd">
<method name="get_tracking_mtd" c:identifier="gst_analytics_relation_meta_get_tracking_mtd" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c">Fill @rlt if a analytics-meta with id == @an_meta_id exist in @meta instance,
otherwise this method return FALSE and @rlt is invalid.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c">TRUE if successful.
Since 1.24</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c">TRUE if successful.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
@ -741,12 +729,10 @@ Since 1.24</doc>
</parameter>
</parameters>
</method>
<method name="iterate" c:identifier="gst_analytics_relation_meta_iterate">
<method name="iterate" c:identifier="gst_analytics_relation_meta_iterate" version="1.24">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">FALSE if end was reached and iteration is completed.
Since 1.24</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">FALSE if end was reached and iteration is completed.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
@ -800,7 +786,8 @@ Ids must have been obtained a call to
</parameter>
</parameters>
</method>
<function name="get_info" c:identifier="gst_analytics_relation_meta_get_info">
<function name="get_info" c:identifier="gst_analytics_relation_meta_get_info" version="1.24" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Get the meta info</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none">
<type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>
@ -901,7 +888,7 @@ Get the opaque id identifying the relatable type</doc>
</return-value>
</function>
</record>
<function name="buffer_add_analytics_relation_meta" c:identifier="gst_buffer_add_analytics_relation_meta">
<function name="buffer_add_analytics_relation_meta" c:identifier="gst_buffer_add_analytics_relation_meta" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Attach a analysis-results-meta-relation meta (#GstAnalyticsRelationMeta)to @buffer.
A #GstAnalyticsRelationMeta is a metadata describing relation between other
@ -909,9 +896,7 @@ analysis meta. It's more efficient to use #gst_buffer_add_analytics_relation_met
and providing the maximum number of analysis meta that will attached to a buffer.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Newly attached #GstAnalyticsRelationMeta
Since 1.24</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Newly attached #GstAnalyticsRelationMeta</doc>
<type name="RelationMeta" c:type="GstAnalyticsRelationMeta*"/>
</return-value>
<parameters>
@ -921,16 +906,14 @@ Since 1.24</doc>
</parameter>
</parameters>
</function>
<function name="buffer_add_analytics_relation_meta_full" c:identifier="gst_buffer_add_analytics_relation_meta_full">
<function name="buffer_add_analytics_relation_meta_full" c:identifier="gst_buffer_add_analytics_relation_meta_full" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Attache a analysis-results relation-meta (#GstAnalyticsRelationMeta) to @buffer.
A #GstAnalyticsRelationMeta is a metadata describing relation between other
analysis meta.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Newly attached #GstAnalyticsRelationMeta
Since 1.24</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Newly attached #GstAnalyticsRelationMeta</doc>
<type name="RelationMeta" c:type="GstAnalyticsRelationMeta*"/>
</return-value>
<parameters>
@ -959,13 +942,36 @@ Since 1.24</doc>
</parameters>
</function>
<function name="cls_mtd_get_mtd_type" c:identifier="gst_analytics_cls_mtd_get_mtd_type" moved-to="ClsMtd.get_mtd_type" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">Get a id identifying #GstAnalyticsMtd type.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">Get an id identifying #GstAnalyticsMtd type.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">opaque id of #GstAnalyticsMtd type</doc>
<type name="MtdType" c:type="GstAnalyticsMtdType"/>
</return-value>
</function>
<docsection name="gstanalyticsclassificationtd">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">This type of metadata holds classification, it is generally used in
relationship with another metadata type to enhance its content. For example,
it can enhance the classifcation of an object detection held by the
#GstAnalyticsODMtd metadata type.</doc>
</docsection>
<docsection name="gstanalyticsmeta">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">The #GstAnalyticsRelationMeta is a #GstMeta that can contain a large number
of results from the analysis of a meta. Each result can be accessed by
using its id, or more conviently, by using a #GstAnalyticsMtd. A matrix
of relationships between the various metadata is also defined and can be
filled by the analysis processes.</doc>
</docsection>
<docsection name="gstanalyticsobjectdetectionmtd">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">This type of metadata holds the position of detected object inside the
image, along with the probabily of each detection.</doc>
</docsection>
<docsection name="gstanalyticsobjecttrackingmtd">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c">This type of metadata holds tracking information. In many cases, it is
desired to track an object across many frames. This type of metadata holds
information about the tracking, for example, it can be used alongside a
#GstAnalyticsODMtd to track an object.</doc>
</docsection>
<function name="mtd_type_get_name" c:identifier="gst_analytics_mtd_type_get_name" moved-to="Mtd.type_get_name" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Gets the string version of the name of this type of analytics data</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
@ -984,21 +990,21 @@ Since 1.24</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Get an id that represent object-detection metadata type</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Opaqu id of the #GstAnalyticsMtd type</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Opaque id of the #GstAnalyticsMtd type</doc>
<type name="MtdType" c:type="GstAnalyticsMtdType"/>
</return-value>
</function>
<function name="relation_get_length" c:identifier="gst_analytics_relation_get_length" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">@instance Instance of #GstAnalyticsRelationMeta
Get number of relatable meta attached to instance</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Get number of relatable meta attached to instance</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Number of analysis-meta attached to this
instance.</doc>
instance.</doc>
<type name="gsize" c:type="gsize"/>
</return-value>
<parameters>
<parameter name="instance" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Instance of #GstAnalyticsRelationMeta</doc>
<type name="RelationMeta" c:type="GstAnalyticsRelationMeta*"/>
</parameter>
</parameters>
@ -1010,7 +1016,8 @@ instance.</doc>
<type name="GType" c:type="GType"/>
</return-value>
</function>
<function name="relation_meta_get_info" c:identifier="gst_analytics_relation_meta_get_info" moved-to="RelationMeta.get_info">
<function name="relation_meta_get_info" c:identifier="gst_analytics_relation_meta_get_info" moved-to="RelationMeta.get_info" version="1.24" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Get the meta info</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<return-value transfer-ownership="none">
<type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>

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

@ -4863,10 +4863,10 @@ profiles defined in Annex A for service-compatible stereoscopic 3D services</doc
<member name="c3780" value="8" c:identifier="GST_MPEGTS_TRANSMISSION_MODE_C3780">
</member>
</enumeration>
<function name="buffer_add_mpegts_pes_metadata_meta" c:identifier="gst_buffer_add_mpegts_pes_metadata_meta" version="1.24" introspectable="0">
<function name="buffer_add_mpegts_pes_metadata_meta" c:identifier="gst_buffer_add_mpegts_pes_metadata_meta" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/mpegts/gst-mpegtspesmetadatameta.h">Creates and adds a #GstMpegtsPESMetadataMeta to a @buffer.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/mpegts/gst-mpegtspesmetadatameta.h"/>
<return-value transfer-ownership="full">
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/mpegts/gst-mpegtspesmetadatameta.h">a newly created #GstMpegtsPESMetadataMeta</doc>
<type name="PESMetadataMeta" c:type="GstMpegtsPESMetadataMeta*"/>
</return-value>

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.
@ -2899,17 +2950,17 @@ 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_MICRO" value="1" c:type="GST_PLUGINS_BASE_VERSION_MICRO">
<constant name="PLUGINS_BASE_VERSION_MICRO" value="0" c:type="GST_PLUGINS_BASE_VERSION_MICRO">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstpluginsbaseversion.h">The micro 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_MINOR" value="23" 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

@ -312,8 +312,9 @@ from the ground-up, GstPlay provides the features you will most likely need.
An example player is available in gst-examples/playback/player/gst-play/.
Internally the GstPlay makes use of the `playbin` element. `playbin3` can be
selected if the `GST_PLAY_USE_PLAYBIN3=1` environment variable has been set.
Internally the GstPlay makes use of the `playbin3` element. The legacy
`playbin2` can be selected if the `GST_PLAY_USE_PLAYBIN3=0` environment
variable has been set.
**Important note**: If your application relies on the GstBus to get
notifications from GstPlay, you need to add some explicit clean-up code in
@ -344,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>
@ -434,8 +438,8 @@ This option is disabled by default.</doc>
</parameters>
</function>
<function name="config_set_position_update_interval" c:identifier="gst_play_config_set_position_update_interval" version="1.20">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.c">set desired interval in milliseconds between two position-updated messages.
pass 0 to stop updating the position.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.c">Set desired interval in milliseconds between two position-updated messages.
Pass 0 to stop updating the position.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -546,7 +550,7 @@ matching #GstPlayVideoInfo.</doc>
<function name="is_play_message" c:identifier="gst_play_is_play_message" version="1.20">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.c">A #gboolean indicating wheter the passes message represents a #GstPlay message or not.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.c">A #gboolean indicating whether the passed message represents a #GstPlay message or not.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
@ -834,7 +838,7 @@ currently-playing stream.</doc>
</parameters>
</method>
<method name="get_subtitle_uri" c:identifier="gst_play_get_subtitle_uri" version="1.20">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.c">current subtitle URI</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.c">Current subtitle URI</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.h"/>
<return-value transfer-ownership="full" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.c">URI of the current external subtitle.
@ -879,7 +883,7 @@ currently-playing stream. g_free() after usage.</doc>
</method>
<method name="get_video_snapshot" c:identifier="gst_play_get_video_snapshot" version="1.20">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.c">Get a snapshot of the currently selected video stream, if any. The format can be
selected with @format and optional configuration is possible with @config
selected with @format and optional configuration is possible with @config.
Currently supported settings are:
- width, height of type G_TYPE_INT
- pixel-aspect-ratio of type GST_TYPE_FRACTION
@ -1054,7 +1058,7 @@ value.</doc>
</method>
<method name="set_config" c:identifier="gst_play_set_config" version="1.20">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.c">Set the configuration of the play. If the play is already configured, and
the configuration haven't change, this function will return %TRUE. If the
the configuration hasn't changed, this function will return %TRUE. If the
play is not in the GST_PLAY_STATE_STOPPED, this method will return %FALSE
and active configuration will remain.
@ -1276,7 +1280,7 @@ Sets the video track @stream_index.</doc>
<method name="set_visualization" c:identifier="gst_play_set_visualization" version="1.20">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.c">%TRUE if the visualizations was set correctly. Otherwise,
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.c">%TRUE if the visualization was set correctly. Otherwise,
%FALSE.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>

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"/>
@ -2633,6 +2633,19 @@ the need to handle these extensions manually using the
GstRTPBaseDepayload::request-extension: signal.</doc>
<type name="gboolean" c:type="gboolean"/>
</property>
<property name="extensions" version="1.24" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/rtp/gstrtpbasedepayload.c">A list of already enabled RTP header extensions. This may be useful for finding
out which extensions are already enabled (with add-extension signal) and picking a non-conflicting
ID for a new extension that needs to be added on top of the existing ones.
Note that the value returned by reading this property is not dynamically updated when the set of
enabled extensions changes by any of existing action signals. Rather, it represents the current state
at the time the property is read.
Dynamic updates of this property can be received by subscribing to its corresponding "notify" signal, i.e.
"notify::extensions".</doc>
<type name="Gst.ValueArray"/>
</property>
<property name="max-reorder" version="1.18" writable="1" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/rtp/gstrtpbasedepayload.c">Max seqnum reorder before the sender is assumed to have restarted.

View file

@ -7,6 +7,79 @@ and/or use gtk-doc annotations. -->
<package name="gstreamer-video-1.0"/>
<c:include name="gst/video/video.h"/>
<namespace name="GstVideo" version="1.0" shared-library="libgstvideo-1.0.so.0" c:identifier-prefixes="Gst" c:symbol-prefixes="gst">
<record name="AncillaryMeta" c:type="GstAncillaryMeta" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">#GstMeta for carrying SMPTE-291M Ancillary data. Note that all the ADF fields
(@DID to @checksum) are 10bit values with parity/non-parity high-bits set.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h"/>
<field name="meta" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">Parent #GstMeta</doc>
<type name="Gst.Meta" c:type="GstMeta"/>
</field>
<field name="field" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">The field where the ancillary data is located</doc>
<type name="AncillaryMetaField" c:type="GstAncillaryMetaField"/>
</field>
<field name="c_not_y_channel" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">Which channel (luminance or chrominance) the ancillary
data is located. 0 if content is SD or stored in the luminance channel
(default). 1 if HD and stored in the chrominance channel.</doc>
<type name="gboolean" c:type="gboolean"/>
</field>
<field name="line" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">The line on which the ancillary data is located (max 11bit). There
are two special values: 0x7ff if no line is specified (default), 0x7fe
to specify the ancillary data is on any valid line before active video</doc>
<type name="guint16" c:type="guint16"/>
</field>
<field name="offset" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">The location of the ancillary data packet in a SDI raster relative
to the start of active video (max 12bits). A value of 0 means the ADF of
the ancillary packet starts immediately following SAV. There are 3
special values: 0xfff: No specified location (default), 0xffe: within
HANC data space, 0xffd: within the ancillary data space located between
SAV and EAV</doc>
<type name="guint16" c:type="guint16"/>
</field>
<field name="DID" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">Data Identified</doc>
<type name="guint16" c:type="guint16"/>
</field>
<field name="SDID_block_number" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">Secondary Data identification (if type 2) or Data block
number (if type 1)</doc>
<type name="guint16" c:type="guint16"/>
</field>
<field name="data_count" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">The amount of user data</doc>
<type name="guint16" c:type="guint16"/>
</field>
<field name="data" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">The User data</doc>
<type name="guint16" c:type="guint16*"/>
</field>
<field name="checksum" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">The checksum of the ADF</doc>
<type name="guint16" c:type="guint16"/>
</field>
<function name="get_info" c:identifier="gst_ancillary_meta_get_info">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h"/>
<return-value transfer-ownership="none">
<type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>
</return-value>
</function>
</record>
<enumeration name="AncillaryMetaField" version="1.24" glib:type-name="GstAncillaryMetaField" glib:get-type="gst_ancillary_meta_field_get_type" c:type="GstAncillaryMetaField">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">Location of a @GstAncillaryMeta.</doc>
<member name="progressive" value="0" c:identifier="GST_ANCILLARY_META_FIELD_PROGRESSIVE" glib:nick="progressive">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">Progressive or no field specified (default)</doc>
</member>
<member name="interlaced_first" value="16" c:identifier="GST_ANCILLARY_META_FIELD_INTERLACED_FIRST" glib:nick="interlaced-first">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">Interlaced first field</doc>
</member>
<member name="interlaced_second" value="17" c:identifier="GST_ANCILLARY_META_FIELD_INTERLACED_SECOND" glib:nick="interlaced-second">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">Interlaced second field</doc>
</member>
</enumeration>
<constant name="BUFFER_POOL_OPTION_VIDEO_AFFINE_TRANSFORMATION_META" value="GstBufferPoolOptionVideoAffineTransformation" c:type="GST_BUFFER_POOL_OPTION_VIDEO_AFFINE_TRANSFORMATION_META">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideoaffinetransformationmeta.h"/>
<type name="utf8" c:type="gchar*"/>
@ -918,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>
@ -1803,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">
@ -1989,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>
@ -2954,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:
@ -3330,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*"/>
@ -10219,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,
@ -10341,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>
@ -15799,6 +15923,33 @@ data.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">An error occurred</doc>
</member>
</enumeration>
<function name="ancillary_meta_api_get_type" c:identifier="gst_ancillary_meta_api_get_type">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h"/>
<return-value transfer-ownership="none">
<type name="GType" c:type="GType"/>
</return-value>
</function>
<function name="ancillary_meta_get_info" c:identifier="gst_ancillary_meta_get_info" moved-to="AncillaryMeta.get_info">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h"/>
<return-value transfer-ownership="none">
<type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>
</return-value>
</function>
<function name="buffer_add_ancillary_meta" c:identifier="gst_buffer_add_ancillary_meta" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.c">Adds a new #GstAncillaryMeta to the @buffer. The caller is responsible for setting the appropriate
fields.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.c">A new #GstAncillaryMeta, or %NULL if an error happened.</doc>
<type name="AncillaryMeta" c:type="GstAncillaryMeta*"/>
</return-value>
<parameters>
<parameter name="buffer" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.c">A #GstBuffer</doc>
<type name="Gst.Buffer" c:type="GstBuffer*"/>
</parameter>
</parameters>
</function>
<function name="buffer_add_video_afd_meta" c:identifier="gst_buffer_add_video_afd_meta" version="1.18">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.c">Attaches #GstVideoAFDMeta metadata to @buffer with the given
parameters.</doc>
@ -16249,6 +16400,18 @@ parameters.</doc>
</parameter>
</parameters>
</function>
<function-macro name="buffer_get_ancillary_meta" c:identifier="gst_buffer_get_ancillary_meta" version="1.24" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">Gets the #GstAncillaryMeta that might be present on @b.
Note: It is quite likely that there might be more than one ancillary meta on
a given buffer. This function will only return the first one. See gst_buffer_iterate_ancillary_meta() for a way to iterate over all ancillary metas of the buffer.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h"/>
<parameters>
<parameter name="b">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">A #GstBuffer</doc>
</parameter>
</parameters>
</function-macro>
<function-macro name="buffer_get_video_afd_meta" c:identifier="gst_buffer_get_video_afd_meta" version="1.18" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">Gets the #GstVideoAFDMeta that might be present on @b.
@ -16407,6 +16570,22 @@ no such metadata on @buffer.</doc>
</parameter>
</parameters>
</function-macro>
<function-macro name="buffer_iterate_ancillary_meta" c:identifier="gst_buffer_iterate_ancillary_meta" version="1.24" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">Retrieves the next #GstAncillaryMeta after the current one according to
@s. If @s points to %NULL, the first #GstAncillaryMeta will be returned (if
any).
@s will be updated with an opaque state pointer.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h"/>
<parameters>
<parameter name="b">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">A #GstBuffer</doc>
</parameter>
<parameter name="s">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-anc.h">An opaque state pointer</doc>
</parameter>
</parameters>
</function-macro>
<function name="buffer_pool_config_get_video_alignment" c:identifier="gst_buffer_pool_config_get_video_alignment">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideopool.c">Get the video alignment from the bufferpool configuration @config in
in @align</doc>
@ -16633,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>
@ -18541,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.23.1',
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

@ -2,4 +2,5 @@
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.0
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

File diff suppressed because it is too large Load diff

View file

@ -1,15 +1,15 @@
This is GStreamer gst-devtools 1.23.1.
This is GStreamer gst-devtools 1.25.0.1.
GStreamer 1.23 is the unstable development branch leading up to the next major
stable version which will be 1.24.
GStreamer 1.25 is the unstable development branch leading up to the next major
stable version which will be 1.26.
The 1.23 development series adds new features on top of the 1.22 series and is
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 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.
@ -79,15 +79,12 @@ For help and support, please head over to our Discourse forum at
https://discourse.gstreamer.org/
or pop into one of our Matrix chat channels, see
or pop into one of our Matrix chat rooms, see
https://discourse.gstreamer.org/t/new-gstreamer-matrix-chat-space/675
for more details.
There is also a legacy IRC channel, #gstreamer on the OFTC IRC network,
which is also bridged into the Matrix network.
Please do not submit support requests in GitLab, we only use it for
bug tracking and merge requests review. Use the Discourse forum instead.

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

@ -53,6 +53,36 @@
</GitRepository>
</repository>
<release>
<Version>
<revision>1.24.0</revision>
<branch>main</branch>
<name></name>
<created>2024-03-04</created>
<file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-devtools/gst-devtools-1.24.0.tar.xz" />
</Version>
</release>
<release>
<Version>
<revision>1.23.90</revision>
<branch>main</branch>
<name></name>
<created>2024-02-23</created>
<file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-devtools/gst-devtools-1.23.90.tar.xz" />
</Version>
</release>
<release>
<Version>
<revision>1.23.2</revision>
<branch>main</branch>
<name></name>
<created>2024-02-15</created>
<file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-devtools/gst-devtools-1.23.2.tar.xz" />
</Version>
</release>
<release>
<Version>
<revision>1.23.1</revision>

View file

@ -1,5 +1,5 @@
project('gst-devtools', 'c',
version : '1.23.1',
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

@ -104,6 +104,7 @@ VALGRIND_BLACKLIST = [
(r'check.gst-plugins-bad.elements_mpeg2enc', '?'),
(r'check.gst-plugins-bad.elements_mplex', '?'),
(r'check.gst-plugins-bad.elements_mxfmux', '?'),
(r'check.gst-plugins-bad.elements_srt.test_src_listener_sink_caller', 'Need to investigate libsrt leaks (flaky)'),
(r'check.gst-plugins-bad.elements_x265enc', '?'),
(r'check.gst-plugins-bad.elements_zbar', '?'),
(r'check.gst-plugins-bad.elements_webrtcbin.test_data_channel_remote_notify', 'Need to fix leaks'),

View file

@ -31,8 +31,8 @@ GST_START_TEST (test_resolve_variables)
NULL);
fail_unless (gst_structure_is_equal (struct_with_vars, expected),
"\nReplaced: `%s`\n!=\nExpected: `%s`",
gst_structure_serialize (struct_with_vars, GST_SERIALIZE_FLAG_NONE),
gst_structure_serialize (expected, GST_SERIALIZE_FLAG_NONE));
gst_structure_serialize_full (struct_with_vars, GST_SERIALIZE_FLAG_NONE),
gst_structure_serialize_full (expected, GST_SERIALIZE_FLAG_NONE));
gst_structure_free (variables);
gst_structure_free (struct_with_vars);

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,7 @@ decoding the file immediately.
2) We need to inform the video encoder that it should start encoding a
keyframe starting from exactly the frame with the pattern.
3) We need to inform the demuxer that it should flush out any pending
3) We need to inform the muxer that it should flush out any pending
data and start creating the start of a new file with the keyframe as
a first video frame.

View file

@ -311,7 +311,7 @@ extensions)
- filters: (string): A comma separated list of object types to trace (make sure to enclose in
quotation marks)
**Run the leaks tracer on all `GstProxyPad` objects logging the references with a full backtraces**
**Run the leaks tracer on all `GstProxyPad` objects logging the references with full backtraces**
```
GST_TRACERS=leaks(stack-traces-flags=full,filters=”GstProxyPad”,check-refs=true) COMMAND
@ -422,22 +422,22 @@ little driver * <https://github.com/dkogan/feedgnuplot>
### Traces for buffer flow, events and messages in TRACE level:
```
GST_DEBUG="GST_TRACER:7,GST_BUFFER*:7,GST_EVENT:7,GST_MESSAGE:7"
GST_TRACERS=log gst-launch-1.0 fakesrc num-buffers=10 ! fakesink -
GST_DEBUG="GST_TRACER:7,GST_BUFFER*:7,GST_EVENT:7,GST_MESSAGE:7" \
GST_TRACERS=log gst-launch-1.0 fakesrc num-buffers=10 ! fakesink
```
### Print some pipeline stats on exit:
```
GST_DEBUG="GST_TRACER:7" GST_TRACERS="stats;rusage"
GST_DEBUG_FILE=trace.log gst-launch-1.0 fakesrc num-buffers=10
GST_DEBUG="GST_TRACER:7" GST_TRACERS="stats;rusage" \
GST_DEBUG_FILE=trace.log gst-launch-1.0 fakesrc num-buffers=10 \
sizetype=fixed ! queue ! fakesink && gst-stats-1.0 trace.log
```
### get ts, average-cpuload, current-cpuload, time and plot
```
GST_DEBUG="GST_TRACER:7" GST_TRACERS="stats;rusage"
GST_DEBUG="GST_TRACER:7" GST_TRACERS="stats;rusage" \
GST_DEBUG_FILE=trace.log /usr/bin/gst-play-1.0 $HOME/Videos/movie.mp4 &&
./scripts/gst-plot-traces.sh --format=png | gnuplot eog trace.log.*.png
```
@ -453,7 +453,7 @@ autoaudiosink
### print processing latencies for each element
```
GST_DEBUG="GST_TRACER:7" GST_TRACERS=latency(flags=element) gst-launch-1.0 \
GST_DEBUG="GST_TRACER:7" GST_TRACERS="latency(flags=element)" gst-launch-1.0 \
audiotestsrc num-buffers=10 ! audioconvert ! volume volume=0.7 ! \
autoaudiosink
```
@ -461,7 +461,7 @@ autoaudiosink
### print reported latencies for each element
```
GST_DEBUG="GST_TRACER:7" GST_TRACERS=latency(flags=reported) gst-launch-1.0 \
GST_DEBUG="GST_TRACER:7" GST_TRACERS="latency(flags=reported)" gst-launch-1.0 \
audiotestsrc num-buffers=10 ! audioconvert ! volume volume=0.7 ! \
autoaudiosink
```
@ -470,7 +470,7 @@ autoaudiosink
```
GST_DEBUG="GST_TRACER:7" \
GST_TRACERS=latency(flags=pipeline+element+reported) gst-launch-1.0 \
GST_TRACERS="latency(flags=pipeline+element+reported)" gst-launch-1.0 \
alsasrc num-buffers=20 ! flacenc ! identity ! \
fakesink
```
@ -478,14 +478,14 @@ fakesink
### Raise a warning if a leak is detected
```
GST_TRACERS="leaks" gst-launch-1.0 videotestsrc num-buffers=10 !
GST_TRACERS="leaks" gst-launch-1.0 videotestsrc num-buffers=10 ! \
fakesink
```
### check if any GstEvent or GstMessage is leaked and raise a warning
```
GST_DEBUG="GST_TRACER:7" GST_TRACERS="leaks(GstEvent,GstMessage)"
GST_DEBUG="GST_TRACER:7" GST_TRACERS="leaks(GstEvent,GstMessage)" \
gst-launch-1.0 videotestsrc num-buffers=10 ! fakesink
```

View file

@ -63,11 +63,9 @@ these operations:
- If you don't know which component to file the issue against, just pick the one
that seems the most likely to you, or file it against the gstreamer-project
component. If in doubt just pop into our IRC channel `#gstreamer` on the
[OFTC IRC network](https://www.oftc.net/), which you can connect to using
any IRC client application or the [OFTC IRC webchat](https://webchat.oftc.net/?channels=%23gstreamer).
In any case, if it's not the right component someone will move the issue
once they have a better idea what the problem is and where it belongs.
component. If in doubt just pop into our [Matrix Discussion channel][matrix].
In any case, if it's not the right component someone will move the issue once
they have a better idea what the problem is and where it belongs.
- Please mention:
@ -424,6 +422,7 @@ In the simplest case, you might be able to get away with just doing a `git pull
[special-md-references]: https://docs.gitlab.com/ee/user/markdown.html#special-gitlab-references
[bugs]: https://gstreamer.freedesktop.org/bugs/
[gitlab]: https://gitlab.freedesktop.org/gstreamer
[matrix]: https://matrix.to/#/#gstreamer:gstreamer.org
#### Coding Style
@ -530,7 +529,7 @@ code repositories in commit messages.
Whenever you submit a new Merge Request, add a comment to an existing issue or
Merge Request, GitLab will send a notification e-mail to GStreamer
developers. This means that there is usually no need to advertise the fact that
you have done so in other forums such as on IRC or on the mailing list, unless
you have done so in other forums such as on Matrix or Discourse, unless
you have been asked to file an issue there, in which case it's nice to follow up
with the link to the issue.

View file

@ -72,14 +72,14 @@ directory.
## Why is mail traffic so low on gstreamer-devel?
Our main arenas for coordination and discussion are IRC and Gitlab, not
the mailing lists. Join us in [`#gstreamer`][irc-gstreamer] on irc.oftc.net.
There is also a [webchat interface][webchat-gstreamer]. For larger picture
questions or getting more input from more people, a mail to the gstreamer-devel
mailing list is never a bad idea, however.
Our main arenas for coordination and discussion are [Matrix][matrix] and
[Gitlab][gitlab], not the mailing lists which are being phased out. For larger
picture questions or getting more input from more people, starting a discussion
on [Discourse][discourse] is the best place.
[irc-gstreamer]: irc://irc.oftc.net/#gstreamer
[webchat-gstreamer]: https://webchat.oftc.net/?channels=%23gstreamer
[matrix]: https://matrix.to/#/#gstreamer:gstreamer.org
[gitlab]: https://gitlab.freedesktop.org/gstreamer
[discourse]: https://discourse.gstreamer.org/
## What kind of versioning scheme does GStreamer use?

View file

@ -95,7 +95,7 @@ distributions we support with binaries are the distributions that we
have people who have volunteered to make binaries for. If you are
interested in maintaining GStreamer binaries for other distributions or
Unices we would be happy to hear from you. Contact us through the
GStreamer-devel mailing list.
GStreamer [Discourse][discourse] or [Matrix][matrix].
## I am having trouble compiling GStreamer on my LFS installation, why?
@ -104,11 +104,13 @@ knowledgeable enough to solve any build issues you get on your own.
Being volunteered based we can't promise support to anyone of course,
but are you using LFS consider yourself extra unsupported. We neither
can or want to know enough, about how your unique system is configured,
to be able to help you. That said, if you come to the \#gstreamer
channel on irc.openprojects.net we might of course be able to give you
some general hints and pointers.
to be able to help you. That said, if you come to the [Matrix rooms][matrix]
we might of course be able to give you some general hints and pointers.
## How do I get GStreamer through git?
See this page : <http://gstreamer.freedesktop.org/dev/> for git
access (anonymous and developer).
[matrix]: https://matrix.to/#/#gstreamer:gstreamer.org
[discourse]: https://discourse.gstreamer.org/

View file

@ -200,10 +200,13 @@ $ git cherry-pick <commit> ... --strategy=subtree
## I have another question related to the mono repository - where is the best place to ask or get help?
Best to just pop into our IRC channel `#gstreamer` on the OFTC network (also accessible via Matrix) or send a mail to the gstreamer-devel mailing list.
Best to just pop into our [Matrix room][matrix] or start a discussion on [Discourse][discourse].
You can also file an issue in GitLab if you have a question that you think might be worth adding to this FAQ.
[matrix]: https://matrix.to/#/#gstreamer:gstreamer.org
[discourse]: https://discourse.gstreamer.org/
- - -
*This FAQ has been prepared by Thibault Saunier and Tim-Philipp Müller with contributions from Mathieu Duponchelle.*

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.23.1',
version: '1.25.0.1',
meson_version : '>= 1.1')
hotdoc_p = find_program('hotdoc')
@ -101,7 +101,7 @@ sitemap = configure_file(command: [sitemap_gen, '@INPUT@', '@OUTPUT@',
input: 'sitemap.txt',
output: 'sitemap.txt')
html_theme = 'https://github.com/hotdoc/hotdoc_lumen_theme/releases/download/0.15/hotdoc_lumen_theme-0.15.tar.xz?sha256=1ea7fd00d8dfd607d175c59e2d89918a55114c867f697a94c703f314b0d9b4b6'
html_theme = 'https://github.com/hotdoc/hotdoc_lumen_theme/releases/download/0.16/hotdoc_lumen_theme-0.16.tar.xz?sha256=b7d7dde51285d1c90836c44ae298754e4cfa957e9a6d14ee5844b8a2cac04b5a'
gstreamer_doc = hotdoc.generate_doc('GStreamer',
project_version: apiversion,

View file

@ -871,6 +871,21 @@
"GST_ALLOCATOR_SHM",
"GST_ALLOCATOR_SYSMEM",
"GST_ALLOCATOR_VASURFACE",
"GST_ANALYTICS_MTD_CAST",
"GST_ANALYTICS_MTD_TYPE_ANY",
"GST_ANALYTICS_RELATION_META_API_TYPE",
"GST_ANALYTICS_RELATION_META_INFO",
"GST_ANALYTICS_REL_TYPE_ANY",
"GST_ANALYTICS_REL_TYPE_CONTAIN",
"GST_ANALYTICS_REL_TYPE_IS_PART_OF",
"GST_ANALYTICS_REL_TYPE_LAST",
"GST_ANALYTICS_REL_TYPE_NONE",
"GST_ANALYTICS_REL_TYPE_RELATE_TO",
"GST_ANCILLARY_META_API_TYPE",
"GST_ANCILLARY_META_FIELD_INTERLACED_FIRST",
"GST_ANCILLARY_META_FIELD_INTERLACED_SECOND",
"GST_ANCILLARY_META_FIELD_PROGRESSIVE",
"GST_ANCILLARY_META_INFO",
"GST_APP_LEAKY_TYPE_DOWNSTREAM",
"GST_APP_LEAKY_TYPE_NONE",
"GST_APP_LEAKY_TYPE_UPSTREAM",
@ -1336,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",
@ -2397,6 +2416,7 @@
"GST_INFO",
"GST_INFO_ID",
"GST_INFO_OBJECT",
"GST_INF_RELATION_SPAN",
"GST_INSERT_BIN_API",
"GST_INSTALL_PLUGINS_CRASHED",
"GST_INSTALL_PLUGINS_ERROR",
@ -3530,6 +3550,7 @@
"GST_OBJECT_CAST",
"GST_OBJECT_CLASS_CAST",
"GST_OBJECT_FLAGS",
"GST_OBJECT_FLAG_CONSTRUCTED",
"GST_OBJECT_FLAG_IS_SET",
"GST_OBJECT_FLAG_LAST",
"GST_OBJECT_FLAG_MAY_BE_LEAKED",
@ -4572,6 +4593,7 @@
"GST_TAG_CONDUCTOR",
"GST_TAG_CONTACT",
"GST_TAG_CONTAINER_FORMAT",
"GST_TAG_CONTAINER_SPECIFIC_TRACK_ID",
"GST_TAG_COPYRIGHT",
"GST_TAG_COPYRIGHT_URI",
"GST_TAG_DATE",
@ -6785,6 +6807,48 @@
"GstAlsaSrc:device",
"GstAlsaSrc:device-name",
"GstAlsaSrc:use-driver-timestamps",
"GstAmfAv1Enc!sink",
"GstAmfAv1Enc!src",
"GstAmfAv1EncPreset",
"GstAmfAv1EncPreset::balanced",
"GstAmfAv1EncPreset::default",
"GstAmfAv1EncPreset::high-quality",
"GstAmfAv1EncPreset::quality",
"GstAmfAv1EncPreset::speed",
"GstAmfAv1EncRateControl",
"GstAmfAv1EncRateControl::cbr",
"GstAmfAv1EncRateControl::cqp",
"GstAmfAv1EncRateControl::default",
"GstAmfAv1EncRateControl::lcvbr",
"GstAmfAv1EncRateControl::vbr",
"GstAmfAv1EncUsage",
"GstAmfAv1EncUsage::low-latency",
"GstAmfAv1EncUsage::transcoding",
"GstAmfEncPAActivityType",
"GstAmfEncPAActivityType::y",
"GstAmfEncPAActivityType::yuv",
"GstAmfEncPACAQStrength",
"GstAmfEncPACAQStrength::high",
"GstAmfEncPACAQStrength::low",
"GstAmfEncPACAQStrength::medium",
"GstAmfEncPAHQMBMode",
"GstAmfEncPAHQMBMode::auto",
"GstAmfEncPAHQMBMode::none",
"GstAmfEncPAPAQMode",
"GstAmfEncPAPAQMode::caq",
"GstAmfEncPAPAQMode::none",
"GstAmfEncPASceneChangeDetectionSensitivity",
"GstAmfEncPASceneChangeDetectionSensitivity::high",
"GstAmfEncPASceneChangeDetectionSensitivity::low",
"GstAmfEncPASceneChangeDetectionSensitivity::medium",
"GstAmfEncPAStaticSceneDetectionSensitivity",
"GstAmfEncPAStaticSceneDetectionSensitivity::high",
"GstAmfEncPAStaticSceneDetectionSensitivity::low",
"GstAmfEncPAStaticSceneDetectionSensitivity::medium",
"GstAmfEncPATAQMode",
"GstAmfEncPATAQMode::mode1",
"GstAmfEncPATAQMode::mode2",
"GstAmfEncPATAQMode::none",
"GstAmfEncoder",
"GstAmfH264Enc!sink",
"GstAmfH264Enc!src",
@ -6849,6 +6913,38 @@
"GstAmrwbDec",
"GstAmrwbDec!sink",
"GstAmrwbDec!src",
"GstAnalyticsClsMtd",
"GstAnalyticsClsMtd.id",
"GstAnalyticsClsMtd.meta",
"GstAnalyticsMtd",
"GstAnalyticsMtd.id",
"GstAnalyticsMtd.meta",
"GstAnalyticsMtdImpl",
"GstAnalyticsMtdImpl.name",
"GstAnalyticsMtdType",
"GstAnalyticsODMtd",
"GstAnalyticsODMtd.id",
"GstAnalyticsODMtd.meta",
"GstAnalyticsRelTypes",
"GstAnalyticsRelationMeta",
"GstAnalyticsRelationMetaInitParams",
"GstAnalyticsRelationMetaInitParams.initial_buf_size",
"GstAnalyticsRelationMetaInitParams.initial_relation_order",
"GstAnalyticsTrackingMtd",
"GstAnalyticsTrackingMtd.id",
"GstAnalyticsTrackingMtd.meta",
"GstAncillaryMeta",
"GstAncillaryMeta.DID",
"GstAncillaryMeta.SDID_block_number",
"GstAncillaryMeta.c_not_y_channel",
"GstAncillaryMeta.checksum",
"GstAncillaryMeta.data",
"GstAncillaryMeta.data_count",
"GstAncillaryMeta.field",
"GstAncillaryMeta.line",
"GstAncillaryMeta.meta",
"GstAncillaryMeta.offset",
"GstAncillaryMetaField",
"GstApeDemux",
"GstApeDemux!sink",
"GstApeDemux!src",
@ -8257,6 +8353,7 @@
"GstCACASinkDithering::8x8",
"GstCACASinkDithering::none",
"GstCACASinkDithering::random",
"GstCACASinkDriver",
"GstCACATv",
"GstCACATv!sink",
"GstCACATv!src",
@ -8719,6 +8816,14 @@
"GstCudaGraphicsResource.resource",
"GstCudaGraphicsResource.type",
"GstCudaGraphicsResourceType",
"GstCudaIpcIOMode",
"GstCudaIpcIOMode::copy",
"GstCudaIpcIOMode::import",
"GstCudaIpcMode",
"GstCudaIpcMode::legacy",
"GstCudaIpcMode::mmap",
"GstCudaIpcSink!sink",
"GstCudaIpcSrc!src",
"GstCudaMemory",
"GstCudaMemory.context",
"GstCudaMemory.info",
@ -9156,6 +9261,8 @@
"GstD3D12Upload!sink",
"GstD3D12Upload!src",
"GstD3D12VideoSink!sink",
"GstD3D12Vp8Dec!sink",
"GstD3D12Vp8Dec!src",
"GstD3D12Vp9Dec!sink",
"GstD3D12Vp9Dec!src",
"GstD3DVideoSink",
@ -13569,6 +13676,12 @@
"GstNvDevice0H264Enc",
"GstNvDevice0H265Enc",
"GstNvEncoder",
"GstNvEncoder:cc-insert",
"GstNvEncoderMultiPass",
"GstNvEncoderMultiPass::default",
"GstNvEncoderMultiPass::disabled",
"GstNvEncoderMultiPass::two-pass",
"GstNvEncoderMultiPass::two-pass-quarter",
"GstNvEncoderPreset",
"GstNvEncoderPreset::default",
"GstNvEncoderPreset::hp",
@ -13578,6 +13691,13 @@
"GstNvEncoderPreset::low-latency",
"GstNvEncoderPreset::low-latency-hp",
"GstNvEncoderPreset::low-latency-hq",
"GstNvEncoderPreset::p1",
"GstNvEncoderPreset::p2",
"GstNvEncoderPreset::p3",
"GstNvEncoderPreset::p4",
"GstNvEncoderPreset::p5",
"GstNvEncoderPreset::p6",
"GstNvEncoderPreset::p7",
"GstNvEncoderRCMode",
"GstNvEncoderRCMode::cbr",
"GstNvEncoderRCMode::cbr-hq",
@ -13585,6 +13705,18 @@
"GstNvEncoderRCMode::cqp",
"GstNvEncoderRCMode::vbr",
"GstNvEncoderRCMode::vbr-hq",
"GstNvEncoderSeiInsertMode",
"GstNvEncoderSeiInsertMode::disabled",
"GstNvEncoderSeiInsertMode::insert",
"GstNvEncoderSeiInsertMode::insert-and-drop",
"GstNvEncoderTune",
"GstNvEncoderTune::default",
"GstNvEncoderTune::high-quality",
"GstNvEncoderTune::lossless",
"GstNvEncoderTune::low-latency",
"GstNvEncoderTune::ultra-low-latency",
"GstNvH264Dec!sink",
"GstNvH264Dec!src",
"GstNvH264Enc",
"GstNvH264Enc!sink",
"GstNvH264Enc!src",
@ -13595,8 +13727,8 @@
"GstNvH264Enc:temporal-aq",
"GstNvH264Enc:vbv-buffer-size",
"GstNvH264Enc:weighted-pred",
"GstNvH264SLDec!sink",
"GstNvH264SLDec!src",
"GstNvH265Dec!sink",
"GstNvH265Dec!src",
"GstNvH265Enc",
"GstNvH265Enc!sink",
"GstNvH265Enc!src",
@ -13607,8 +13739,8 @@
"GstNvH265Enc:temporal-aq",
"GstNvH265Enc:vbv-buffer-size",
"GstNvH265Enc:weighted-pred",
"GstNvH265SLDec!sink",
"GstNvH265SLDec!src",
"GstNvJpegEnc!sink",
"GstNvJpegEnc!src",
"GstNvPreset",
"GstNvPreset::default",
"GstNvPreset::hp",
@ -13627,10 +13759,10 @@
"GstNvRCMode::vbr",
"GstNvRCMode::vbr-hq",
"GstNvRCMode::vbr-minqp",
"GstNvVp8SLDec!sink",
"GstNvVp8SLDec!src",
"GstNvVp9SLDec!sink",
"GstNvVp9SLDec!src",
"GstNvVp8Dec!sink",
"GstNvVp8Dec!src",
"GstNvVp9Dec!sink",
"GstNvVp9Dec!src",
"GstOSXVideoSink!sink",
"GstObject",
"GstObject.flags",
@ -13890,9 +14022,6 @@
"GstOverlayComposition!src",
"GstOverlayComposition::caps-changed",
"GstOverlayComposition::draw",
"GstPNMSrc",
"GstPNMSrc!src",
"GstPNMSrc:location",
"GstPad",
"GstPad.ABI._gst_reserved",
"GstPad.ABI.abi.eventfullfunc",
@ -14612,21 +14741,6 @@
"GstQueueLeaky::downstream",
"GstQueueLeaky::no",
"GstQueueLeaky::upstream",
"GstRDTDepay",
"GstRDTDepay!sink",
"GstRDTDepay!src",
"GstRDTManager",
"GstRDTManager!recv_rtcp_sink_%u",
"GstRDTManager!recv_rtp_sink_%u",
"GstRDTManager!recv_rtp_src_%u_%u_%u",
"GstRDTManager!rtcp_src_%u",
"GstRDTManager::clear-pt-map",
"GstRDTManager::on-bye-ssrc",
"GstRDTManager::on-bye-timeout",
"GstRDTManager::on-npt-stop",
"GstRDTManager::on-timeout",
"GstRDTManager::request-pt-map",
"GstRDTManager:latency",
"GstRGB2Bayer",
"GstRGB2Bayer!sink",
"GstRGB2Bayer!src",
@ -14681,6 +14795,7 @@
"GstRTPBaseDepayload::clear-extensions",
"GstRTPBaseDepayload::request-extension",
"GstRTPBaseDepayload:auto-header-extension",
"GstRTPBaseDepayload:extensions",
"GstRTPBaseDepayload:max-reorder",
"GstRTPBaseDepayload:source-info",
"GstRTPBaseDepayload:stats",
@ -15234,7 +15349,6 @@
"GstRTSPRange.max",
"GstRTSPRange.min",
"GstRTSPRangeUnit",
"GstRTSPReal",
"GstRTSPResult",
"GstRTSPSendFunc",
"GstRTSPSendListFunc",
@ -19339,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",
@ -22493,6 +22590,7 @@
"ajasink:channel",
"ajasink:device-identifier",
"ajasink:end-frame",
"ajasink:handle-ancillary-meta",
"ajasink:output-cpu-core",
"ajasink:output-destination",
"ajasink:queue-size",
@ -22503,6 +22601,7 @@
"ajasink:timecode-index",
"ajasinkcombiner",
"ajasrc",
"ajasrc:attach-ancillary-meta",
"ajasrc:audio-source",
"ajasrc:audio-system",
"ajasrc:capture-cpu-core",
@ -22547,20 +22646,73 @@
"alsasrc:device",
"alsasrc:device-name",
"alsasrc:use-driver-timestamps",
"amfav1enc",
"amfav1enc:adapter-luid",
"amfav1enc:bitrate",
"amfav1enc:gop-size",
"amfav1enc:max-bitrate",
"amfav1enc:max-qp-i",
"amfav1enc:max-qp-p",
"amfav1enc:min-qp-i",
"amfav1enc:min-qp-p",
"amfav1enc:pa-activity-type",
"amfav1enc:pa-caq-strength",
"amfav1enc:pa-frame-sad",
"amfav1enc:pa-hqmb-mode",
"amfav1enc:pa-initial-qp",
"amfav1enc:pa-lookahead-buffer-depth",
"amfav1enc:pa-ltr",
"amfav1enc:pa-max-qp",
"amfav1enc:pa-paq-mode",
"amfav1enc:pa-scene-change-detection",
"amfav1enc:pa-scene-change-detection-sensitivity",
"amfav1enc:pa-static-scene-detection",
"amfav1enc:pa-static-scene-detection-sensitivity",
"amfav1enc:pa-taq-mode",
"amfav1enc:pre-analysis",
"amfav1enc:pre-encode",
"amfav1enc:preset",
"amfav1enc:qp-i",
"amfav1enc:qp-p",
"amfav1enc:rate-control",
"amfav1enc:ref-frames",
"amfav1enc:smart-access-video",
"amfav1enc:usage",
"amfh264enc",
"amfh264enc:adapter-luid",
"amfh264enc:adaptive-mini-gop",
"amfh264enc:aud",
"amfh264enc:b-frames",
"amfh264enc:b-reference",
"amfh264enc:bitrate",
"amfh264enc:cabac",
"amfh264enc:gop-size",
"amfh264enc:max-b-frames",
"amfh264enc:max-bitrate",
"amfh264enc:max-qp",
"amfh264enc:min-qp",
"amfh264enc:pa-activity-type",
"amfh264enc:pa-caq-strength",
"amfh264enc:pa-frame-sad",
"amfh264enc:pa-hqmb-mode",
"amfh264enc:pa-initial-qp",
"amfh264enc:pa-lookahead-buffer-depth",
"amfh264enc:pa-ltr",
"amfh264enc:pa-max-qp",
"amfh264enc:pa-paq-mode",
"amfh264enc:pa-scene-change-detection",
"amfh264enc:pa-scene-change-detection-sensitivity",
"amfh264enc:pa-static-scene-detection",
"amfh264enc:pa-static-scene-detection-sensitivity",
"amfh264enc:pa-taq-mode",
"amfh264enc:pre-analysis",
"amfh264enc:pre-encode",
"amfh264enc:preset",
"amfh264enc:qp-i",
"amfh264enc:qp-p",
"amfh264enc:rate-control",
"amfh264enc:ref-frames",
"amfh264enc:smart-access-video",
"amfh264enc:usage",
"amfh265enc",
"amfh265enc:adapter-luid",
@ -22572,11 +22724,28 @@
"amfh265enc:max-qp-p",
"amfh265enc:min-qp-i",
"amfh265enc:min-qp-p",
"amfh265enc:pa-activity-type",
"amfh265enc:pa-caq-strength",
"amfh265enc:pa-frame-sad",
"amfh265enc:pa-hqmb-mode",
"amfh265enc:pa-initial-qp",
"amfh265enc:pa-lookahead-buffer-depth",
"amfh265enc:pa-ltr",
"amfh265enc:pa-max-qp",
"amfh265enc:pa-paq-mode",
"amfh265enc:pa-scene-change-detection",
"amfh265enc:pa-scene-change-detection-sensitivity",
"amfh265enc:pa-static-scene-detection",
"amfh265enc:pa-static-scene-detection-sensitivity",
"amfh265enc:pa-taq-mode",
"amfh265enc:pre-analysis",
"amfh265enc:pre-encode",
"amfh265enc:preset",
"amfh265enc:qp-i",
"amfh265enc:qp-p",
"amfh265enc:rate-control",
"amfh265enc:ref-frames",
"amfh265enc:smart-access-video",
"amfh265enc:usage",
"amrnbdec",
"amrnbdec:variant",
@ -34372,6 +34541,7 @@
"cacasink",
"cacasink:anti-aliasing",
"cacasink:dither",
"cacasink:driver",
"cacasink:screen-height",
"cacasink:screen-width",
"cacatv",
@ -34532,6 +34702,17 @@
"cudaconvertscale",
"cudaconvertscale:add-borders",
"cudadownload",
"cudaipcsink",
"cudaipcsink:address",
"cudaipcsink:cuda-device-id",
"cudaipcsink:ipc-mode",
"cudaipcsrc",
"cudaipcsrc:address",
"cudaipcsrc:buffer-size",
"cudaipcsrc:connection-timeout",
"cudaipcsrc:cuda-device-id",
"cudaipcsrc:io-mode",
"cudaipcsrc:processing-deadline",
"cudascale",
"cudascale:add-borders",
"cudaupload",
@ -34613,6 +34794,7 @@
"curlsmtpsink:subject",
"curlsmtpsink:use-ssl",
"cutter",
"cutter:audio-level-meta",
"cutter:leaky",
"cutter:pre-length",
"cutter:run-length",
@ -34883,6 +35065,10 @@
"d3d12videosink:sampling-method",
"d3d12videosink:scale-x",
"d3d12videosink:scale-y",
"d3d12vp8dec",
"d3d12vp8dec:adapter-luid",
"d3d12vp8dec:device-id",
"d3d12vp8dec:vendor-id",
"d3d12vp9dec",
"d3d12vp9dec:adapter-luid",
"d3d12vp9dec:device-id",
@ -36698,7 +36884,6 @@
"element-pngparse",
"element-pnmdec",
"element-pnmenc",
"element-pnmsrc",
"element-progressreport",
"element-proxysink",
"element-proxysrc",
@ -36718,8 +36903,6 @@
"element-radioactv",
"element-rawaudioparse",
"element-rawvideoparse",
"element-rdtdepay",
"element-rdtmanager",
"element-removesilence",
"element-retinex",
"element-revtv",
@ -36860,7 +37043,6 @@
"element-rtpvrawpay",
"element-rtpxqtdepay",
"element-rtspclientsink",
"element-rtspreal",
"element-rtspsrc",
"element-rtspwms",
"element-sbcdec",
@ -39058,6 +39240,43 @@
"gst_allocator_free",
"gst_allocator_register",
"gst_allocator_set_default",
"gst_analytics_cls_mtd_get_index_by_quark",
"gst_analytics_cls_mtd_get_length",
"gst_analytics_cls_mtd_get_level",
"gst_analytics_cls_mtd_get_mtd_type",
"gst_analytics_cls_mtd_get_quark",
"gst_analytics_mtd_get_id",
"gst_analytics_mtd_get_mtd_type",
"gst_analytics_mtd_get_size",
"gst_analytics_mtd_type_get_name",
"gst_analytics_od_mtd_get_confidence_lvl",
"gst_analytics_od_mtd_get_location",
"gst_analytics_od_mtd_get_mtd_type",
"gst_analytics_od_mtd_get_obj_type",
"gst_analytics_relation_get_length",
"gst_analytics_relation_meta_add_cls_mtd",
"gst_analytics_relation_meta_add_mtd",
"gst_analytics_relation_meta_add_od_mtd",
"gst_analytics_relation_meta_add_one_cls_mtd",
"gst_analytics_relation_meta_add_tracking_mtd",
"gst_analytics_relation_meta_api_get_type",
"gst_analytics_relation_meta_exist",
"gst_analytics_relation_meta_get_cls_mtd",
"gst_analytics_relation_meta_get_direct_related",
"gst_analytics_relation_meta_get_info",
"gst_analytics_relation_meta_get_mtd",
"gst_analytics_relation_meta_get_mtd_data",
"gst_analytics_relation_meta_get_od_mtd",
"gst_analytics_relation_meta_get_relation",
"gst_analytics_relation_meta_get_tracking_mtd",
"gst_analytics_relation_meta_iterate",
"gst_analytics_relation_meta_set_relation",
"gst_analytics_tracking_mtd_get_info",
"gst_analytics_tracking_mtd_get_mtd_type",
"gst_analytics_tracking_mtd_set_lost",
"gst_analytics_tracking_mtd_update_last_seen",
"gst_ancillary_meta_api_get_type",
"gst_ancillary_meta_get_info",
"gst_app_sink_get_buffer_list_support",
"gst_app_sink_get_caps",
"gst_app_sink_get_drop",
@ -39506,6 +39725,9 @@
"gst_bit_writer_reset_and_get_buffer",
"gst_bit_writer_reset_and_get_data",
"gst_bit_writer_set_pos",
"gst_buffer_add_analytics_relation_meta",
"gst_buffer_add_analytics_relation_meta_full",
"gst_buffer_add_ancillary_meta",
"gst_buffer_add_audio_clipping_meta",
"gst_buffer_add_audio_downmix_meta",
"gst_buffer_add_audio_level_meta",
@ -39551,6 +39773,8 @@
"gst_buffer_find_memory",
"gst_buffer_foreach_meta",
"gst_buffer_get_all_memory",
"gst_buffer_get_analytics_relation_meta",
"gst_buffer_get_ancillary_meta",
"gst_buffer_get_audio_clipping_meta",
"gst_buffer_get_audio_downmix_meta",
"gst_buffer_get_audio_downmix_meta_for_channels",
@ -39594,6 +39818,7 @@
"gst_buffer_is_all_memory_writable",
"gst_buffer_is_memory_range_writable",
"gst_buffer_is_writable",
"gst_buffer_iterate_ancillary_meta",
"gst_buffer_iterate_meta",
"gst_buffer_iterate_meta_filtered",
"gst_buffer_list_add",
@ -42190,6 +42415,9 @@
"gst_player_visualizations_get",
"gst_plugin_add_dependency",
"gst_plugin_add_dependency_simple",
"gst_plugin_add_status_error",
"gst_plugin_add_status_info",
"gst_plugin_add_status_warning",
"gst_plugin_error_quark",
"gst_plugin_feature_check_version",
"gst_plugin_feature_get_name",
@ -42212,6 +42440,9 @@
"gst_plugin_get_package",
"gst_plugin_get_release_date_string",
"gst_plugin_get_source",
"gst_plugin_get_status_errors",
"gst_plugin_get_status_infos",
"gst_plugin_get_status_warnings",
"gst_plugin_get_version",
"gst_plugin_is_loaded",
"gst_plugin_list_free",
@ -43488,6 +43719,7 @@
"gst_structure_remove_fields",
"gst_structure_remove_fields_valist",
"gst_structure_serialize",
"gst_structure_serialize_full",
"gst_structure_set",
"gst_structure_set_array",
"gst_structure_set_list",
@ -44550,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",
@ -44720,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",
@ -65760,6 +65975,7 @@
"nvautogpuh264enc:min-qp-b",
"nvautogpuh264enc:min-qp-i",
"nvautogpuh264enc:min-qp-p",
"nvautogpuh264enc:multi-pass",
"nvautogpuh264enc:nonref-p",
"nvautogpuh264enc:preset",
"nvautogpuh264enc:qp-b",
@ -65771,6 +65987,7 @@
"nvautogpuh264enc:spatial-aq",
"nvautogpuh264enc:strict-gop",
"nvautogpuh264enc:temporal-aq",
"nvautogpuh264enc:tune",
"nvautogpuh264enc:vbv-buffer-size",
"nvautogpuh264enc:weighted-pred",
"nvautogpuh264enc:zero-reorder-delay",
@ -65792,6 +66009,7 @@
"nvautogpuh265enc:min-qp-b",
"nvautogpuh265enc:min-qp-i",
"nvautogpuh265enc:min-qp-p",
"nvautogpuh265enc:multi-pass",
"nvautogpuh265enc:nonref-p",
"nvautogpuh265enc:preset",
"nvautogpuh265enc:qp-b",
@ -65803,11 +66021,16 @@
"nvautogpuh265enc:spatial-aq",
"nvautogpuh265enc:strict-gop",
"nvautogpuh265enc:temporal-aq",
"nvautogpuh265enc:tune",
"nvautogpuh265enc:vbv-buffer-size",
"nvautogpuh265enc:weighted-pred",
"nvautogpuh265enc:zero-reorder-delay",
"nvav1dec",
"nvav1dec:cuda-device-id",
"nvav1dec:init-max-height",
"nvav1dec:init-max-width",
"nvav1dec:max-display-delay",
"nvav1dec:num-output-surfaces",
"nvcudah264enc",
"nvcudah264enc:aq-strength",
"nvcudah264enc:aud",
@ -65826,6 +66049,7 @@
"nvcudah264enc:min-qp-b",
"nvcudah264enc:min-qp-i",
"nvcudah264enc:min-qp-p",
"nvcudah264enc:multi-pass",
"nvcudah264enc:nonref-p",
"nvcudah264enc:preset",
"nvcudah264enc:qp-b",
@ -65837,6 +66061,7 @@
"nvcudah264enc:spatial-aq",
"nvcudah264enc:strict-gop",
"nvcudah264enc:temporal-aq",
"nvcudah264enc:tune",
"nvcudah264enc:vbv-buffer-size",
"nvcudah264enc:weighted-pred",
"nvcudah264enc:zero-reorder-delay",
@ -65857,6 +66082,7 @@
"nvcudah265enc:min-qp-b",
"nvcudah265enc:min-qp-i",
"nvcudah265enc:min-qp-p",
"nvcudah265enc:multi-pass",
"nvcudah265enc:nonref-p",
"nvcudah265enc:preset",
"nvcudah265enc:qp-b",
@ -65868,6 +66094,7 @@
"nvcudah265enc:spatial-aq",
"nvcudah265enc:strict-gop",
"nvcudah265enc:temporal-aq",
"nvcudah265enc:tune",
"nvcudah265enc:vbv-buffer-size",
"nvcudah265enc:weighted-pred",
"nvcudah265enc:zero-reorder-delay",
@ -65889,6 +66116,7 @@
"nvd3d11h264enc:min-qp-b",
"nvd3d11h264enc:min-qp-i",
"nvd3d11h264enc:min-qp-p",
"nvd3d11h264enc:multi-pass",
"nvd3d11h264enc:nonref-p",
"nvd3d11h264enc:preset",
"nvd3d11h264enc:qp-b",
@ -65900,6 +66128,7 @@
"nvd3d11h264enc:spatial-aq",
"nvd3d11h264enc:strict-gop",
"nvd3d11h264enc:temporal-aq",
"nvd3d11h264enc:tune",
"nvd3d11h264enc:vbv-buffer-size",
"nvd3d11h264enc:weighted-pred",
"nvd3d11h264enc:zero-reorder-delay",
@ -65920,6 +66149,7 @@
"nvd3d11h265enc:min-qp-b",
"nvd3d11h265enc:min-qp-i",
"nvd3d11h265enc:min-qp-p",
"nvd3d11h265enc:multi-pass",
"nvd3d11h265enc:nonref-p",
"nvd3d11h265enc:preset",
"nvd3d11h265enc:qp-b",
@ -65931,12 +66161,18 @@
"nvd3d11h265enc:spatial-aq",
"nvd3d11h265enc:strict-gop",
"nvd3d11h265enc:temporal-aq",
"nvd3d11h265enc:tune",
"nvd3d11h265enc:vbv-buffer-size",
"nvd3d11h265enc:weighted-pred",
"nvd3d11h265enc:zero-reorder-delay",
"nvh264dec",
"nvh264dec!sink",
"nvh264dec!src",
"nvh264dec:cuda-device-id",
"nvh264dec:init-max-height",
"nvh264dec:init-max-width",
"nvh264dec:max-display-delay",
"nvh264dec:num-output-surfaces",
"nvh264enc",
"nvh264enc:aud",
"nvh264enc:b-adapt",
@ -65950,6 +66186,11 @@
"nvh265dec",
"nvh265dec!sink",
"nvh265dec!src",
"nvh265dec:cuda-device-id",
"nvh265dec:init-max-height",
"nvh265dec:init-max-width",
"nvh265dec:max-display-delay",
"nvh265dec:num-output-surfaces",
"nvh265enc",
"nvh265enc:aud",
"nvh265enc:b-adapt",
@ -65963,6 +66204,9 @@
"nvjpegdec",
"nvjpegdec!sink",
"nvjpegdec!src",
"nvjpegenc",
"nvjpegenc:cuda-device-id",
"nvjpegenc:quality",
"nvmpeg2videodec",
"nvmpeg2videodec!sink",
"nvmpeg2videodec!src",
@ -65975,11 +66219,21 @@
"nvvp8dec",
"nvvp8dec!sink",
"nvvp8dec!src",
"nvvp8dec:cuda-device-id",
"nvvp8dec:init-max-height",
"nvvp8dec:init-max-width",
"nvvp8dec:max-display-delay",
"nvvp8dec:num-output-surfaces",
"nvvp8sldec",
"nvvp8sldec:cuda-device-id",
"nvvp9dec",
"nvvp9dec!sink",
"nvvp9dec!src",
"nvvp9dec:cuda-device-id",
"nvvp9dec:init-max-height",
"nvvp9dec:init-max-width",
"nvvp9dec:max-display-delay",
"nvvp9dec:num-output-surfaces",
"nvvp9sldec",
"nvvp9sldec:cuda-device-id",
"objectdetectionoverlay",
@ -66572,8 +66826,6 @@
"pnmdec",
"pnmenc",
"pnmenc:ascii",
"pnmsrc",
"pnmsrc:location",
"progressreport",
"progressreport:do-query",
"progressreport:format",
@ -66834,15 +67086,6 @@
"rawvideoparse:plane-strides",
"rawvideoparse:top-field-first",
"rawvideoparse:width",
"rdtdepay",
"rdtmanager",
"rdtmanager::clear-pt-map",
"rdtmanager::on-bye-ssrc",
"rdtmanager::on-bye-timeout",
"rdtmanager::on-npt-stop",
"rdtmanager::on-timeout",
"rdtmanager::request-pt-map",
"rdtmanager:latency",
"removesilence",
"removesilence:hysteresis",
"removesilence:minimum-silence-buffers",
@ -67462,7 +67705,6 @@
"rtspclientsink:user-agent",
"rtspclientsink:user-id",
"rtspclientsink:user-pw",
"rtspreal",
"rtspsrc",
"rtspsrc::accept-certificate",
"rtspsrc::before-send",
@ -68002,6 +68244,64 @@
"struct (unnamed at /tmp/release-1.23.1/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_rows_log2",
"struct (unnamed at /tmp/release-1.23.1/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_size_bytes",
"struct (unnamed at /tmp/release-1.23.1/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).upscaled_width",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3)",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_bit_depth",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_film_grain_params",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_frame_height",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_frame_id",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_frame_type",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_frame_width",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_global_motion_params",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_lf_params",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_mi_cols",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_mi_rows",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_order_hint",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_render_height",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_render_width",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_segmentation_params",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_subsampling_x",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_subsampling_y",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_tile_info",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_upscaled_width",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1635:3).ref_valid",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1680:3)",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1680:3).anchor_frame_idx",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1680:3).anchor_tile_col",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1680:3).anchor_tile_row",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1680:3).coded_tile_data",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1680:3).tile_data_size_minus_1",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3)",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).mi_col_end",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).mi_col_start",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).mi_row_end",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).mi_row_start",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).tile_col",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).tile_offset",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).tile_row",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1718:3).tile_size",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3)",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).begin_first_frame",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).current_frame_id",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).frame_height",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).frame_width",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).mi_col_starts",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).mi_cols",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).mi_row_starts",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).mi_rows",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).operating_point",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).operating_point_idc",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).prev_frame_id",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).ref_info",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).render_height",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).render_width",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).seen_frame_header",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).sequence_changed",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_cols",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_cols_log2",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_rows",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_rows_log2",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).tile_size_bytes",
"struct (unnamed at /tmp/release-1.24.0/gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gstav1parser.h:1754:3).upscaled_width",
"subparse",
"subparse:subtitle-encoding",
"subparse:video-fps",
@ -68690,6 +68990,7 @@
"volume",
"volume:mute",
"volume:volume",
"volume:volume-full-range",
"vorbisdec",
"vorbisenc",
"vorbisenc:bitrate",

View file

@ -1 +1 @@
1.23
1.24

File diff suppressed because it is too large Load diff

View file

@ -1,15 +1,15 @@
This is GStreamer gst-editing-services 1.23.1.
This is GStreamer gst-editing-services 1.25.0.1.
GStreamer 1.23 is the unstable development branch leading up to the next major
stable version which will be 1.24.
GStreamer 1.25 is the unstable development branch leading up to the next major
stable version which will be 1.26.
The 1.23 development series adds new features on top of the 1.22 series and is
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 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.
@ -79,15 +79,12 @@ For help and support, please head over to our Discourse forum at
https://discourse.gstreamer.org/
or pop into one of our Matrix chat channels, see
or pop into one of our Matrix chat rooms, see
https://discourse.gstreamer.org/t/new-gstreamer-matrix-chat-space/675
for more details.
There is also a legacy IRC channel, #gstreamer on the OFTC IRC network,
which is also bridged into the Matrix network.
Please do not submit support requests in GitLab, we only use it for
bug tracking and merge requests review. Use the Discourse forum instead.

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

@ -111,7 +111,7 @@ libs_doc = [hotdoc.generate_doc('gst-editing-services',
depends: ges_gir[0],
)]
if host_machine.system() == 'windows'
if host_system == 'windows'
pathsep = ';'
else
pathsep = ':'

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

@ -416,7 +416,7 @@ _cleanup_fields (const Property * field_names, GstStructure * structure,
exists = TRUE;
if (gst_structure_has_field (structure, field_names[i].long_name)) {
gchar *str_info = gst_structure_serialize (structure, 0);
gchar *str_info = gst_structure_serialize_full (structure, 0);
*error =
g_error_new (GES_ERROR, 0,
@ -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

@ -43,7 +43,34 @@
#ifdef HAS_PYTHON
#include <Python.h>
#include "ges-resources.h"
/*
* We need to call dlopen() directly on macOS to workaround a macOS runtime
* linker bug. When there are nested dlopen() calls and the second dlopen() is
* called from another library (such as gmodule), @loader_path is resolved as
* @executable_path and RPATHs are read from the executable (gst-plugin-scanner)
* instead of the library itself (libgstges.dylib). This doesn't happen if the
* second dlopen() call is directly in the source code of the library.
* Previously seen at:
* https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1171#note_2290789
*/
#ifdef G_OS_WIN32
#include <gmodule.h>
#define ges_module_open(fname) g_module_open(fname,0)
#define ges_module_error g_module_error
#define ges_module_symbol(module,name,symbol) g_module_symbol(module,name,symbol)
#else
#include <dlfcn.h>
#define ges_module_open(fname) dlopen(fname,RTLD_NOW | RTLD_GLOBAL)
#define ges_module_error dlerror
static inline gboolean
ges_module_symbol (gpointer handle, const char *name, gpointer * symbol)
{
*symbol = dlsym (handle, name);
return *symbol != NULL;
}
#endif
#endif /* HAS_PYTHON */
GST_DEBUG_CATEGORY_STATIC (ges_formatter_debug);
#undef GST_CAT_DEFAULT
@ -558,27 +585,22 @@ load_python_formatters (void)
G_RESOURCE_LOOKUP_FLAGS_NONE, &err);
PyObject *code = NULL, *res = NULL;
gboolean we_initialized = FALSE;
GModule *libpython;
gpointer has_python = NULL;
GST_LOG ("Checking to see if libpython is already loaded");
if (g_module_symbol (g_module_open (NULL, G_MODULE_BIND_LOCAL),
if (ges_module_symbol (ges_module_open (NULL),
"_Py_NoneStruct", &has_python) && has_python) {
GST_LOG ("libpython is already loaded");
} else {
const gchar *libpython_path =
PY_LIB_LOC "/libpython" PYTHON_VERSION PY_ABI_FLAGS "." PY_LIB_SUFFIX;
GST_LOG ("loading libpython from '%s'", libpython_path);
libpython = g_module_open (libpython_path, 0);
if (!libpython) {
GST_ERROR ("Couldn't g_module_open libpython. Reason: %s",
g_module_error ());
GST_LOG ("loading libpython by name: %s", PY_LIB_FNAME);
if (!ges_module_open (PY_LIB_FNAME)) {
GST_ERROR ("Couldn't load libpython. Reason: %s", ges_module_error ());
return;
}
}
if (!Py_IsInitialized ()) {
GST_LOG ("python wasn't initialized");
GST_LOG ("python wasn't already initialized");
/* set the correct plugin for registering stuff */
Py_Initialize ();
we_initialized = TRUE;

View file

@ -61,12 +61,16 @@ struct _GESFrameCompositionMeta {
GstMeta meta;
gdouble alpha;
gint posx;
gint posy;
gint height;
gint width;
gdouble posx;
gdouble posy;
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

@ -20,6 +20,7 @@
#include "config.h"
#endif
#include <math.h>
#include "gstframepositioner.h"
#include "ges-frame-composition-meta.h"
#include "ges-types.h"
@ -38,6 +39,11 @@ struct _GESSmartMixerPad
gdouble alpha;
GstSegment segment;
GParamSpec *width_pspec;
GParamSpec *height_pspec;
GParamSpec *xpos_pspec;
GParamSpec *ypos_pspec;
};
struct _GESSmartMixerPadClass
@ -53,6 +59,18 @@ enum
G_DEFINE_TYPE (GESSmartMixerPad, ges_smart_mixer_pad, GST_TYPE_GHOST_PAD);
static void
ges_smart_mixer_notify_wrapped_pad (GESSmartMixerPad * self,
GstPad * real_mixer_pad)
{
GObjectClass *klass = G_OBJECT_GET_CLASS (real_mixer_pad);
self->width_pspec = g_object_class_find_property (klass, "width");
self->height_pspec = g_object_class_find_property (klass, "height");
self->xpos_pspec = g_object_class_find_property (klass, "xpos");
self->ypos_pspec = g_object_class_find_property (klass, "ypos");
}
static void
ges_smart_mixer_pad_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec)
@ -240,13 +258,35 @@ set_pad_properties_from_composition_meta (GstPad * mixer_pad,
g_object_set (mixer_pad, "alpha", meta->alpha * transalpha, NULL);
}
g_object_set (mixer_pad, "xpos", meta->posx, "ypos", meta->posy, NULL);
if (G_PARAM_SPEC_VALUE_TYPE (ghost->xpos_pspec) == G_TYPE_INT) {
g_object_set (mixer_pad, "xpos", (gint) round (meta->posx), "ypos",
(gint) round (meta->posy), NULL);
} else if (G_PARAM_SPEC_VALUE_TYPE (ghost->xpos_pspec) == G_TYPE_FLOAT) {
g_object_set (mixer_pad, "xpos", (gfloat) meta->posx, "ypos",
(gfloat) meta->posy, NULL);
} else {
g_object_set (mixer_pad, "xpos", meta->posx, "ypos", meta->posy, NULL);
}
if (meta->width >= 0)
g_object_set (mixer_pad, "width", meta->width, NULL);
if (meta->width >= 0) {
if (G_PARAM_SPEC_VALUE_TYPE (ghost->width_pspec) == G_TYPE_INT) {
g_object_set (mixer_pad, "width", (gint) round (meta->width), NULL);
} else if (G_PARAM_SPEC_VALUE_TYPE (ghost->width_pspec) == G_TYPE_FLOAT) {
g_object_set (mixer_pad, "width", (gfloat) meta->width, NULL);
} else {
g_object_set (mixer_pad, "width", meta->width, NULL);
}
}
if (meta->height >= 0)
g_object_set (mixer_pad, "height", meta->height, NULL);
if (meta->height >= 0) {
if (G_PARAM_SPEC_VALUE_TYPE (ghost->height_pspec) == G_TYPE_INT) {
g_object_set (mixer_pad, "height", (gint) round (meta->height), NULL);
} else if (G_PARAM_SPEC_VALUE_TYPE (ghost->height_pspec) == G_TYPE_FLOAT) {
g_object_set (mixer_pad, "height", (gfloat) meta->height, NULL);
} else {
g_object_set (mixer_pad, "height", meta->height, NULL);
}
}
if (self->ABI.abi.has_operator)
g_object_set (mixer_pad, "operator", meta->operator, NULL);
@ -294,6 +334,8 @@ _request_new_pad (GstElement * element, GstPadTemplate * templ,
"direction", GST_PAD_DIRECTION (infos->mixer_pad), NULL);
infos->ghostpad = ghost;
gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (ghost), infos->mixer_pad);
ges_smart_mixer_notify_wrapped_pad (GES_SMART_MIXER_PAD (ghost),
infos->real_mixer_pad);
gst_pad_set_active (ghost, TRUE);
if (!gst_element_add_pad (GST_ELEMENT (self), ghost))
goto could_not_add;

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

@ -56,6 +56,7 @@
#endif
#include "ges-internal.h"
#include "gstframepositioner.h"
#include "ges-extractable.h"
#include "ges-track-element.h"
#include "ges-clip.h"
@ -278,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) {
@ -299,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);
@ -1913,10 +1913,12 @@ ges_track_element_set_control_source (GESTrackElement * object,
goto done;
}
/* First remove existing binding */
if (ges_track_element_remove_control_binding (object, property_name))
GST_LOG_OBJECT (object, "Removed old binding for property %s",
property_name);
if (GST_IS_FRAME_POSITIONNER (element)) {
if (!gst_frame_positioner_check_can_add_binding (GST_FRAME_POSITIONNER
(element), property_name)) {
goto done;
}
}
if (direct_absolute)
binding = gst_direct_control_binding_new_absolute (GST_OBJECT (element),

View file

@ -192,6 +192,47 @@ find_compositor (GstPluginFeature * feature, gpointer udata)
(loaded_feature)), GST_TYPE_AGGREGATOR);
}
if (res) {
const gchar *needed_props[] = { "width", "height", "xpos", "ypos" };
GObjectClass *klass =
g_type_class_ref (gst_element_factory_get_element_type
(GST_ELEMENT_FACTORY (loaded_feature)));
GstPadTemplate *templ =
gst_element_class_get_pad_template (GST_ELEMENT_CLASS (klass),
"sink_%u");
g_type_class_unref (klass);
if (!templ) {
GST_INFO_OBJECT (loaded_feature, "No sink template found, ignoring");
res = FALSE;
goto done;
}
GType pad_type;
g_object_get (templ, "gtype", &pad_type, NULL);
klass = g_type_class_ref (pad_type);
for (gint i = 0; i < G_N_ELEMENTS (needed_props); i++) {
GParamSpec *pspec;
if (!(pspec = g_object_class_find_property (klass, needed_props[i]))) {
GST_INFO_OBJECT (loaded_feature, "No property %s found, ignoring",
needed_props[i]);
res = FALSE;
break;
}
if (pspec->value_type != G_TYPE_INT && pspec->value_type != G_TYPE_FLOAT
&& pspec->value_type != G_TYPE_DOUBLE) {
GST_INFO_OBJECT (loaded_feature,
"Property %s is not of type int or float, or double, ignoring",
needed_props[i]);
res = FALSE;
break;
}
}
g_type_class_unref (klass);
}
done:
gst_clear_object (&elem);
gst_object_unref (loaded_feature);

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

@ -115,7 +115,9 @@ ges_video_source_create_filters (GESVideoSource * self, GPtrArray * elements,
GESTrackElement *trksrc = GES_TRACK_ELEMENT (self);
GstElement *positioner, *videoflip, *capsfilter, *videorate;
const gchar *positioner_props[]
= { "alpha", "posx", "posy", "width", "height", "operator", NULL };
= { "alpha", "posx", "fposx", "posy", "fposy", "width", "fwidth",
"height", "fheight", "operator", NULL
};
const gchar *videoflip_props[] = { "video-direction", NULL };
gchar *ename = NULL;

View file

@ -22,6 +22,7 @@
#endif
#include <gst/gst.h>
#include <math.h>
#include "ges-frame-composition-meta.h"
@ -96,7 +97,8 @@ chain (GstPad * pad, GESVideoScale * self, GstBuffer * buffer)
if (meta->height != self->height || meta->width != self->width) {
GST_OBJECT_UNLOCK (self);
set_dimension (self, meta->width, meta->height);
set_dimension (self, (gint) round (meta->width),
(gint) round (meta->height));
} else {
GST_OBJECT_UNLOCK (self);
}

View file

@ -48,11 +48,20 @@ enum
{
PROP_0,
PROP_ALPHA,
PROP_POSX,
PROP_FPOSX,
PROP_POSY,
PROP_ZORDER,
PROP_FPOSY,
PROP_WIDTH,
PROP_FWIDTH,
PROP_HEIGHT,
PROP_FHEIGHT,
PROP_ZORDER,
PROP_OPERATOR,
PROP_LAST,
};
@ -143,9 +152,16 @@ is_user_positionned (GstFramePositioner * self)
gint i;
GParamSpec *positioning_props[] = {
properties[PROP_WIDTH],
properties[PROP_FWIDTH],
properties[PROP_HEIGHT],
properties[PROP_FHEIGHT],
properties[PROP_POSX],
properties[PROP_FPOSX],
properties[PROP_POSY],
properties[PROP_FPOSY],
};
if (self->user_positioned)
@ -219,13 +235,22 @@ reposition_properties (GstFramePositioner * pos, gint old_track_width,
gint old_track_height)
{
gint i;
/* *INDENT-OFF* */
RepositionPropertyData props_data[] = {
{&pos->width, old_track_width, pos->track_width, properties[PROP_FWIDTH]},
{&pos->width, old_track_width, pos->track_width, properties[PROP_WIDTH]},
{&pos->height, old_track_height, pos->track_height,
properties[PROP_HEIGHT]},
{&pos->height, old_track_height, pos->track_height, properties[PROP_FHEIGHT]},
{&pos->height, old_track_height, pos->track_height, properties[PROP_HEIGHT]},
{&pos->posx, old_track_width, pos->track_width, properties[PROP_FPOSX]},
{&pos->posx, old_track_width, pos->track_width, properties[PROP_POSX]},
{&pos->posy, old_track_height, pos->track_height, properties[PROP_FPOSY]},
{&pos->posy, old_track_height, pos->track_height, properties[PROP_POSY]},
};
/* *INDENT-ON* */
for (i = 0; i < G_N_ELEMENTS (props_data); i++) {
GList *values, *tmp;
@ -236,8 +261,10 @@ reposition_properties (GstFramePositioner * pos, gint old_track_width,
GstControlBinding *binding =
gst_object_get_control_binding (GST_OBJECT (pos), d.pspec->name);
*(d.value) =
*(d.value) * (gdouble) d.track_value / (gdouble) d.old_track_value;
if (G_PARAM_SPEC_VALUE_TYPE (d.pspec) == G_TYPE_FLOAT) {
*(d.value) =
*(d.value) * (gdouble) d.track_value / (gdouble) d.old_track_value;
}
if (!binding)
continue;
@ -523,9 +550,19 @@ gst_frame_positioner_class_init (GstFramePositionerClass * klass)
* The desired x position for the stream.
*/
properties[PROP_POSX] =
g_param_spec_int ("posx", "posx", "x position of the stream", MIN_PIXELS,
MAX_PIXELS, 0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE);
g_param_spec_int ("posx", "posx", "x position of the stream",
MIN_PIXELS, MAX_PIXELS, 0,
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_LAX_VALIDATION);
/**
* gstframepositioner:fposx:
*
* The desired x position for the stream.
*/
properties[PROP_FPOSX] =
g_param_spec_float ("fposx", "fposx", "x position of the stream in float",
MIN_PIXELS, MAX_PIXELS, 0,
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_LAX_VALIDATION);
/**
* gstframepositioner:posy:
@ -533,8 +570,20 @@ gst_frame_positioner_class_init (GstFramePositionerClass * klass)
* The desired y position for the stream.
*/
properties[PROP_POSY] =
g_param_spec_int ("posy", "posy", "y position of the stream", MIN_PIXELS,
MAX_PIXELS, 0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE);
g_param_spec_int ("posy", "posy", "y position of the stream",
MIN_PIXELS, MAX_PIXELS, 0,
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_LAX_VALIDATION);
/**
* gstframepositioner:fposy:
*
* The desired y position for the stream.
*/
properties[PROP_FPOSY] =
g_param_spec_float ("fposy", "fposy", "y position of the stream in float",
MIN_PIXELS, MAX_PIXELS, 0,
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_LAX_VALIDATION);
/**
* gstframepositioner:zorder:
@ -552,8 +601,20 @@ gst_frame_positioner_class_init (GstFramePositionerClass * klass)
* Set to 0 if size is not mandatory, will be set to width of the current track.
*/
properties[PROP_WIDTH] =
g_param_spec_int ("width", "width", "width of the source", 0, MAX_PIXELS,
0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE);
g_param_spec_int ("width", "width", "width of the source", 0,
MAX_PIXELS, 0,
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_LAX_VALIDATION);
/**
* gesframepositioner:fwidth:
*
* The desired width for that source.
* Set to 0 if size is not mandatory, will be set to width of the current track.
*/
properties[PROP_FWIDTH] =
g_param_spec_float ("fwidth", "fwidth", "width of the source in float", 0,
MAX_PIXELS, 0,
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_LAX_VALIDATION);
/**
* gesframepositioner:height:
@ -563,7 +624,19 @@ gst_frame_positioner_class_init (GstFramePositionerClass * klass)
*/
properties[PROP_HEIGHT] =
g_param_spec_int ("height", "height", "height of the source", 0,
MAX_PIXELS, 0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE);
MAX_PIXELS, 0,
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_LAX_VALIDATION);
/**
* gesframepositioner:fheight:
*
* The desired height for that source.
* Set to 0 if size is not mandatory, will be set to height of the current track.
*/
properties[PROP_FHEIGHT] =
g_param_spec_float ("fheight", "fheight", "height of the source in float",
0, MAX_PIXELS, 0,
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_LAX_VALIDATION);
/**
* gesframepositioner:operator:
@ -635,10 +708,18 @@ gst_frame_positioner_set_property (GObject * object, guint property_id,
framepositioner->posx = g_value_get_int (value);
framepositioner->user_positioned = TRUE;
break;
case PROP_FPOSX:
framepositioner->posx = g_value_get_float (value);
framepositioner->user_positioned = TRUE;
break;
case PROP_POSY:
framepositioner->posy = g_value_get_int (value);
framepositioner->user_positioned = TRUE;
break;
case PROP_FPOSY:
framepositioner->posy = g_value_get_float (value);
framepositioner->user_positioned = TRUE;
break;
case PROP_ZORDER:
framepositioner->zorder = g_value_get_uint (value);
break;
@ -648,12 +729,24 @@ gst_frame_positioner_set_property (GObject * object, guint property_id,
gst_frame_positioner_update_properties (framepositioner, track_mixing,
0, 0);
break;
case PROP_FWIDTH:
framepositioner->user_positioned = TRUE;
framepositioner->width = g_value_get_float (value);
gst_frame_positioner_update_properties (framepositioner, track_mixing,
0, 0);
break;
case PROP_HEIGHT:
framepositioner->user_positioned = TRUE;
framepositioner->height = g_value_get_int (value);
gst_frame_positioner_update_properties (framepositioner, track_mixing,
0, 0);
break;
case PROP_FHEIGHT:
framepositioner->user_positioned = TRUE;
framepositioner->height = g_value_get_float (value);
gst_frame_positioner_update_properties (framepositioner, track_mixing,
0, 0);
break;
case PROP_OPERATOR:
framepositioner->operator = g_value_get_enum (value);
gst_frame_positioner_update_properties (framepositioner, track_mixing,
@ -671,7 +764,7 @@ gst_frame_positioner_get_property (GObject * object, guint property_id,
GValue * value, GParamSpec * pspec)
{
GstFramePositioner *pos = GST_FRAME_POSITIONNER (object);
gint real_width, real_height;
gdouble real_width, real_height;
switch (property_id) {
case PROP_ALPHA:
@ -680,9 +773,15 @@ gst_frame_positioner_get_property (GObject * object, guint property_id,
case PROP_POSX:
g_value_set_int (value, round (pos->posx));
break;
case PROP_FPOSX:
g_value_set_float (value, pos->posx);
break;
case PROP_POSY:
g_value_set_int (value, round (pos->posy));
break;
case PROP_FPOSY:
g_value_set_float (value, pos->posy);
break;
case PROP_ZORDER:
g_value_set_uint (value, pos->zorder);
break;
@ -690,18 +789,32 @@ gst_frame_positioner_get_property (GObject * object, guint property_id,
if (pos->scale_in_compositor) {
g_value_set_int (value, round (pos->width));
} else {
real_width =
pos->width > 0 ? round (pos->width) : round (pos->track_width);
g_value_set_int (value, real_width);
real_width = pos->width > 0 ? pos->width : pos->track_width;
g_value_set_int (value, round (real_width));
}
break;
case PROP_FWIDTH:
if (pos->scale_in_compositor) {
g_value_set_float (value, pos->width);
} else {
real_width = pos->width > 0 ? pos->width : pos->track_width;
g_value_set_float (value, real_width);
}
break;
case PROP_HEIGHT:
if (pos->scale_in_compositor) {
g_value_set_int (value, round (pos->height));
} else {
real_height =
pos->height > 0 ? round (pos->height) : round (pos->track_height);
g_value_set_int (value, real_height);
real_height = pos->height > 0 ? pos->height : pos->track_height;
g_value_set_int (value, round (real_height));
}
break;
case PROP_FHEIGHT:
if (pos->scale_in_compositor) {
g_value_set_float (value, pos->height);
} else {
real_height = pos->height > 0 ? pos->height : pos->track_height;
g_value_set_float (value, real_height);
}
break;
case PROP_OPERATOR:
@ -728,13 +841,54 @@ gst_frame_positioner_transform_ip (GstBaseTransform * trans, GstBuffer * buf)
GST_OBJECT_LOCK (framepositioner);
meta->alpha = framepositioner->alpha;
meta->posx = round (framepositioner->posx);
meta->posy = round (framepositioner->posy);
meta->width = round (framepositioner->width);
meta->height = round (framepositioner->height);
meta->posx = framepositioner->posx;
meta->posy = framepositioner->posy;
meta->width = framepositioner->width;
meta->height = framepositioner->height;
meta->zorder = framepositioner->zorder;
meta->operator = framepositioner->operator;
GST_OBJECT_UNLOCK (framepositioner);
return GST_FLOW_OK;
}
gboolean
gst_frame_positioner_check_can_add_binding (GstFramePositioner * self,
const gchar * property_name)
{
gint i = 0;
const gchar *checked_prop = NULL;
const gchar *props[][2] = {
{"posx", "fposx"},
{"posy", "fposy"},
{"width", "fwidth"},
{"height", "fheight"},
};
for (i = 0; i < G_N_ELEMENTS (props); i++) {
if (!g_strcmp0 (property_name, props[i][0])) {
checked_prop = props[i][1];
break;
} else if (!g_strcmp0 (property_name, props[i][1])) {
checked_prop = props[i][0];
break;
}
}
if (!checked_prop)
return TRUE;
GstControlBinding *b =
gst_object_get_control_binding (GST_OBJECT (self), checked_prop);
if (b) {
gst_object_unref (b);
GST_WARNING_OBJECT (self,
"Can't add control binding for %s as %s already has one", property_name,
checked_prop);
return FALSE;
}
return TRUE;
}

View file

@ -72,6 +72,7 @@ struct _GstFramePositionerClass
GstBaseTransformClass base_framepositioner_class;
};
G_GNUC_INTERNAL gboolean gst_frame_positioner_check_can_add_binding (GstFramePositioner *self, const gchar *property_name);
G_GNUC_INTERNAL GType gst_compositor_operator_get_type_and_default_value (int *default_operator_value);
G_GNUC_INTERNAL void ges_frame_positioner_set_source_and_filter (GstFramePositioner *pos,
GESTrackElement *trksrc,

View file

@ -30,6 +30,36 @@ GStreamer library for creating audio and video editors
</GitRepository>
</repository>
<release>
<Version>
<revision>1.24.0</revision>
<branch>main</branch>
<name></name>
<created>2024-03-04</created>
<file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-editing-services/gst-editing-services-1.24.0.tar.xz" />
</Version>
</release>
<release>
<Version>
<revision>1.23.90</revision>
<branch>main</branch>
<name></name>
<created>2024-02-23</created>
<file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-editing-services/gst-editing-services-1.23.90.tar.xz" />
</Version>
</release>
<release>
<Version>
<revision>1.23.2</revision>
<branch>main</branch>
<name></name>
<created>2024-02-15</created>
<file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-editing-services/gst-editing-services-1.23.2.tar.xz" />
</Version>
</release>
<release>
<Version>
<revision>1.23.1</revision>

View file

@ -1,5 +1,5 @@
project('gst-editing-services', 'c',
version : '1.23.1',
version : '1.25.0.1',
meson_version : '>= 1.1',
default_options : [ 'warning_level=1',
'buildtype=debugoptimized' ])
@ -35,6 +35,7 @@ else
gst_req = '>= ' + gst_version
endif
host_system = host_machine.system()
cc = meson.get_compiler('c')
mathlib = cc.find_library('m', required : false)
@ -81,14 +82,14 @@ if cc.has_argument('-fno-strict-aliasing')
add_project_arguments('-fno-strict-aliasing', language: 'c')
endif
cdata.set('VERSION', '"@0@"'.format(gst_version))
cdata.set('PACKAGE', '"gst-editing-services"')
cdata.set('PACKAGE_VERSION', '"@0@"'.format(gst_version))
cdata.set('PACKAGE_BUGREPORT', '"https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/new"')
cdata.set('PACKAGE_NAME', '"GStreamer Editing Services"')
cdata.set('GST_PACKAGE_NAME', '"GStreamer Editing Services"')
cdata.set('GST_PACKAGE_ORIGIN', '"Unknown package origin"')
cdata.set('GST_LICENSE', '"LGPL"')
cdata.set_quoted('VERSION', gst_version)
cdata.set_quoted('PACKAGE', 'gst-editing-services')
cdata.set_quoted('PACKAGE_VERSION', gst_version)
cdata.set_quoted('PACKAGE_BUGREPORT', 'https://gitlab.freedesktop.org/gstreamer/gstreamer/issues/new')
cdata.set_quoted('PACKAGE_NAME', 'GStreamer Editing Services')
cdata.set_quoted('GST_PACKAGE_NAME', 'GStreamer Editing Services')
cdata.set_quoted('GST_PACKAGE_ORIGIN', 'Unknown package origin')
cdata.set_quoted('GST_LICENSE', 'LGPL')
# Mandatory GST deps
gst_dep = dependency('gstreamer-' + apiversion, version : gst_req,
@ -101,7 +102,7 @@ gstaudio_dep = dependency('gstreamer-audio-' + apiversion, version : gst_req,
fallback : ['gst-plugins-base', 'audio_dep'])
gstbase_dep = dependency('gstreamer-base-1.0', version : gst_req,
fallback : ['gstreamer', 'gst_base_dep'])
if host_machine.system() != 'windows'
if host_system != 'windows'
gstcheck_dep = dependency('gstreamer-check-1.0', version : gst_req,
required : get_option('tests'),
fallback : ['gstreamer', 'gst_check_dep'])
@ -113,6 +114,7 @@ gstvalidate_dep = dependency('gstreamer-validate-1.0', version : gst_req, requir
gio_dep = dependency('gio-2.0', version: glib_req)
gmodule_dep = dependency('gmodule-no-export-2.0')
libdl = cc.find_library('dl', required: false)
libxml_dep = dependency('libxml-2.0', required: get_option('xptv'))
cdata.set('DISABLE_XPTV', not libxml_dep.found())
@ -143,73 +145,79 @@ gir_init_section = [ '--add-init-section=' + \
'ges_init();', '--quiet']
pymod = import('python')
python = pymod.find_installation(required: get_option('python'))
python_opt = get_option('python')
python = pymod.find_installation(required: python_opt)
has_python = false
static_build = get_option('default_library') == 'static'
if static_build
if get_option('python').enabled()
if python_opt.enabled()
error('Want to build python based modules but it is not supported while static building')
else
message('Disabling python support as it is not supported on static builds')
endif
elif build_gir
if python.found()
# Workaround for https://github.com/mesonbuild/meson/issues/5629
pythonver = python.language_version()
python_dep = dependency('python-@0@-embed'.format(pythonver), version: '>=3',
required: false, include_type: 'system')
if not python_dep.found()
python_dep = python.dependency(required : get_option('python'),
include_type: 'system')
endif
else
python_dep = dependency('', required: false)
endif
elif build_gir and python.found()
python_dep = python.dependency(required : python_opt, embed: true,
include_type: 'system')
if python_dep.found()
python_abi_flags = python.get_variable('ABIFLAGS', '')
message(f'python_abi_flags = @python_abi_flags@')
pylib_loc = get_option('libpython-dir')
error_msg = ''
if not cc.compiles('#include <Python.h>', dependencies: [python_dep])
error_msg = 'Could not compile a simple program against python'
elif pylib_loc == ''
fsmod = import('fs')
pylib_loc = python.get_variable('LIBPL', '')
if host_machine.system() != 'windows' and host_machine.system() != 'darwin'
pylib_ldlibrary = python.get_variable('LDLIBRARY', '')
if not fsmod.exists(pylib_loc / pylib_ldlibrary)
# Workaround for Fedora
pylib_loc = python.get_variable('LIBDIR', '')
message('pylib_loc = @0@'.format(pylib_loc))
endif
if not fsmod.exists(pylib_loc / pylib_ldlibrary)
error_msg = '@0@ doesn\' exist, can\'t use python'.format(join_paths(pylib_loc, pylib_ldlibrary))
endif
endif
if error_msg == ''
pylib_suffix = 'so'
if host_machine.system() == 'windows'
pylib_suffix = 'dll'
elif host_machine.system() == 'darwin'
pylib_suffix = 'dylib'
endif
libges_deps = libges_deps + [python_dep, gmodule_dep]
has_python = true
message('python_abi_flags = @0@'.format(python_abi_flags))
message('pylib_loc = @0@'.format(pylib_loc))
cdata.set('HAS_PYTHON', true)
cdata.set('PY_LIB_LOC', '"@0@"'.format(pylib_loc))
cdata.set('PY_ABI_FLAGS', '"@0@"'.format(python_abi_flags))
cdata.set('PY_LIB_SUFFIX', '"@0@"'.format(pylib_suffix))
cdata.set('PYTHON_VERSION', '"@0@"'.format(python_dep.version()))
if python_opt.enabled()
error(error_msg)
else
if get_option('python').enabled()
error(error_msg)
else
message(error_msg)
endif
message(error_msg)
endif
endif
fsmod = import('fs')
pylib_prefix = 'lib'
pylib_suffix = 'so'
if host_system == 'windows'
if cc.get_argument_syntax() == 'msvc'
pylib_prefix = ''
endif
pylib_suffix = 'dll'
elif host_system == 'darwin'
pylib_suffix = 'dylib'
endif
pylib_fnames = []
# Library name with soversion, non-devel package
pylib_fnames += python.get_variable('INSTSONAME', [])
# Library name without soversion, devel package, framework, etc.
pylib_fnames += python.get_variable('LDLIBRARY', [])
# Manually construct name as a fallback
pylib_fnames += [
pylib_prefix + 'python' + python_dep.version() + python_abi_flags + '.' + pylib_suffix
]
if pylib_loc != ''
pylib_locs = [pylib_loc]
else
pylib_locs = [
python.get_variable('LIBDIR', ''),
python.get_variable('LIBPL', ''),
]
endif
foreach loc: pylib_locs
foreach fname: pylib_fnames
if fsmod.exists(loc / fname)
libges_deps = libges_deps + [python_dep, gmodule_dep, libdl]
has_python = true
cdata.set('HAS_PYTHON', true)
cdata.set_quoted('PY_LIB_FNAME', fname)
message(f'PY_LIB_FNAME = @fname@ (@loc@)')
break
endif
endforeach
endforeach
if not has_python
error_msg = 'Could not find python library to load'
if python_opt.enabled()
error(error_msg)
else
message(error_msg)
endif
endif
endif

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

@ -3,7 +3,7 @@ if get_option('tests').disabled() or static_build
endif
# FIXME: make check work on windows
if host_machine.system() != 'windows' and gstcheck_dep.found()
if host_system != 'windows' and gstcheck_dep.found()
subdir('check')
endif

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);

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