mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-06-08 17:19:25 +00:00
Merge branch gstreamer:main into decklink
This commit is contained in:
commit
af19699df0
|
@ -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
|
||||
|
@ -45,6 +45,7 @@ variables:
|
|||
-Dlibnice:examples=disabled
|
||||
-Dlibnice:gupnp=disabled
|
||||
-Dopenh264:tests=disabled
|
||||
-Dgst-plugins-good:soup-lookup-dep=true
|
||||
-Dpygobject:tests=false
|
||||
-Dpython=enabled
|
||||
-Dlibav=enabled
|
||||
|
@ -161,6 +162,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 +216,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 +246,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
|
||||
|
@ -299,6 +305,9 @@ commitlint:
|
|||
GST_WERROR: "true"
|
||||
MESON_ARGS: "${DEFAULT_MESON_ARGS}"
|
||||
SUBPROJECTS_CACHE_DIR: "/subprojects"
|
||||
# Avoid weird issue about cross-device links
|
||||
# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3197
|
||||
GI_SCANNER_DISABLE_CACHE: "1"
|
||||
script:
|
||||
- $CI_PROJECT_DIR/ci/scripts/build.sh
|
||||
- ./gst-env.py gst-inspect-1.0 --version
|
||||
|
@ -412,7 +421,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]
|
||||
|
@ -480,9 +488,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'
|
||||
|
@ -507,7 +514,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
|
||||
|
@ -559,7 +565,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 ----- #
|
||||
|
||||
|
@ -574,6 +579,10 @@ build macos:
|
|||
MESON_ARGS: "${SIMPLE_BUILD}"
|
||||
SUBPROJECTS_CACHE_DIR: "/subprojects"
|
||||
|
||||
# Avoid weird issue about cross-device links
|
||||
# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3197
|
||||
GI_SCANNER_DISABLE_CACHE: "1"
|
||||
|
||||
# Disable colored output to avoid weird rendering issues
|
||||
GST_DEBUG_NO_COLOR: "true"
|
||||
CI_ARTIFACTS_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/validate-logs/"
|
||||
|
|
|
@ -5,10 +5,10 @@ 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: '2023-12-29.0'
|
||||
FEDORA_TAG: '2024-02-13.0'
|
||||
|
||||
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-02-08.0'
|
||||
|
|
|
@ -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 -->
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
7
.gitlint
7
.gitlint
|
@ -13,8 +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+$
|
||||
regex=^ \#\d(.*):\d+$
|
||||
|
||||
[ignore-by-title]
|
||||
regex=^(Release|Back to development)
|
||||
|
|
10
README.md
10
README.md
|
@ -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.
|
||||
|
|
|
@ -93,6 +93,8 @@ qt5-qtx11extras-devel
|
|||
redhat-rpm-config
|
||||
sbc-devel
|
||||
SDL2-devel
|
||||
srt-devel
|
||||
srt-libs
|
||||
toolbox-experience
|
||||
valgrind
|
||||
vulkan-devel
|
||||
|
|
|
@ -4,7 +4,7 @@ set -eux
|
|||
|
||||
# Install Rust
|
||||
RUSTUP_VERSION=1.26.0
|
||||
RUST_VERSION=1.75.0
|
||||
RUST_VERSION=1.76.0
|
||||
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.30+cargo-0.77.0
|
||||
|
||||
rustup --version
|
||||
cargo --version
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
#! /bin/bash
|
||||
|
||||
set -eux
|
||||
|
||||
python3 -m pip install gitlint
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
|
||||
|
||||
$rust_version = '1.75.0'
|
||||
$rust_version = '1.76.0'
|
||||
$rustup_url = 'https://win.rustup.rs/x86_64'
|
||||
|
||||
Invoke-WebRequest -Uri $rustup_url -OutFile C:\rustup-init.exe
|
||||
|
|
|
@ -489,6 +489,8 @@ and/or use gtk-doc annotations. -->
|
|||
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/cuda/stub/cuda.h"/>
|
||||
<member name="success" value="0" c:identifier="CUDA_SUCCESS">
|
||||
</member>
|
||||
<member name="error_no_device" value="100" c:identifier="CUDA_ERROR_NO_DEVICE">
|
||||
</member>
|
||||
<member name="error_already_mapped" value="208" c:identifier="CUDA_ERROR_ALREADY_MAPPED">
|
||||
</member>
|
||||
<member name="error_not_supported" value="801" c:identifier="CUDA_ERROR_NOT_SUPPORTED">
|
||||
|
|
|
@ -1499,7 +1499,7 @@ do_time_effect_change (GESClip * clip)
|
|||
children = ges_container_get_children (GES_CONTAINER (clip), FALSE);
|
||||
|
||||
for (tmp = children; tmp; tmp = tmp->next)
|
||||
ges_track_element_set_auto_clamp_control_source (tmp->data, FALSE);
|
||||
ges_track_element_set_auto_clamp_control_sources (tmp->data, FALSE);
|
||||
|
||||
// add time effect, or set their children properties, or move them around
|
||||
...
|
||||
|
@ -1520,7 +1520,7 @@ do_time_effect_change (GESClip * clip)
|
|||
// handle error
|
||||
|
||||
for (tmp = children; tmp; tmp = tmp->next)
|
||||
ges_track_element_set_auto_clamp_control_source (tmp->data, TRUE);
|
||||
ges_track_element_set_auto_clamp_control_sources (tmp->data, TRUE);
|
||||
|
||||
g_list_free_full (children, gst_object_unref);
|
||||
gst_object_unref (source);
|
||||
|
@ -1664,7 +1664,8 @@ would not be able to adapt itself once the effect is added.</doc>
|
|||
<type name="BaseEffect" c:type="GESBaseEffect*"/>
|
||||
</parameter>
|
||||
<parameter name="index" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-editing-services/ges/ges-clip.c">The index to add @effect at, or -1 to add at the highest</doc>
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-editing-services/ges/ges-clip.c">The index to add @effect at, or -1 to add at the highest,
|
||||
see #ges_clip_get_top_effect_index for more information</doc>
|
||||
<type name="gint" c:type="gint"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
|
@ -3536,10 +3537,23 @@ and [clip management](http://pitivi.org/manual/usingclips.html).</doc>
|
|||
</function>
|
||||
</enumeration>
|
||||
<class name="Effect" c:symbol-prefix="effect" c:type="GESEffect" parent="BaseEffect" glib:type-name="GESEffect" glib:get-type="ges_effect_get_type" glib:type-struct="EffectClass">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-editing-services/ges/ges-effect.c">Currently we only support effects with N sinkpads and one single srcpad.
|
||||
Apart from `gesaudiomixer` and `gescompositor` which can be used as effects
|
||||
and where sinkpads will be requested as needed based on the timeline topology
|
||||
GES will always request at most one sinkpad per effect (when required).
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-editing-services/ges/ges-effect.c">Any GStreamer filter can be used as effects in GES. The only restriction we
|
||||
have is that effects element should have a single [sinkpad](GST_PAD_SINK)
|
||||
(which will be requested if necessary) and a single [srcpad](GST_PAD_SRC).
|
||||
|
||||
Note that `gesaudiomixer` and `gescompositor` can be used as effects even
|
||||
though they can have several sinkpads.
|
||||
|
||||
## GES specific effects:
|
||||
|
||||
* **`gesvideoscale`**: GES implements a specific scaling bin that allows
|
||||
specifying where scaling will happen inside the chain of effects. By
|
||||
default scaling can happen either in the source (if the source doesn't have
|
||||
a specific size, like `videotestsrc` or [mixing](ges_track_set_mixing) has
|
||||
been disabled) or in the mixing element otherwise, when adding that element
|
||||
as an effect, GES guarantees that the scaling will happen in it. This can
|
||||
be useful for example if you want to crop the video before scaling or apply
|
||||
rounding corners to the video after scaling, etc...
|
||||
|
||||
> Note: GES always adds converters (`audioconvert ! audioresample !
|
||||
> audioconvert` for audio effects and `videoconvert` for video effects) to
|
||||
|
@ -4473,19 +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.</doc>
|
||||
<type name="gint" c:type="gint"/>
|
||||
<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="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.</doc>
|
||||
<type name="gint" c:type="gint"/>
|
||||
<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="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>
|
||||
|
@ -15446,7 +15462,7 @@ contains one frame)</doc>
|
|||
<source-position filename="../subprojects/gst-editing-services/ges/ges-version.h"/>
|
||||
<type name="gint" c:type="gint"/>
|
||||
</constant>
|
||||
<constant name="VERSION_MINOR" value="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>
|
||||
|
|
326
girs/Gst-1.0.gir
326
girs/Gst-1.0.gir
|
@ -26903,6 +26903,35 @@ last ref and @obj is about to be freed.</doc>
|
|||
</parameter>
|
||||
</parameters>
|
||||
</function-macro>
|
||||
<function-macro name="OBJECT_AUTO_LOCK" c:identifier="GST_OBJECT_AUTO_LOCK" version="1.24.0" introspectable="0">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstobject.h">Declare a #GMutexLocker variable with g_autoptr() and lock the object. The
|
||||
mutex will be unlocked automatically when leaving the scope.
|
||||
|
||||
``` c
|
||||
{
|
||||
GST_OBJECT_AUTO_LOCK (obj, locker);
|
||||
|
||||
obj->stuff_with_lock();
|
||||
if (cond) {
|
||||
// No need to unlock
|
||||
return;
|
||||
}
|
||||
|
||||
// Unlock before end of scope
|
||||
g_clear_pointer (&locker, g_mutex_locker_free);
|
||||
obj->stuff_without_lock();
|
||||
}
|
||||
```</doc>
|
||||
<source-position filename="../subprojects/gstreamer/gst/gstobject.h"/>
|
||||
<parameters>
|
||||
<parameter name="obj">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstobject.h">a #GstObject to lock</doc>
|
||||
</parameter>
|
||||
<parameter name="var">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstobject.h">a variable name to be declared</doc>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</function-macro>
|
||||
<function-macro name="OBJECT_CAST" c:identifier="GST_OBJECT_CAST" introspectable="0">
|
||||
<source-position filename="../subprojects/gstreamer/gst/gstobject.h"/>
|
||||
<parameters>
|
||||
|
@ -27900,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>
|
||||
|
@ -28482,6 +28519,35 @@ queries explicitly if your element supports multiple scheduling modes.</doc>
|
|||
</parameter>
|
||||
</parameters>
|
||||
</function-macro>
|
||||
<function-macro name="PAD_STREAM_AUTO_LOCK" c:identifier="GST_PAD_STREAM_AUTO_LOCK" version="1.24.0" introspectable="0">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpad.h">Declare a #GRecMutexLocker variable with g_autoptr() and lock the pad. The
|
||||
recursive mutex will be unlocked automatically when leaving the scope.
|
||||
|
||||
``` c
|
||||
{
|
||||
GST_PAD_STREAM_AUTO_LOCK (pad, locker);
|
||||
|
||||
gst_pad_push_event(pad, event1);
|
||||
if (cond) {
|
||||
// No need to unlock
|
||||
return;
|
||||
}
|
||||
|
||||
// Unlock before end of scope
|
||||
g_clear_pointer (&locker, g_rec_mutex_locker_free);
|
||||
gst_pad_push_event(pad, event2);
|
||||
}
|
||||
```</doc>
|
||||
<source-position filename="../subprojects/gstreamer/gst/gstpad.h"/>
|
||||
<parameters>
|
||||
<parameter name="pad">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpad.h">a #GstPad</doc>
|
||||
</parameter>
|
||||
<parameter name="var">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpad.h">a variable name to be declared</doc>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</function-macro>
|
||||
<function-macro name="PAD_STREAM_LOCK" c:identifier="GST_PAD_STREAM_LOCK" introspectable="0">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpad.h">Take the pad's stream lock. The stream lock is recursive and will be taken
|
||||
when buffers or serialized downstream events are pushed on a pad.</doc>
|
||||
|
@ -32796,6 +32862,23 @@ clock, even if the pipeline is not in the PLAYING state.</doc>
|
|||
</instance-parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="get_configured_latency" c:identifier="gst_pipeline_get_configured_latency" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpipeline.c">Return the configured latency on @pipeline.</doc>
|
||||
<source-position filename="../subprojects/gstreamer/gst/gstpipeline.h"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpipeline.c">@pipeline configured latency, or %GST_CLOCK_TIME_NONE if none has been configured
|
||||
because @pipeline did not reach the PLAYING state yet.
|
||||
|
||||
MT safe.</doc>
|
||||
<type name="ClockTime" c:type="GstClockTime"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<instance-parameter name="pipeline" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpipeline.c">a #GstPipeline</doc>
|
||||
<type name="Pipeline" c:type="GstPipeline*"/>
|
||||
</instance-parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="get_delay" c:identifier="gst_pipeline_get_delay">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpipeline.c">Get the configured delay (see gst_pipeline_set_delay()).</doc>
|
||||
<source-position filename="../subprojects/gstreamer/gst/gstpipeline.h"/>
|
||||
|
@ -32844,6 +32927,22 @@ clock, even if the pipeline is not in the PLAYING state.</doc>
|
|||
</instance-parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="is_live" c:identifier="gst_pipeline_is_live" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpipeline.c">Check if @pipeline is live.</doc>
|
||||
<source-position filename="../subprojects/gstreamer/gst/gstpipeline.h"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpipeline.c">%TRUE if @pipeline is live, %FALSE if not or if it did not reach the PAUSED state yet.
|
||||
|
||||
MT safe.</doc>
|
||||
<type name="gboolean" c:type="gboolean"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<instance-parameter name="pipeline" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpipeline.c">a #GstPipeline</doc>
|
||||
<type name="Pipeline" c:type="GstPipeline*"/>
|
||||
</instance-parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="set_auto_flush_bus" c:identifier="gst_pipeline_set_auto_flush_bus">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstpipeline.c">Usually, when a pipeline goes from READY to NULL state, it automatically
|
||||
flushes all pending messages on the bus, which is done for refcounting
|
||||
|
@ -33329,6 +33428,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>
|
||||
|
@ -33465,6 +33612,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"/>
|
||||
|
@ -41089,7 +41281,7 @@ a-struct, nested=[nested-struct, nested=true]
|
|||
```
|
||||
|
||||
> *note*: gst_structure_to_string() won't use that syntax for backward
|
||||
> compatibility reason, gst_structure_serialize() has been added for
|
||||
> compatibility reason, gst_structure_serialize_full() has been added for
|
||||
> that purpose.</doc>
|
||||
<source-position filename="../subprojects/gstreamer/gst/gststructure.h"/>
|
||||
<field name="type" writable="1">
|
||||
|
@ -42539,7 +42731,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
|
||||
|
@ -42547,10 +42739,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>
|
||||
|
@ -42754,7 +42971,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"/>
|
||||
|
@ -43081,6 +43298,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"/>
|
||||
|
@ -49166,7 +49391,7 @@ determine a order for the two provided values.</doc>
|
|||
<source-position filename="../subprojects/gstreamer/gst/gstversion.h"/>
|
||||
<type name="gint" c:type="gint"/>
|
||||
</constant>
|
||||
<constant name="VERSION_MINOR" value="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"/>
|
||||
|
@ -51760,7 +51985,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
|
||||
|
@ -52256,6 +52490,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 **) & meta_info)) {
|
||||
GstMetaInfo *info = gst_meta_info_new (
|
||||
gst_my_meta_api_get_type (),
|
||||
"GstMyMeta",
|
||||
sizeof (GstMyMeta));
|
||||
const GstMetaInfo *meta = NULL;
|
||||
|
||||
info->init_func = my_meta_init;
|
||||
info->free_func = my_meta_free;
|
||||
info->transform_func = my_meta_transform;
|
||||
info->serialize_func = my_meta_serialize;
|
||||
info->deserialize_func = my_meta_deserialize;
|
||||
meta = gst_meta_info_register (info);
|
||||
g_once_init_leave ((GstMetaInfo **) & 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.
|
||||
|
||||
|
@ -54222,6 +54507,20 @@ element or %NULL if nothing was found</doc>
|
|||
</parameter>
|
||||
</parameters>
|
||||
</function>
|
||||
<function name="util_ceil_log2" c:identifier="gst_util_ceil_log2" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstutils.c">Return a max num of log2.</doc>
|
||||
<source-position filename="../subprojects/gstreamer/gst/gstutils.h"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstutils.c">a computed #guint val.</doc>
|
||||
<type name="guint" c:type="guint"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<parameter name="v" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstutils.c">a #guint32 value.</doc>
|
||||
<type name="guint32" c:type="guint32"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</function>
|
||||
<function name="util_double_to_fraction" c:identifier="gst_util_double_to_fraction">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstutils.c">Transforms a #gdouble to a fraction and simplifies
|
||||
the result.</doc>
|
||||
|
@ -54276,6 +54575,23 @@ the result.</doc>
|
|||
</parameter>
|
||||
</parameters>
|
||||
</function>
|
||||
<function name="util_filename_compare" c:identifier="gst_util_filename_compare" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstutils.c">Compares the given filenames using natural ordering.</doc>
|
||||
<source-position filename="../subprojects/gstreamer/gst/gstutils.h"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<type name="gint" c:type="gint"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<parameter name="a" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstutils.c">a filename to compare with @b</doc>
|
||||
<type name="filename" c:type="const gchar*"/>
|
||||
</parameter>
|
||||
<parameter name="b" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstutils.c">a filename to compare with @a</doc>
|
||||
<type name="filename" c:type="const gchar*"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</function>
|
||||
<function name="util_fraction_add" c:identifier="gst_util_fraction_add">
|
||||
<doc xml:space="preserve" filename="../subprojects/gstreamer/gst/gstutils.c">Adds the fractions @a_n/@a_d and @b_n/@b_d and stores
|
||||
the result in @res_n and @res_d.</doc>
|
||||
|
|
|
@ -9,12 +9,8 @@ and/or use gtk-doc annotations. -->
|
|||
<alias name="MtdType" c:type="GstAnalyticsMtdType">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h">Type of analytics meta data</doc>
|
||||
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
|
||||
<type name="guint32" c:type="guint32"/>
|
||||
<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>
|
||||
|
@ -75,7 +71,7 @@ Get number of classes</doc>
|
|||
</instance-parameter>
|
||||
<parameter name="index" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">Object class index</doc>
|
||||
<type name="gint" c:type="gint"/>
|
||||
<type name="gsize" c:type="gsize"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
|
@ -93,32 +89,26 @@ Get number of classes</doc>
|
|||
<parameter name="index" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">index of the class
|
||||
Get quark of the class at @index</doc>
|
||||
<type name="gint" c:type="gint"/>
|
||||
<type name="gsize" c:type="gsize"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<function name="get_type_name" c:identifier="gst_analytics_cls_mtd_get_type_name" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">Get the static string representing #GstAnalyticsMtd type.</doc>
|
||||
<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 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">#GstAnalyticsMtd type name.</doc>
|
||||
<type name="utf8" c:type="const gchar*"/>
|
||||
</return-value>
|
||||
</function>
|
||||
<function name="get_type_quark" c:identifier="gst_analytics_cls_mtd_get_type_quark" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">Get a quark 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">Quark of #GstAnalyticsMtd type</doc>
|
||||
<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>
|
||||
</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">
|
||||
|
@ -144,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>
|
||||
|
@ -151,30 +142,15 @@ 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>
|
||||
</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>
|
||||
<method name="get_mtd_type" c:identifier="gst_analytics_mtd_get_mtd_type" 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">Size (in bytes) of this instance or 0 on failure.</doc>
|
||||
<type name="gsize" c:type="gsize"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<instance-parameter name="instance" transfer-ownership="none">
|
||||
<type name="Mtd" c:type="GstAnalyticsMtd*"/>
|
||||
</instance-parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="get_type_quark" c:identifier="gst_analytics_mtd_get_type_quark" 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">quark associated with type.</doc>
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">opaque id of the type</doc>
|
||||
<type name="MtdType" c:type="GstAnalyticsMtdType"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
|
@ -185,6 +161,73 @@ Get analysis result type.</doc>
|
|||
</instance-parameter>
|
||||
</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">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>
|
||||
<type name="gsize" c:type="gsize"/>
|
||||
</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>
|
||||
</method>
|
||||
<function name="type_get_name" c:identifier="gst_analytics_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"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">the name</doc>
|
||||
<type name="utf8" c:type="const gchar*"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<parameter name="type" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">The type of analytics data</doc>
|
||||
<type name="MtdType" c:type="GstAnalyticsMtdType"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</function>
|
||||
</record>
|
||||
<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">
|
||||
<callback name="mtd_meta_transform">
|
||||
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<type name="gboolean" c:type="gboolean"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<parameter name="transbuf" transfer-ownership="none">
|
||||
<type name="Gst.Buffer" c:type="GstBuffer*"/>
|
||||
</parameter>
|
||||
<parameter name="transmtd" transfer-ownership="none">
|
||||
<type name="Mtd" c:type="GstAnalyticsMtd*"/>
|
||||
</parameter>
|
||||
<parameter name="buffer" transfer-ownership="none">
|
||||
<type name="Gst.Buffer" c:type="GstBuffer*"/>
|
||||
</parameter>
|
||||
<parameter name="type" transfer-ownership="none">
|
||||
<type name="GLib.Quark" c:type="GQuark"/>
|
||||
</parameter>
|
||||
<parameter name="data" transfer-ownership="none">
|
||||
<type name="gpointer" c:type="gpointer"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</callback>
|
||||
</field>
|
||||
<field name="_reserved" readable="0" private="1">
|
||||
<array zero-terminated="0" fixed-size="20">
|
||||
<type name="gpointer" c:type="gpointer"/>
|
||||
</array>
|
||||
</field>
|
||||
</record>
|
||||
<record name="ODMtd" c:type="GstAnalyticsODMtd" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h">Handle containing data required to use gst_analytics_od_mtd APIs. This type
|
||||
|
@ -199,6 +242,24 @@ is generally expected to be allocated on the stack.</doc>
|
|||
identified by @id is stored.</doc>
|
||||
<type name="RelationMeta" c:type="GstAnalyticsRelationMeta*"/>
|
||||
</field>
|
||||
<method name="get_confidence_lvl" c:identifier="gst_analytics_od_mtd_get_confidence_lvl" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Retrieve location confidence level.</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 on success, otherwise FALSE.</doc>
|
||||
<type name="gboolean" c:type="gboolean"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<instance-parameter name="instance" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">instance</doc>
|
||||
<type name="ODMtd" c:type="GstAnalyticsODMtd*"/>
|
||||
</instance-parameter>
|
||||
<parameter name="loc_conf_lvl" direction="out" caller-allocates="0" transfer-ownership="full">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Confidence on object location</doc>
|
||||
<type name="gfloat" c:type="gfloat*"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="get_location" c:identifier="gst_analytics_od_mtd_get_location" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Retrieve location and location confidence level.</doc>
|
||||
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h"/>
|
||||
|
@ -233,7 +294,8 @@ identified by @id is stored.</doc>
|
|||
</parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="get_type" c:identifier="gst_analytics_od_mtd_get_type" version="1.24">
|
||||
<method name="get_obj_type" c:identifier="gst_analytics_od_mtd_get_obj_type" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Quark of the class of object associated with this location.</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">Quark different from on success and 0 on failure.</doc>
|
||||
|
@ -241,25 +303,16 @@ identified by @id is stored.</doc>
|
|||
</return-value>
|
||||
<parameters>
|
||||
<instance-parameter name="handle" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Instance handle
|
||||
Quark of the class of object associated with this location.</doc>
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Instance handle</doc>
|
||||
<type name="ODMtd" c:type="GstAnalyticsODMtd*"/>
|
||||
</instance-parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<function name="get_type_name" c:identifier="gst_analytics_od_mtd_get_type_name" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Get a text representing object-detection metadata type.</doc>
|
||||
<function name="get_mtd_type" c:identifier="gst_analytics_od_mtd_get_mtd_type" version="1.24">
|
||||
<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">#GstAnalyticsMtd type name.</doc>
|
||||
<type name="utf8" c:type="const gchar*"/>
|
||||
</return-value>
|
||||
</function>
|
||||
<function name="get_type_quark" c:identifier="gst_analytics_od_mtd_get_type_quark" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Get a quark 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">Quark of #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>
|
||||
|
@ -284,43 +337,11 @@ Quark of the class of object associated with this location.</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="RelatableMtdData" c:type="GstAnalyticsRelatableMtdData" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h">Base structure for analysis-metadata that can be placed in relation. Only
|
||||
other analysis-metadata based on GstAnalyticsRelatableMtdData should
|
||||
directly use this structure.</doc>
|
||||
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
|
||||
<field name="analysis_type" writable="1">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h">Identify the type of analysis-metadata</doc>
|
||||
<type name="MtdType" c:type="GstAnalyticsMtdType"/>
|
||||
</field>
|
||||
<field name="id" writable="1">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h">Instance identifier.</doc>
|
||||
<type name="guint" c:type="guint"/>
|
||||
</field>
|
||||
<field name="size" writable="1">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h">Size in bytes of the instance</doc>
|
||||
<type name="gsize" c:type="gsize"/>
|
||||
</field>
|
||||
<field name="free">
|
||||
<callback name="free">
|
||||
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<type name="none" c:type="void"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<parameter name="mtd_data" transfer-ownership="none">
|
||||
<type name="RelatableMtdData" c:type="GstAnalyticsRelatableMtdData*"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</callback>
|
||||
</field>
|
||||
<field name="_gst_reserved" writable="1">
|
||||
<array zero-terminated="0" fixed-size="4">
|
||||
<type name="gpointer" c:type="gpointer"/>
|
||||
</array>
|
||||
</field>
|
||||
</record>
|
||||
<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>
|
||||
|
@ -358,24 +379,22 @@ directly use this structure.</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>
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">New GstAnalyticsRelatableMtdData instance.
|
||||
|
||||
Since 1.24</doc>
|
||||
<type name="RelatableMtdData" c:type="GstAnalyticsRelatableMtdData*"/>
|
||||
<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</doc>
|
||||
<type name="gpointer" c:type="gpointer"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<instance-parameter name="meta" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Instance</doc>
|
||||
<type name="RelationMeta" c:type="GstAnalyticsRelationMeta*"/>
|
||||
</instance-parameter>
|
||||
<parameter name="type" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Type of relatable (#GstAnalyticsRelatableMtd)</doc>
|
||||
<type name="MtdType" c:type="GstAnalyticsMtdType"/>
|
||||
<parameter name="impl" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Implementation of relatable (#GstAnalyticsRelatableMtd)</doc>
|
||||
<type name="MtdImpl" c:type="const GstAnalyticsMtdImpl*"/>
|
||||
</parameter>
|
||||
<parameter name="size" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Size required</doc>
|
||||
|
@ -483,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)
|
||||
|
@ -491,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>
|
||||
|
@ -534,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>
|
||||
|
@ -560,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>
|
||||
|
@ -598,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>
|
||||
|
@ -629,13 +640,11 @@ 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 nullable="1">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Instance of GstAnalyticsRelatableMtdData
|
||||
|
||||
Since 1.24</doc>
|
||||
<type name="RelatableMtdData" c:type="GstAnalyticsRelatableMtdData*"/>
|
||||
<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</doc>
|
||||
<type name="gpointer" c:type="gpointer"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<instance-parameter name="meta" transfer-ownership="none">
|
||||
|
@ -648,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>
|
||||
|
@ -664,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">
|
||||
|
@ -675,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>
|
||||
|
@ -699,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>
|
||||
|
@ -725,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>
|
||||
|
@ -784,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*"/>
|
||||
|
@ -875,23 +878,17 @@ Set tracking to lost</doc>
|
|||
</parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<function name="get_type_name" c:identifier="gst_analytics_tracking_mtd_get_type_name">
|
||||
<function name="get_mtd_type" c:identifier="gst_analytics_tracking_mtd_get_mtd_type" version="1.24">
|
||||
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.h"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<type name="utf8" c:type="const gchar*"/>
|
||||
</return-value>
|
||||
</function>
|
||||
<function name="get_type_quark" c:identifier="gst_analytics_tracking_mtd_get_type_quark" version="1.24">
|
||||
<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">Quark representing the type of GstAnalyticsRelatableMtd
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c">id representing the type of GstAnalyticsRelatableMtd
|
||||
|
||||
Get the quark identifying the relatable type</doc>
|
||||
<type name="GLib.Quark" c:type="GQuark"/>
|
||||
Get the opaque id identifying the relatable type</doc>
|
||||
<type name="MtdType" c:type="GstAnalyticsMtdType"/>
|
||||
</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
|
||||
|
@ -899,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>
|
||||
|
@ -911,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>
|
||||
|
@ -948,49 +941,70 @@ Since 1.24</doc>
|
|||
</parameter>
|
||||
</parameters>
|
||||
</function>
|
||||
<function name="cls_mtd_get_type_name" c:identifier="gst_analytics_cls_mtd_get_type_name" moved-to="ClsMtd.get_type_name" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">Get the static string representing #GstAnalyticsMtd type.</doc>
|
||||
<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 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">#GstAnalyticsMtd type name.</doc>
|
||||
<type name="utf8" c:type="const gchar*"/>
|
||||
</return-value>
|
||||
</function>
|
||||
<function name="cls_mtd_get_type_quark" c:identifier="gst_analytics_cls_mtd_get_type_quark" moved-to="ClsMtd.get_type_quark" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c">Get a quark 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">Quark of #GstAnalyticsMtd type</doc>
|
||||
<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>
|
||||
<function name="od_mtd_get_type_name" c:identifier="gst_analytics_od_mtd_get_type_name" moved-to="ODMtd.get_type_name" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Get a text representing object-detection metadata type.</doc>
|
||||
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h"/>
|
||||
<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"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">#GstAnalyticsMtd type name.</doc>
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">the name</doc>
|
||||
<type name="utf8" c:type="const gchar*"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<parameter name="type" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">The type of analytics data</doc>
|
||||
<type name="MtdType" c:type="GstAnalyticsMtdType"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</function>
|
||||
<function name="od_mtd_get_type_quark" c:identifier="gst_analytics_od_mtd_get_type_quark" moved-to="ODMtd.get_type_quark" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c">Get a quark that represent object-detection metadata type</doc>
|
||||
<function name="od_mtd_get_mtd_type" c:identifier="gst_analytics_od_mtd_get_mtd_type" moved-to="ODMtd.get_mtd_type" version="1.24">
|
||||
<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">Quark of #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>
|
||||
|
@ -1002,25 +1016,20 @@ 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*"/>
|
||||
</return-value>
|
||||
</function>
|
||||
<function name="tracking_mtd_get_type_name" c:identifier="gst_analytics_tracking_mtd_get_type_name" moved-to="TrackingMtd.get_type_name">
|
||||
<function name="tracking_mtd_get_mtd_type" c:identifier="gst_analytics_tracking_mtd_get_mtd_type" moved-to="TrackingMtd.get_mtd_type" version="1.24">
|
||||
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.h"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<type name="utf8" c:type="const gchar*"/>
|
||||
</return-value>
|
||||
</function>
|
||||
<function name="tracking_mtd_get_type_quark" c:identifier="gst_analytics_tracking_mtd_get_type_quark" moved-to="TrackingMtd.get_type_quark" version="1.24">
|
||||
<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">Quark representing the type of GstAnalyticsRelatableMtd
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c">id representing the type of GstAnalyticsRelatableMtd
|
||||
|
||||
Get the quark identifying the relatable type</doc>
|
||||
<type name="GLib.Quark" c:type="GQuark"/>
|
||||
Get the opaque id identifying the relatable type</doc>
|
||||
<type name="MtdType" c:type="GstAnalyticsMtdType"/>
|
||||
</return-value>
|
||||
</function>
|
||||
</namespace>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -2904,7 +2904,7 @@ in debugging.</doc>
|
|||
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstpluginsbaseversion.h"/>
|
||||
<type name="gint" c:type="gint"/>
|
||||
</constant>
|
||||
<constant name="PLUGINS_BASE_VERSION_MINOR" value="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"/>
|
||||
|
|
|
@ -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
|
||||
|
@ -434,8 +435,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 +547,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 +835,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 +880,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 +1055,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 +1277,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>
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -2997,6 +2997,9 @@ UTC times will be converted to nanoseconds since 1900.</doc>
|
|||
<member name="ok" value="0" c:identifier="GST_RTSP_OK" glib:nick="ok">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/rtsp/gstrtspdefs.h">no error</doc>
|
||||
</member>
|
||||
<member name="ok_redirect" value="1" c:identifier="GST_RTSP_OK_REDIRECT" version="1.24" glib:nick="ok-redirect">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/rtsp/gstrtspdefs.h">RTSP request is successful, but was redirected.</doc>
|
||||
</member>
|
||||
<member name="error" value="-1" c:identifier="GST_RTSP_ERROR" glib:nick="error">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/rtsp/gstrtspdefs.h">some unspecified error occurred</doc>
|
||||
</member>
|
||||
|
@ -3094,6 +3097,12 @@ UTC times will be converted to nanoseconds since 1900.</doc>
|
|||
</member>
|
||||
<member name="use_proxy" value="305" c:identifier="GST_RTSP_STS_USE_PROXY" glib:nick="use-proxy">
|
||||
</member>
|
||||
<member name="redirect_temporarily" value="307" c:identifier="GST_RTSP_STS_REDIRECT_TEMPORARILY" version="1.24" glib:nick="redirect-temporarily">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/rtsp/gstrtspdefs.h">RTSP request is temporarily redirected</doc>
|
||||
</member>
|
||||
<member name="redirect_permanently" value="308" c:identifier="GST_RTSP_STS_REDIRECT_PERMANENTLY" version="1.24" glib:nick="redirect-permanently">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/rtsp/gstrtspdefs.h">RTSP request is permanently redirected</doc>
|
||||
</member>
|
||||
<member name="bad_request" value="400" c:identifier="GST_RTSP_STS_BAD_REQUEST" glib:nick="bad-request">
|
||||
</member>
|
||||
<member name="unauthorized" value="401" c:identifier="GST_RTSP_STS_UNAUTHORIZED" glib:nick="unauthorized">
|
||||
|
|
|
@ -833,7 +833,7 @@ the most widely used VA drivers.</doc>
|
|||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/va/gstvapool.c">a #GstBufferPool</doc>
|
||||
<type name="Gst.BufferPool" c:type="GstBufferPool*"/>
|
||||
</parameter>
|
||||
<parameter name="size" direction="out" caller-allocates="0" transfer-ownership="full">
|
||||
<parameter name="size" direction="out" caller-allocates="0" transfer-ownership="full" optional="1" allow-none="1">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/va/gstvapool.c">the declared surface size</doc>
|
||||
<type name="guint" c:type="guint*"/>
|
||||
</parameter>
|
||||
|
|
|
@ -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*"/>
|
||||
|
@ -15799,6 +15872,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 +16349,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 +16519,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>
|
||||
|
|
|
@ -3501,6 +3501,15 @@ inside @handle.</doc>
|
|||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkimagebufferpool.c">Vulkan memory property flags.</doc>
|
||||
<type name="Vulkan.MemoryPropertyFlags" c:type="VkMemoryPropertyFlags"/>
|
||||
</parameter>
|
||||
<parameter name="initial_layout" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkimagebufferpool.c">Initial Vulkan image layout.</doc>
|
||||
<type name="Vulkan.ImageLayout" c:type="VkImageLayout"/>
|
||||
</parameter>
|
||||
<parameter name="initial_access" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkimagebufferpool.c">Access flags for the layout transition if @initial_layout is
|
||||
not VK_IMAGE_LAYOUT_UNDEFINED or VK_IMAGE_LAYOUT_PREINITIALIZED.</doc>
|
||||
<type name="guint64" c:type="guint64"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</function>
|
||||
<function name="config_set_decode_caps" c:identifier="gst_vulkan_image_buffer_pool_config_set_decode_caps" version="1.24">
|
||||
|
@ -3704,6 +3713,9 @@ dest or DPB images.</doc>
|
|||
<parameter name="usage" transfer-ownership="none">
|
||||
<type name="Vulkan.ImageUsageFlags" c:type="VkImageUsageFlags"/>
|
||||
</parameter>
|
||||
<parameter name="initial_layout" transfer-ownership="none">
|
||||
<type name="Vulkan.ImageLayout" c:type="VkImageLayout"/>
|
||||
</parameter>
|
||||
<parameter name="params" transfer-ownership="none">
|
||||
<type name="Gst.AllocationParams" c:type="GstAllocationParams*"/>
|
||||
</parameter>
|
||||
|
@ -4341,6 +4353,10 @@ It can be called from any thread.</doc>
|
|||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkmemory.h">number of times this memory is mapped</doc>
|
||||
<type name="guint" c:type="guint"/>
|
||||
</field>
|
||||
<field name="mapping" version="1.24" writable="1">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkmemory.h">internal pointer to already mapped memory</doc>
|
||||
<type name="gpointer" c:type="gpointer"/>
|
||||
</field>
|
||||
<field name="notify" readable="0" private="1">
|
||||
<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
|
||||
</field>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
project('gstreamer-full', 'c',
|
||||
version : '1.23.0.1',
|
||||
version : '1.25.0.1',
|
||||
meson_version : '>= 1.1',
|
||||
default_options : ['buildtype=debugoptimized',
|
||||
# Needed due to https://github.com/mesonbuild/meson/issues/1889,
|
||||
|
|
|
@ -2,4 +2,4 @@
|
|||
directory=FFmpeg
|
||||
url=https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg.git
|
||||
push-url=git@gitlab.freedesktop.org:gstreamer/meson-ports/ffmpeg.git
|
||||
revision=meson-4.4
|
||||
revision=meson-6.1
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,17 +1,15 @@
|
|||
This is GStreamer gst-devtools 1.22.0.
|
||||
This is GStreamer gst-devtools 1.25.0.1.
|
||||
|
||||
The GStreamer team is thrilled to announce a new major feature release
|
||||
of your favourite cross-platform multimedia framework!
|
||||
GStreamer 1.25 is the unstable development branch leading up to the next major
|
||||
stable version which will be 1.26.
|
||||
|
||||
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.
|
||||
|
||||
As always, this release is again packed with new features, bug fixes and
|
||||
other improvements.
|
||||
Full release notes will one day be found at:
|
||||
|
||||
The 1.22 release series adds new features on top of the 1.20 series and is
|
||||
part of the API and ABI-stable 1.x release series.
|
||||
|
||||
Full release notes can be found at:
|
||||
|
||||
https://gstreamer.freedesktop.org/releases/1.22/
|
||||
https://gstreamer.freedesktop.org/releases/1.26/
|
||||
|
||||
Binaries for Android, iOS, Mac OS X and Windows will usually be provided
|
||||
shortly after the release.
|
||||
|
@ -44,10 +42,7 @@ with other GStreamer modules for a complete multimedia experience.
|
|||
|
||||
- gstreamer-vaapi: hardware-accelerated video decoding and encoding using
|
||||
VA-API on Linux. Primarily for Intel graphics hardware.
|
||||
|
||||
- gst-omx: hardware-accelerated video decoding and encoding, primarily for
|
||||
embedded Linux systems that provide an OpenMax
|
||||
implementation layer such as the Raspberry Pi.
|
||||
(Deprecated, use the new "va" plugin instead)
|
||||
|
||||
- gst-rtsp-server: library to serve files or streaming pipelines via RTSP
|
||||
|
||||
|
@ -80,14 +75,18 @@ Please submit patches via GitLab as well, in form of Merge Requests. See
|
|||
|
||||
for more details.
|
||||
|
||||
For help and support, please subscribe to and send questions to the
|
||||
gstreamer-devel mailing list (see below for details).
|
||||
For help and support, please head over to our Discourse forum at
|
||||
|
||||
There is also a #gstreamer IRC channel on the OFTC IRC network, which is
|
||||
also bridged into the Matrix network.
|
||||
https://discourse.gstreamer.org/
|
||||
|
||||
Please do not submit support requests in GitLab, we only use it
|
||||
for bug tracking and merge requests review.
|
||||
or pop into one of our Matrix chat rooms, see
|
||||
|
||||
https://discourse.gstreamer.org/t/new-gstreamer-matrix-chat-space/675
|
||||
|
||||
for more details.
|
||||
|
||||
Please do not submit support requests in GitLab, we only use it for
|
||||
bug tracking and merge requests review. Use the Discourse forum instead.
|
||||
|
||||
==== Developers ====
|
||||
|
||||
|
@ -99,6 +98,9 @@ and can also be cloned from there and this is also where you can submit
|
|||
Merge Requests or file issues for bugs or feature requests.
|
||||
|
||||
Interested developers of the core library, plugins, and applications should
|
||||
subscribe to the gstreamer-devel list:
|
||||
join us on Matrix for chat and the Discourse forum for announcements, help
|
||||
and discussions.
|
||||
|
||||
There is also a gstreamer-devel mailing list, but Discourse is preferred:
|
||||
|
||||
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
|
||||
|
|
|
@ -37,7 +37,7 @@ def load(paths=()):
|
|||
|
||||
def _load_plugins(path):
|
||||
|
||||
import imp
|
||||
import importlib
|
||||
import glob
|
||||
|
||||
files = glob.glob(os.path.join(path, "*.py"))
|
||||
|
@ -47,8 +47,16 @@ def _load_plugins(path):
|
|||
name = os.path.basename(os.path.splitext(filename)[0])
|
||||
if name == "__init__":
|
||||
continue
|
||||
fp, pathname, description = imp.find_module(name, [path])
|
||||
module = imp.load_module(name, fp, pathname, description)
|
||||
|
||||
finder = importlib.machinery.PathFinder()
|
||||
spec = finder.find_spec(
|
||||
name,
|
||||
os.environ.get('_GI_OVERRIDES_PATH', '').split(os.pathsep)
|
||||
)
|
||||
if spec is None:
|
||||
raise ModuleNotFoundError(name)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
|
||||
yield module
|
||||
|
||||
|
||||
|
|
|
@ -53,6 +53,46 @@
|
|||
</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>
|
||||
<branch>main</branch>
|
||||
<name></name>
|
||||
<created>2024-02-06</created>
|
||||
<file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-devtools/gst-devtools-1.23.1.tar.xz" />
|
||||
</Version>
|
||||
</release>
|
||||
|
||||
<release>
|
||||
<Version>
|
||||
<revision>1.22.0</revision>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
project('gst-devtools', 'c',
|
||||
version : '1.23.0.1',
|
||||
meson_version : '>= 0.62',
|
||||
version : '1.25.0.1',
|
||||
meson_version : '>= 1.1',
|
||||
default_options : [ 'warning_level=1',
|
||||
'c_std=gnu99',
|
||||
'buildtype=debugoptimized' ])
|
||||
|
@ -176,7 +176,7 @@ if not get_option('debug_viewer').disabled()
|
|||
endif
|
||||
subdir('docs')
|
||||
|
||||
meson.add_dist_script('scripts/gen-changelog.py', meson.project_name(), '1.20.0', meson.project_version())
|
||||
meson.add_dist_script('scripts/gen-changelog.py', meson.project_name(), '1.22.0', meson.project_version())
|
||||
|
||||
plugin_names = []
|
||||
gst_plugins = []
|
||||
|
|
|
@ -373,6 +373,7 @@ validate_flow_format_buffer (GstBuffer * buffer, gint checksum_type,
|
|||
buffer_parts_index > 0 ? g_strjoinv (", ",
|
||||
buffer_parts) : g_strdup ("(empty)");
|
||||
|
||||
g_strfreev (ignored_fields);
|
||||
g_free (meta_str);
|
||||
g_free (flags_str);
|
||||
while (buffer_parts_index > 0)
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -5941,24 +5941,27 @@ gst_validate_scenario_new (GstValidateRunner *
|
|||
GstClockTime base_time, start_time;
|
||||
gboolean use_system_clock = FALSE;
|
||||
|
||||
if (gst_validate_utils_get_clocktime (scenario->description, "base-time",
|
||||
&base_time)) {
|
||||
gst_validate_printf (NULL,
|
||||
"**-> Setting %" GST_PTR_FORMAT " base time to %" GST_TIMEP_FORMAT
|
||||
"**\n", pipeline, &base_time);
|
||||
gst_element_set_base_time (GST_ELEMENT (pipeline), base_time);
|
||||
if (scenario->description) {
|
||||
if (gst_validate_utils_get_clocktime (scenario->description, "base-time",
|
||||
&base_time)) {
|
||||
gst_validate_printf (NULL,
|
||||
"**-> Setting %" GST_PTR_FORMAT " base time to %" GST_TIMEP_FORMAT
|
||||
"**\n", pipeline, &base_time);
|
||||
gst_element_set_base_time (GST_ELEMENT (pipeline), base_time);
|
||||
}
|
||||
|
||||
if (gst_validate_utils_get_clocktime (scenario->description, "start-time",
|
||||
&start_time)) {
|
||||
gst_validate_printf (NULL,
|
||||
"**-> Setting %" GST_PTR_FORMAT " start time to %" GST_TIMEP_FORMAT
|
||||
"**\n", pipeline, &base_time);
|
||||
gst_element_set_start_time (GST_ELEMENT (pipeline), start_time);
|
||||
}
|
||||
|
||||
gst_structure_get_boolean (scenario->description, "use-system-clock",
|
||||
&use_system_clock);
|
||||
}
|
||||
|
||||
if (gst_validate_utils_get_clocktime (scenario->description, "start-time",
|
||||
&start_time)) {
|
||||
gst_validate_printf (NULL,
|
||||
"**-> Setting %" GST_PTR_FORMAT " start time to %" GST_TIMEP_FORMAT
|
||||
"**\n", pipeline, &base_time);
|
||||
gst_element_set_start_time (GST_ELEMENT (pipeline), start_time);
|
||||
}
|
||||
|
||||
gst_structure_get_boolean (scenario->description, "use-system-clock",
|
||||
&use_system_clock);
|
||||
if (scenario->priv->clock) {
|
||||
if (use_system_clock)
|
||||
gst_validate_abort
|
||||
|
|
|
@ -352,7 +352,7 @@ class GstCheckTestsManager(MesonTestsManager):
|
|||
arggroup.add_argument("--gst-check-leak-trace-testnames",
|
||||
default=None,
|
||||
help="A regex to specifying testsnames of the test"
|
||||
"to run with the leak tracer activated, if 'known-not-leaky'"
|
||||
" to run with the leak tracer activated, if 'known-not-leaky'"
|
||||
" is specified, the testsuite will automatically activate"
|
||||
" leak tracers on tests known to be not leaky.")
|
||||
arggroup.add_argument("--gst-check-leak-options",
|
||||
|
|
|
@ -466,12 +466,13 @@ class GstValidatePlaybinTestsGenerator(GstValidatePipelineTestsGenerator):
|
|||
|
||||
for scenario in special_scenarios + scenarios:
|
||||
cpipe = pipe
|
||||
if not minfo.media_descriptor.is_compatible(scenario):
|
||||
continue
|
||||
|
||||
cpipe = self._set_sinks(minfo, cpipe, scenario)
|
||||
fname = self._get_name(scenario, protocol, minfo)
|
||||
|
||||
if not minfo.media_descriptor.is_compatible(scenario):
|
||||
self.debug("Skipping (media descriptor is not compatible): %s", fname)
|
||||
continue
|
||||
|
||||
self.debug("Adding: %s", fname)
|
||||
|
||||
if scenario.does_reverse_playback() and protocol == Protocols.HTTP:
|
||||
|
@ -490,6 +491,7 @@ class GstValidatePlaybinTestsGenerator(GstValidatePipelineTestsGenerator):
|
|||
rtspminfo = NamedDic({"path": minfo.media_descriptor.get_path(),
|
||||
"media_descriptor": GstValidateRTSPMediaDescriptor(minfo.media_descriptor.get_path())})
|
||||
if not rtspminfo.media_descriptor.is_compatible(scenario):
|
||||
self.debug("Skipping (media descriptor is not compatible for rtsp test): %s", fname)
|
||||
continue
|
||||
|
||||
cpipe = self._set_sinks(rtspminfo, "%s uri=rtsp://127.0.0.1:<RTSPPORTNUMBER>/test"
|
||||
|
@ -989,7 +991,7 @@ class GstValidateRTSPMediaDescriptor(GstValidateMediaDescriptor):
|
|||
def get_protocol(self):
|
||||
return Protocols.RTSP
|
||||
|
||||
def prerrols(self):
|
||||
def prerolls(self):
|
||||
return False
|
||||
|
||||
|
||||
|
|
|
@ -2631,7 +2631,7 @@ class MediaDescriptor(Loggable):
|
|||
def can_play_reverse(self):
|
||||
raise NotImplemented
|
||||
|
||||
def prerrols(self):
|
||||
def prerolls(self):
|
||||
return True
|
||||
|
||||
def is_compatible(self, scenario):
|
||||
|
@ -2649,6 +2649,8 @@ class MediaDescriptor(Loggable):
|
|||
return False
|
||||
|
||||
if not self.can_play_reverse() and scenario.does_reverse_playback():
|
||||
self.debug("Do not run %s as %s can not play reverse ",
|
||||
scenario, self.get_uri())
|
||||
return False
|
||||
|
||||
if not self.is_live() and scenario.needs_live_content():
|
||||
|
@ -2661,7 +2663,9 @@ class MediaDescriptor(Loggable):
|
|||
scenario, self.get_uri())
|
||||
return False
|
||||
|
||||
if not self.prerrols() and getattr(scenario, 'needs_preroll', False):
|
||||
if not self.prerolls() and getattr(scenario, 'needs_preroll', False):
|
||||
self.debug("Do not run %s as %s does not support preroll",
|
||||
scenario, self.get_uri())
|
||||
return False
|
||||
|
||||
if self.get_duration() and self.get_duration() / GST_SECOND < scenario.get_min_media_duration():
|
||||
|
@ -2674,7 +2678,7 @@ class MediaDescriptor(Loggable):
|
|||
|
||||
for track_type in ['audio', 'subtitle', 'video']:
|
||||
if self.get_num_tracks(track_type) < scenario.get_min_tracks(track_type):
|
||||
self.debug("%s -- %s | At least %s %s track needed < %s"
|
||||
self.debug("Do not run %s -- %s | At least %s %s track needed < %s"
|
||||
% (scenario, self.get_uri(), track_type,
|
||||
scenario.get_min_tracks(track_type),
|
||||
self.get_num_tracks(track_type)))
|
||||
|
|
|
@ -26,7 +26,7 @@ import os
|
|||
|
||||
TEST_MANAGER = "check"
|
||||
|
||||
KNOWN_NOT_LEAKY = r'^check.gst-devtools.*|^check.gstreamer.*|^check-gst-plugins-base|^check.gst-plugins-ugly|^check.gst-plugins-good'
|
||||
KNOWN_NOT_LEAKY = r'^gst-devtools.*|^gstreamer.*|^gst-plugins-base|^gst-plugins-ugly|^gst-plugins-good'
|
||||
|
||||
# These tests take very long compared to what they add, so let's skip them.
|
||||
LONG_VALGRIND_TESTS = [
|
||||
|
@ -98,11 +98,13 @@ VALGRIND_BLACKLIST = [
|
|||
(r'check.gst-plugins-good.elements_rtpjitterbuffer.test_push_backward_seq', 'flaky in valgrind'),
|
||||
(r'check.gst-plugins-good.elements_rtpjitterbuffer.test_push_unordered', 'flaky in valgrind'),
|
||||
(r'check.gst-plugins-bad.elements_assrender', '?'),
|
||||
(r'check.gst-plugins-bad.elements_autovideoconvert.test_autovideoconvert_videoconvert', 'Leak with GLX, https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3216'),
|
||||
(r'check.gst-plugins-bad.elements_camerabin', '?'),
|
||||
(r'check.gst-plugins-bad.elements_line21', '?'),
|
||||
(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'),
|
||||
|
@ -179,6 +181,23 @@ CI_BLACKLIST = [
|
|||
|
||||
|
||||
KNOWN_ISSUES = {
|
||||
"https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2973": {
|
||||
"tests": [
|
||||
"check.gst-editing-services.complex_effect_bin_desc"
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
'returncode': 238,
|
||||
'sometimes': True,
|
||||
},
|
||||
{
|
||||
"issue-id": "validateflow::mismatch",
|
||||
"summary": "The recorded log does not match the expectation file.",
|
||||
"level": "critical",
|
||||
# "details": "Mismatch error in pad videosink:sink, line 4. Expected:\nbuffer: checksum=369888c2612267760fcfaa74e52fc53bd73e4d15, pts=0:00:00.000000000, dur=0:00:00.033333333, meta=GstVideoMeta\nActual:\nbuffer: checksum=b7764dce84f311119c4c36b511ba5adb66de76af, pts=0:00:00.000000000, dur=0:00:00.033333333, meta=GstVideoMeta\n",
|
||||
},
|
||||
],
|
||||
},
|
||||
"https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/773": {
|
||||
"tests": [
|
||||
r"check.gst-plugins-bad.elements_webrtcbin.*",
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -47,7 +47,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -115,7 +115,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -169,7 +169,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -115,7 +115,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -89,7 +89,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -175,7 +175,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -179,7 +179,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -418,7 +418,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -231,7 +231,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -105,7 +105,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -277,7 +277,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -247,7 +247,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -249,7 +249,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -253,7 +253,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -179,7 +179,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -195,7 +195,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -172,7 +172,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -108,7 +108,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -69,7 +69,7 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE
|
||||
return gst_macos_main (tutorial_main, argc, argv, NULL);
|
||||
return gst_macos_main ((GstMainFunc) tutorial_main, argc, argv, NULL);
|
||||
#else
|
||||
return tutorial_main (argc, argv);
|
||||
#endif
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
```
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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?
|
||||
|
||||
|
|
|
@ -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/
|
||||
|
|
|
@ -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.*
|
||||
|
|
|
@ -96,8 +96,8 @@ applications will use these properties and will display a
|
|||
user-controllable widget with which these properties can be changed.
|
||||
This means that - for the property to be as user-friendly as possible -
|
||||
you should be as exact as possible in the definition of the property.
|
||||
Not only in defining ranges in between which valid properties can be
|
||||
located (for integers, floats, etc.), but also in using very descriptive
|
||||
Not only in defining ranges of valid property values (for integers,
|
||||
floats, etc.), but also in using very descriptive
|
||||
(better yet: internationalized) strings in the definition of the
|
||||
property, and if possible using enums and flags instead of integers. The
|
||||
GObject documentation describes these in a very complete way, but below,
|
||||
|
|
|
@ -96,7 +96,7 @@ The last command creates two files: `gstmyfilter.c` and `gstmyfilter.h`.
|
|||
> It is recommended that you create a copy of the `gst-plugin` directory
|
||||
> before continuing.
|
||||
|
||||
Now one needs to run `meson build` from the parent directory to bootstrap the
|
||||
Now one needs to run `meson setup build` from the parent directory to bootstrap the
|
||||
build environment. After that, the project can be built and installed using the
|
||||
well known `ninja -C build` commands.
|
||||
|
||||
|
|
|
@ -38,8 +38,8 @@ should *not* be allocated in this state.
|
|||
|
||||
`GST_STATE_PAUSED` is the state in which an element is ready to accept
|
||||
and handle data. For most elements this state is the same as PLAYING.
|
||||
The only exception to this rule are sink elements. Sink elements only
|
||||
accept one single buffer of data and then block. At this point the
|
||||
The only exception to this rule are sink elements. Paused sink elements
|
||||
only accept one buffer of data and then block. At this point the
|
||||
pipeline is 'prerolled' and ready to render data immediately.
|
||||
|
||||
`GST_STATE_PLAYING` is the highest state that an element can be in. For
|
||||
|
@ -51,9 +51,9 @@ card or render video pictures to an image sink.
|
|||
|
||||
## Managing filter state
|
||||
|
||||
If at all possible, your element should derive from one of the new base
|
||||
classes ([Pre-made base classes](plugin-development/element-types/base-classes.md)). There are
|
||||
ready-made general purpose base classes for different types of sources,
|
||||
If at all possible, your element should derive from one of the
|
||||
[pre-made base classes](plugin-development/element-types/base-classes.md).
|
||||
These are ready-made general purpose base classes for different types of sources,
|
||||
sinks and filter/transformation elements. In addition to those,
|
||||
specialised base classes exist for audio and video elements and others.
|
||||
|
||||
|
|
|
@ -4,8 +4,8 @@ title: Building a Test Application
|
|||
|
||||
# Building a Test Application
|
||||
|
||||
Often, you will want to test your newly written plugin in an as small
|
||||
setting as possible. Usually, `gst-launch-1.0` is a good first step at
|
||||
Often, you will want to test your newly written plugin in as small
|
||||
a setting as possible. Usually, `gst-launch-1.0` is a good first step at
|
||||
testing a plugin. If you have not installed your plugin in a directory
|
||||
that GStreamer searches, then you will need to set the plugin path.
|
||||
Either set GST\_PLUGIN\_PATH to the directory containing your plugin, or
|
||||
|
@ -38,7 +38,7 @@ a `fakesink` element at the end of the pipeline to dump your data to the
|
|||
stdout (in order to do this, set the `dump` property to TRUE). Lastly,
|
||||
you can use valgrind to check for memory errors.
|
||||
|
||||
During linking, your test application can use filtered caps as a way to
|
||||
During pipeline linking, your test application can use filtered caps as a way to
|
||||
drive a specific type of data to or from your element. This is a very
|
||||
simple and effective way of checking multiple types of input and output
|
||||
in your element.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
project('GStreamer manuals and tutorials', 'c',
|
||||
version: '1.23.0.1',
|
||||
meson_version : '>= 0.62')
|
||||
version: '1.25.0.1',
|
||||
meson_version : '>= 1.1')
|
||||
|
||||
hotdoc_p = find_program('hotdoc')
|
||||
if not hotdoc_p.found()
|
||||
|
@ -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,
|
||||
|
@ -150,4 +150,4 @@ run_target('release',
|
|||
depends: [gstreamer_doc]
|
||||
)
|
||||
|
||||
meson.add_dist_script('scripts/gen-changelog.py', meson.project_name(), '1.20.0', meson.project_version())
|
||||
meson.add_dist_script('scripts/gen-changelog.py', meson.project_name(), '1.22.0', meson.project_version())
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1 +1 @@
|
|||
1.22
|
||||
1.24
|
File diff suppressed because it is too large
Load diff
|
@ -1,17 +1,15 @@
|
|||
This is GStreamer gst-editing-services 1.22.0.
|
||||
This is GStreamer gst-editing-services 1.25.0.1.
|
||||
|
||||
The GStreamer team is thrilled to announce a new major feature release
|
||||
of your favourite cross-platform multimedia framework!
|
||||
GStreamer 1.25 is the unstable development branch leading up to the next major
|
||||
stable version which will be 1.26.
|
||||
|
||||
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.
|
||||
|
||||
As always, this release is again packed with new features, bug fixes and
|
||||
other improvements.
|
||||
Full release notes will one day be found at:
|
||||
|
||||
The 1.22 release series adds new features on top of the 1.20 series and is
|
||||
part of the API and ABI-stable 1.x release series.
|
||||
|
||||
Full release notes can be found at:
|
||||
|
||||
https://gstreamer.freedesktop.org/releases/1.22/
|
||||
https://gstreamer.freedesktop.org/releases/1.26/
|
||||
|
||||
Binaries for Android, iOS, Mac OS X and Windows will usually be provided
|
||||
shortly after the release.
|
||||
|
@ -44,10 +42,7 @@ with other GStreamer modules for a complete multimedia experience.
|
|||
|
||||
- gstreamer-vaapi: hardware-accelerated video decoding and encoding using
|
||||
VA-API on Linux. Primarily for Intel graphics hardware.
|
||||
|
||||
- gst-omx: hardware-accelerated video decoding and encoding, primarily for
|
||||
embedded Linux systems that provide an OpenMax
|
||||
implementation layer such as the Raspberry Pi.
|
||||
(Deprecated, use the new "va" plugin instead)
|
||||
|
||||
- gst-rtsp-server: library to serve files or streaming pipelines via RTSP
|
||||
|
||||
|
@ -80,14 +75,18 @@ Please submit patches via GitLab as well, in form of Merge Requests. See
|
|||
|
||||
for more details.
|
||||
|
||||
For help and support, please subscribe to and send questions to the
|
||||
gstreamer-devel mailing list (see below for details).
|
||||
For help and support, please head over to our Discourse forum at
|
||||
|
||||
There is also a #gstreamer IRC channel on the OFTC IRC network, which is
|
||||
also bridged into the Matrix network.
|
||||
https://discourse.gstreamer.org/
|
||||
|
||||
Please do not submit support requests in GitLab, we only use it
|
||||
for bug tracking and merge requests review.
|
||||
or pop into one of our Matrix chat rooms, see
|
||||
|
||||
https://discourse.gstreamer.org/t/new-gstreamer-matrix-chat-space/675
|
||||
|
||||
for more details.
|
||||
|
||||
Please do not submit support requests in GitLab, we only use it for
|
||||
bug tracking and merge requests review. Use the Discourse forum instead.
|
||||
|
||||
==== Developers ====
|
||||
|
||||
|
@ -99,6 +98,9 @@ and can also be cloned from there and this is also where you can submit
|
|||
Merge Requests or file issues for bugs or feature requests.
|
||||
|
||||
Interested developers of the core library, plugins, and applications should
|
||||
subscribe to the gstreamer-devel list:
|
||||
join us on Matrix for chat and the Discourse forum for announcements, help
|
||||
and discussions.
|
||||
|
||||
There is also a gstreamer-devel mailing list, but Discourse is preferred:
|
||||
|
||||
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
|
||||
|
|
|
@ -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 = ':'
|
||||
|
|
|
@ -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
|
||||
|
@ -1116,7 +1128,7 @@ ges_asset_set_id (GESAsset * asset, const gchar * id)
|
|||
priv = asset->priv;
|
||||
|
||||
if (priv->state != ASSET_INITIALIZED) {
|
||||
GST_WARNING_OBJECT (asset, "Trying to rest ID on an object that is"
|
||||
GST_WARNING_OBJECT (asset, "Trying to set ID on an object that is"
|
||||
" not properly loaded");
|
||||
return;
|
||||
}
|
||||
|
@ -1253,6 +1265,9 @@ ges_asset_request (GType extractable_type, const gchar * id, GError ** error)
|
|||
if (lerr)
|
||||
g_error_free (lerr);
|
||||
|
||||
GST_DEBUG ("Requesting %s with real id %s and id %s",
|
||||
g_type_name (extractable_type), real_id, id);
|
||||
|
||||
/* asset owned by cache */
|
||||
LOCK_CACHE;
|
||||
asset = ges_asset_cache_lookup (extractable_type, real_id);
|
||||
|
@ -1308,10 +1323,8 @@ ges_asset_request (GType extractable_type, const gchar * id, GError ** error)
|
|||
iface = g_type_interface_peek (klass, G_TYPE_INITABLE);
|
||||
|
||||
if (iface->init) {
|
||||
/* FIXME: allow the error to be set, which GInitable is designed
|
||||
* for! */
|
||||
asset = g_initable_new (asset_type,
|
||||
NULL, NULL, "id", real_id, "extractable-type",
|
||||
NULL, error, "id", real_id, "extractable-type",
|
||||
extractable_type, NULL);
|
||||
} else {
|
||||
GST_INFO ("Tried to create an Asset for type %s but no ->init method",
|
||||
|
|
|
@ -176,7 +176,7 @@
|
|||
* children = ges_container_get_children (GES_CONTAINER (clip), FALSE);
|
||||
*
|
||||
* for (tmp = children; tmp; tmp = tmp->next)
|
||||
* ges_track_element_set_auto_clamp_control_source (tmp->data, FALSE);
|
||||
* ges_track_element_set_auto_clamp_control_sources (tmp->data, FALSE);
|
||||
*
|
||||
* // add time effect, or set their children properties, or move them around
|
||||
* ...
|
||||
|
@ -197,7 +197,7 @@
|
|||
* // handle error
|
||||
*
|
||||
* for (tmp = children; tmp; tmp = tmp->next)
|
||||
* ges_track_element_set_auto_clamp_control_source (tmp->data, TRUE);
|
||||
* ges_track_element_set_auto_clamp_control_sources (tmp->data, TRUE);
|
||||
*
|
||||
* g_list_free_full (children, gst_object_unref);
|
||||
* gst_object_unref (source);
|
||||
|
@ -250,6 +250,7 @@ struct _GESClipPrivate
|
|||
|
||||
gboolean allow_any_remove;
|
||||
|
||||
gint nb_scale_effects;
|
||||
gboolean use_effect_priority;
|
||||
guint32 effect_priority;
|
||||
GError *add_error;
|
||||
|
@ -1638,6 +1639,7 @@ _add_child (GESContainer * container, GESTimelineElement * element)
|
|||
GESTimeline *timeline = GES_TIMELINE_ELEMENT_TIMELINE (container);
|
||||
GESClipPrivate *priv = self->priv;
|
||||
GESAsset *asset, *creator_asset;
|
||||
gboolean adding_scale_effect = FALSE;
|
||||
gboolean prev_prevent = priv->prevent_duration_limit_update;
|
||||
gboolean prev_prevent_outpoint = priv->prevent_children_outpoint_update;
|
||||
GList *tmp;
|
||||
|
@ -1775,6 +1777,14 @@ _add_child (GESContainer * container, GESTimelineElement * element)
|
|||
new_prio = MAX (new_prio, _PRIORITY (tmp->data) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (GES_IS_EFFECT (element)) {
|
||||
GESAsset *asset = ges_extractable_get_asset (GES_EXTRACTABLE (element));
|
||||
const gchar *bindesc = ges_asset_get_id (asset);
|
||||
|
||||
adding_scale_effect = !strstr (bindesc, "gesvideoscale");
|
||||
}
|
||||
|
||||
/* make sure higher than core */
|
||||
for (tmp = container->children; tmp; tmp = tmp->next) {
|
||||
if (_IS_CORE_CHILD (tmp->data))
|
||||
|
@ -1817,9 +1827,16 @@ _add_child (GESContainer * container, GESTimelineElement * element)
|
|||
_update_active_for_track (self, track_el);
|
||||
|
||||
priv->nb_effects++;
|
||||
|
||||
GST_DEBUG_OBJECT (self, "Adding %ith effect: %" GES_FORMAT
|
||||
" Priority %i", priv->nb_effects, GES_ARGS (element), new_prio);
|
||||
|
||||
if (adding_scale_effect) {
|
||||
GST_DEBUG_OBJECT (self, "Adding scaling effect to clip "
|
||||
"%" GES_FORMAT, GES_ARGS (self));
|
||||
priv->nb_scale_effects += 1;
|
||||
}
|
||||
|
||||
/* changing priorities, and updating their offset */
|
||||
priv->prevent_resort = TRUE;
|
||||
priv->setting_priority = TRUE;
|
||||
|
@ -1900,6 +1917,12 @@ ges_clip_set_remove_error (GESClip * clip, GError * error)
|
|||
priv->remove_error = error;
|
||||
}
|
||||
|
||||
gboolean
|
||||
ges_clip_has_scale_effect (GESClip * clip)
|
||||
{
|
||||
return clip->priv->nb_scale_effects > 0;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_remove_child (GESContainer * container, GESTimelineElement * element)
|
||||
{
|
||||
|
@ -1961,6 +1984,17 @@ _remove_child (GESContainer * container, GESTimelineElement * element)
|
|||
* relative priorities */
|
||||
/* height may have changed */
|
||||
_compute_height (container);
|
||||
|
||||
if (GES_IS_EFFECT (element)) {
|
||||
GESAsset *asset = ges_extractable_get_asset (GES_EXTRACTABLE (element));
|
||||
const gchar *bindesc = ges_asset_get_id (asset);
|
||||
|
||||
if (bindesc && !strstr (bindesc, "gesvideoscale")) {
|
||||
GST_DEBUG_OBJECT (self, "Removing scaling effect to clip "
|
||||
"%" GES_FORMAT, GES_ARGS (self));
|
||||
priv->nb_scale_effects -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* duration-limit updated in _child_removed */
|
||||
return TRUE;
|
||||
|
@ -3000,7 +3034,8 @@ _cmp_children_by_priority (gconstpointer a_p, gconstpointer b_p)
|
|||
* ges_clip_add_top_effect:
|
||||
* @clip: A #GESClip
|
||||
* @effect: A top effect to add
|
||||
* @index: The index to add @effect at, or -1 to add at the highest
|
||||
* @index: The index to add @effect at, or -1 to add at the highest,
|
||||
* see #ges_clip_get_top_effect_index for more information
|
||||
* @error: (nullable): Return location for an error
|
||||
*
|
||||
* Add a top effect to a clip at the given index.
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -44,7 +44,7 @@ struct _GESDiscovererManager
|
|||
GObject parent;
|
||||
|
||||
GHashTable *discoverers;
|
||||
GMutex lock;
|
||||
GRecMutex lock;
|
||||
GstClockTime timeout;
|
||||
|
||||
gboolean use_cache;
|
||||
|
@ -125,7 +125,7 @@ ges_discoverer_manager_finalize (GObject * object)
|
|||
if (!context)
|
||||
context = g_main_context_default ();
|
||||
|
||||
g_mutex_lock (&self->lock);
|
||||
g_rec_mutex_lock (&self->lock);
|
||||
g_hash_table_iter_init (&iter, self->discoverers);
|
||||
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) & discoverer_data)) {
|
||||
GSource *source;
|
||||
|
@ -138,7 +138,7 @@ ges_discoverer_manager_finalize (GObject * object)
|
|||
}
|
||||
|
||||
g_hash_table_unref (self->discoverers);
|
||||
g_mutex_unlock (&self->lock);
|
||||
g_rec_mutex_unlock (&self->lock);
|
||||
|
||||
G_OBJECT_CLASS (ges_discoverer_manager_parent_class)->finalize (object);
|
||||
}
|
||||
|
@ -333,11 +333,11 @@ ges_discoverer_manager_set_timeout (GESDiscovererManager * self,
|
|||
|
||||
self->timeout = timeout;
|
||||
|
||||
g_mutex_lock (&self->lock);
|
||||
g_rec_mutex_lock (&self->lock);
|
||||
g_hash_table_iter_init (&iter, self->discoverers);
|
||||
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) & discoverer_data))
|
||||
g_object_set (discoverer_data->discoverer, "timeout", timeout, NULL);
|
||||
g_mutex_unlock (&self->lock);
|
||||
g_rec_mutex_unlock (&self->lock);
|
||||
}
|
||||
|
||||
static GstDiscovererInfo *
|
||||
|
@ -366,7 +366,7 @@ cleanup_discoverer_cb (GESDiscovererData * discoverer_data)
|
|||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
g_mutex_lock (&self->lock);
|
||||
g_rec_mutex_lock (&self->lock);
|
||||
if (discoverer_data->n_uri > 0) {
|
||||
GST_DEBUG_OBJECT (self, "Discoverer still has %d uris to discover",
|
||||
discoverer_data->n_uri);
|
||||
|
@ -385,7 +385,7 @@ cleanup_discoverer_cb (GESDiscovererData * discoverer_data)
|
|||
}
|
||||
|
||||
done:
|
||||
g_mutex_unlock (&self->lock);
|
||||
g_rec_mutex_unlock (&self->lock);
|
||||
g_object_unref (self);
|
||||
|
||||
return res;
|
||||
|
@ -397,14 +397,14 @@ proxy_discovered_cb (GESDiscovererManager * self,
|
|||
{
|
||||
g_signal_emit (self, signals[DISCOVERER_SIGNAL], 0, info, err);
|
||||
|
||||
g_mutex_lock (&self->lock);
|
||||
g_rec_mutex_lock (&self->lock);
|
||||
GESDiscovererData *data =
|
||||
g_hash_table_lookup (self->discoverers, g_thread_self ());
|
||||
if (data) {
|
||||
data->n_uri--;
|
||||
data = g_atomic_rc_box_acquire (data);
|
||||
}
|
||||
g_mutex_unlock (&self->lock);
|
||||
g_rec_mutex_unlock (&self->lock);
|
||||
|
||||
if (data) {
|
||||
ges_timeout_add (1000, (GSourceFunc) cleanup_discoverer_cb, data,
|
||||
|
@ -446,14 +446,14 @@ ges_discoverer_manager_get_discoverer (GESDiscovererManager * self)
|
|||
|
||||
g_return_val_if_fail (GES_IS_DISCOVERER_MANAGER (self), NULL);
|
||||
|
||||
g_mutex_lock (&self->lock);
|
||||
g_rec_mutex_lock (&self->lock);
|
||||
ret = g_hash_table_lookup (self->discoverers, g_thread_self ());
|
||||
if (!ret) {
|
||||
ret = create_discoverer (self);
|
||||
} else {
|
||||
g_hash_table_steal (self->discoverers, g_thread_self ());
|
||||
}
|
||||
g_mutex_unlock (&self->lock);
|
||||
g_rec_mutex_unlock (&self->lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -468,12 +468,12 @@ ges_discoverer_manager_start_discovery (GESDiscovererManager * self,
|
|||
|
||||
disco_data = ges_discoverer_manager_get_discoverer (self);
|
||||
|
||||
g_mutex_lock (&self->lock);
|
||||
g_rec_mutex_lock (&self->lock);
|
||||
gboolean res =
|
||||
gst_discoverer_discover_uri_async (disco_data->discoverer, uri);
|
||||
disco_data->n_uri++;
|
||||
g_hash_table_insert (self->discoverers, g_thread_self (), disco_data);
|
||||
g_mutex_unlock (&self->lock);
|
||||
g_rec_mutex_unlock (&self->lock);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
|
|
@ -88,6 +88,8 @@ ges_effect_asset_init (GESEffectAsset * self)
|
|||
static void
|
||||
ges_effect_asset_constructed (GObject * object)
|
||||
{
|
||||
G_OBJECT_CLASS (ges_effect_asset_parent_class)->constructed (object);
|
||||
|
||||
_fill_track_type (GES_ASSET (object));
|
||||
}
|
||||
|
||||
|
@ -396,10 +398,9 @@ ges_effect_asset_id_get_type_and_bindesc (const char *id,
|
|||
}
|
||||
|
||||
for (tmp = GST_BIN_CHILDREN (effect); tmp; tmp = tmp->next) {
|
||||
GstElementFactory *factory =
|
||||
gst_element_get_factory (GST_ELEMENT (tmp->data));
|
||||
const gchar *klass =
|
||||
gst_element_factory_get_metadata (factory, GST_ELEMENT_METADATA_KLASS);
|
||||
gst_element_class_get_metadata (GST_ELEMENT_GET_CLASS (tmp->data),
|
||||
GST_ELEMENT_METADATA_KLASS);
|
||||
|
||||
if (g_strrstr (klass, "Effect") || g_strrstr (klass, "Filter")) {
|
||||
if (g_strrstr (klass, "Audio")) {
|
||||
|
|
|
@ -23,10 +23,23 @@
|
|||
* @short_description: adds an effect build from a parse-launch style bin
|
||||
* description to a stream in a GESSourceClip or a GESLayer
|
||||
*
|
||||
* Currently we only support effects with N sinkpads and one single srcpad.
|
||||
* Apart from `gesaudiomixer` and `gescompositor` which can be used as effects
|
||||
* and where sinkpads will be requested as needed based on the timeline topology
|
||||
* GES will always request at most one sinkpad per effect (when required).
|
||||
* Any GStreamer filter can be used as effects in GES. The only restriction we
|
||||
* have is that effects element should have a single [sinkpad](GST_PAD_SINK)
|
||||
* (which will be requested if necessary) and a single [srcpad](GST_PAD_SRC).
|
||||
*
|
||||
* Note that `gesaudiomixer` and `gescompositor` can be used as effects even
|
||||
* though they can have several sinkpads.
|
||||
*
|
||||
* ## GES specific effects:
|
||||
*
|
||||
* * **`gesvideoscale`**: GES implements a specific scaling bin that allows
|
||||
* specifying where scaling will happen inside the chain of effects. By
|
||||
* default scaling can happen either in the source (if the source doesn't have
|
||||
* a specific size, like `videotestsrc` or [mixing](ges_track_set_mixing) has
|
||||
* been disabled) or in the mixing element otherwise, when adding that element
|
||||
* as an effect, GES guarantees that the scaling will happen in it. This can
|
||||
* be useful for example if you want to crop the video before scaling or apply
|
||||
* rounding corners to the video after scaling, etc...
|
||||
*
|
||||
* > Note: GES always adds converters (`audioconvert ! audioresample !
|
||||
* > audioconvert` for audio effects and `videoconvert` for video effects) to
|
||||
|
@ -368,8 +381,16 @@ GESEffect *
|
|||
ges_effect_new (const gchar * bin_description)
|
||||
{
|
||||
GESEffect *effect;
|
||||
GError *error = NULL;
|
||||
GESAsset *asset = ges_asset_request (GES_TYPE_EFFECT,
|
||||
bin_description, NULL);
|
||||
bin_description, &error);
|
||||
|
||||
if (error != NULL) {
|
||||
GST_ERROR ("Error requesting asset with description \"%s\": %s",
|
||||
bin_description, error->message);
|
||||
g_error_free (error);
|
||||
/* fall-through */
|
||||
}
|
||||
|
||||
g_return_val_if_fail (asset, NULL);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -43,8 +43,10 @@ GType ges_frame_composition_meta_api_get_type (void);
|
|||
* @meta: the parent #GstMeta.
|
||||
* @posx: The desired x position.
|
||||
* @posy: The desired y position.
|
||||
* @height: The desired height of the video.
|
||||
* @width: The desired width of the video.
|
||||
* @height: The desired height of the video. -1 means that no scaling should be
|
||||
* applied.
|
||||
* @width: The desired width of the video. -1 means that no scaling should beapplied
|
||||
* applied.
|
||||
* @zorder: The desired z order.
|
||||
* @operator:The blending operator for the source.
|
||||
*
|
||||
|
@ -59,10 +61,10 @@ struct _GESFrameCompositionMeta {
|
|||
GstMeta meta;
|
||||
|
||||
gdouble alpha;
|
||||
gint posx;
|
||||
gint posy;
|
||||
gint height;
|
||||
gint width;
|
||||
gdouble posx;
|
||||
gdouble posy;
|
||||
gdouble height;
|
||||
gdouble width;
|
||||
guint zorder;
|
||||
gint operator;
|
||||
};
|
||||
|
|
|
@ -462,6 +462,7 @@ G_GNUC_INTERNAL void ges_clip_set_add_error (GESClip * cli
|
|||
G_GNUC_INTERNAL void ges_clip_take_add_error (GESClip * clip, GError ** error);
|
||||
G_GNUC_INTERNAL void ges_clip_set_remove_error (GESClip * clip, GError * error);
|
||||
G_GNUC_INTERNAL void ges_clip_take_remove_error (GESClip * clip, GError ** error);
|
||||
G_GNUC_INTERNAL gboolean ges_clip_has_scale_effect (GESClip * clip);
|
||||
|
||||
/****************************************************
|
||||
* GESLayer *
|
||||
|
|
|
@ -254,6 +254,7 @@ _timeline_track_removed_cb (GESTimeline * timeline, GESTrack * track,
|
|||
_unlink_track (pipeline, track);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
ges_pipeline_constructed (GObject * object)
|
||||
{
|
||||
|
@ -409,7 +410,8 @@ ges_pipeline_init (GESPipeline * self)
|
|||
self->priv->playsink =
|
||||
gst_element_factory_make ("playsink", "internal-sinks");
|
||||
self->priv->encodebin =
|
||||
gst_element_factory_make ("encodebin", "internal-encodebin");
|
||||
gst_element_factory_make ("encodebin2", "internal-encodebin");
|
||||
|
||||
g_object_set (self->priv->encodebin, "avoid-reencoding", TRUE, NULL);
|
||||
|
||||
if (G_UNLIKELY (self->priv->playsink == NULL))
|
||||
|
@ -515,7 +517,8 @@ _link_tracks (GESPipeline * pipeline)
|
|||
{
|
||||
GList *tmp;
|
||||
|
||||
GST_DEBUG_OBJECT (pipeline, "Linking tracks");
|
||||
GST_DEBUG_OBJECT (pipeline, "Linking %d tracks",
|
||||
g_list_length (pipeline->priv->timeline->tracks));
|
||||
|
||||
if (!pipeline->priv->timeline) {
|
||||
GST_INFO_OBJECT (pipeline, "Not timeline set yet, doing nothing");
|
||||
|
@ -626,8 +629,8 @@ ges_pipeline_change_state (GstElement * element, GstStateChange transition)
|
|||
|
||||
for (tmp = self->priv->not_rendered_tracks; tmp; tmp = tmp->next)
|
||||
gst_element_set_locked_state (tmp->data, FALSE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
|
||||
{
|
||||
GstElement *queue = gst_bin_get_by_name (GST_BIN (self->priv->playsink),
|
||||
|
@ -1266,19 +1269,33 @@ ges_pipeline_set_mode (GESPipeline * pipeline, GESPipelineFlags mode)
|
|||
GST_ERROR_OBJECT (pipeline, "Output URI not set !");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!gst_bin_add (GST_BIN_CAST (pipeline), pipeline->priv->encodebin)) {
|
||||
GST_ERROR_OBJECT (pipeline, "Couldn't add encodebin");
|
||||
return FALSE;
|
||||
}
|
||||
if (!gst_bin_add (GST_BIN_CAST (pipeline), pipeline->priv->urisink)) {
|
||||
GST_ERROR_OBJECT (pipeline, "Couldn't add URI sink");
|
||||
return FALSE;
|
||||
|
||||
/* We know that encodebin2 will add its src pads as soon as the profile is
|
||||
* set, so link the sink to it if it has a pad */
|
||||
if (pipeline->priv->encodebin->numsrcpads > 0) {
|
||||
if (pipeline->priv->encodebin->numsrcpads > 1) {
|
||||
GST_WARNING_OBJECT (pipeline,
|
||||
"Encodebin has more than one srcpad, this is not supported yet");
|
||||
}
|
||||
|
||||
if (!gst_bin_add (GST_BIN_CAST (pipeline), pipeline->priv->urisink)) {
|
||||
GST_ERROR_OBJECT (pipeline, "Couldn't add URI sink");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gst_element_link_pads_full (pipeline->priv->encodebin, "src_0",
|
||||
pipeline->priv->urisink, "sink", GST_PAD_LINK_CHECK_NOTHING);
|
||||
} else {
|
||||
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);
|
||||
|
||||
gst_element_link_pads_full (pipeline->priv->encodebin, "src",
|
||||
pipeline->priv->urisink, "sink", GST_PAD_LINK_CHECK_NOTHING);
|
||||
}
|
||||
|
||||
if (pipeline->priv->timeline) {
|
||||
|
|
|
@ -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,8 +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, "width", meta->width, "height", meta->height, 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) {
|
||||
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) {
|
||||
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);
|
||||
|
@ -289,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;
|
||||
|
|
|
@ -987,9 +987,23 @@ _ges_container_add_child_from_struct (GESTimeline * timeline,
|
|||
|
||||
}
|
||||
|
||||
res = ges_container_add (container, child);
|
||||
if (GES_IS_CLIP (container) && GES_IS_BASE_EFFECT (child)) {
|
||||
GList *effects = ges_clip_get_top_effects (GES_CLIP (container));
|
||||
|
||||
res =
|
||||
ges_clip_add_top_effect (GES_CLIP (container), GES_BASE_EFFECT (child),
|
||||
0, error);
|
||||
|
||||
g_list_free_full (effects, gst_object_unref);
|
||||
} else {
|
||||
res = ges_container_add (container, child);
|
||||
}
|
||||
|
||||
if (res == FALSE) {
|
||||
g_error_new (GES_ERROR, 0, "Could not add child to container");
|
||||
if (!*error)
|
||||
*error = g_error_new (GES_ERROR, 0, "Could not add child to container");
|
||||
|
||||
goto beach;
|
||||
} else {
|
||||
g_object_set_qdata (G_OBJECT (timeline), LAST_CHILD_QDATA, child);
|
||||
}
|
||||
|
|
|
@ -501,6 +501,8 @@ ges_timeline_handle_message (GstBin * bin, GstMessage * message)
|
|||
gst_structure_get_string (mstructure, "reason"));
|
||||
}
|
||||
GST_OBJECT_UNLOCK (timeline);
|
||||
} else {
|
||||
goto forward;
|
||||
}
|
||||
|
||||
gst_message_unref (message);
|
||||
|
@ -514,6 +516,16 @@ forward:
|
|||
GST_BIN_CLASS (parent_class)->handle_message (bin, message);
|
||||
}
|
||||
|
||||
static void
|
||||
ges_timeline_post_stream_collection (GESTimeline * timeline)
|
||||
{
|
||||
gst_element_post_message ((GstElement *) timeline,
|
||||
gst_message_new_element ((GstObject *) timeline,
|
||||
gst_structure_new ("ges-timeline-collection", "collection",
|
||||
GST_TYPE_STREAM_COLLECTION, timeline->priv->stream_collection,
|
||||
NULL)));
|
||||
}
|
||||
|
||||
static GstStateChangeReturn
|
||||
ges_timeline_change_state (GstElement * element, GstStateChange transition)
|
||||
{
|
||||
|
@ -524,9 +536,7 @@ ges_timeline_change_state (GstElement * element, GstStateChange transition)
|
|||
transition);
|
||||
|
||||
if (transition == GST_STATE_CHANGE_READY_TO_PAUSED)
|
||||
gst_element_post_message ((GstElement *) timeline,
|
||||
gst_message_new_stream_collection ((GstObject *) timeline,
|
||||
timeline->priv->stream_collection));
|
||||
ges_timeline_post_stream_collection (timeline);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -2516,7 +2526,7 @@ ges_timeline_add_track (GESTimeline * timeline, GESTrack * track)
|
|||
g_return_val_if_fail (GES_IS_TRACK (track), FALSE);
|
||||
CHECK_THREAD (timeline);
|
||||
|
||||
GST_DEBUG ("timeline:%p, track:%p", timeline, track);
|
||||
GST_DEBUG_OBJECT (timeline, "Adding %" GST_PTR_FORMAT, track);
|
||||
|
||||
/* make sure we don't already control it */
|
||||
LOCK_DYN (timeline);
|
||||
|
@ -2894,9 +2904,7 @@ ges_timeline_commit (GESTimeline * timeline)
|
|||
UNLOCK_DYN (timeline);
|
||||
|
||||
if (pcollection != timeline->priv->stream_collection) {
|
||||
gst_element_post_message ((GstElement *) timeline,
|
||||
gst_message_new_stream_collection ((GstObject *) timeline,
|
||||
timeline->priv->stream_collection));
|
||||
ges_timeline_post_stream_collection (timeline);
|
||||
}
|
||||
|
||||
ges_timeline_emit_snapping (timeline, NULL, NULL, GST_CLOCK_TIME_NONE);
|
||||
|
|
|
@ -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"
|
||||
|
@ -304,9 +305,11 @@ ges_track_element_set_asset (GESExtractable * extractable, GESAsset * asset)
|
|||
gst_object_set_name (GST_OBJECT (nleobject), tmp);
|
||||
g_free (tmp);
|
||||
|
||||
object->priv->nleobject = gst_object_ref (nleobject);
|
||||
g_object_set_qdata (G_OBJECT (nleobject), NLE_OBJECT_TRACK_ELEMENT_QUARK,
|
||||
object);
|
||||
if (!object->priv->nleobject) {
|
||||
object->priv->nleobject = gst_object_ref (nleobject);
|
||||
g_object_set_qdata (G_OBJECT (nleobject), NLE_OBJECT_TRACK_ELEMENT_QUARK,
|
||||
object);
|
||||
}
|
||||
|
||||
/* Set some properties on the NleObject */
|
||||
g_object_set (object->priv->nleobject,
|
||||
|
@ -1009,6 +1012,10 @@ ges_track_element_create_gnl_object_func (GESTrackElement * self)
|
|||
if (G_UNLIKELY (nleobject == NULL))
|
||||
goto no_nleobject;
|
||||
|
||||
self->priv->nleobject = gst_object_ref (nleobject);
|
||||
g_object_set_qdata (G_OBJECT (nleobject), NLE_OBJECT_TRACK_ELEMENT_QUARK,
|
||||
self);
|
||||
|
||||
if (klass->create_element) {
|
||||
GST_DEBUG ("Calling subclass 'create_element' vmethod");
|
||||
child = klass->create_element (self);
|
||||
|
@ -1078,11 +1085,10 @@ ges_track_element_add_child_props (GESTrackElement * self,
|
|||
guint i;
|
||||
|
||||
factory = gst_element_get_factory (child);
|
||||
/* FIXME: handle NULL factory */
|
||||
klass = gst_element_factory_get_metadata (factory,
|
||||
klass = gst_element_class_get_metadata (GST_ELEMENT_GET_CLASS (child),
|
||||
GST_ELEMENT_METADATA_KLASS);
|
||||
|
||||
if (strv_find_str (blacklist, GST_OBJECT_NAME (factory))) {
|
||||
if (factory && strv_find_str (blacklist, GST_OBJECT_NAME (factory))) {
|
||||
GST_DEBUG_OBJECT (self, "%s blacklisted", GST_OBJECT_NAME (factory));
|
||||
return;
|
||||
}
|
||||
|
@ -1908,10 +1914,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),
|
||||
|
|
|
@ -488,17 +488,37 @@ ges_track_handle_message (GstBin * bin, GstMessage * message)
|
|||
{
|
||||
GESTrack *track = GES_TRACK (bin);
|
||||
|
||||
if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_STREAM_COLLECTION) {
|
||||
GstStreamCollection *collection;
|
||||
switch (GST_MESSAGE_TYPE (message)) {
|
||||
case GST_MESSAGE_STREAM_COLLECTION:
|
||||
g_error ("Internal stream collection messages should be kept internal");
|
||||
break;
|
||||
case GST_MESSAGE_ELEMENT:
|
||||
{
|
||||
const GstStructure *s = gst_message_get_structure (message);
|
||||
|
||||
gst_message_parse_stream_collection (message, &collection);
|
||||
if (GES_IS_TIMELINE (GST_MESSAGE_SRC (message))) {
|
||||
ges_track_select_subtimeline_streams (track, collection,
|
||||
GST_ELEMENT (GST_MESSAGE_SRC (message)));
|
||||
if (gst_structure_has_name (s, "ges-timeline-collection")) {
|
||||
GstStreamCollection *collection;
|
||||
|
||||
gst_structure_get (s, "collection", GST_TYPE_STREAM_COLLECTION,
|
||||
&collection, NULL);
|
||||
|
||||
ges_track_select_subtimeline_streams (track, collection,
|
||||
GST_ELEMENT (GST_MESSAGE_SRC (message)));
|
||||
|
||||
GST_INFO_OBJECT (bin,
|
||||
"Handled ges-timeline-collection message, dropping");
|
||||
|
||||
gst_message_unref (message);
|
||||
return;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
gst_element_post_message (GST_ELEMENT_CAST (bin), message);
|
||||
GST_BIN_CLASS (ges_track_parent_class)->handle_message (bin, message);
|
||||
}
|
||||
|
||||
/* GObject virtual methods */
|
||||
|
|
|
@ -752,7 +752,7 @@ _extract (GESAsset * asset, GError ** error)
|
|||
GESUriSourceAssetPrivate *priv = GES_URI_SOURCE_ASSET (asset)->priv;
|
||||
|
||||
if (GST_IS_DISCOVERER_STREAM_INFO (priv->sinfo) == FALSE) {
|
||||
GST_WARNING_OBJECT (asset, "Can not extract as no strean info set");
|
||||
GST_WARNING_OBJECT (asset, "Can not extract as no stream info set");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -192,11 +192,13 @@ ges_uri_clip_class_init (GESUriClipClass * klass)
|
|||
}
|
||||
|
||||
static gchar *
|
||||
extractable_check_id (GType type, const gchar * id)
|
||||
extractable_check_id (GType type, const gchar * id, GError ** error)
|
||||
{
|
||||
if (gst_uri_is_valid (id))
|
||||
return g_strdup (id);
|
||||
|
||||
g_set_error (error, GES_ERROR, GES_ERROR_ASSET_WRONG_ID, "URI %s is invalid",
|
||||
id);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -442,7 +444,7 @@ static void
|
|||
ges_extractable_interface_init (GESExtractableInterface * iface)
|
||||
{
|
||||
iface->asset_type = GES_TYPE_URI_CLIP_ASSET;
|
||||
iface->check_id = (GESExtractableCheckId) extractable_check_id;
|
||||
iface->check_id = extractable_check_id;
|
||||
iface->get_parameters_from_id = extractable_get_parameters_from_id;
|
||||
iface->get_id = extractable_get_id;
|
||||
iface->can_update_asset = TRUE;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -54,6 +54,7 @@ G_LOCK_DEFINE_STATIC (init_lock);
|
|||
* between init/deinit
|
||||
*/
|
||||
static GThread *initialized_thread = NULL;
|
||||
extern GType ges_video_scale_get_type (void);
|
||||
|
||||
#ifndef GST_DISABLE_GST_DEBUG
|
||||
static gpointer
|
||||
|
@ -96,9 +97,10 @@ ges_init_pre (GOptionContext * context, GOptionGroup * group, gpointer data,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
ges_init_post (GOptionContext * context, GOptionGroup * group, gpointer data,
|
||||
GError ** error)
|
||||
ges_init_post (GOptionContext * context, GOptionGroup * group,
|
||||
gpointer data, GError ** error)
|
||||
{
|
||||
GESUriClipAssetClass *uriasset_klass = NULL;
|
||||
GstElementFactory *nlecomposition_factory = NULL;
|
||||
|
@ -154,6 +156,7 @@ ges_init_post (GOptionContext * context, GOptionGroup * group, gpointer data,
|
|||
|
||||
ges_asset_cache_init ();
|
||||
|
||||
gst_element_register (NULL, "gesvideoscale", 0, ges_video_scale_get_type ());
|
||||
gst_element_register (NULL, "gesaudiomixer", 0, GES_TYPE_SMART_ADDER);
|
||||
gst_element_register (NULL, "gescompositor", 0, GES_TYPE_SMART_MIXER);
|
||||
gst_element_register (NULL, "framepositioner", 0, GST_TYPE_FRAME_POSITIONNER);
|
||||
|
|
176
subprojects/gst-editing-services/ges/gesvideoscale.c
Normal file
176
subprojects/gst-editing-services/ges/gesvideoscale.c
Normal file
|
@ -0,0 +1,176 @@
|
|||
/* GStreamer
|
||||
* Copyright (C) 2023 Thibault Saunier <tsaunier@igalia.com>
|
||||
*
|
||||
* 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 Street, Suite 500,
|
||||
* Boston, MA 02110-1335, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "ges-frame-composition-meta.h"
|
||||
|
||||
typedef struct _GESVideoScale GESVideoScale;
|
||||
typedef struct
|
||||
{
|
||||
GstBinClass parent_class;
|
||||
} GESVideoScaleClass;
|
||||
|
||||
struct _GESVideoScale
|
||||
{
|
||||
GstBin parent;
|
||||
|
||||
GstPad *sink;
|
||||
GstElement *capsfilter;
|
||||
|
||||
gint width, height;
|
||||
};
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
static GstStaticPadTemplate gst_video_scale_sink_template =
|
||||
GST_STATIC_PAD_TEMPLATE ("sink",
|
||||
GST_PAD_SINK,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS ("ANY")
|
||||
);
|
||||
|
||||
static GstStaticPadTemplate gst_video_scale_src_template =
|
||||
GST_STATIC_PAD_TEMPLATE ("src",
|
||||
GST_PAD_SRC,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS ("ANY")
|
||||
);
|
||||
|
||||
GES_DECLARE_TYPE (VideoScale, video_scale, VIDEO_SCALE)
|
||||
G_DEFINE_TYPE (GESVideoScale, ges_video_scale, GST_TYPE_BIN);
|
||||
/* *INDENT-ON* */
|
||||
|
||||
static void
|
||||
set_dimension (GESVideoScale * self, gint width, gint height)
|
||||
{
|
||||
GstCaps *caps = gst_caps_new_simple ("video/x-raw",
|
||||
"pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1,
|
||||
NULL);
|
||||
|
||||
if (width >= 0)
|
||||
gst_caps_set_simple (caps, "width", G_TYPE_INT, width, NULL);
|
||||
if (height >= 0)
|
||||
gst_caps_set_simple (caps, "height", G_TYPE_INT, height, NULL);
|
||||
|
||||
gst_caps_set_features (caps, 0, gst_caps_features_new_any ());
|
||||
g_object_set (self->capsfilter, "caps", caps, NULL);
|
||||
gst_caps_unref (caps);
|
||||
|
||||
GST_OBJECT_LOCK (self);
|
||||
self->width = width;
|
||||
self->height = height;
|
||||
GST_OBJECT_UNLOCK (self);
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
chain (GstPad * pad, GESVideoScale * self, GstBuffer * buffer)
|
||||
{
|
||||
GESFrameCompositionMeta *meta;
|
||||
|
||||
meta =
|
||||
(GESFrameCompositionMeta *) gst_buffer_get_meta (buffer,
|
||||
ges_frame_composition_meta_api_get_type ());
|
||||
|
||||
if (meta) {
|
||||
GST_OBJECT_LOCK (self);
|
||||
if (meta->height != self->height || meta->width != self->width) {
|
||||
GST_OBJECT_UNLOCK (self);
|
||||
|
||||
set_dimension (self, (gint) round (meta->width),
|
||||
(gint) round (meta->height));
|
||||
} else {
|
||||
GST_OBJECT_UNLOCK (self);
|
||||
}
|
||||
|
||||
meta->height = meta->width = -1;
|
||||
}
|
||||
|
||||
return gst_proxy_pad_chain_default (pad, GST_OBJECT (self), buffer);
|
||||
}
|
||||
|
||||
static GstStateChangeReturn
|
||||
change_state (GstElement * element, GstStateChange transition)
|
||||
{
|
||||
GESVideoScale *self = GES_VIDEO_SCALE (element);
|
||||
GstStateChangeReturn res =
|
||||
((GstElementClass *) ges_video_scale_parent_class)->change_state (element,
|
||||
transition);
|
||||
|
||||
if (transition == GST_STATE_CHANGE_PAUSED_TO_READY) {
|
||||
GST_OBJECT_LOCK (self);
|
||||
self->width = 0;
|
||||
self->height = 0;
|
||||
GST_OBJECT_UNLOCK (self);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static void
|
||||
ges_video_scale_init (GESVideoScale * self)
|
||||
{
|
||||
GstPad *pad;
|
||||
GstElement *scale;
|
||||
GstPadTemplate *template =
|
||||
gst_static_pad_template_get (&gst_video_scale_sink_template);
|
||||
|
||||
scale = gst_element_factory_make ("videoscale", NULL);
|
||||
g_object_set (scale, "add-borders", FALSE, NULL);
|
||||
self->capsfilter = gst_element_factory_make ("capsfilter", NULL);
|
||||
|
||||
gst_bin_add_many (GST_BIN (self), scale, self->capsfilter, NULL);
|
||||
gst_element_link (scale, self->capsfilter);
|
||||
|
||||
self->sink =
|
||||
gst_ghost_pad_new_from_template ("sink", scale->sinkpads->data, template);
|
||||
gst_pad_set_chain_function (self->sink, (GstPadChainFunction) chain);
|
||||
gst_element_add_pad (GST_ELEMENT (self), self->sink);
|
||||
gst_object_unref (template);
|
||||
|
||||
template = gst_static_pad_template_get (&gst_video_scale_src_template);
|
||||
pad =
|
||||
gst_ghost_pad_new_from_template ("src", self->capsfilter->srcpads->data,
|
||||
template);
|
||||
gst_element_add_pad (GST_ELEMENT (self), pad);
|
||||
gst_object_unref (template);
|
||||
}
|
||||
|
||||
static void
|
||||
ges_video_scale_class_init (GESVideoScaleClass * klass)
|
||||
{
|
||||
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
||||
|
||||
gst_element_class_set_static_metadata (element_class,
|
||||
"VideoScale",
|
||||
"Video/Filter",
|
||||
"Scaling element usable as a GES effect",
|
||||
"Thibault Saunier <tsaunier@igalia.com>");
|
||||
|
||||
gst_element_class_add_static_pad_template (element_class,
|
||||
&gst_video_scale_sink_template);
|
||||
gst_element_class_add_static_pad_template (element_class,
|
||||
&gst_video_scale_src_template);
|
||||
|
||||
element_class->change_state = change_state;
|
||||
}
|
|
@ -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,
|
||||
};
|
||||
|
@ -113,6 +122,24 @@ gst_compositor_operator_get_type_and_default_value (int *default_operator_value)
|
|||
return operator_gtype;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
scales_downstream (GstFramePositioner * self)
|
||||
{
|
||||
if (self->scale_in_compositor)
|
||||
return TRUE;
|
||||
|
||||
if (!self->track_source)
|
||||
return self->scale_in_compositor;
|
||||
|
||||
GESTimelineElement *parent = GES_TIMELINE_ELEMENT_PARENT (self->track_source);
|
||||
|
||||
if (!parent || !GES_IS_CLIP (parent)) {
|
||||
return self->scale_in_compositor;
|
||||
}
|
||||
|
||||
return ges_clip_has_scale_effect (GES_CLIP (parent));
|
||||
}
|
||||
|
||||
static void
|
||||
_weak_notify_cb (GstFramePositioner * pos, GObject * old)
|
||||
{
|
||||
|
@ -125,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)
|
||||
|
@ -201,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;
|
||||
|
@ -218,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;
|
||||
|
@ -274,7 +319,7 @@ gst_frame_positioner_update_properties (GstFramePositioner * pos,
|
|||
caps = gst_caps_from_string ("video/x-raw(ANY)");
|
||||
|
||||
if (pos->track_width && pos->track_height &&
|
||||
(!track_mixing || !pos->scale_in_compositor)) {
|
||||
(!track_mixing || !scales_downstream (pos))) {
|
||||
gst_caps_set_simple (caps, "width", G_TYPE_INT,
|
||||
pos->track_width, "height", G_TYPE_INT, pos->track_height, NULL);
|
||||
}
|
||||
|
@ -321,6 +366,13 @@ gst_frame_positioner_update_properties (GstFramePositioner * pos,
|
|||
reposition_properties (pos, old_track_width, old_track_height);
|
||||
|
||||
done:
|
||||
if (scales_downstream (pos) && pos->natural_width && pos->natural_height) {
|
||||
GST_DEBUG_OBJECT (pos,
|
||||
"Forcing natural width in source make downstream scaling work");
|
||||
gst_caps_set_simple (caps, "width", G_TYPE_INT, pos->natural_width,
|
||||
"height", G_TYPE_INT, pos->natural_height, NULL);
|
||||
}
|
||||
|
||||
GST_DEBUG_OBJECT (pos, "setting caps %" GST_PTR_FORMAT, caps);
|
||||
|
||||
g_object_set (pos->capsfilter, "caps", caps, NULL);
|
||||
|
@ -469,7 +521,7 @@ gst_frame_positioner_class_init (GstFramePositionerClass * klass)
|
|||
GstBaseTransformClass *base_transform_class =
|
||||
GST_BASE_TRANSFORM_CLASS (klass);
|
||||
|
||||
GST_DEBUG_CATEGORY_INIT (_framepositioner, "framepositioner",
|
||||
GST_DEBUG_CATEGORY_INIT (_framepositioner, "gesframepositioner",
|
||||
GST_DEBUG_FG_YELLOW, "ges frame positioner");
|
||||
|
||||
gst_element_class_add_static_pad_template (GST_ELEMENT_CLASS (klass),
|
||||
|
@ -498,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:
|
||||
|
@ -508,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:
|
||||
|
@ -527,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:
|
||||
|
@ -538,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:
|
||||
|
@ -610,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;
|
||||
|
@ -623,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,
|
||||
|
@ -646,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:
|
||||
|
@ -655,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;
|
||||
|
@ -665,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:
|
||||
|
@ -703,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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -67,6 +67,7 @@ ges_sources = files([
|
|||
'ges-structure-parser.c',
|
||||
'ges-marker-list.c',
|
||||
'ges-discoverer-manager.c',
|
||||
'gesvideoscale.c',
|
||||
'gstframepositioner.c'
|
||||
])
|
||||
|
||||
|
|
|
@ -30,6 +30,46 @@ 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>
|
||||
<branch>main</branch>
|
||||
<name></name>
|
||||
<created>2024-02-06</created>
|
||||
<file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-editing-services/gst-editing-services-1.23.1.tar.xz" />
|
||||
</Version>
|
||||
</release>
|
||||
|
||||
<release>
|
||||
<Version>
|
||||
<revision>1.22.0</revision>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
project('gst-editing-services', 'c',
|
||||
version : '1.23.0.1',
|
||||
meson_version : '>= 0.62',
|
||||
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
|
||||
|
@ -318,7 +326,7 @@ endif
|
|||
|
||||
configure_file(output: 'config.h', configuration: cdata)
|
||||
|
||||
meson.add_dist_script('scripts/gen-changelog.py', meson.project_name(), '1.20.0', meson.project_version())
|
||||
meson.add_dist_script('scripts/gen-changelog.py', meson.project_name(), '1.22.0', meson.project_version())
|
||||
|
||||
plugin_names = []
|
||||
gst_plugins = []
|
||||
|
|
|
@ -321,7 +321,12 @@ ges_base_bin_set_timeline (GESBaseBin * self, GESTimeline * timeline)
|
|||
/* Add queues the same way as in GESPipeline */
|
||||
g_object_set (G_OBJECT (queue), "max-size-buffers", 0,
|
||||
"max-size-bytes", 0, "max-size-time", (gint64) 2 * GST_SECOND, NULL);
|
||||
gst_bin_add (sbin, queue);
|
||||
if (!gst_bin_add (sbin, queue)) {
|
||||
g_free (name);
|
||||
gst_object_unref (queue);
|
||||
continue;
|
||||
}
|
||||
|
||||
gst_element_sync_state_with_parent (GST_ELEMENT (queue));
|
||||
|
||||
tmppad = gst_element_get_static_pad (queue, "sink");
|
||||
|
@ -329,14 +334,18 @@ ges_base_bin_set_timeline (GESBaseBin * self, GESTimeline * timeline)
|
|||
GST_ERROR_OBJECT (sbin, "Could not link %s:%s and %s:%s",
|
||||
GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (tmppad));
|
||||
|
||||
g_free (name);
|
||||
gst_object_unref (tmppad);
|
||||
gst_object_unref (queue);
|
||||
gst_bin_remove (sbin, queue);
|
||||
continue;
|
||||
}
|
||||
|
||||
gst_object_unref (tmppad);
|
||||
tmppad = gst_element_get_static_pad (queue, "src");
|
||||
gpad = gst_ghost_pad_new_from_template (name, tmppad,
|
||||
gst_static_pad_template_get (template));
|
||||
gst_object_unref (tmppad);
|
||||
g_free (name);
|
||||
|
||||
gst_pad_set_active (gpad, TRUE);
|
||||
gst_element_add_pad (GST_ELEMENT (sbin), gpad);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue