Compare commits

..

14 Commits

Author SHA1 Message Date
acu
0bc5e631d6 added comments 2025-06-25 15:49:28 +02:00
b43d2da209 delete Debug 2025-06-25 14:34:35 +02:00
acu
31b9f03447 opencl gpu acceleration tested - successful 2025-06-24 18:06:04 +02:00
a4e00086b3 changed variable types in remap function in gstcameraundistort.cpp to support gpu acceleration - It still needs to be tested on the ACU! 2025-06-23 14:29:19 +02:00
Elias Rosendahl
6377ebf568 Add Execution Provider OpenVINO 2025-06-09 12:49:22 +02:00
Santosh Mahto
62731c958c gstanalytics : Add tensor decoder element for yolo detection models
Existing tensor decoder has been bifurcated into two seperate gst
element as:

`yoloodv5tensordecoder`: decodes tensors output(masks) from detection-only
models e.g yolov8s.onnx

`yolsegv8tensordecoder`: decoder tensors output(masks and logits) from
segementation models e.g FastSAM or yolov8s-seg
2025-04-05 13:09:00 +02:00
Daniel Morin
87b56fbf86 tensordecoders: rename element
- yolotensordecoder replaced with yolov8segtensordecoder
2025-04-05 13:09:00 +02:00
Daniel Morin
83d685054b tensordecoders: address MR comments 2025-04-05 13:09:00 +02:00
Daniel Morin
e616f64152 tensordecoders: Remove object locking in properties accessors 2025-04-05 13:09:00 +02:00
Daniel Morin
df08833e27 tensordecoders: add property label-file to exemple 2025-04-05 13:09:00 +02:00
Daniel Morin
01a504c310 tensordecoder: Improve class retrieval
- Optimize the way to retrieve class with maximum confidence. Avoir multiple
  pass.
- Add support for label files
2025-04-05 13:09:00 +02:00
Santosh Mahto
62eeb7e008 gst-analytics : Adapt and Rename fastsamtensordecoder to yolo based.
YOLOv8 model have same tensor output format as FastSAM, so for better
generalization rename fastsamtensordecoder to yolotensordecoder. This
also requires code adaptation to support Yolo based model.
2025-04-05 13:09:00 +02:00
Olivier Crête
244dd01b22 fastsamtensordecoder: Set mask resolution based on model output 2025-04-05 13:09:00 +02:00
Daniel Morin
b7f964929c fastsamtensordecoder: Add FastSAM tensor decoder
Co-authored-by: Vineet Suryan <vineet.suryan@collabora.com>
2025-04-05 13:08:59 +02:00
1605 changed files with 163358 additions and 108626 deletions

1
.gitattributes vendored
View File

@ -1,2 +1 @@
subprojects/packagefiles/*/*.patch text eol=lf
subprojects/gst-devtools/dots-viewer/static/dist/** binary

8
.gitignore vendored
View File

@ -22,6 +22,7 @@ prefix/
/gst-devtools
/gst-integration-testsuites
/gst-editing-services
/gstreamer-vaapi
/gstreamer-sharp
/pygobject
/gst-python
@ -40,7 +41,6 @@ subprojects/abseil-cpp.wrap
subprojects/sysprof.wrap
subprojects/*/
subprojects/.wraplock
!subprojects/gst-devtools
!subprojects/gst-docs
!subprojects/gst-editing-services
@ -54,16 +54,12 @@ subprojects/.wraplock
!subprojects/gst-python
!subprojects/gstreamer
!subprojects/gstreamer-sharp
!subprojects/gstreamer-vaapi
!subprojects/gst-rtsp-server
!subprojects/macos-bison-binary
!subprojects/win-flex-bison-binaries
!subprojects/win-nasm
!subprojects/win-pkgconfig
!subprojects/packagefiles
subprojects/*/*.zip
subprojects/*/*.exe
subprojects/*/*.tar.*
subprojects/macos-bison-binary/bison*/
# VSCode integration
# launch.json will be modified by users depending on the pipeline to test

View File

@ -1,9 +1,10 @@
include:
- project: 'freedesktop/ci-templates'
ref: "e0b27048d7ba881e3bfec48f4f7cba6504a7472e"
file:
- '/templates/fedora.yml'
- '/templates/debian.yml'
ref: "3826695f80807d8a4d999f6b6efb3d405d708db9"
file: '/templates/fedora.yml'
- project: 'freedesktop/ci-templates'
ref: "3826695f80807d8a4d999f6b6efb3d405d708db9"
file: '/templates/debian.yml'
###
# IMPORTANT
# These are the version tags for the docker images the CI runs against.
@ -58,6 +59,7 @@ variables:
-Ddevtools=enabled
-Dges=enabled
-Drtsp_server=enabled
-Dvaapi=enabled
-Dsharp=disabled
-Drs=disabled
-Dgpl=enabled
@ -70,13 +72,6 @@ variables:
-Dgstreamer-sharp:werror=false
-Ddoc=disabled
# Our gitlab instance and runner are using a proxy and have
# trouble with the normal fetch. git itself handles the proxy
# more reliably.
#
# https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli
CARGO_NET_GIT_FETCH_WITH_CLI: true
FF_TIMESTAMPS: true
# Can set this as part of a schedule pipeline to test the gtk4 build if desired
@ -139,16 +134,14 @@ trigger:
.fedora image:
variables:
FDO_USER: 'containeruser'
CCACHE_DIR: '/cache/gstreamer/gstreamer/ccache_fedora_containeruser/'
CCACHE_DIR: '/cache/gstreamer/gstreamer/ccache/'
FDO_DISTRIBUTION_VERSION: '40'
FDO_REPO_SUFFIX: "$FEDORA_AMD64_SUFFIX"
FDO_DISTRIBUTION_TAG: "$FEDORA_TAG-$GST_UPSTREAM_BRANCH"
FDO_DISTRIBUTION_EXEC: 'bash ci/docker/fedora/prepare.sh'
FDO_DISTRIBUTION_EXEC: 'GIT_BRANCH=$CI_COMMIT_REF_NAME GIT_URL=$CI_REPOSITORY_URL bash ci/docker/fedora/prepare.sh'
.fedora fluster image:
variables:
FDO_USER: 'containeruser'
CCACHE_DIR: !reference [".fedora image", "variables", CCACHE_DIR]
FDO_DISTRIBUTION_VERSION: !reference [".fedora image", "variables", FDO_DISTRIBUTION_VERSION]
FDO_REPO_SUFFIX: !reference [".fedora image", "variables", FDO_REPO_SUFFIX]
@ -163,8 +156,6 @@ fedora amd64 docker:
- '.fdo.container-build@fedora'
stage: 'preparation'
needs: []
variables:
FDO_DISTRIBUTION_POST_EXEC: 'bash ci/scripts/build-toolbox-image.sh'
# Note: assumption is that placeholder jobs run on a packet runner
# (which has faster network connectivity to the registry).
tags: [ 'kvm' ]
@ -179,15 +170,29 @@ fedora amd64 docker fluster:
# (which has faster network connectivity to the registry).
tags: [ 'kvm' ]
# Build a toolbox specific image to workaround ci-templates
fedora amd64 toolbox:
image: quay.io/freedesktop.org/ci-templates:container-build-base-2024-01-31.0
stage: 'preparation'
needs: ["fedora amd64 docker"]
# Note: assumption is that placeholder jobs run on a packet runner
# (which has faster network connectivity to the registry).
tags: [ 'kvm' ]
variables:
GST_CI_IMAGE: !reference [".build fedora x86_64", "variables", FDO_DISTRIBUTION_IMAGE]
FDO_DISTRIBUTION_TAG: !reference [".fedora image", "variables", FDO_DISTRIBUTION_TAG]
FDO_REPO_SUFFIX: !reference [".fedora image", "variables", FDO_REPO_SUFFIX]
script:
- bash ci/scripts/build-toolbox-image.sh $GST_CI_IMAGE $FDO_DISTRIBUTION_TAG $GST_UPSTREAM_BRANCH
.debian image:
variables:
CCACHE_DIR: '/cache/gstreamer/gstreamer/ccache_debian_containeruser/'
FDO_USER: 'containeruser'
CCACHE_DIR: '/cache/gstreamer/gstreamer/ccache_debian/'
FDO_BASE_IMAGE: "quay.io/toolbx-images/debian-toolbox:12"
FDO_DISTRIBUTION_VERSION: '12'
FDO_REPO_SUFFIX: "$DEBIAN_AMD64_SUFFIX"
FDO_DISTRIBUTION_TAG: "$DEBIAN_TAG-$GST_UPSTREAM_BRANCH"
FDO_DISTRIBUTION_EXEC: 'bash ci/docker/debian/prepare.sh'
FDO_DISTRIBUTION_EXEC: 'GIT_BRANCH=$CI_COMMIT_REF_NAME GIT_URL=$CI_REPOSITORY_URL bash ci/docker/debian/prepare.sh'
debian amd64 docker:
extends:
@ -248,13 +253,12 @@ windows amd64 docker:
.abi-check image:
variables:
CCACHE_DIR: !reference [".fedora image", "variables", CCACHE_DIR]
SUBPROJECTS_CACHE_DIR: !reference [".build", "variables", SUBPROJECTS_CACHE_DIR]
FDO_DISTRIBUTION_VERSION: !reference [".fedora image", "variables", FDO_DISTRIBUTION_VERSION]
FDO_REPO_SUFFIX: !reference [".fedora image", "variables", FDO_REPO_SUFFIX]
FDO_BASE_IMAGE: '$CI_REGISTRY_IMAGE/$FDO_REPO_SUFFIX:$FEDORA_TAG-$GST_UPSTREAM_BRANCH'
FDO_DISTRIBUTION_TAG: "abi-check-$ABI_CHECK_TAG-$GST_UPSTREAM_BRANCH"
FDO_DISTRIBUTION_PACKAGES: 'libabigail'
FDO_DISTRIBUTION_EXEC: 'bash ci/docker/abi-check/prepare.sh'
FDO_DISTRIBUTION_EXEC: 'GIT_BRANCH=$CI_COMMIT_REF_NAME GIT_URL=$CI_REPOSITORY_URL bash ci/docker/abi-check/prepare.sh'
ABI_CHECK_CACHE: '/abi-check-cache'
abi-check docker:
@ -284,8 +288,8 @@ pre-commit checks:
GIT_DEPTH: 100
PRE_COMMIT_HOME: '/cache/${CI_PROJECT_NAMESPACE}/pre-commit'
RUSTUP_HOME: '/usr/local/rustup'
before_script:
- git config --global --add safe.directory $CI_PROJECT_DIR
before_script:
git config --global --add safe.directory $CI_PROJECT_DIR
script:
- export PATH="/usr/local/cargo/bin:$PATH"
- echo $CI_MERGE_REQUEST_DIFF_BASE_SHA
@ -343,7 +347,7 @@ pre-commit checks:
BUILD_GST_DEBUG: "-Dgstreamer:gst_debug=true"
GST_WERROR: "true"
MESON_ARGS: "${DEFAULT_MESON_ARGS}"
SUBPROJECTS_CACHE_DIR: "/var/cache/subprojects"
SUBPROJECTS_CACHE_DIR: "/subprojects"
# Avoid weird issue about cross-device links
# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3197
GI_SCANNER_DISABLE_CACHE: "1"
@ -363,6 +367,9 @@ pre-commit checks:
- changes:
paths:
*modules_changes
- changes:
paths:
- "subprojects/gstreamer-vaapi/**/*"
.build simple:
extends:
@ -371,6 +378,7 @@ pre-commit checks:
variables:
GST_WERROR: "true"
MESON_ARGS: "${SIMPLE_BUILD}"
SUBPROJECTS_CACHE_DIR: "/subprojects"
script:
- $CI_PROJECT_DIR/ci/scripts/build.sh build/
- ./gst-env.py gst-inspect-1.0 --version
@ -416,6 +424,9 @@ build fedora gcc:
# https://github.com/mesonbuild/meson/issues/5214
# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4281?commit_id=d1a687b61d8fbc5ae35b4bb62aa7fd1d091818f2#note_1875699
#
# VAAPI can't be build statically yet
# subprojects/gstreamer-vaapi/meson.build:8:2: ERROR: Problem encountered: GStreamer-VAAPI plugin not supported with `static` builds yet.
#
# Disabling gstreamer-sharp tests because they download things as part of configure with
# nuget which frequently fails on the CI (possibly because we're hammering the site)
#
@ -423,6 +434,7 @@ build fedora gcc:
MESON_ARGS: >-
${DEFAULT_MESON_ARGS}
-Dgst-devtools:dots_viewer=enabled
-Dvaapi=disabled
-Dpython=auto
-Dgst-editing-services:python=disabled
-Dintrospection=disabled
@ -444,12 +456,16 @@ build fedora clang:
- BUILD_TYPE: ["--default-library=static"]
BUILD_GST_DEBUG: ["-Dgstreamer:gst_debug=true", "-Dgstreamer:gst_debug=false"]
# VAAPI can't be build statically yet
# subprojects/gstreamer-vaapi/meson.build:8:2: ERROR: Problem encountered: GStreamer-VAAPI plugin not supported with `static` builds yet.
#
# Disabling gstreamer-sharp tests because they download things as part of configure with
# nuget which frequently fails on the CI (possibly because we're hammering the site)
#
# Disabling building both qt5 and qt6 when doing static builds since we can only link against one
MESON_ARGS: >-
${DEFAULT_MESON_ARGS}
-Dvaapi=disabled
-Dintrospection=disabled
-Dpython=disabled
-Ddoc=disabled
@ -483,6 +499,7 @@ build debian x86_64:
MESON_ARGS: >-
${DEFAULT_MESON_ARGS}
-Dlibav=disabled
-Dvaapi=disabled
-Dgst-plugins-base:pango=enabled
-Dgst-plugins-good:cairo=enabled
-Dgst-plugins-good:soup=enabled
@ -515,17 +532,12 @@ build debian x86_64:
when: "always"
paths:
- 'build/meson-logs/'
- 'args.txt'
build vs2022 amd64:
extends: '.build windows'
script:
- !reference [".build windows", "script"]
# https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_character_encoding?view=powershell-7.5
# Meson's response files must be in UTF-8
# After updating to powershell >7.1, the shell in Dockerfile must be updated from Windows PS to PWSH
- echo "$env:MESON_ARGS $env:GTK_ARGS" | Out-File -File args.txt -Encoding ASCII
- .\ci\run_retry.ps1 meson setup --vsenv build '@args.txt'
- .\ci\run_retry.ps1 meson setup --vsenv build $env:MESON_ARGS $env:GTK_ARGS
- .\ci\run_retry.ps1 meson compile -C build --jobs $env:FDO_CI_CONCURRENT
- .\gst-env.py gst-inspect-1.0.exe --version
- .\gst-env.py gst-inspect-1.0.exe
@ -535,9 +547,6 @@ build vs2022 amd64:
variables:
# FIXME: https://github.com/mesonbuild/meson/pull/11007
PKG_CONFIG: ${CI_PROJECT_DIR}/subprojects/win-pkgconfig/pkg-config.exe
# Work around Meson issues if this env var contains characters that
# cannot be represented in the active code page (e.g. CP1252)
CI_COMMIT_AUTHOR: null
build vs2022 amd64 full-static:
extends: ".build windows"
@ -554,9 +563,6 @@ build vs2022 amd64 full-static:
-Dlibav=disabled
-Ddoc=disabled
-Dgst-full-target-type=static_library
# Work around Meson issues if this env var contains characters that
# cannot be represented in the active code page (e.g. CP1252)
CI_COMMIT_AUTHOR: null
.build windows cross:
extends: '.build windows'
@ -636,9 +642,11 @@ build macos:
- BUILD_TYPE: ["--default-library=both"]
BUILD_GST_DEBUG: ["-Dgstreamer:gst_debug=true"]
# FIXME: We currently don't have pkg-config required by gobject-introspection/pygobject/sharp
# macos doesn't support vaapi
MESON_ARGS: >-
${SIMPLE_BUILD}
-Dintrospection=disabled
-Dvaapi=disabled
-Dsharp=disabled
-Dpython=disabled
-Ddoc=disabled
@ -677,7 +685,7 @@ abi-check:
variables:
GST_WERROR: "true"
MESON_ARGS: "${SIMPLE_BUILD}"
SUBPROJECTS_CACHE_DIR: !reference [".build", "variables", SUBPROJECTS_CACHE_DIR]
SUBPROJECTS_CACHE_DIR: "/subprojects"
# Avoid weird issue about cross-device links
# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3197
@ -733,6 +741,9 @@ check fedora:
- changes:
paths:
*modules_changes
- changes:
paths:
- "subprojects/gstreamer-vaapi/**/*"
integration testsuites fedora:
extends: '.test fedora x86_64'
@ -741,6 +752,7 @@ integration testsuites fedora:
MESON_ARGS: >-
${SIMPLE_BUILD}
-Dsharp=disabled
-Dvaapi=disabled
-Dexamples=disabled
-Dgst-examples=disabled
-Dtests=disabled
@ -769,7 +781,7 @@ check video formats:
MESON_ARGS: "${SIMPLE_BUILD}"
BUILD_GST_DEBUG: "-Dgstreamer:gst_debug=true"
GST_WERROR: "true"
SUBPROJECTS_CACHE_DIR: !reference [".build", "variables", SUBPROJECTS_CACHE_DIR]
SUBPROJECTS_CACHE_DIR: "/subprojects"
VIDEO_TOKEN: "GST_VIDEO_FORMATS_ALL_STR"
VIDEO_HEADER: "subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h"
WL_TOKEN: "GST_WL_VIDEO_FORMATS"
@ -800,17 +812,11 @@ gstreamer-full static build:
MESON_ARGS: >-
-Ddoc=disabled
-Dqt5=disabled -Dqt6=enabled
SUBPROJECTS_CACHE_DIR: "/subprojects"
script:
- $CI_PROJECT_DIR/ci/scripts/build.sh build/
- meson test -C build -v test-gst-full
rules:
- !reference [.upstream-branch-rules, rules]
- changes:
paths:
*modules_changes
- changes:
paths:
- "scripts/generate_init_static_plugins.py"
gstreamer-full-minimal static build:
extends: 'gstreamer-full static build'
@ -832,6 +838,7 @@ gstreamer-full-minimal static build:
-Dgst-full-typefind-functions=typefindfunctions:wav,flv
-Dgst-full-device-providers=alsa:alsadeviceprovider
-Dgst-full-dynamic-types=pbtypes:video_multiview_flagset
SUBPROJECTS_CACHE_DIR: "/subprojects"
script:
- $CI_PROJECT_DIR/ci/scripts/build.sh build/
@ -873,6 +880,7 @@ fluster v4l2-stateless on visl:
-Dgst-plugins-base:typefind=enabled
-Dgst-plugins-base:playback=enabled
-Dgst-plugins-good:matroska=enabled
SUBPROJECTS_CACHE_DIR: "/subprojects"
script:
- $CI_PROJECT_DIR/ci/scripts/build.sh build/
- meson test -C build -v --suite v4l2-stateless-decoders
@ -903,6 +911,9 @@ fluster v4l2-stateless on visl:
- changes:
paths:
*modules_changes
- changes:
paths:
- "subprojects/gstreamer-vaapi/**/*"
valgrind core:
extends: '.valgrind fedora x86_64'
@ -1002,23 +1013,6 @@ valgrind ges:
# as flaky. Until then, just ignore failures.
allow_failure: true
valgrind rtsp-server:
extends: '.valgrind fedora x86_64'
variables:
TEST_SUITE: "check.gst-rtsp-server\\..*"
rules:
- changes:
paths:
- "*"
- "scripts/*"
- "ci/**/*"
- "subprojects/gst-devtools/**/*"
- "subprojects/gstreamer/**/*"
- "subprojects/gst-plugins-base/**/*"
- "subprojects/gst-plugins-good/**/*"
- "subprojects/gst-plugins-bad/**/*"
- "subprojects/gst-rtsp-server/**/*"
# ---- Integration ----- #
.documentation:
@ -1034,6 +1028,7 @@ valgrind rtsp-server:
-Dgst-plugins-bad:svthevcenc=disabled
# Disable werror for the docs build, we don't need it
GST_WERROR: 'false'
SUBPROJECTS_CACHE_DIR: "/subprojects"
CI_ARTIFACTS_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/"
script:
- $CI_PROJECT_DIR/ci/scripts/build-docs.sh build/
@ -1043,14 +1038,6 @@ valgrind rtsp-server:
paths:
- documentation/
- diffs/
rules:
- !reference [.upstream-branch-rules, rules]
- changes:
paths:
*modules_changes
- changes:
paths:
- "scripts/generate_plugins_path.py"
#
# This jobs runs in gstreamer namespace when after the merge into main branch.
@ -1095,55 +1082,40 @@ build documentation:
- "subprojects/gst-plugins-good/**/*"
- "subprojects/gst-plugins-ugly/**/*"
- "subprojects/gstreamer/**/*"
- "subprojects/gstreamer-vaapi/**/*"
- "subprojects/gst-rtsp-server/**/*"
# FIXME: We used to automatically run against matching user branch
# whever that branch existed.
# See ci/gitlab/trigger_cerbero_pipline.py.
.cerbero trigger changes: &cerbero_trigger_changes
changes:
paths:
- ".gitlab-ci.yml"
- "ci/gitlab/*.py"
- "subprojects/gst-devtools/**/*"
- "subprojects/gst-editing-services/**/*"
- "subprojects/gst-libav/**/*"
- "subprojects/gst-plugins-bad/**/*"
- "subprojects/gst-plugins-base/**/*"
- "subprojects/gst-plugins-good/**/*"
- "subprojects/gst-plugins-ugly/**/*"
- "subprojects/gst-python/**/*"
- "subprojects/gstreamer/**/*"
- "subprojects/gst-rtsp-server/**/*"
- "subprojects/gst-examples/**/*"
# FIXME: Using trigger: causes permission issues, workaround using old REST API.
# https://gitlab.com/gitlab-org/gitlab/-/issues/341737
cerbero trigger:
stage: build
trigger:
project: gstreamer/cerbero
branch: main
strategy: depend
timeout: '4h'
tags:
- placeholder-job
image: python:alpine
needs:
- "trigger"
variables:
CI_GSTREAMER_PATH: '$CI_PROJECT_PATH'
CI_GSTREAMER_REF_NAME: '$CI_COMMIT_REF_NAME'
CI_GSTREAMER_TRIGGERED: 'true'
inherit:
# Inherit default (not predefined) variables used for the job in `rules:` and `variables:`
variables:
- MESON_COMMIT
- GST_UPSTREAM_BRANCH
script:
- pip install python-gitlab
- python ci/gitlab/trigger_cerbero_pipeline.py
rules:
- if: '$MESON_COMMIT'
# Never run post merge
- if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
# For merge reqest, we want to test user branch
<<: *cerbero_trigger_changes
variables:
CI_GSTREAMER_PATH: '$CI_MERGE_REQUEST_SOURCE_PROJECT_PATH'
CI_GSTREAMER_REF_NAME: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME'
- <<: *cerbero_trigger_changes
- changes:
paths:
- ".gitlab-ci.yml"
- "ci/gitlab/*.py"
- "subprojects/gst-devtools/**/*"
- "subprojects/gst-editing-services/**/*"
- "subprojects/gst-libav/**/*"
- "subprojects/gst-plugins-bad/**/*"
- "subprojects/gst-plugins-base/**/*"
- "subprojects/gst-plugins-good/**/*"
- "subprojects/gst-plugins-ugly/**/*"
- "subprojects/gst-python/**/*"
- "subprojects/gstreamer/**/*"
- "subprojects/gst-rtsp-server/**/*"
- "subprojects/gst-examples/**/*"

View File

@ -5,12 +5,12 @@ variables:
# If you are hacking on them or need a them to rebuild, its enough
# to change any part of the string of the image you want.
###
FEDORA_TAG: '2025-08-10.0-fluster-kernel'
FEDORA_TAG: '2025-03-13.0'
DEBIAN_TAG: '2025-08-10.0'
DEBIAN_TAG: '2025-02-23.0'
CHECKS_TAG: '2025-05-24.0'
CHECKS_TAG: '2025-02-04.0'
ABI_CHECK_TAG: '2025-08-20.0'
ABI_CHECK_TAG: '2025-04-01.0'
WINDOWS_TAG: '2025-08-10.0'
WINDOWS_TAG: '2025-02-23.0'

View File

@ -1,7 +0,0 @@
subprojects/gst-devtools/dots-viewer/static/dist/**
macbuild/**
builddir/**
*.min.js
*.min.css
node_modules/

View File

@ -1,7 +1,6 @@
subprojects/gst-plugins-bad/ext/nvcomp
subprojects/gst-plugins-bad/ext/nvdswrapper
subprojects/gst-plugins-bad/ext/qt6d3d11
subprojects/gst-plugins-bad/ext/wpe2
subprojects/gst-plugins-bad/gst-libs/gst/cuda
subprojects/gst-plugins-bad/gst-libs/gst/d3d11
subprojects/gst-plugins-bad/gst-libs/gst/d3d12
@ -12,7 +11,6 @@ subprojects/gst-plugins-bad/sys/amfcodec
subprojects/gst-plugins-bad/sys/d3d11
subprojects/gst-plugins-bad/sys/d3d12
subprojects/gst-plugins-bad/sys/dwrite
subprojects/gst-plugins-bad/sys/hip
subprojects/gst-plugins-bad/sys/mediafoundation
subprojects/gst-plugins-bad/sys/nvcodec
^(subprojects/gst-plugins-bad/sys/qsv/)+(\w)+([^/])+(cpp$)

View File

@ -1,10 +1,3 @@
# Notes:
# - Python commands must be prefixed with `python` because pre-commit refuses to
# special-case shebangs on Windows where `python3` does not commonly exists.
# Luckily, the `python` command exists in the virtualenv created by pre-commit
# on all platforms. https://github.com/pre-commit/pre-commit/issues/3415,
# https://github.com/pre-commit/pre-commit/issues/3468
fail_fast: false
repos:
- repo: https://github.com/jorisroovers/gitlint
@ -23,7 +16,7 @@ repos:
- id: gst-indent
name: gst-indent
language: python
entry: python ./scripts/gst-indent-all.py
entry: ./scripts/gst-indent-all.py
pass_filenames: false
types_or: ["c", "c++"]
additional_dependencies: ["gst-indent==1.0.0"]
@ -37,6 +30,6 @@ repos:
- id: doc-checks
name: doc-checks
language: python
entry: python ./scripts/git-hooks/pre-commit-python.hook
entry: ./scripts/git-hooks/pre-commit-python.hook
pass_filenames: false
additional_dependencies: ["autopep8==2.3.2", "pycodestyle==2.12.1"]

View File

@ -8,6 +8,6 @@ install_prefix=/tmp/install
MESON_ARGS="${meson_args} --prefix ${install_prefix} --optimization=g" ./ci/scripts/build.sh build/
ninja -C build/ install
find ${install_prefix}/lib64 -type f -iname *libgst*.so.* -print0 | sudo xargs -0 -I '{}' bash ./ci/scripts/save-abi.sh {} ${ABI_CHECK_CACHE} ${install_prefix}/include/gstreamer-1.0
find ${install_prefix}/lib64 -type f -iname *libgst*.so.* -print0 | xargs -0 -I '{}' bash ./ci/scripts/save-abi.sh {} ${ABI_CHECK_CACHE} ${install_prefix}/include/gstreamer-1.0
rm -rf $install_prefix

View File

@ -33,8 +33,8 @@ python3 -m pip install pre-commit==3.6.0
python3 -m pip install gitlint
# Install Rust
RUSTUP_VERSION=1.28.1
RUST_VERSION=1.89.0
RUSTUP_VERSION=1.27.1
RUST_VERSION=1.85.0
RUST_ARCH="x86_64-unknown-linux-gnu"
RUSTUP_URL=https://static.rust-lang.org/rustup/archive/$RUSTUP_VERSION/$RUST_ARCH/rustup-init
@ -49,7 +49,7 @@ chmod +x rustup-init;
rm rustup-init;
chmod -R a+w $RUSTUP_HOME $CARGO_HOME
cargo install cargo-c --version 0.10.15+cargo-0.90.0 --locked
cargo install cargo-c --version 0.10.11+cargo-0.86.0 --locked
rustup --version
cargo --version

View File

@ -2,13 +2,11 @@
set -eux
sudo apt update -y && sudo apt full-upgrade -y
sudo apt install -y $(<./ci/docker/debian/deps.txt)
apt update -y && apt full-upgrade -y
apt install -y $(<./ci/docker/debian/deps.txt)
# These get pulled by other deps
sudo apt remove -y rustc cargo
apt remove -y rustc cargo
sudo bash ./ci/scripts/create-pip-config.sh
sudo pip3 install --break-system-packages meson==1.7.2 hotdoc python-gitlab tomli junitparser
pip3 install --break-system-packages meson==1.5.2 hotdoc python-gitlab tomli junitparser
sudo apt clean all
apt clean all

View File

@ -2,21 +2,12 @@
set -eux
apt update && apt install -y sudo passwd
bash ./ci/scripts/create-container-user.sh
bash ./ci/scripts/create-ci-identifier.sh
bash ./ci/docker/debian/install-deps.sh
sudo -u containeruser bash ./ci/docker/debian/install-deps.sh
sudo -u containeruser bash ./ci/scripts/install-rust.sh
bash ./ci/scripts/install-rust.sh
# Configure git for various usage
sudo -u containeruser git config --global user.email "gstreamer@gstreamer.net"
sudo -u containeruser git config --global user.name "Gstbuild Runner"
# /tmp/clone is where ci-templates cbuild clones the checkout
sudo -u containeruser git config --global --add safe.directory /tmp/clone
git config --global user.email "gstreamer@gstreamer.net"
git config --global user.name "Gstbuild Runner"
sudo -u containeruser bash ./ci/scripts/create-subprojects-cache.sh
# leftover caches
sudo rm -rf /root/
sudo rm -rf /home/containeruser/.cache /home/containeruser/.npm
bash ./ci/scripts/create-subprojects-cache.sh

View File

@ -4,33 +4,32 @@ set -eux
# Fedora base image disable installing documentation files. See https://pagure.io/atomic-wg/issue/308
# We need them to cleanly build our doc.
sudo sed -i '/tsflags=nodocs/d' /etc/dnf/dnf.conf
sudo dnf -y swap coreutils-single coreutils-full
sudo dnf -y swap glibc-minimal-langpack glibc-all-langpacks
sed -i '/tsflags=nodocs/d' /etc/dnf/dnf.conf
dnf -y swap coreutils-single coreutils-full
dnf -y swap glibc-minimal-langpack glibc-all-langpacks
# Add rpm fusion repositories in order to access all of the gst plugins
sudo dnf install -y \
dnf install -y \
"https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm" \
"https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm"
# Enable the debuginfo repos so -debug packages are kept in sync
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --set-enabled '*-debuginfo'
dnf install -y dnf-plugins-core
dnf config-manager --set-enabled '*-debuginfo'
sudo dnf upgrade -y && sudo dnf distro-sync -y
dnf upgrade -y && dnf distro-sync -y
# Install the dependencies of gstreamer
sudo dnf install --setopt=install_weak_deps=false -y $(<./ci/docker/fedora/deps.txt)
dnf install --setopt=install_weak_deps=false -y $(<./ci/docker/fedora/deps.txt)
# Install devhelp files for hotdoc
sudo dnf install -y glib2-doc gdk-pixbuf2-devel gtk3-devel-docs gtk4-devel-docs libsoup-doc
dnf install -y glib2-doc gdk-pixbuf2-devel gtk3-devel-docs gtk4-devel-docs libsoup-doc
# Make sure we don't end up installing these from some transient dependency
sudo dnf remove -y "gstreamer1*-devel" rust cargo meson 'fdk-aac-free*'
dnf remove -y "gstreamer1*-devel" rust cargo meson 'fdk-aac-free*'
sudo bash ./ci/scripts/create-pip-config.sh
sudo pip3 install meson==1.7.2 python-gitlab tomli junitparser bs4
sudo pip3 install git+https://github.com/hotdoc/hotdoc.git@8c1cc997f5bc16e068710a8a8121f79ac25cbcce
pip3 install meson==1.5.2 python-gitlab tomli junitparser bs4
pip3 install git+https://github.com/hotdoc/hotdoc.git@8c1cc997f5bc16e068710a8a8121f79ac25cbcce
# Install most debug symbols, except the big ones from things we use
debug_packages=$(rpm -qa | grep -v -i \
@ -97,9 +96,9 @@ debug_packages=$(rpm -qa | grep -v -i \
-e xerces \
-e xorg \
)
sudo dnf debuginfo-install -y --best --allowerasing --skip-broken $debug_packages
dnf debuginfo-install -y --best --allowerasing --skip-broken $debug_packages
echo "Removing DNF cache"
sudo dnf clean all
dnf clean all
sudo rm -rf /var/cache/dnf /var/log/dnf*
rm -rf /var/cache/dnf /var/log/dnf*

View File

@ -2,21 +2,12 @@
set -eux
dnf update && dnf install -y sudo shadow-utils
bash ./ci/scripts/create-ci-identifier.sh
bash ./ci/scripts/create-container-user.sh
sudo -u containeruser bash ./ci/docker/fedora/install-deps.sh
sudo -u containeruser bash ./ci/scripts/install-rust.sh
bash ./ci/docker/fedora/install-deps.sh
# Configure git for various usage
sudo -u containeruser git config --global user.email "gstreamer@gstreamer.net"
sudo -u containeruser git config --global user.name "Gstbuild Runner"
# /tmp/clone is where ci-templates cbuild clones the checkout
sudo -u containeruser git config --global --add safe.directory /tmp/clone
git config --global user.email "gstreamer@gstreamer.net"
git config --global user.name "Gstbuild Runner"
sudo -u containeruser bash ./ci/scripts/create-subprojects-cache.sh
bash ./ci/scripts/install-rust.sh
# leftover caches
sudo rm -rf /root/
sudo rm -rf /home/containeruser/.cache /home/containeruser/.npm
bash ./ci/scripts/create-subprojects-cache.sh

View File

@ -5,21 +5,16 @@ set -eux
sudo dnf install -y bc
# Install virtme-ng
pushd /tmp/
git clone https://github.com/arighi/virtme-ng.git
pushd virtme-ng
git fetch --tags
git checkout v1.8
sudo ./setup.py install --prefix=/usr
popd
./setup.py install --prefix=/usr
popd
# Install fluster
pushd /opt/
sudo mkdir ./fluster
sudo chown containeruser:containeruser ./fluster/
git clone https://github.com/fluendo/fluster.git ./fluster
git clone https://github.com/fluendo/fluster.git
pushd fluster
git checkout 303a6edfda1701c8bc351909fb1173a0958810c2
./fluster.py download
@ -29,7 +24,7 @@ popd
# Build a linux image for virtme fluster tests
bash ./ci/scripts/build-linux.sh \
"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git" \
"v6.6.93" \
"v6.5.8" \
/opt/linux/bzImage \
'MEDIA_SUPPORT' \
'MEDIA_TEST_SUPPORT' \

View File

@ -39,7 +39,8 @@ RUN choco install -y cmake --installargs 'ADD_CMAKE_TO_PATH=System'
RUN choco install -y git --params '/NoAutoCrlf /NoCredentialManager /NoShellHereIntegration /NoGuiHereIntegration /NoShellIntegration'
RUN choco install -y git-lfs
RUN choco install -y 7zip
RUN choco install -y python3 --installargs 'AssociateFiles=1 PrependPath=1 Include_pip=1 Include_dev=1'
# See https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/427
RUN choco install -y python3 --version=3.11.2 --installargs 'AssociateFiles=1 PrependPath=1 Include_pip=1 Include_dev=1'
RUN choco install -y msys2 --params '/NoPath /NoUpdate /InstallDir:C:\\msys64'
# Install Wix v5 (complete install, no NuGet) from MSI
@ -60,7 +61,7 @@ RUN C:\upgrade_msys2.ps1
RUN C:\msys64\msys2_shell.cmd -ucrt64 -defterm -here -no-start -use-full-path -lc 'pacman -S --noconfirm mingw-w64-ucrt-x86_64-toolchain ninja openssh'
RUN python -m pip install meson==1.7.2 python-gitlab setuptools wheel
RUN python -m pip install meson==1.5.2 python-gitlab
RUN 'git config --global user.email "cirunner@gstreamer.freedesktop.org"; git config --global user.name "GStreamer CI system"'

View File

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

View File

@ -84,6 +84,7 @@ meson \
-Dbad=disabled \
-Dlibav=disabled \
-Dges=disabled \
-Dvaapi=disabled \
-Dsharp=disabled \
-Drs=disabled \
-Dpython=disabled \

View File

@ -48,23 +48,16 @@ if __name__ == "__main__":
return None
cerbero = None
# Only look for user namespace cerbero branch when running in a merge request
if "CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" in os.environ:
print("GStreamer monorepo merge request")
cerbero_branch = os.environ["CI_MERGE_REQUEST_SOURCE_BRANCH_NAME"]
user_project_path = os.environ["CI_MERGE_REQUEST_SOURCE_PROJECT_PATH"]
user_ns = os.path.dirname(user_project_path)
cerbero_name = f'{user_ns}/cerbero'
# We do not want to run on (often out of date) user upstream branch
if os.environ["CI_MERGE_REQUEST_SOURCE_BRANCH_NAME"] != os.environ["GST_UPSTREAM_BRANCH"]:
try:
cerbero = get_matching_user_project(cerbero_name, cerbero_branch)
except gitlab.exceptions.GitlabGetError as e:
print("No matching user project found: " + str(e))
pass
# We do not want to run on (often out of date) user upstream branch
if os.environ["CI_COMMIT_REF_NAME"] != os.environ['GST_UPSTREAM_BRANCH']:
try:
cerbero_name = f'{os.environ["CI_PROJECT_NAMESPACE"]}/cerbero'
cerbero_branch = os.environ["CI_COMMIT_REF_NAME"]
cerbero = get_matching_user_project(cerbero_name, cerbero_branch)
except gitlab.exceptions.GitlabGetError:
pass
if cerbero is None:
print("Using gstreamer org namespace")
cerbero_name = CERBERO_PROJECT
cerbero_branch = os.environ["GST_UPSTREAM_BRANCH"]
cerbero = gl.projects.get(cerbero_name)

View File

@ -34,5 +34,8 @@ werror = true
[gst-python:built-in options]
werror = true
[gstreamer-vaapi:built-in options]
werror = true
[gstreamer-sharp:built-in options]
werror = true

View File

@ -36,31 +36,5 @@ hotdoc run --conf-file "$builddir"/subprojects/gst-docs/GStreamer-doc.json
mv "$builddir/subprojects/gst-docs/GStreamer-doc/html" documentation/
# Check GES children properties documentation is up to date
echo "Checking GES children properties documentation..."
# Force building python extension modules to ensure the _gi_gst python module is built
ninja -C "$builddir" gst-python@@gst-python-extensions
./gst-env.py --builddir "$builddir" python3 subprojects/gst-editing-services/docs/libs/document-children-props.py
# Check if there are any changes in the markdown files
if ! git diff --ignore-submodules --exit-code subprojects/gst-editing-services/docs/libs/*-children-props.md; then
echo "ERROR: GES children properties documentation is out of date!"
# Create diff for download
diffsdir='diffs'
mkdir -p "$diffsdir"
diffname="$diffsdir/ges_children_properties_documentation.diff"
git diff --ignore-submodules subprojects/gst-editing-services/docs/libs/*-children-props.md > "$diffname"
echo ""
echo "You can download and apply the changes with:"
echo " \$ curl -L \${CI_ARTIFACTS_URL}/$diffname | git apply -"
echo ""
echo "(note that it might take a few minutes for artifacts to be available on the server)"
exit 1
fi
echo "GES children properties documentation is up to date"
pip3 install bs4
python3 subprojects/gst-docs/scripts/rust_doc_unifier.py documentation/

View File

@ -55,14 +55,14 @@ if [ -d linux ]; then
git fetch --depth=1 $REPO $BRANCH_OR_TAG
git checkout FETCH_HEAD
else
sudo mkdir ./linux
sudo chown containeruser:containeruser ./linux
git clone --depth=1 --branch=$BRANCH_OR_TAG $REPO linux
pushd linux
fi
# Apply visl patches until they are upstreamed
git apply ../ci/docker/fedora/patches/*.patch
for patch in ../ci/docker/fedora/patches/*.patch; do
patch -p1 < "${patch}"
done
make defconfig
sync
@ -90,9 +90,7 @@ make -j8 WERROR=0
popd
TARGET_DIR="$(dirname "$IMAGE")"
sudo mkdir -p "$TARGET_DIR"
sudo chown containeruser:containeruser --recursive "$TARGET_DIR"
mkdir -p "$TARGET_DIR"
mv linux/arch/$SUBARCH/boot/bzImage "$IMAGE"
mv linux/.config $TARGET_DIR/.config
sudo rm -rf linux
rm -rf linux

View File

@ -11,9 +11,15 @@ die() {
exit 1
}
check_image_base() {
local base=$(
skopeo inspect docker://$TOOLBOX_IMAGE 2>/dev/null |
jq -r '.Labels["org.opencontainers.image.base.name"]')
[[ "$base" == "$BASE_CI_IMAGE" ]]
}
build_container() {
local tmptag="localhost/rebuilt-tmp-tag"
echo Rebuilding image: $BASE_CI_IMAGE
echo Building $TOOLBOX_IMAGE from $BASE_CI_IMAGE
export BUILDAH_ISOLATION=chroot
export BUILDAH_FORMAT=docker
@ -89,59 +95,61 @@ build_container() {
# glib2
# )
buildah run $build_cntr sudo dnf install -y "${extra_packages[@]}"
buildah run $build_cntr sudo dnf install -y "${our_extra_packages[@]}"
buildah run $build_cntr dnf install -y "${extra_packages[@]}"
buildah run $build_cntr dnf install -y "${our_extra_packages[@]}"
# buildah run $build_cntr dnf debuginfo-install -y "${debug_packages[@]}"
buildah run $build_cntr sudo dnf clean all
buildah run $build_cntr sudo rm -rf /var/lib/cache/dnf
buildah run $build_cntr dnf clean all
buildah run $build_cntr rm -rf /var/lib/cache/dnf
buildah config \
--env RUSTUP_HOME="/usr/local/rustup" \
--env CARGO_HOME="/usr/local/cargo/" \
--env PATH="$PATH:/usr/local/cargo/bin/" \
$build_cntr
# random uid
uid="10043"
name="containeruser"
buildah run $build_cntr -- groupadd $name -g $uid
buildah run $build_cntr -- useradd -u $uid -g $uid -ms /bin/bash $name
buildah run $build_cntr -- usermod -aG wheel $name
buildah run $build_cntr -- bash -c "echo $name ALL=\(ALL\) NOPASSWD:ALL > /etc/sudoers.d/$name"
buildah run $build_cntr -- chmod 0440 /etc/sudoers.d/$name
# Remove the hardcoded HOME env var that ci-templates adds
# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2433#note_2243222
# Also add the OCI labels that toolbox expects, to advertize that the image is compatible
# Also add the OCI labels that toolbox expects, to advertize that image is compatible
# Additionally add a non-root default user
buildah config --env HOME- \
--user $name \
--label com.github.containers.toolbox=true \
--label org.opencontainers.image.base.name=$BASE_CI_IMAGE \
$build_cntr
buildah commit $build_cntr $tmptag
# Retag the image to have the same tag as the base image
buildah tag $tmptag $BASE_CI_IMAGE
# Unmount and remove the container
buildah umount "$build_cntr"
buildah rm "$build_cntr"
buildah commit $build_cntr $TOOLBOX_IMAGE
buildah tag $TOOLBOX_IMAGE $TOOLBOX_LATEST
}
BASE_CI_IMAGE="$1"
gstbranch="${GST_UPSTREAM_BRANCH:-main}"
TOOLBOX_BRANCH="$2"
GST_UPSTREAM_BRANCH="$3"
[[ -n "$BASE_CI_IMAGE" ]] ||
die "Usage: $(basename $0) BASE_CI_IMAGE "
TOOLBOX_IMAGE="$CI_REGISTRY_IMAGE/$FDO_REPO_SUFFIX:gst-toolbox-${TOOLBOX_BRANCH}"
# push an unversioned tag to make it easier to use.
# ex. pull foobar:toolbox-main
TOOLBOX_LATEST="$CI_REGISTRY_IMAGE/$FDO_REPO_SUFFIX:gst-toolbox-${GST_UPSTREAM_BRANCH}"
[[ -n "$BASE_CI_IMAGE" && -n "$TOOLBOX_BRANCH" && -n "$GST_UPSTREAM_BRANCH" ]] ||
die "Usage: $(basename $0) BASE_CI_IMAGE TOOLBOX TAG GST_UPSTREAM_BRANCH"
[[ -n "$CI_REGISTRY" && -n "$CI_REGISTRY_USER" && -n "$CI_REGISTRY_PASSWORD" ]] ||
die "Insufficient information to log in."
podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
build_container
if ! check_image_base; then
build_container
echo "Publishing $BASE_CI_IMAGE"
podman push "$BASE_CI_IMAGE"
# Publish an unversioned ref as well that we can always fetch
if [ "$CI_COMMIT_BRANCH" == "main" ] && [ "$CI_PROJECT_NAMESAPCE" == "gstreamer" ]; then
latest="$CI_REGISTRY_IMAGE/$FDO_REPO_SUFFIX:gst-toolbox-main"
podman tag "$BASE_CI_IMAGE" "$latest"
podman push "$latest"
podman push "$TOOLBOX_IMAGE"
podman push "$TOOLBOX_LATEST"
fi
echo "Create your toolbox with either of the following commands"
echo " $ toolbox create gst-$gstbranch --image $BASE_CI_IMAGE"
echo " $ toolbox create gst-toolbox --image $TOOLBOX_LATEST"
echo " $ toolbox create gst-toolbox-$TOOLBOX_BRANCH --image $TOOLBOX_IMAGE"

View File

@ -22,7 +22,7 @@ if __name__ == "__main__":
with open(diffname, 'w') as diff:
subprocess.check_call(['git', 'diff'], stdout=diff)
print(f'\033[91mYou have a diff in the {opts.name}. Please update with:\033[0m')
print(' $ curl -L %s/%s | git apply -' %
print(' $ curl %s/%s | git apply -' %
(os.environ.get('CI_ARTIFACTS_URL', "NOT_RUNNING_ON_CI"), diffname.replace('../', '')))
if res != 0:

View File

@ -1,12 +0,0 @@
#! /bin/bash
# Create a file we can check at runtime, and identify if the environment we
# run against is one of our CI build images.
# Useful mostly for our internal scripts so we can match against metadata
# rather than heuristics, ex. if /subprojects exists
#
# Conceptually similar to /.flatpak-info
# We can also later on add various metadata once we need to.
# Preferebly in an .ini format
touch /.gstreamer-ci-linux-image
chmod 644 /.gstreamer-ci-linux-image

View File

@ -1,12 +0,0 @@
#! /bin/bash
set -eux
uid="10043"
name="containeruser"
groupadd $name -g $uid
useradd -u $uid -g $uid -ms /bin/bash $name
usermod -aG wheel $name || usermod -aG sudo $name
bash -c "echo $name ALL=\(ALL\) NOPASSWD:ALL > /etc/sudoers.d/$name"
chmod 0440 /etc/sudoers.d/$name

View File

@ -1,10 +0,0 @@
# We are currently running pip as root which will cause it
# to install into /root/.local cause it wants to do a user install
# Set the user-base in the gloabl config, /etc/pip.conf, so pip will
# both install there and subsequently look there if we invoke it
# from any other user.
# This makes pip install ofc require elevated permissions, as it
# will be writting into /usr/local from now on
python3 -m pip config --global set global.user-base /usr/local/
# Disable the cache as we'd be removing it at the end of the image build anyway
python3 -m pip config --global set global.no-cache-dir true

View File

@ -2,17 +2,11 @@
set -eux
# Avoid the cache being owned by root
# and make sure its readable to anyone
sudo mkdir -p /var/cache/subprojects/
sudo chown containeruser:containeruser --recursive /var/cache/subprojects/
sudo chmod --recursive a+r /var/cache/subprojects/
# Path where cbuild checks out the repo
cd /tmp/clone/
sudo chmod --recursive a+r /tmp/clone
sudo chown containeruser:containeruser --recursive /tmp/clone
# get gstreamer and make all subprojects available
git submodule update --init --depth=1
meson subprojects download
./ci/scripts/handle-subprojects-cache.py --build --cache-dir /var/cache/subprojects/ /tmp/clone/subprojects/
git clone -b "${GIT_BRANCH}" "${GIT_URL}" /gstreamer
git -C /gstreamer submodule update --init --depth=1
meson subprojects download --sourcedir /gstreamer
./ci/scripts/handle-subprojects-cache.py --build --cache-dir /subprojects /gstreamer/subprojects/
# Now remove the gstreamer clone
rm -rf /gstreamer

View File

@ -12,7 +12,7 @@ import subprocess
PARSER = argparse.ArgumentParser()
PARSER.add_argument('subprojects_dir')
PARSER.add_argument('--build', action="store_true", default=False)
PARSER.add_argument('--cache-dir', default="/var/cache/subprojects/")
PARSER.add_argument('--cache-dir', default="/subprojects")
def create_cache_in_image(options):

View File

@ -3,30 +3,23 @@
set -eux
# Install Rust
RUSTUP_VERSION=1.28.1
RUST_VERSION=1.89.0
RUSTUP_VERSION=1.27.1
RUST_VERSION=1.85.0
RUST_ARCH="x86_64-unknown-linux-gnu"
RUSTUP_URL=https://static.rust-lang.org/rustup/archive/$RUSTUP_VERSION/$RUST_ARCH/rustup-init
curl -o /tmp/rustup-init $RUSTUP_URL
curl -o rustup-init $RUSTUP_URL
export RUSTUP_HOME="/usr/local/rustup"
export CARGO_HOME="/usr/local/cargo"
export PATH="/usr/local/cargo/bin:$PATH"
chmod +x /tmp/rustup-init;
sudo --preserve-env=RUSTUP_HOME,CARGO_HOME,PATH /tmp/rustup-init -y --no-modify-path --default-toolchain $RUST_VERSION;
rm /tmp/rustup-init;
chmod +x rustup-init;
./rustup-init -y --no-modify-path --default-toolchain $RUST_VERSION;
rm rustup-init;
chmod -R a+w $RUSTUP_HOME $CARGO_HOME
# We are root while creating the directory, but we want it to
# be accessible to all users
sudo mkdir -p $RUSTUP_HOME $CARGO_HOME
sudo chmod -R a+w $RUSTUP_HOME $CARGO_HOME
cargo install --locked cargo-c --version 0.10.15+cargo-0.90.0
# We don't need them in the build image and they occupy
# 600mb of html files (athough they compress extremely well)
rustup component remove rust-docs
cargo install --locked cargo-c --version 0.10.11+cargo-0.86.0
rustup --version
cargo --version

View File

@ -1,31 +1,12 @@
#! /bin/bash
image_cache="${SUBPROJECTS_CACHE_DIR:-}"
ci_image_info="/.gstreamer-ci-linux-image";
# Print useful metadata at the start of the build
if [[ -e "/etc/os-release" ]]; then
cat /etc/os-release
fi
if [[ -e "$ci_image_info" && -n "${CI:-}" ]]; then
if [[ -z "$image_cache" ]]; then
echo "Running in CI but haven't defined SUBPROJECTS_CACHE_DIR"
exit 1
fi
fi
whoami
id -u
id -g
date && date -u
echo $SHELL
echo $PATH
# On the CI image we install the rust toolcahin under this path
# set the HOME and PATH variables and print the versions
# If it exists set the HOME and PATH variables and print the versions
# of what we have installed
if [[ -e "$ci_image_info" ]]; then
cargo_binary="/usr/local/cargo/bin/cargo";
if [[ -e "$cargo_binary" ]]; then
export RUSTUP_HOME="/usr/local/rustup"
export CARGO_HOME="/usr/local/cargo"
export PATH="/usr/local/cargo/bin:$PATH"
@ -36,32 +17,9 @@ if [[ -e "$ci_image_info" ]]; then
cargo cinstall --version
fi
if [[ -e "$ci_image_info" ]]; then
who="$(whoami)"
# Assert we always use the epxected user in ci jobs
if [[ $who != "containeruser" && -n "${CI:-}" ]]; then
echo "Running as the wrong user in a CI job"
exit 1
fi
# Chown the project directory to match the user we run against.
# Sometimes, gitlab runners will reuse pre-existing checkouts from other jobs
# which might not have been running as our contianeruser, and thus the files won't
# have the expected owenership.
# Always chown until we have cycled out all the cached volumes from the runners.
if [[ -n "${CI:-}" ]]; then
sudo chown containeruser:containeruser --recursive .
# Make sure the directory exists
sudo mkdir -p "${CCACHE_DIR}"
sudo chown containeruser:containeruser --recursive "${CCACHE_DIR}"
fi
fi
# Only copy the cache over if the variable is set, which usually only happens on CI.
if [ -n "$image_cache" ]; then
date -R
ci/scripts/handle-subprojects-cache.py --cache-dir "$image_cache" subprojects/
date -R
fi

View File

@ -15629,7 +15629,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_MICRO" value="1" c:type="GES_VERSION_MICRO">
<constant name="VERSION_MICRO" value="0" c:type="GES_VERSION_MICRO">
<source-position filename="../subprojects/gst-editing-services/ges/ges-version.h"/>
<type name="gint" c:type="gint"/>
</constant>

File diff suppressed because it is too large Load Diff

View File

@ -330,43 +330,6 @@ The memory is only mmapped on gst_buffer_map() request.</doc>
</parameter>
</parameters>
</function>
<function name="alloc_full" c:identifier="gst_fd_allocator_alloc_full" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/allocators/gstfdmemory.c">Return a %GstMemory that wraps a generic file descriptor.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/allocators/gstfdmemory.h"/>
<return-value transfer-ownership="full" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/allocators/gstfdmemory.c">a GstMemory based on @allocator.
When the buffer will be released the allocator will close the @fd unless
the %GST_FD_MEMORY_FLAG_DONT_CLOSE flag is specified.
The memory is only mmapped on gst_buffer_map() request.</doc>
<type name="Gst.Memory" c:type="GstMemory*"/>
</return-value>
<parameters>
<parameter name="allocator" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/allocators/gstfdmemory.c">allocator to be used for this memory</doc>
<type name="Gst.Allocator" c:type="GstAllocator*"/>
</parameter>
<parameter name="fd" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/allocators/gstfdmemory.c">file descriptor</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="maxsize" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/allocators/gstfdmemory.c">the total size of the memory represented by @fd</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
<parameter name="offset" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/allocators/gstfdmemory.c">the offset of valid data in the memory</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
<parameter name="size" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/allocators/gstfdmemory.c">the size of valid data in the memory</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
<parameter name="flags" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/allocators/gstfdmemory.c">extra #GstFdMemoryFlags</doc>
<type name="FdMemoryFlags" c:type="GstFdMemoryFlags"/>
</parameter>
</parameters>
</function>
<field name="parent">
<type name="Gst.Allocator" c:type="GstAllocator"/>
</field>
@ -512,10 +475,6 @@ gst_shm_allocator_init_once() has not been previously called.</doc>
<type name="none" c:type="void"/>
</return-value>
</function>
<field name="parent_instance" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/allocators/gstshmallocator.h">Parent instance.</doc>
<type name="FdAllocator" c:type="GstFdAllocator"/>
</field>
</class>
<record name="ShmAllocatorClass" c:type="GstShmAllocatorClass" glib:is-gtype-struct-for="ShmAllocator">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/allocators/gstshmallocator.h"/>

View File

@ -12,172 +12,6 @@ and/or use gtk-doc annotations. -->
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
<type name="guintptr" c:type="guintptr"/>
</alias>
<record name="BatchBuffer" c:type="GstAnalyticsBatchBuffer" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">The intended use of this struct is that analytics elements read the buffer or
buffer list and potentially attach new #GstMeta with additional information.
Only one of @buffer or @buffer_list is going to be set, or both are %NULL.
Elements that need to modify @buffer (e.g. to attach a new meta) must first
call gst_buffer_make_writable() and store the writable buffer in this struct.
Similarly, a writable @buffer_list must be ensured with
gst_buffer_list_make_writable().
Modifying any other fields must be done with special care to ensure that the
data flow of the stream is not broken.
It is possible for @buffer and @buffer_list to be %NULL, e.g. if there was no
buffer for this batch but there were serialized events like a gap event.
Note that @serialized_events always contains all currently active serialized
events and not only the changed events compared to the previous buffer.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h"/>
<field name="sticky_events" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">All sticky #GstEvent that relate to this buffer</doc>
<array length="1" zero-terminated="0" c:type="GstEvent**">
<type name="Gst.Event" c:type="GstEvent*"/>
</array>
</field>
<field name="n_sticky_events" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">Number of sticky events.</doc>
<type name="gsize" c:type="gsize"/>
</field>
<field name="serialized_events" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">All non-sticky, serialized #GstEvent that arrived
after the previous and before this buffer</doc>
<array length="3" zero-terminated="0" c:type="GstEvent**">
<type name="Gst.Event" c:type="GstEvent*"/>
</array>
</field>
<field name="n_serialized_events" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">Number of serialized events.</doc>
<type name="gsize" c:type="gsize"/>
</field>
<field name="buffer" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">The buffer, if any.</doc>
<type name="Gst.Buffer" c:type="GstBuffer*"/>
</field>
<field name="buffer_list" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">The buffer list, if any.</doc>
<type name="Gst.BufferList" c:type="GstBufferList*"/>
</field>
<field name="padding" readable="0" private="1">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
<method name="get_caps" c:identifier="gst_analytics_batch_buffer_get_caps" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">Gets the #GstCaps from a buffer</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">The #GstCaps if there are any</doc>
<type name="Gst.Caps" c:type="GstCaps*"/>
</return-value>
<parameters>
<instance-parameter name="buffer" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">A #GstAnalyticsBatchBuffer</doc>
<type name="BatchBuffer" c:type="GstAnalyticsBatchBuffer*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_segment" c:identifier="gst_analytics_batch_buffer_get_segment" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">Gets the #GstSegment from a buffer</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">The #GstSegment if there is one</doc>
<type name="Gst.Segment" c:type="const GstSegment*"/>
</return-value>
<parameters>
<instance-parameter name="buffer" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">A #GstAnalyticsBatchBuffer</doc>
<type name="BatchBuffer" c:type="GstAnalyticsBatchBuffer*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_stream_id" c:identifier="gst_analytics_batch_buffer_get_stream_id" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">Gets the current stream id from a buffer</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">The stream id if there is any</doc>
<type name="utf8" c:type="const gchar*"/>
</return-value>
<parameters>
<instance-parameter name="buffer" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">A #GstAnalyticsBatchBuffer</doc>
<type name="BatchBuffer" c:type="GstAnalyticsBatchBuffer*"/>
</instance-parameter>
</parameters>
</method>
</record>
<record name="BatchMeta" c:type="GstAnalyticsBatchMeta" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">This meta represents a batch of buffers from one or more streams together
with the relevant events to be able to interpret the buffers and to be able
to reconstruct the original streams.
When used for multiple streams and batching them temporarily, caps of type
`multistream/x-analytics-batch(meta:GstAnalyticsBatchMeta)` should be used,
with the original caps of each stream in an array-typed `streams` field. The
original caps of each stream might be extended by additional fields and the
order of the streams in the array corresponds to the order of the @streams
array of the meta. In this case, empty buffers would be used without any
#GstMemory and
When used for a single stream, the original caps might be used together with
the `meta:GstAnalyticsBatchMeta` caps feature and potentially extended by
additional fields to describe the kind of batching and its configuration,
e.g. that each batch is made of 25% overlapping 320x320 slices of the
original video frame.
The timestamp, duration and other metadata of each batch can be retrieved
from the parent buffer of this meta.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h"/>
<field name="meta" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">parent</doc>
<type name="Gst.Meta" c:type="GstMeta"/>
</field>
<field name="streams" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">#GstAnalyticsBatchStream for this batch</doc>
<array length="2" zero-terminated="0" c:type="GstAnalyticsBatchStream*">
<type name="BatchStream" c:type="GstAnalyticsBatchStream"/>
</array>
</field>
<field name="n_streams" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">Number of streams</doc>
<type name="gsize" c:type="gsize"/>
</field>
<function name="get_info" c:identifier="gst_analytics_batch_meta_get_info" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h"/>
<return-value transfer-ownership="none">
<type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>
</return-value>
</function>
</record>
<record name="BatchStream" c:type="GstAnalyticsBatchStream" version="1.28">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h"/>
<field name="index" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">Index of the stream in the meta's stream array</doc>
<type name="guint" c:type="guint"/>
</field>
<field name="buffers" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">#GstAnalyticsBatchBuffer in this batch for this stream</doc>
<array length="2" zero-terminated="0" c:type="GstAnalyticsBatchBuffer*">
<type name="BatchBuffer" c:type="GstAnalyticsBatchBuffer"/>
</array>
</field>
<field name="n_buffers" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">Number of buffers</doc>
<type name="gsize" c:type="gsize"/>
</field>
<field name="padding" readable="0" private="1">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</record>
<constant name="CAPS_FEATURE_META_GST_ANALYTICS_BATCH_META" value="meta:GstAnalyticsBatchMeta" c:type="GST_CAPS_FEATURE_META_GST_ANALYTICS_BATCH_META" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h">The caps feature to be used on streams that make use of this meta.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.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>
@ -1468,10 +1302,7 @@ pixel to instance of an object is identified.</doc>
</constructor>
<constructor name="new_simple" c:identifier="gst_tensor_new_simple" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">Allocates a new #GstTensor of @dims_order ROW_MAJOR or COLUMN_MAJOR and
with an interleaved layout.
For example, a two-dimensional tensor with 32 rows and 4 columns, @dims would
be the two element array `[32, 4]`.</doc>
with an interleaved layout</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h"/>
<return-value transfer-ownership="full">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">A newly allocated #GstTensor</doc>
@ -1499,49 +1330,14 @@ be the two element array `[32, 4]`.</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
<parameter name="dims" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">size of tensor in each dimension.
A value of 0 means the dimension is dynamic.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">tensor dimensions. Value of 0 mean the
dimension is dynamic.</doc>
<array length="4" zero-terminated="0" c:type="gsize*">
<type name="gsize" c:type="gsize"/>
</array>
</parameter>
</parameters>
</constructor>
<method name="check_type" c:identifier="gst_tensor_check_type" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">Validate the tensor whether it mathces the reading order, dimensions and the data type.
Validate whether the #GstBuffer has enough size to hold the tensor data.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">TRUE if the #GstTensor has the reading order from the memory matching @order,
dimensions matching @num_dims, data type matching @data_type
Otherwise FALSE will be returned.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="tensor" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">A #GstTensor</doc>
<type name="Tensor" c:type="const GstTensor*"/>
</instance-parameter>
<parameter name="data_type" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">The data type of the tensor</doc>
<type name="TensorDataType" c:type="GstTensorDataType"/>
</parameter>
<parameter name="order" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">The order of the tensor to read from the memory</doc>
<type name="TensorDimOrder" c:type="GstTensorDimOrder"/>
</parameter>
<parameter name="num_dims" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">The number of dimensions that the tensor can have</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
<parameter name="dims" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">An optional array of dimensions, where G_MAXSIZE means ANY.</doc>
<array length="2" zero-terminated="0" c:type="const gsize*">
<type name="gsize" c:type="gsize"/>
</array>
</parameter>
</parameters>
</method>
<method name="copy" c:identifier="gst_tensor_copy" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">Create a copy of @tensor.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h"/>
@ -1589,20 +1385,6 @@ Otherwise FALSE will be returned.</doc>
</parameter>
</parameters>
</method>
<function name="data_type_get_name" c:identifier="gst_tensor_data_type_get_name" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">Get a string version of the data type</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">a constant string with the name of the data type</doc>
<type name="utf8" c:type="const gchar*"/>
</return-value>
<parameters>
<parameter name="data_type" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">a #GstTensorDataType</doc>
<type name="TensorDataType" c:type="GstTensorDataType"/>
</parameter>
</parameters>
</function>
</record>
<enumeration name="TensorDataType" version="1.26" c:type="GstTensorDataType">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h">Describe the type of data contain in the tensor.</doc>
@ -1649,34 +1431,6 @@ Otherwise FALSE will be returned.</doc>
<member name="bfloat16" value="13" c:identifier="GST_TENSOR_DATA_TYPE_BFLOAT16">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h">"brain" 16 bit floating point tensor data</doc>
</member>
<member name="string" value="14" c:identifier="GST_TENSOR_DATA_TYPE_STRING" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h">UTF-8 string</doc>
</member>
<member name="bool" value="15" c:identifier="GST_TENSOR_DATA_TYPE_BOOL" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h">A boolean value stored in 1 byte.</doc>
</member>
<member name="complex64" value="16" c:identifier="GST_TENSOR_DATA_TYPE_COMPLEX64" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h">A 64-bit complex number stored in 2 32-bit values.</doc>
</member>
<member name="complex128" value="17" c:identifier="GST_TENSOR_DATA_TYPE_COMPLEX128" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h">A 128-bit complex number stored in 2 64-bit values.</doc>
</member>
<member name="float8e4m3fn" value="18" c:identifier="GST_TENSOR_DATA_TYPE_FLOAT8E4M3FN" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h">A non-IEEE 8-bit floating point format with 4 exponent bits and 3 mantissa bits, with NaN and no infinite values (FN).
See [this paper for more details](https://onnx.ai/onnx/technical/float8.html)</doc>
</member>
<member name="float8e4m3fnuz" value="19" c:identifier="GST_TENSOR_DATA_TYPE_FLOAT8E4M3FNUZ" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h">A non-IEEE 8-bit floating point format with 4 exponent bits and 3 mantissa bits, with NaN, no infinite values (FN) and no negative zero (UZ).
See [this paper for more details](https://onnx.ai/onnx/technical/float8.html)</doc>
</member>
<member name="float8e5m2" value="20" c:identifier="GST_TENSOR_DATA_TYPE_FLOAT8E5M2" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h">A non-IEEE 8-bit floating point format with 5 exponent bits and 2 mantissa bits.
See [this paper for more details](https://onnx.ai/onnx/technical/float8.html)</doc>
</member>
<member name="float8e5m2fnuz" value="21" c:identifier="GST_TENSOR_DATA_TYPE_FLOAT8E5M2FNUZ" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h">A non-IEEE 8-bit floating point format with 5 exponent bits and 2 mantissa bits, with NaN, no infinite values (FN) and no negative zero (UZ).
See [this paper for more details](https://onnx.ai/onnx/technical/float8.html)</doc>
</member>
</enumeration>
<enumeration name="TensorDimOrder" version="1.26" c:type="GstTensorDimOrder">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h">Indicate to read tensor from memory in row-major or column-major order.</doc>
@ -1727,25 +1481,6 @@ smaller than #GstTensorMeta.num_tensors</doc>
</parameter>
</parameters>
</method>
<method name="get_by_id" c:identifier="gst_tensor_meta_get_by_id" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">Get the first tensor from the #GstTensorMeta identified by @id.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">a GstTensor with id matching @id.
Otherwise NULL will be returned.</doc>
<type name="Tensor" c:type="const GstTensor*"/>
</return-value>
<parameters>
<instance-parameter name="tmeta" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">A #GstTensorMeta</doc>
<type name="TensorMeta" c:type="GstTensorMeta*"/>
</instance-parameter>
<parameter name="id" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">A #GQuark identifying tensor-encoding</doc>
<type name="GLib.Quark" c:type="GQuark"/>
</parameter>
</parameters>
</method>
<method name="get_index_from_id" c:identifier="gst_tensor_meta_get_index_from_id" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">Finds the first tensor with the requsted ID in the meta</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.h"/>
@ -1765,46 +1500,6 @@ Otherwise NULL will be returned.</doc>
</parameter>
</parameters>
</method>
<method name="get_typed_tensor" c:identifier="gst_tensor_meta_get_typed_tensor" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">Get the first tensor from the #GstTensorMeta identified by
@tensor_id, matching the reading order, dimensions and the data
type and optionally the dimensions. Validate whether the
#GstBuffer has enough size to hold the tensor data.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">a matching #GstTensor,
otherwise NULL</doc>
<type name="Tensor" c:type="const GstTensor*"/>
</return-value>
<parameters>
<instance-parameter name="tmeta" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">A #GstTensorMeta</doc>
<type name="TensorMeta" c:type="GstTensorMeta*"/>
</instance-parameter>
<parameter name="tensor_id" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">A #GQuark identifying the tensor-encoding</doc>
<type name="GLib.Quark" c:type="GQuark"/>
</parameter>
<parameter name="data_type" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">The data type of the tensor</doc>
<type name="TensorDataType" c:type="GstTensorDataType"/>
</parameter>
<parameter name="order" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">The order of the tensor to read from the memory</doc>
<type name="TensorDimOrder" c:type="GstTensorDimOrder"/>
</parameter>
<parameter name="num_dims" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">The number of dimensions that the tensor can have</doc>
<type name="gsize" c:type="gsize"/>
</parameter>
<parameter name="dims" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">An optional array of dimensions, where G_MAXSIZE means ANY.</doc>
<array length="3" zero-terminated="0" c:type="const gsize*">
<type name="gsize" c:type="gsize"/>
</array>
</parameter>
</parameters>
</method>
<method name="set" c:identifier="gst_tensor_meta_set" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">Sets tensors into the #GstTensorMeta</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.h"/>
@ -1917,32 +1612,6 @@ Get the opaque id identifying the relatable type</doc>
</return-value>
</function>
</record>
<function name="batch_meta_api_get_type" c:identifier="gst_analytics_batch_meta_api_get_type" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h"/>
<return-value transfer-ownership="none">
<type name="GType" c:type="GType"/>
</return-value>
</function>
<function name="batch_meta_get_info" c:identifier="gst_analytics_batch_meta_get_info" moved-to="BatchMeta.get_info" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h"/>
<return-value transfer-ownership="none">
<type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>
</return-value>
</function>
<function name="buffer_add_analytics_batch_meta" c:identifier="gst_buffer_add_analytics_batch_meta" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">Adds a #GstAnalyticsBatchMeta to a buffer or returns the existing one</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">The new #GstAnalyticsBatchMeta</doc>
<type name="BatchMeta" c:type="GstAnalyticsBatchMeta*"/>
</return-value>
<parameters>
<parameter name="buffer" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">A writable #GstBuffer</doc>
<type name="Gst.Buffer" c:type="GstBuffer*"/>
</parameter>
</parameters>
</function>
<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.
@ -1983,7 +1652,7 @@ analysis meta.</doc>
</parameters>
</function>
<function name="buffer_add_tensor_meta" c:identifier="gst_buffer_add_tensor_meta" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">Adds a #GstTensorMeta to a buffer</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">Adds a #GstTensorMeta to a buffer or returns the existing one</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.c">The new #GstTensorMeta</doc>
@ -1996,20 +1665,6 @@ analysis meta.</doc>
</parameter>
</parameters>
</function>
<function name="buffer_get_analytics_batch_meta" c:identifier="gst_buffer_get_analytics_batch_meta" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">Gets the #GstAnalyticsBatchMeta from a buffer</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.h"/>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">The #GstAnalyticsBatchMeta if there is one</doc>
<type name="BatchMeta" c:type="GstAnalyticsBatchMeta*"/>
</return-value>
<parameters>
<parameter name="buffer" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsbatchmeta.c">A #GstBuffer</doc>
<type name="Gst.Buffer" c:type="GstBuffer*"/>
</parameter>
</parameters>
</function>
<function name="buffer_get_analytics_relation_meta" c:identifier="gst_buffer_get_analytics_relation_meta" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c">Retrives the meta or %NULL if it doesn't exist</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h"/>
@ -2069,94 +1724,6 @@ 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="image_util_iou_float" c:identifier="gst_analytics_image_util_iou_float" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Calculate the intersection over the union (IoU) of the two areas defined by
the bounding box 1 and bounding box 2. IoU is a measure of how much two
regions overlap.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">IoU of bb1 and bb2.</doc>
<type name="gfloat" c:type="gfloat"/>
</return-value>
<parameters>
<parameter name="bb1_x" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 1, X coordinate</doc>
<type name="gfloat" c:type="gfloat"/>
</parameter>
<parameter name="bb1_y" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 1, Y coordinate</doc>
<type name="gfloat" c:type="gfloat"/>
</parameter>
<parameter name="bb1_w" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 1, width</doc>
<type name="gfloat" c:type="gfloat"/>
</parameter>
<parameter name="bb1_h" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 1, height</doc>
<type name="gfloat" c:type="gfloat"/>
</parameter>
<parameter name="bb2_x" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 2, X coordinate</doc>
<type name="gfloat" c:type="gfloat"/>
</parameter>
<parameter name="bb2_y" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 2, Y coordinate</doc>
<type name="gfloat" c:type="gfloat"/>
</parameter>
<parameter name="bb2_w" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 2, width</doc>
<type name="gfloat" c:type="gfloat"/>
</parameter>
<parameter name="bb2_h" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 2, height</doc>
<type name="gfloat" c:type="gfloat"/>
</parameter>
</parameters>
</function>
<function name="image_util_iou_int" c:identifier="gst_analytics_image_util_iou_int" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Calculate the intersection over the union (IoU) of the two areas defined by
the bounding box 1 and bounding box 2. IoU is a measure of how much two
regions overlap.</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">IoU of bb1 and bb2.</doc>
<type name="gfloat" c:type="gfloat"/>
</return-value>
<parameters>
<parameter name="bb1_x" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 1, X coordinate</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="bb1_y" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 1, Y coordinate</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="bb1_w" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 1, width</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="bb1_h" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 1, height</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="bb2_x" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 2, X coordinate</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="bb2_y" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 2, Y coordinate</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="bb2_w" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 2, width</doc>
<type name="gint" c:type="gint"/>
</parameter>
<parameter name="bb2_h" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalytics_image_util.c">Bounding box 2, height</doc>
<type name="gint" c:type="gint"/>
</parameter>
</parameters>
</function>
<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"/>
@ -2217,20 +1784,6 @@ metadata type.</doc>
<type name="MtdType" c:type="GstAnalyticsMtdType"/>
</return-value>
</function>
<function name="tensor_data_type_get_name" c:identifier="gst_tensor_data_type_get_name" moved-to="Tensor.data_type_get_name" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">Get a string version of the data type</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">a constant string with the name of the data type</doc>
<type name="utf8" c:type="const gchar*"/>
</return-value>
<parameters>
<parameter name="data_type" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensor.c">a #GstTensorDataType</doc>
<type name="TensorDataType" c:type="GstTensorDataType"/>
</parameter>
</parameters>
</function>
<function name="tensor_meta_api_get_type" c:identifier="gst_tensor_meta_api_get_type" version="1.26" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/analytics/gsttensormeta.h"/>
<return-value transfer-ownership="none">

View File

@ -7,20 +7,6 @@ and/or use gtk-doc annotations. -->
<package name="gstreamer-app-1.0"/>
<c:include name="gst/app/app.h"/>
<namespace name="GstApp" version="1.0" shared-library="libgstapp-1.0.so.0" c:identifier-prefixes="Gst" c:symbol-prefixes="gst">
<function-macro name="APP_DEPRECATED_FOR" c:identifier="GST_APP_DEPRECATED_FOR" introspectable="0">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/app/app-prelude.h"/>
<parameters>
<parameter name="f">
</parameter>
</parameters>
</function-macro>
<function-macro name="APP_DEPRECATED_TYPE_FOR" c:identifier="GST_APP_DEPRECATED_TYPE_FOR" introspectable="0">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/app/app-prelude.h"/>
<parameters>
<parameter name="f">
</parameter>
</parameters>
</function-macro>
<function-macro name="APP_SINK" c:identifier="GST_APP_SINK" introspectable="0">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.h"/>
<parameters>
@ -94,7 +80,7 @@ which accept a timeout parameter to limit the amount of time to wait.
Appsink will internally use a queue to collect buffers from the streaming
thread. If the application is not pulling samples fast enough, this queue
will consume a lot of memory over time. The "max-buffers", "max-time" and "max-bytes"
properties can be used to limit the queue size. The "leaky-type" property controls whether the
properties can be used to limit the queue size. The "drop" property controls whether the
streaming thread blocks or if older buffers are dropped when the maximum
queue size is reached. Note that blocking the streaming thread can negatively
affect real-time performance and should be avoided.
@ -205,7 +191,7 @@ If an EOS event was received before any buffers, this function returns
</instance-parameter>
</parameters>
</virtual-method>
<virtual-method name="try_pull_object" invoker="try_pull_object" version="1.20">
<virtual-method name="try_pull_object" invoker="try_pull_object" version="1.20" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">This function blocks until a sample or an event or EOS becomes available or the appsink
element is set to the READY/NULL state or the timeout expires.
@ -337,52 +323,9 @@ condition.</doc>
</instance-parameter>
</parameters>
</method>
<method name="get_current_level_buffers" c:identifier="gst_app_sink_get_current_level_buffers" glib:get-property="current-level-buffers" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Get the number of currently queued buffers inside @appsink.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">The number of currently queued buffers.</doc>
<type name="guint64" c:type="guint64"/>
</return-value>
<parameters>
<instance-parameter name="appsink" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">a #GstAppSink</doc>
<type name="AppSink" c:type="GstAppSink*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_current_level_bytes" c:identifier="gst_app_sink_get_current_level_bytes" glib:get-property="current-level-bytes" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Get the number of currently queued bytes inside @appsink.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">The number of currently queued bytes.</doc>
<type name="guint64" c:type="guint64"/>
</return-value>
<parameters>
<instance-parameter name="appsink" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">a #GstAppSink</doc>
<type name="AppSink" c:type="GstAppSink*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_current_level_time" c:identifier="gst_app_sink_get_current_level_time" glib:get-property="current-level-time" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Get the amount of currently queued time inside @appsink.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">The amount of currently queued time.</doc>
<type name="Gst.ClockTime" c:type="GstClockTime"/>
</return-value>
<parameters>
<instance-parameter name="appsink" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">a #GstAppSink</doc>
<type name="AppSink" c:type="GstAppSink*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_drop" c:identifier="gst_app_sink_get_drop" glib:get-property="drop" deprecated="1" deprecated-version="1.28">
<method name="get_drop" c:identifier="gst_app_sink_get_drop" glib:get-property="drop">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Check if @appsink will drop old buffers when the maximum amount of queued
data is reached (meaning max buffers, time or bytes limit, whichever is hit first).</doc>
<doc-deprecated xml:space="preserve">Use gst_app_src_get_leaky_type() instead.</doc-deprecated>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">%TRUE if @appsink is dropping old buffers when the queue is
@ -411,21 +354,6 @@ signals.</doc>
</instance-parameter>
</parameters>
</method>
<method name="get_leaky_type" c:identifier="gst_app_sink_get_leaky_type" glib:get-property="leaky-type" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Returns the currently set #GstAppLeakyType. See gst_app_sink_set_leaky_type()
for more details.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">The currently set #GstAppLeakyType.</doc>
<type name="AppLeakyType" c:type="GstAppLeakyType"/>
</return-value>
<parameters>
<instance-parameter name="appsink" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">a #GstAppSink</doc>
<type name="AppSink" c:type="GstAppSink*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_max_buffers" c:identifier="gst_app_sink_get_max_buffers" glib:get-property="max-buffers">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Get the maximum amount of buffers that can be queued in @appsink.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.h"/>
@ -502,7 +430,7 @@ PLAYING state.</doc>
</instance-parameter>
</parameters>
</method>
<method name="pull_object" c:identifier="gst_app_sink_pull_object" version="1.20">
<method name="pull_object" c:identifier="gst_app_sink_pull_object" version="1.20" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">This function blocks until a sample or an event becomes available or the appsink
element is set to the READY/NULL state.
@ -665,10 +593,9 @@ you must check the caps on the samples to get the actual used caps.</doc>
</parameter>
</parameters>
</method>
<method name="set_drop" c:identifier="gst_app_sink_set_drop" glib:set-property="drop" deprecated="1" deprecated-version="1.28">
<method name="set_drop" c:identifier="gst_app_sink_set_drop" glib:set-property="drop">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Instruct @appsink to drop old buffers when the maximum amount of queued
data is reached, that is, when any configured limit is hit (max-buffers, max-time or max-bytes).</doc>
<doc-deprecated xml:space="preserve">Use gst_app_src_get_leaky_type() instead.</doc-deprecated>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -703,26 +630,6 @@ the application prefers to operate in pull mode.</doc>
</parameter>
</parameters>
</method>
<method name="set_leaky_type" c:identifier="gst_app_sink_set_leaky_type" glib:set-property="leaky-type" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">When set to any other value than GST_APP_LEAKY_TYPE_NONE then the appsink
will drop any buffers that are pushed into it once its internal queue is
full. The selected type defines whether to drop the oldest or new
buffers.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="appsink" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">a #GstAppSink</doc>
<type name="AppSink" c:type="GstAppSink*"/>
</instance-parameter>
<parameter name="leaky" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">the #GstAppLeakyType</doc>
<type name="AppLeakyType" c:type="GstAppLeakyType"/>
</parameter>
</parameters>
</method>
<method name="set_max_buffers" c:identifier="gst_app_sink_set_max_buffers" glib:set-property="max-buffers">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Set the maximum amount of buffers that can be queued in @appsink. After this
amount of buffers are queued in appsink, any more buffers will block upstream
@ -800,7 +707,7 @@ case new buffers will be discarded.</doc>
</parameter>
</parameters>
</method>
<method name="try_pull_object" c:identifier="gst_app_sink_try_pull_object" version="1.20">
<method name="try_pull_object" c:identifier="gst_app_sink_try_pull_object" version="1.20" introspectable="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">This function blocks until a sample or an event or EOS becomes available or the appsink
element is set to the READY/NULL state or the timeout expires.
@ -910,44 +817,15 @@ condition.</doc>
<property name="caps" writable="1" transfer-ownership="none" setter="set_caps" getter="get_caps">
<type name="Gst.Caps"/>
</property>
<property name="current-level-buffers" version="1.28" transfer-ownership="none" getter="get_current_level_buffers" default-value="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">The number of currently queued buffers inside appsink.</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="current-level-bytes" version="1.28" transfer-ownership="none" getter="get_current_level_bytes" default-value="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">The number of currently queued bytes inside appsink.</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="current-level-time" version="1.28" transfer-ownership="none" getter="get_current_level_time" default-value="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">The amount of currently queued time inside appsink.</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="drop" deprecated="1" deprecated-version="1.28" writable="1" transfer-ownership="none" setter="set_drop" getter="get_drop" default-value="FALSE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Drop old buffers when the buffer queue is filled.</doc>
<doc-deprecated xml:space="preserve">Use "leaky-type" property instead.</doc-deprecated>
<property name="drop" writable="1" transfer-ownership="none" setter="set_drop" getter="get_drop" default-value="FALSE">
<type name="gboolean" c:type="gboolean"/>
</property>
<property name="dropped" version="1.28" transfer-ownership="none" default-value="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Number of buffers that were dropped.</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="emit-signals" writable="1" transfer-ownership="none" setter="set_emit_signals" getter="get_emit_signals" default-value="FALSE">
<type name="gboolean" c:type="gboolean"/>
</property>
<property name="eos" transfer-ownership="none" default-value="TRUE">
<type name="gboolean" c:type="gboolean"/>
</property>
<property name="in" version="1.28" transfer-ownership="none" default-value="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Number of input buffers that were queued.</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="leaky-type" version="1.28" writable="1" transfer-ownership="none" setter="set_leaky_type" getter="get_leaky_type" default-value="GST_APP_LEAKY_TYPE_NONE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">When set to any other value than GST_APP_LEAKY_TYPE_NONE then the appsink
will drop any buffers that are pushed into it once its internal queue is
full. The selected type defines whether to drop the oldest or new
buffers.</doc>
<type name="AppLeakyType"/>
</property>
<property name="max-buffers" writable="1" transfer-ownership="none" setter="set_max_buffers" getter="get_max_buffers" default-value="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Maximum amount of buffers in the queue (0 = unlimited).</doc>
<type name="guint" c:type="guint"/>
@ -960,14 +838,6 @@ buffers.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Maximum total duration of data in the queue (0 = unlimited)</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="out" version="1.28" transfer-ownership="none" default-value="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Number of output buffers that were dequeued.</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="silent" version="1.28" writable="1" transfer-ownership="none" default-value="TRUE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Don't emit notify for input, output and dropped buffers.</doc>
<type name="gboolean" c:type="gboolean"/>
</property>
<property name="wait-on-eos" version="1.8" writable="1" transfer-ownership="none" setter="set_wait_on_eos" getter="get_wait_on_eos" default-value="TRUE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsink.c">Wait for all buffers to be processed after receiving an EOS.
@ -1097,7 +967,7 @@ can pull samples at its own rate.
Note that when the application does not pull samples fast enough, the
queued samples could consume a lot of memory, especially when dealing with
raw video frames. It's possible to control the behaviour of the queue with
the "leaky-type" and "max-buffers" / "max-bytes" / "max-time" set of properties.
the "drop" and "max-buffers" / "max-bytes" / "max-time" set of properties.
If an EOS event was received before any buffers, this function returns
%NULL. Use gst_app_sink_is_eos () to check for the EOS condition.</doc>
@ -1118,7 +988,7 @@ Events can be pulled when the appsink is in the READY, PAUSED or PLAYING state.
Note that when the application does not pull samples fast enough, the
queued samples could consume a lot of memory, especially when dealing with
raw video frames. It's possible to control the behaviour of the queue with
the "leaky-type" and "max-buffers" / "max-bytes" / "max-time" set of properties.
the "drop" and "max-buffers" / "max-bytes" / "max-time" set of properties.
This function will only pull serialized events, excluding
the EOS event for which this functions returns
@ -1183,7 +1053,7 @@ can pull samples at its own rate.
Note that when the application does not pull samples fast enough, the
queued samples could consume a lot of memory, especially when dealing with
raw video frames. It's possible to control the behaviour of the queue with
the "leaky-type" and "max-buffers" / "max-bytes" / "max-time" set of properties.
the "drop" and "max-buffers" / "max-bytes" / "max-time" set of properties.
If an EOS event was received before any buffers or the timeout expires,
this function returns %NULL. Use gst_app_sink_is_eos () to check
@ -2206,10 +2076,6 @@ on outgoing buffers.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsrc.c">The amount of currently queued time inside appsrc.</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="dropped" version="1.28" transfer-ownership="none" default-value="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsrc.c">Number of buffers that were dropped.</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="duration" version="1.10" writable="1" transfer-ownership="none" setter="set_duration" getter="get_duration" default-value="18446744073709551615">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsrc.c">The total duration in nanoseconds of the data stream. If the total duration is known, it
is recommended to configure it with this property.</doc>
@ -2237,10 +2103,6 @@ GstAppSrc::format should be time. However, possibly #GstAppSrc can support
other formats.</doc>
<type name="gboolean" c:type="gboolean"/>
</property>
<property name="in" version="1.28" transfer-ownership="none" default-value="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsrc.c">Number of input buffers that were queued.</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="is-live" writable="1" transfer-ownership="none" default-value="FALSE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsrc.c">Instruct the source to behave like a live source. This includes that it
will only push out buffers in the PLAYING state.</doc>
@ -2284,14 +2146,6 @@ latency calculations of #GstBaseSrc.</doc>
queue drops below this percentage of max-bytes.</doc>
<type name="guint" c:type="guint"/>
</property>
<property name="out" version="1.28" transfer-ownership="none" default-value="0">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsrc.c">Number of output buffers that were dequeued.</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="silent" version="1.28" writable="1" transfer-ownership="none" default-value="TRUE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsrc.c">Don't emit notify for input, output and dropped buffers.</doc>
<type name="gboolean" c:type="gboolean"/>
</property>
<property name="size" writable="1" transfer-ownership="none" setter="set_size" getter="get_size" default-value="-1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/app/gstappsrc.c">The total size in bytes of the data stream. If the total size is known, it
is recommended to configure it with this property.</doc>

View File

@ -2503,18 +2503,6 @@ usage.</doc>
</instance-parameter>
</parameters>
</method>
<property name="current-level-buffers" version="1.28" transfer-ownership="none" default-value="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstaggregator.c">The number of currently queued buffers inside this pad</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="current-level-bytes" version="1.28" transfer-ownership="none" default-value="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstaggregator.c">The number of currently queued bytes inside this pad</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="current-level-time" version="1.28" transfer-ownership="none" default-value="0">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstaggregator.c">The amount of currently queued time inside this pad</doc>
<type name="guint64" c:type="guint64"/>
</property>
<property name="emit-signals" version="1.16" writable="1" transfer-ownership="none" default-value="FALSE">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstaggregator.c">Enables the emission of signals such as #GstAggregatorPad::buffer-consumed</doc>
<type name="gboolean" c:type="gboolean"/>
@ -2616,9 +2604,6 @@ the first buffer that is received.</doc>
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstaggregator.h">Start at the running time
selected by the `start-time` property.</doc>
</member>
<member name="now" value="3" c:identifier="GST_AGGREGATOR_START_TIME_SELECTION_NOW" version="1.28" glib:nick="now" glib:name="GST_AGGREGATOR_START_TIME_SELECTION_NOW">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstaggregator.h">Start at the current running time when reaching %GST_STATE_PLAYING.</doc>
</member>
</enumeration>
<function-macro name="BASE_DEPRECATED_FOR" c:identifier="GST_BASE_DEPRECATED_FOR" introspectable="0">
<source-position filename="../subprojects/gstreamer/libs/gst/base/base-prelude.h"/>
@ -3763,10 +3748,6 @@ into the frame data that the picture starts.</doc>
</parameter>
</parameters>
</method>
<property name="disable-clip" version="1.28" writable="1" transfer-ownership="none" default-value="TRUE">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstbaseparse.c">Disable dropping buffers that are out of segment</doc>
<type name="gboolean" c:type="gboolean"/>
</property>
<property name="disable-passthrough" writable="1" transfer-ownership="none" default-value="FALSE">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/base/gstbaseparse.c">If set to %TRUE, baseparse will unconditionally force parsing of the
incoming data. This can be required in the rare cases where the incoming

View File

@ -1243,19 +1243,6 @@ current in the calling thread.</doc>
</instance-parameter>
</parameters>
</virtual-method>
<method name="get_gl_context" c:identifier="gst_gl_base_src_get_gl_context" version="1.28">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasesrc.h"/>
<return-value transfer-ownership="full" nullable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasesrc.c">the configured #GstGLContext.</doc>
<type name="GLContext" c:type="GstGLContext*"/>
</return-value>
<parameters>
<instance-parameter name="base_src" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasesrc.c">a #GstGLBaseSrc</doc>
<type name="GLBaseSrc" c:type="GstGLBaseSrc*"/>
</instance-parameter>
</parameters>
</method>
<property name="timestamp-offset" writable="1" transfer-ownership="none" default-value="0">
<type name="gint64" c:type="gint64"/>
</property>
@ -3523,10 +3510,6 @@ extension.</doc>
<member name="include_emulated" value="4" c:identifier="GST_GL_DRM_FORMAT_INCLUDE_EMULATED" version="1.26" glib:nick="include-emulated" glib:name="GST_GL_DRM_FORMAT_INCLUDE_EMULATED">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglutils.h">include emulated formats</doc>
</member>
<member name="direct_import" value="8" c:identifier="GST_GL_DRM_FORMAT_DIRECT_IMPORT" version="1.28" glib:nick="direct-import" glib:name="GST_GL_DRM_FORMAT_DIRECT_IMPORT">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglutils.h">EGL is responsible for the colorspace conversion. In this case, all
supported modifiers get translated to RGBA.</doc>
</member>
</bitfield>
<class name="GLFilter" c:symbol-prefix="gl_filter" c:type="GstGLFilter" parent="GLBaseFilter" glib:type-name="GstGLFilter" glib:get-type="gst_gl_filter_get_type" glib:type-struct="GLFilterClass">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglfilter.c">#GstGLFilter helps to implement simple OpenGL filter elements taking a
@ -8625,19 +8608,6 @@ require this to be called with a valid handle before drawing can commence.</doc>
</instance-parameter>
</parameters>
</method>
<method name="get_request_output_surface" c:identifier="gst_gl_window_get_request_output_surface" version="1.28">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglwindow.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglwindow.c">whether an visible output surface has been requested</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="window" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglwindow.c">a #GstGLWindow</doc>
<type name="GLWindow" c:type="GstGLWindow*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_surface_dimensions" c:identifier="gst_gl_window_get_surface_dimensions" version="1.6">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglwindow.h"/>
<return-value transfer-ownership="none">
@ -8987,23 +8957,6 @@ according to the #GstVideoOverlay interface.</doc>
</parameter>
</parameters>
</method>
<method name="set_request_output_surface" c:identifier="gst_gl_window_set_request_output_surface" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglwindow.c">Configure whether a visible output surface is requested.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglwindow.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="window" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglwindow.c">a #GstGLWindow</doc>
<type name="GLWindow" c:type="GstGLWindow*"/>
</instance-parameter>
<parameter name="output_surface" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglwindow.c">whether to request an output surface.</doc>
<type name="gboolean" c:type="gboolean"/>
</parameter>
</parameters>
</method>
<method name="set_resize_callback" c:identifier="gst_gl_window_set_resize_callback" version="1.4">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglwindow.c">Sets the resize callback called every time a resize of the window occurs.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglwindow.h"/>
@ -9859,11 +9812,11 @@ user-defined purposes.</doc>
</parameter>
</parameters>
</function-macro>
<constant name="GL_COLOR_CONVERT_EXT_FORMATS" value=", RGBA64_LE, BGR10A2_LE, RGB10A2_LE, BGR10x2_LE, RGB10x2_LE, P010_10LE, P012_LE, P016_LE, Y212_LE, Y412_LE, A444_16LE, A422_16LE, A420_16LE, A444_12LE, A422_12LE, A420_12LE, A420_10LE, A422_10LE, A444_10LE, I420_12LE, I420_10LE, I422_10LE, I422_12LE, Y444_16LE, Y444_10LE" c:type="GST_GL_COLOR_CONVERT_EXT_FORMATS" introspectable="0">
<constant name="GL_COLOR_CONVERT_EXT_FORMATS" value=", RGBA64_LE, BGR10A2_LE, RGB10A2_LE, P010_10LE, P012_LE, P016_LE, Y212_LE, Y412_LE, A444_16LE, A422_16LE, A420_16LE, A444_12LE, A422_12LE, A420_12LE, A420_10LE, A422_10LE, A444_10LE, I420_12LE, I420_10LE, I422_10LE, I422_12LE, Y444_16LE, Y444_10LE" c:type="GST_GL_COLOR_CONVERT_EXT_FORMATS" introspectable="0">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglcolorconvert.h"/>
<type name="utf8" c:type="gchar*"/>
</constant>
<constant name="GL_COLOR_CONVERT_FORMATS" value="{ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, GBRA, GBR, RGBP, BGRP, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, NV16, NV61, NV24, YUY2, UYVY, Y210, AYUV, VUYA, Y410, A444, A422, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16, ARGB64, A420, AV12, NV12_16L32S, NV12_4L4, RBGA, v210" c:type="GST_GL_COLOR_CONVERT_FORMATS">
<constant name="GL_COLOR_CONVERT_FORMATS" value="{ RGBA, RGB, RGBx, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, GBRA, GBR, RGBP, BGRP, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, NV16, NV61, YUY2, UYVY, Y210, AYUV, VUYA, Y410, A444, A422, GRAY8, GRAY16_LE, GRAY16_BE, RGB16, BGR16, ARGB64, A420, AV12, NV12_16L32S, NV12_4L4, RBGA, v210" c:type="GST_GL_COLOR_CONVERT_FORMATS">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglcolorconvert.h">The currently supported formats that can be converted</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglcolorconvert.h"/>
<type name="utf8" c:type="gchar*"/>
@ -10106,11 +10059,11 @@ e.g. for `CONFIG_ID`: `GST_GL_CONFIG_ATTRIB_NAME (CONFIG_ID)`</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglmemorypbo.h"/>
<type name="utf8" c:type="gchar*"/>
</constant>
<constant name="GL_MEMORY_VIDEO_EXT_FORMATS" value=", RGBA64_LE, BGR10A2_LE, RGB10A2_LE, BGR10x2_LE, RGB10x2_LE, P010_10LE, P012_LE, P016_LE, Y212_LE, Y412_LE, A444_16LE, A422_16LE, A420_16LE, A444_12LE, A422_12LE, A420_12LE, A420_10LE, A422_10LE, A444_10LE, I420_12LE, I420_10LE, I422_10LE, I422_12LE, Y444_10LE, Y444_16LE" c:type="GST_GL_MEMORY_VIDEO_EXT_FORMATS" introspectable="0">
<constant name="GL_MEMORY_VIDEO_EXT_FORMATS" value=", RGBA64_LE, BGR10A2_LE, RGB10A2_LE, P010_10LE, P012_LE, P016_LE, Y212_LE, Y412_LE, A444_16LE, A422_16LE, A420_16LE, A444_12LE, A422_12LE, A420_12LE, A420_10LE, A422_10LE, A444_10LE, I420_12LE, I420_10LE, I422_10LE, I422_12LE, Y444_10LE, Y444_16LE" c:type="GST_GL_MEMORY_VIDEO_EXT_FORMATS" introspectable="0">
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglmemory.h"/>
<type name="utf8" c:type="gchar*"/>
</constant>
<constant name="GL_MEMORY_VIDEO_FORMATS_STR" value="{ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, GBRA, GBR, RGBP, BGRP, RGB, BGR, RGB16, BGR16, AYUV, VUYA, A444, A422, Y410, I420, YV12, NV12, NV21, NV16, NV61, NV24, YUY2, UYVY, Y210, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE, ARGB64, A420, AV12, NV12_16L32S, NV12_4L4, RBGA, v210" c:type="GST_GL_MEMORY_VIDEO_FORMATS_STR">
<constant name="GL_MEMORY_VIDEO_FORMATS_STR" value="{ RGBA, BGRA, RGBx, BGRx, ARGB, ABGR, xRGB, xBGR, GBRA, GBR, RGBP, BGRP, RGB, BGR, RGB16, BGR16, AYUV, VUYA, A444, A422, Y410, I420, YV12, NV12, NV21, NV16, NV61, YUY2, UYVY, Y210, Y41B, Y42B, Y444, GRAY8, GRAY16_LE, GRAY16_BE, ARGB64, A420, AV12, NV12_16L32S, NV12_4L4, RBGA, v210" c:type="GST_GL_MEMORY_VIDEO_FORMATS_STR">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglmemory.h">List of video formats that are supported by #GstGLMemory</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglmemory.h"/>
<type name="utf8" c:type="gchar*"/>

View File

@ -682,7 +682,7 @@ the track buffers for playback purposes.
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/mse/gstsourcebuffer.c">#GstSourceBuffer instance</doc>
<type name="SourceBuffer" c:type="GstSourceBuffer*"/>
</instance-parameter>
<parameter name="buf" transfer-ownership="full">
<parameter name="buf" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/mse/gstsourcebuffer.c">The media data to append</doc>
<type name="Gst.Buffer" c:type="GstBuffer*"/>
</parameter>

View File

@ -186,15 +186,6 @@ clock.</doc>
</parameter>
</parameters>
</constructor>
<function name="deinit" c:identifier="gst_net_client_clock_deinit" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gstreamer/libs/gst/net/gstnetclientclock.c">Clears any cached #GstNetClientClock clocks.
All references should be released beforehand.
Mainly used for testing.</doc>
<source-position filename="../subprojects/gstreamer/libs/gst/net/gstnetclientclock.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
</function>
<property name="address" writable="1" construct="1" transfer-ownership="none" default-value="127.0.0.1">
<type name="utf8" c:type="gchar*"/>
</property>

View File

@ -807,7 +807,7 @@ the tags after the life-time of @info, you will need to copy them.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstdiscoverer.c">Parses a #GVariant as produced by gst_discoverer_info_to_variant()
back to a #GstDiscovererInfo.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstdiscoverer.h"/>
<return-value transfer-ownership="full" nullable="1">
<return-value transfer-ownership="full">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstdiscoverer.c">A newly-allocated #GstDiscovererInfo.</doc>
<type name="DiscovererInfo" c:type="GstDiscovererInfo*"/>
</return-value>
@ -2950,7 +2950,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_MICRO" value="1" c:type="GST_PLUGINS_BASE_VERSION_MICRO">
<constant name="PLUGINS_BASE_VERSION_MICRO" value="0" c:type="GST_PLUGINS_BASE_VERSION_MICRO">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstpluginsbaseversion.h">The micro version of GStreamer's gst-plugins-base libraries at compile time.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstpluginsbaseversion.h"/>
<type name="gint" c:type="gint"/>

View File

@ -11269,10 +11269,6 @@ passed @tr.</doc>
</parameter>
</parameters>
</method>
<property name="timed-out" version="1.28" transfer-ownership="none" default-value="FALSE">
<doc xml:space="preserve" filename="../subprojects/gst-rtsp-server/gst/rtsp-server/rtsp-stream-transport.c">Whether this transport is timed out</doc>
<type name="gboolean" c:type="gboolean"/>
</property>
<field name="parent">
<doc xml:space="preserve" filename="../subprojects/gst-rtsp-server/gst/rtsp-server/rtsp-stream-transport.h">parent instance</doc>
<type name="GObject.Object" c:type="GObject"/>

View File

@ -2458,35 +2458,6 @@ stack and initialized with gst_sdp_media_init().</doc>
</instance-parameter>
</parameters>
</method>
<function name="add_media_from_structure" c:identifier="gst_sdp_media_add_media_from_structure" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">Mapping of structure fields to SDP attributes:
a=rtpmap:(payload) (encoding_name) or (clock_rate)[or (encoding_params)]
a=framesize:(payload) (width)-(height)
a=fmtp:(payload) (param)[=(value)];...
a=rtcp-fb:(payload) (param1) [param2]...
a=extmap:(id)[/direction] (extensionname) (extensionattributes)</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">a #GstSDPResult.</doc>
<type name="SDPResult" c:type="GstSDPResult"/>
</return-value>
<parameters>
<parameter name="structure" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">a #GstStructure belonging to a #GstCaps SDP mapping, see also
`gst_sdp_media_get_caps_from_media()`</doc>
<type name="Gst.Structure" c:type="const GstStructure*"/>
</parameter>
<parameter name="media" direction="out" caller-allocates="1" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">a #GstSDPMedia</doc>
<type name="SDPMedia" c:type="GstSDPMedia*"/>
</parameter>
</parameters>
</function>
<function name="init" c:identifier="gst_sdp_media_init">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">Initialize @media so that its contents are as if it was freshly allocated
with gst_sdp_media_new(). This function is mostly used to initialize a media
@ -2531,9 +2502,7 @@ a=fmtp:(payload) (param)[=(value)];...
a=rtcp-fb:(payload) (param1) [param2]...
a=extmap:(id)[/direction] (extensionname) (extensionattributes)
Only the first #GstStructure of the @caps is used.</doc>
a=extmap:(id)[/direction] (extensionname) (extensionattributes)</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">a #GstSDPResult.</doc>
@ -4192,35 +4161,6 @@ messages.</doc>
</parameter>
</parameters>
</function>
<function name="sdp_media_add_media_from_structure" c:identifier="gst_sdp_media_add_media_from_structure" moved-to="SDPMedia.add_media_from_structure" version="1.28">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">Mapping of structure fields to SDP attributes:
a=rtpmap:(payload) (encoding_name) or (clock_rate)[or (encoding_params)]
a=framesize:(payload) (width)-(height)
a=fmtp:(payload) (param)[=(value)];...
a=rtcp-fb:(payload) (param1) [param2]...
a=extmap:(id)[/direction] (extensionname) (extensionattributes)</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">a #GstSDPResult.</doc>
<type name="SDPResult" c:type="GstSDPResult"/>
</return-value>
<parameters>
<parameter name="structure" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">a #GstStructure belonging to a #GstCaps SDP mapping, see also
`gst_sdp_media_get_caps_from_media()`</doc>
<type name="Gst.Structure" c:type="const GstStructure*"/>
</parameter>
<parameter name="media" direction="out" caller-allocates="1" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">a #GstSDPMedia</doc>
<type name="SDPMedia" c:type="GstSDPMedia*"/>
</parameter>
</parameters>
</function>
<function name="sdp_media_init" c:identifier="gst_sdp_media_init" moved-to="SDPMedia.init">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">Initialize @media so that its contents are as if it was freshly allocated
with gst_sdp_media_new(). This function is mostly used to initialize a media
@ -4265,9 +4205,7 @@ a=fmtp:(payload) (param)[=(value)];...
a=rtcp-fb:(payload) (param1) [param2]...
a=extmap:(id)[/direction] (extensionname) (extensionattributes)
Only the first #GstStructure of the @caps is used.</doc>
a=extmap:(id)[/direction] (extensionname) (extensionattributes)</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">a #GstSDPResult.</doc>

View File

@ -439,9 +439,9 @@ See also #gst_transcoder_get_message_bus()</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/transcoder/gsttranscoder.c">A #GstMessage</doc>
<type name="Gst.Message" c:type="GstMessage*"/>
</parameter>
<parameter name="error" direction="out" caller-allocates="0" transfer-ownership="full" optional="1" allow-none="1">
<parameter name="error" direction="out" caller-allocates="1" transfer-ownership="full" optional="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/transcoder/gsttranscoder.c">the resulting error</doc>
<type name="GLib.Error" c:type="GError**"/>
<type name="GLib.Error" c:type="GError*"/>
</parameter>
<parameter name="details" direction="out" caller-allocates="0" transfer-ownership="full">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/transcoder/gsttranscoder.c">(transfer full): A GstStructure containing extra details about the error</doc>
@ -494,9 +494,9 @@ See also #gst_transcoder_get_message_bus()</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/transcoder/gsttranscoder.c">A #GstMessage</doc>
<type name="Gst.Message" c:type="GstMessage*"/>
</parameter>
<parameter name="error" direction="out" caller-allocates="0" transfer-ownership="full" optional="1" allow-none="1">
<parameter name="error" direction="out" caller-allocates="1" transfer-ownership="full" optional="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/transcoder/gsttranscoder.c">the resulting warning</doc>
<type name="GLib.Error" c:type="GError**"/>
<type name="GLib.Error" c:type="GError*"/>
</parameter>
<parameter name="details" direction="out" caller-allocates="0" transfer-ownership="full">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/transcoder/gsttranscoder.c">(transfer full): A GstStructure containing extra details about the warning</doc>
@ -680,9 +680,9 @@ stream.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/transcoder/gsttranscoder.c">A #GstMessage</doc>
<type name="Gst.Message" c:type="GstMessage*"/>
</parameter>
<parameter name="error" direction="out" caller-allocates="0" transfer-ownership="full" optional="1" allow-none="1">
<parameter name="error" direction="out" caller-allocates="1" transfer-ownership="full" optional="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/transcoder/gsttranscoder.c">the resulting error</doc>
<type name="GLib.Error" c:type="GError**"/>
<type name="GLib.Error" c:type="GError*"/>
</parameter>
<parameter name="details" direction="out" caller-allocates="0" transfer-ownership="full">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/transcoder/gsttranscoder.c">(transfer full): A GstStructure containing extra details about the error</doc>
@ -735,9 +735,9 @@ stream.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/transcoder/gsttranscoder.c">A #GstMessage</doc>
<type name="Gst.Message" c:type="GstMessage*"/>
</parameter>
<parameter name="error" direction="out" caller-allocates="0" transfer-ownership="full" optional="1" allow-none="1">
<parameter name="error" direction="out" caller-allocates="1" transfer-ownership="full" optional="1" allow-none="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/transcoder/gsttranscoder.c">the resulting warning</doc>
<type name="GLib.Error" c:type="GError**"/>
<type name="GLib.Error" c:type="GError*"/>
</parameter>
<parameter name="details" direction="out" caller-allocates="0" transfer-ownership="full">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/transcoder/gsttranscoder.c">(transfer full): A GstStructure containing extra details about the warning</doc>

View File

@ -3068,7 +3068,7 @@ Formats are sorted by decreasing "quality", using these criteria by priority:
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h"/>
<type name="utf8" c:type="gchar*"/>
</constant>
<constant name="VIDEO_FORMATS_ALL_STR" value="A444_16BE, A444_16LE, AYUV64, ARGB64, Y416_BE, RGBA64_BE, ARGB64_BE, BGRA64_BE, ABGR64_BE, Y416_LE, RGBA64_LE, ARGB64_LE, BGRA64_LE, ABGR64_LE, A422_16BE, A422_16LE, A420_16BE, A420_16LE, A444_12BE, GBRA_12BE, A444_12LE, GBRA_12LE, Y412_BE, Y412_LE, A422_12BE, A422_12LE, A420_12BE, A420_12LE, A444_10BE, GBRA_10BE, A444_10LE, GBRA_10LE, A422_10BE, A422_10LE, A420_10BE, A420_10LE, Y410, BGR10A2_LE, RGB10A2_LE, A444, GBRA, AYUV, VUYA, RGBA, RBGA, ARGB, BGRA, ABGR, A422, A420, AV12, Y444_16BE, GBR_16BE, Y444_16LE, GBR_16LE, Y216_BE, v216, Y216_LE, P016_BE, P016_LE, Y444_12BE, GBR_12BE, Y444_12LE, GBR_12LE, I422_12BE, I422_12LE, Y212_BE, Y212_LE, I420_12BE, I420_12LE, P012_BE, P012_LE, Y444_10BE, GBR_10BE, Y444_10LE, GBR_10LE, r210, BGR10x2_LE, RGB10x2_LE, I422_10BE, I422_10LE, NV16_10LE40, NV16_10LE32, Y210, UYVP, v210, I420_10BE, I420_10LE, P010_10BE, MT2110R, MT2110T, NV12_10BE_8L128, NV12_10LE40_4L4, P010_10LE, NV12_10LE40, NV12_10LE32, Y444, BGRP, GBR, RGBP, NV24, v308, IYU2, RGBx, xRGB, BGRx, xBGR, RGB, BGR, Y42B, NV16, NV61, YUY2, YVYU, UYVY, VYUY, I420, YV12, NV12, NV21, NV12_16L32S, NV12_32L32, NV12_4L4, NV12_64Z32, NV12_8L128, Y41B, IYU1, YUV9, YVU9, BGR16, RGB16, BGR15, RGB15, RGB8P, GRAY16_BE, GRAY16_LE, GRAY10_LE16, GRAY10_LE32, GRAY8" c:type="GST_VIDEO_FORMATS_ALL_STR" version="1.24">
<constant name="VIDEO_FORMATS_ALL_STR" value="A444_16BE, A444_16LE, AYUV64, ARGB64, Y416_BE, RGBA64_BE, ARGB64_BE, BGRA64_BE, ABGR64_BE, Y416_LE, RGBA64_LE, ARGB64_LE, BGRA64_LE, ABGR64_LE, A422_16BE, A422_16LE, A420_16BE, A420_16LE, A444_12BE, GBRA_12BE, A444_12LE, GBRA_12LE, Y412_BE, Y412_LE, A422_12BE, A422_12LE, A420_12BE, A420_12LE, A444_10BE, GBRA_10BE, A444_10LE, GBRA_10LE, A422_10BE, A422_10LE, A420_10BE, A420_10LE, Y410, BGR10A2_LE, RGB10A2_LE, A444, GBRA, AYUV, VUYA, RGBA, RBGA, ARGB, BGRA, ABGR, A422, A420, AV12, Y444_16BE, GBR_16BE, Y444_16LE, GBR_16LE, Y216_BE, v216, Y216_LE, P016_BE, P016_LE, Y444_12BE, GBR_12BE, Y444_12LE, GBR_12LE, I422_12BE, I422_12LE, Y212_BE, Y212_LE, I420_12BE, I420_12LE, P012_BE, P012_LE, Y444_10BE, GBR_10BE, Y444_10LE, GBR_10LE, r210, I422_10BE, I422_10LE, NV16_10LE32, Y210, UYVP, v210, I420_10BE, I420_10LE, P010_10BE, MT2110R, MT2110T, NV12_10BE_8L128, NV12_10LE40_4L4, P010_10LE, NV12_10LE40, NV12_10LE32, Y444, BGRP, GBR, RGBP, NV24, v308, IYU2, RGBx, xRGB, BGRx, xBGR, RGB, BGR, Y42B, NV16, NV61, YUY2, YVYU, UYVY, VYUY, I420, YV12, NV12, NV21, NV12_16L32S, NV12_32L32, NV12_4L4, NV12_64Z32, NV12_8L128, Y41B, IYU1, YUV9, YVU9, BGR16, RGB16, BGR15, RGB15, RGB8P, GRAY16_BE, GRAY16_LE, GRAY10_LE16, GRAY10_LE32, GRAY8" c:type="GST_VIDEO_FORMATS_ALL_STR" version="1.24">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h">Declare all video formats as a string.
Formats are sorted by decreasing "quality", using these criteria by priority:
@ -3444,7 +3444,7 @@ Return the width of one tile in pixels, zero if its not an integer.</doc>
</parameter>
</parameters>
</function-macro>
<constant name="VIDEO_FORMAT_LAST" value="142" c:type="GST_VIDEO_FORMAT_LAST" version="1.26">
<constant name="VIDEO_FORMAT_LAST" value="139" c:type="GST_VIDEO_FORMAT_LAST" version="1.26">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h">Number of video formats in #GstVideoFormat.</doc>
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h"/>
<type name="gint" c:type="gint"/>
@ -10742,15 +10742,6 @@ bits.</doc>
<member name="gray10_le16" value="138" c:identifier="GST_VIDEO_FORMAT_GRAY10_LE16" version="1.26" glib:nick="gray10-le16" glib:name="GST_VIDEO_FORMAT_GRAY10_LE16">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h">10-bit grayscale, packed into 16bit words (6 bits left padding)</doc>
</member>
<member name="nv16_10le40" value="139" c:identifier="GST_VIDEO_FORMAT_NV16_10LE40" version="1.28" glib:nick="nv16-10le40" glib:name="GST_VIDEO_FORMAT_NV16_10LE40">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h">Fully packed variant of NV16_10LE32</doc>
</member>
<member name="bgr10x2_le" value="140" c:identifier="GST_VIDEO_FORMAT_BGR10x2_LE" version="1.28" glib:nick="bgr10x2-le" glib:name="GST_VIDEO_FORMAT_BGR10x2_LE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h">packed 4:4:4 RGB (B-G-R-x), 10 bits for R/G/B channel and MSB 2 bits for padding.</doc>
</member>
<member name="rgb10x2_le" value="141" c:identifier="GST_VIDEO_FORMAT_RGB10x2_LE" version="1.28" glib:nick="rgb10x2-le" glib:name="GST_VIDEO_FORMAT_RGB10x2_LE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h">packed 4:4:4 RGB (R-G-B-x), 10 bits for R/G/B channel and MSB 2 bits for padding.</doc>
</member>
<function name="from_fourcc" c:identifier="gst_video_format_from_fourcc">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/video/video-format.c">Converts a FOURCC value into the corresponding #GstVideoFormat.
If the FOURCC cannot be represented by #GstVideoFormat,

View File

@ -2647,7 +2647,6 @@ gst_vulkan_full_screen_quad_set_blend_factors().</doc>
</parameters>
</method>
<method name="fill_command_buffer" c:identifier="gst_vulkan_full_screen_quad_fill_command_buffer" version="1.18" throws="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkfullscreenquad.c">@cmd must be locked with gst_vulkan_command_buffer_lock().</doc>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkfullscreenquad.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkfullscreenquad.c">whether @cmd could be filled with the necessary commands</doc>
@ -6039,6 +6038,50 @@ signalled and freed.</doc>
</parameter>
</parameters>
</callback>
<record name="VulkanVideoCapabilities" c:type="GstVulkanVideoCapabilities" version="1.24">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<field name="caps" introspectable="0" readable="0" private="1">
<type c:type="VkVideoCapabilitiesKHR"/>
</field>
<union>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<record name="decoder" c:type="decoder">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<field name="caps" introspectable="0" readable="0" private="1">
<type c:type="VkVideoDecodeCapabilitiesKHR"/>
</field>
<union name="codec" c:type="codec">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<field name="h264" introspectable="0" readable="0" private="1">
<type c:type="VkVideoDecodeH264CapabilitiesKHR"/>
</field>
<field name="h265" introspectable="0" readable="0" private="1">
<type c:type="VkVideoDecodeH265CapabilitiesKHR"/>
</field>
</union>
</record>
<record name="encoder" c:type="encoder">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<field name="caps" introspectable="0" readable="0" private="1">
<type c:type="VkVideoEncodeCapabilitiesKHR"/>
</field>
<union name="codec" c:type="codec">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<field name="h264" introspectable="0" readable="0" private="1">
<type c:type="VkVideoEncodeH264CapabilitiesKHR"/>
</field>
<field name="h265" introspectable="0" readable="0" private="1">
<type c:type="VkVideoEncodeH265CapabilitiesKHR"/>
</field>
</union>
</record>
</union>
<field name="_reserved" readable="0" private="1">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</record>
<class name="VulkanVideoFilter" c:symbol-prefix="vulkan_video_filter" c:type="GstVulkanVideoFilter" version="1.18" parent="GstBase.BaseTransform" glib:type-name="GstVulkanVideoFilter" glib:get-type="gst_vulkan_video_filter_get_type" glib:type-struct="VulkanVideoFilterClass">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideofilter.h"/>
<method name="get_device" c:identifier="gst_vulkan_video_filter_get_device" version="1.26">
@ -6133,6 +6176,125 @@ signalled and freed.</doc>
</array>
</field>
</record>
<enumeration name="VulkanVideoOperation" version="1.24" glib:type-name="GstVulkanVideoOperation" glib:get-type="gst_vulkan_video_operation_get_type" c:type="GstVulkanVideoOperation">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h">The type of video operation.</doc>
<member name="decode" value="0" c:identifier="GST_VULKAN_VIDEO_OPERATION_DECODE" glib:nick="decode" glib:name="GST_VULKAN_VIDEO_OPERATION_DECODE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h">decode operation</doc>
</member>
<member name="encode" value="1" c:identifier="GST_VULKAN_VIDEO_OPERATION_ENCODE" glib:nick="encode" glib:name="GST_VULKAN_VIDEO_OPERATION_ENCODE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h">encode operation</doc>
</member>
<member name="unknown" value="2" c:identifier="GST_VULKAN_VIDEO_OPERATION_UNKNOWN" glib:nick="unknown" glib:name="GST_VULKAN_VIDEO_OPERATION_UNKNOWN">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h">unknown</doc>
</member>
</enumeration>
<record name="VulkanVideoProfile" c:type="GstVulkanVideoProfile" version="1.24">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<field name="profile" introspectable="0" readable="0" private="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h">the generic vulkan video profile</doc>
<type c:type="VkVideoProfileInfoKHR"/>
</field>
<union name="usage" c:type="usage">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<field name="decode" introspectable="0" writable="1">
<type c:type="VkVideoDecodeUsageInfoKHR"/>
</field>
<field name="encode" introspectable="0" writable="1">
<type c:type="VkVideoEncodeUsageInfoKHR"/>
</field>
</union>
<union name="codec" c:type="codec">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<field name="base" writable="1">
<type name="Vulkan.BaseInStructure" c:type="VkBaseInStructure"/>
</field>
<field name="h264dec" introspectable="0" writable="1">
<type c:type="VkVideoDecodeH264ProfileInfoKHR"/>
</field>
<field name="h265dec" introspectable="0" writable="1">
<type c:type="VkVideoDecodeH265ProfileInfoKHR"/>
</field>
<field name="h264enc" introspectable="0" writable="1">
<type c:type="VkVideoEncodeH264ProfileInfoKHR"/>
</field>
<field name="h265enc" introspectable="0" writable="1">
<type c:type="VkVideoEncodeH265ProfileInfoKHR"/>
</field>
</union>
<field name="_reserved" writable="1">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
<method name="is_equal" c:identifier="gst_vulkan_video_profile_is_equal">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">whether @a and @b contains the same information.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="a" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">a #GstVulkanVideoProfile</doc>
<type name="VulkanVideoProfile" c:type="const GstVulkanVideoProfile*"/>
</instance-parameter>
<parameter name="b" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">another #GstVulkanVideoProfile</doc>
<type name="VulkanVideoProfile" c:type="const GstVulkanVideoProfile*"/>
</parameter>
</parameters>
</method>
<method name="is_valid" c:identifier="gst_vulkan_video_profile_is_valid" version="1.24" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">%TRUE if @profile is correct and matches with @codec</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="profile" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">the output profile</doc>
<type name="VulkanVideoProfile" c:type="GstVulkanVideoProfile*"/>
</instance-parameter>
<parameter name="codec" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">VkVideoCodecOperationFlagBitsKHR described by @profile</doc>
<type name="guint" c:type="guint"/>
</parameter>
</parameters>
</method>
<method name="to_caps" c:identifier="gst_vulkan_video_profile_to_caps" version="1.24" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<return-value transfer-ownership="full">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">a #GstCaps from @profile</doc>
<type name="Gst.Caps" c:type="GstCaps*"/>
</return-value>
<parameters>
<instance-parameter name="profile" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">#GstVulkanVideoProfile to convert into a #GstCaps</doc>
<type name="VulkanVideoProfile" c:type="const GstVulkanVideoProfile*"/>
</instance-parameter>
</parameters>
</method>
<function name="from_caps" c:identifier="gst_vulkan_video_profile_from_caps" version="1.24" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">%TRUE if @caps was parsed correctly, otherwise %FALSE</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<parameter name="profile" direction="out" caller-allocates="1" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">the output profile</doc>
<type name="VulkanVideoProfile" c:type="GstVulkanVideoProfile*"/>
</parameter>
<parameter name="caps" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">a #GstCaps to parse</doc>
<type name="Gst.Caps" c:type="GstCaps*"/>
</parameter>
<parameter name="video_operation" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">a supported video operation</doc>
<type name="VulkanVideoOperation" c:type="GstVulkanVideoOperation"/>
</parameter>
</parameters>
</function>
</record>
<class name="VulkanWindow" c:symbol-prefix="vulkan_window" c:type="GstVulkanWindow" version="1.18" parent="Gst.Object" abstract="1" glib:type-name="GstVulkanWindow" glib:get-type="gst_vulkan_window_get_type" glib:type-struct="VulkanWindowClass">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkwindow.h">#GstVulkanWindow is an opaque struct and should only be accessed through the
provided api.</doc>
@ -7754,6 +7916,27 @@ associated #GstVulkanFence is signalled</doc>
</parameter>
</parameters>
</function>
<function name="vulkan_video_profile_from_caps" c:identifier="gst_vulkan_video_profile_from_caps" moved-to="VulkanVideoProfile.from_caps" version="1.24" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.h"/>
<return-value transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">%TRUE if @caps was parsed correctly, otherwise %FALSE</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<parameter name="profile" direction="out" caller-allocates="1" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">the output profile</doc>
<type name="VulkanVideoProfile" c:type="GstVulkanVideoProfile*"/>
</parameter>
<parameter name="caps" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">a #GstCaps to parse</doc>
<type name="Gst.Caps" c:type="GstCaps*"/>
</parameter>
<parameter name="video_operation" transfer-ownership="none">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideoutils.c">a supported video operation</doc>
<type name="VulkanVideoOperation" c:type="GstVulkanVideoOperation"/>
</parameter>
</parameters>
</function>
<function name="vulkan_window_error_quark" c:identifier="gst_vulkan_window_error_quark" moved-to="VulkanWindowError.quark" version="1.18">
<return-value transfer-ownership="none">
<type name="GLib.Quark" c:type="GQuark"/>

View File

@ -190,97 +190,6 @@ and/or use gtk-doc annotations. -->
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CANDIDATE_STATS_ADDRESS" c:identifier="GST_WEBRTC_ICE_CANDIDATE_STATS_ADDRESS" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
<parameter name="c">
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CANDIDATE_STATS_FOUNDATION" c:identifier="GST_WEBRTC_ICE_CANDIDATE_STATS_FOUNDATION" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
<parameter name="c">
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CANDIDATE_STATS_PORT" c:identifier="GST_WEBRTC_ICE_CANDIDATE_STATS_PORT" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
<parameter name="c">
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CANDIDATE_STATS_PRIORITY" c:identifier="GST_WEBRTC_ICE_CANDIDATE_STATS_PRIORITY" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
<parameter name="c">
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CANDIDATE_STATS_PROTOCOL" c:identifier="GST_WEBRTC_ICE_CANDIDATE_STATS_PROTOCOL" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
<parameter name="c">
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CANDIDATE_STATS_RELATED_ADDRESS" c:identifier="GST_WEBRTC_ICE_CANDIDATE_STATS_RELATED_ADDRESS" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
<parameter name="c">
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CANDIDATE_STATS_RELATED_PORT" c:identifier="GST_WEBRTC_ICE_CANDIDATE_STATS_RELATED_PORT" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
<parameter name="c">
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CANDIDATE_STATS_RELAY_PROTOCOL" c:identifier="GST_WEBRTC_ICE_CANDIDATE_STATS_RELAY_PROTOCOL" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
<parameter name="c">
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CANDIDATE_STATS_STREAM_ID" c:identifier="GST_WEBRTC_ICE_CANDIDATE_STATS_STREAM_ID" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
<parameter name="c">
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CANDIDATE_STATS_TCP_TYPE" c:identifier="GST_WEBRTC_ICE_CANDIDATE_STATS_TCP_TYPE" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
<parameter name="c">
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CANDIDATE_STATS_TYPE" c:identifier="GST_WEBRTC_ICE_CANDIDATE_STATS_TYPE" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
<parameter name="c">
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CANDIDATE_STATS_URL" c:identifier="GST_WEBRTC_ICE_CANDIDATE_STATS_URL" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
<parameter name="c">
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CANDIDATE_STATS_USERNAME_FRAGMENT" c:identifier="GST_WEBRTC_ICE_CANDIDATE_STATS_USERNAME_FRAGMENT" version="1.28" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
<parameter name="c">
</parameter>
</parameters>
</function-macro>
<function-macro name="WEBRTC_ICE_CLASS" c:identifier="GST_WEBRTC_ICE_CLASS" introspectable="0">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<parameters>
@ -437,17 +346,6 @@ for more information.</doc>
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/webrtc_fwd.h">max-bundle</doc>
</member>
</enumeration>
<enumeration name="WebRTCDTLSRole" version="1.28" glib:type-name="GstWebRTCDTLSRole" glib:get-type="gst_webrtc_dtls_role_get_type" c:type="GstWebRTCDTLSRole">
<member name="client" value="0" c:identifier="GST_WEBRTC_DTLS_ROLE_CLIENT" glib:nick="client" glib:name="GST_WEBRTC_DTLS_ROLE_CLIENT">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/webrtc_fwd.h">client</doc>
</member>
<member name="server" value="1" c:identifier="GST_WEBRTC_DTLS_ROLE_SERVER" glib:nick="server" glib:name="GST_WEBRTC_DTLS_ROLE_SERVER">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/webrtc_fwd.h">server</doc>
</member>
<member name="unknown" value="2" c:identifier="GST_WEBRTC_DTLS_ROLE_UNKNOWN" glib:nick="unknown" glib:name="GST_WEBRTC_DTLS_ROLE_UNKNOWN">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/webrtc_fwd.h">unknown</doc>
</member>
</enumeration>
<enumeration name="WebRTCDTLSSetup" glib:type-name="GstWebRTCDTLSSetup" glib:get-type="gst_webrtc_dtls_setup_get_type" c:type="GstWebRTCDTLSSetup">
<member name="none" value="0" c:identifier="GST_WEBRTC_DTLS_SETUP_NONE" glib:nick="none" glib:name="GST_WEBRTC_DTLS_SETUP_NONE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/webrtc_fwd.h">none</doc>
@ -518,9 +416,8 @@ for more information.</doc>
</instance-parameter>
</parameters>
</method>
<method name="send_data" c:identifier="gst_webrtc_data_channel_send_data" deprecated="1" deprecated-version="1.22">
<method name="send_data" c:identifier="gst_webrtc_data_channel_send_data">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/datachannel.c">Send @data as a data message over @channel.</doc>
<doc-deprecated xml:space="preserve">Use gst_webrtc_data_channel_send_data_full() instead</doc-deprecated>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/datachannel.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -554,9 +451,8 @@ for more information.</doc>
</parameter>
</parameters>
</method>
<method name="send_string" c:identifier="gst_webrtc_data_channel_send_string" deprecated="1" deprecated-version="1.22">
<method name="send_string" c:identifier="gst_webrtc_data_channel_send_string">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/datachannel.c">Send @str as a string message over @channel.</doc>
<doc-deprecated xml:space="preserve">Use gst_webrtc_data_channel_send_string_full() instead</doc-deprecated>
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/datachannel.h"/>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
@ -677,8 +573,7 @@ for more information.</doc>
<type name="none" c:type="void"/>
</return-value>
</glib:signal>
<glib:signal name="send-data" when="last" action="1" deprecated="1" deprecated-version="1.22">
<doc-deprecated xml:space="preserve">Use gst_webrtc_data_channel_send_data_full() instead</doc-deprecated>
<glib:signal name="send-data" when="last" action="1">
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
@ -689,8 +584,7 @@ for more information.</doc>
</parameter>
</parameters>
</glib:signal>
<glib:signal name="send-string" when="last" action="1" deprecated="1" deprecated-version="1.22">
<doc-deprecated xml:space="preserve">Use gst_webrtc_data_channel_send_string_full() instead</doc-deprecated>
<glib:signal name="send-string" when="last" action="1">
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
@ -1591,66 +1485,34 @@ stops automatic ICE gathering.</doc>
<record name="WebRTCICECandidateStats" c:type="GstWebRTCICECandidateStats" version="1.22" glib:type-name="GstWebRTCICECandidateStats" glib:get-type="gst_webrtc_ice_candidate_stats_get_type" c:symbol-prefix="webrtc_ice_candidate_stats">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<field name="ipaddr" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h">A string containing the address of the candidate. This value may be
an IPv4 address, an IPv6 address, or a fully-qualified domain name</doc>
<type name="utf8" c:type="gchar*"/>
</field>
<field name="port" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h">The network port number used by the candidate</doc>
<type name="guint" c:type="guint"/>
</field>
<field name="stream_id" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h">A string that uniquely identifies the object that is being
monitored to produce this set of statistics</doc>
<type name="guint" c:type="guint"/>
</field>
<field name="type" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h">The candidate type</doc>
<type name="utf8" c:type="const gchar*"/>
</field>
<field name="proto" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h">A string specifying the protocol (tcp or udp) used to transmit data
on the @port</doc>
<type name="utf8" c:type="const gchar*"/>
</field>
<field name="relay_proto" writable="1">
<type name="utf8" c:type="const gchar*"/>
</field>
<field name="prio" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h">The candidate's priority, corresponding to RTCIceCandidate.priority</doc>
<type name="guint" c:type="guint"/>
</field>
<field name="url" writable="1">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h">For local candidates, the url property is the URL of the ICE server
from which the candidate was received</doc>
<type name="utf8" c:type="gchar*"/>
</field>
<union name="ABI" c:type="ABI">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<record name="abi" c:type="abi">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<field name="foundation" writable="1">
<type name="utf8" c:type="gchar*"/>
</field>
<field name="related_address" writable="1">
<type name="utf8" c:type="gchar*"/>
</field>
<field name="related_port" writable="1">
<type name="guint" c:type="guint"/>
</field>
<field name="username_fragment" writable="1">
<type name="utf8" c:type="gchar*"/>
</field>
<field name="tcp_type" writable="1">
<type name="WebRTCICETcpCandidateType" c:type="GstWebRTCICETcpCandidateType"/>
</field>
</record>
<field name="_gst_reserved" readable="0" private="1">
<array zero-terminated="0" fixed-size="20">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</union>
<field name="_gst_reserved" writable="1">
<array zero-terminated="0" fixed-size="20">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
<method name="copy" c:identifier="gst_webrtc_ice_candidate_stats_copy" version="1.22">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/ice.h"/>
<return-value transfer-ownership="full">
@ -2299,25 +2161,6 @@ Get HTTP Proxy to be used when connecting to TURN server.</doc>
</callback>
</field>
</record>
<enumeration name="WebRTCICETcpCandidateType" version="1.28" glib:type-name="GstWebRTCICETcpCandidateType" glib:get-type="gst_webrtc_ice_tcp_candidate_type_get_type" c:type="GstWebRTCICETcpCandidateType">
<member name="active" value="0" c:identifier="GST_WEBRTC_ICE_TCP_CANDIDATE_TYPE_ACTIVE" glib:nick="active" glib:name="GST_WEBRTC_ICE_TCP_CANDIDATE_TYPE_ACTIVE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/webrtc_fwd.h">An "active" TCP candidate is one for which the transport
will attempt to open an outbound connection but will not
receive incoming connection requests.</doc>
</member>
<member name="passive" value="1" c:identifier="GST_WEBRTC_ICE_TCP_CANDIDATE_TYPE_PASSIVE" glib:nick="passive" glib:name="GST_WEBRTC_ICE_TCP_CANDIDATE_TYPE_PASSIVE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/webrtc_fwd.h">A "passive" TCP candidate is one for which the transport
will receive incoming connection attempts but not attempt
a connection.</doc>
</member>
<member name="so" value="2" c:identifier="GST_WEBRTC_ICE_TCP_CANDIDATE_TYPE_SO" glib:nick="so" glib:name="GST_WEBRTC_ICE_TCP_CANDIDATE_TYPE_SO">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/webrtc_fwd.h">An "so" candidate is one for which the transport will attempt
to open a connection simultaneously with its peer.</doc>
</member>
<member name="none" value="3" c:identifier="GST_WEBRTC_ICE_TCP_CANDIDATE_TYPE_NONE" glib:nick="none" glib:name="GST_WEBRTC_ICE_TCP_CANDIDATE_TYPE_NONE">
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/webrtc_fwd.h">Value used for non-TCP candidate type.</doc>
</member>
</enumeration>
<class name="WebRTCICETransport" c:symbol-prefix="webrtc_ice_transport" c:type="GstWebRTCICETransport" parent="Gst.Object" abstract="1" glib:type-name="GstWebRTCICETransport" glib:get-type="gst_webrtc_ice_transport_get_type" glib:type-struct="WebRTCICETransportClass">
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/webrtc/icetransport.h"/>
<virtual-method name="gather_candidates">

View File

@ -52,7 +52,6 @@ done
BASH_COMPLETION_PATHS = [SCRIPTDIR + '/subprojects/gstreamer/data/bash-completion/completions']
BASH_COMPLETION_PATHS += [SCRIPTDIR + '/subprojects/gst-devtools/validate/data/bash-completion/completions']
UPDATED_ENV = dict()
def str_to_bool(value: Any) -> bool:
"""Return whether the provided string (or any value really) represents true. Otherwise false.
@ -81,18 +80,11 @@ def stringify(o):
raise AssertionError('Object {!r} must be a string or a list'.format(o))
def set_env_var(env, var, value, options):
if options.only_environment:
UPDATED_ENV[var] = value
env[var] = value
def prepend_env_var(env, var, value, options):
def prepend_env_var(env, var, value, sysroot):
if var is None:
return
if value.startswith(options.sysroot):
value = value[len(options.sysroot):]
if value.startswith(sysroot):
value = value[len(sysroot):]
# Try not to exceed maximum length limits for env vars on Windows
if os.name == 'nt':
value = win32_get_short_path_name(value)
@ -101,8 +93,8 @@ def prepend_env_var(env, var, value, options):
# Don't add the same value twice
if val in env_val or env_val.startswith(value + os.pathsep):
return
set_env_var(env, var, val + env_val, options)
set_env_var(env, var, env[var].replace(os.pathsep + os.pathsep, os.pathsep).strip(os.pathsep), options)
env[var] = val + env_val
env[var] = env[var].replace(os.pathsep + os.pathsep, os.pathsep).strip(os.pathsep)
def get_target_install_filename(target, filename):
@ -204,15 +196,15 @@ def get_wine_subprocess_env(options, env):
prefix, = [o for o in buildoptions if o['name'] == 'prefix']
path = os.path.normpath(os.path.join(prefix['value'], 'bin'))
prepend_env_var(env, "PATH", path, options)
prepend_env_var(env, "PATH", path, options.sysroot)
wine_path = get_wine_shortpath(
options.wine.split(' '),
[path] + env.get('WINEPATH', '').split(';')
)
if options.winepath:
wine_path += ';' + options.winepath
set_env_var(env, 'WINEPATH', wine_path, options)
set_env_var(env, 'WINEDEBUG', 'fixme-all', options)
env['WINEPATH'] = wine_path
env['WINEDEBUG'] = 'fixme-all'
return env
@ -267,46 +259,43 @@ def is_bash_completion_available(options):
def get_subprocess_env(options, gst_version):
env = os.environ.copy()
set_env_var(env, "CURRENT_GST", os.path.normpath(SCRIPTDIR), options)
set_env_var(env, "GST_VERSION", gst_version, options)
env["CURRENT_GST"] = os.path.normpath(SCRIPTDIR)
env["GST_VERSION"] = gst_version
prepend_env_var(env, "GST_VALIDATE_SCENARIOS_PATH", os.path.normpath(
"%s/subprojects/gst-devtools/validate/data/scenarios" % SCRIPTDIR),
options)
set_env_var(env, "GST_VALIDATE_PLUGIN_PATH", os.path.normpath(
"%s/subprojects/gst-devtools/validate/plugins" % options.builddir),
options)
options.sysroot)
env["GST_VALIDATE_PLUGIN_PATH"] = os.path.normpath(
"%s/subprojects/gst-devtools/validate/plugins" % options.builddir)
prepend_env_var(env, "GST_VALIDATE_APPS_DIR", os.path.normpath(
"%s/subprojects/gst-editing-services/tests/validate" % SCRIPTDIR),
options)
set_env_var(env, "GST_ENV", gst_version, options)
set_env_var(env, "GST_REGISTRY", os.path.normpath(options.builddir + "/registry.dat"), options)
options.sysroot)
env["GST_ENV"] = gst_version
env["GST_REGISTRY"] = os.path.normpath(options.builddir + "/registry.dat")
prepend_env_var(env, "PATH", os.path.normpath(
"%s/subprojects/gst-devtools/validate/tools" % options.builddir),
options)
options.sysroot)
prepend_env_var(env, "GST_VALIDATE_SCENARIOS_PATH", os.path.normpath(
"%s/subprojects/gst-examples/webrtc/check/validate/scenarios" %
SCRIPTDIR), options)
SCRIPTDIR), options.sysroot)
prepend_env_var(env, "GST_VALIDATE_APPS_DIR", os.path.normpath(
"%s/subprojects/gst-examples/webrtc/check/validate/apps" %
SCRIPTDIR), options)
set_env_var(env, "GST_VALIDATE_LAUNCHER_HTTP_SERVER_PATH", os.path.normpath(
SCRIPTDIR), options.sysroot)
env["GST_VALIDATE_LAUNCHER_HTTP_SERVER_PATH"] = os.path.normpath(
"%s/subprojects/gst-devtools/validate/launcher/RangeHTTPServer.py" %
SCRIPTDIR), options)
SCRIPTDIR)
if options.wine:
return get_wine_subprocess_env(options, env)
prepend_env_var(env, "PATH", os.path.join(SCRIPTDIR, 'meson'),
options)
options.sysroot)
set_env_var(env, "GST_PLUGIN_SYSTEM_PATH", "", options)
set_env_var(env, "GST_PLUGIN_SCANNER", os.path.normpath(
"%s/subprojects/gstreamer/libs/gst/helpers/gst-plugin-scanner" % options.builddir),
options)
set_env_var(env, "GST_PTP_HELPER", os.path.normpath(
"%s/subprojects/gstreamer/libs/gst/helpers/ptp/gst-ptp-helper" % options.builddir),
options)
env["GST_PLUGIN_SYSTEM_PATH"] = ""
env["GST_PLUGIN_SCANNER"] = os.path.normpath(
"%s/subprojects/gstreamer/libs/gst/helpers/gst-plugin-scanner" % options.builddir)
env["GST_PTP_HELPER"] = os.path.normpath(
"%s/subprojects/gstreamer/libs/gst/helpers/ptp/gst-ptp-helper" % options.builddir)
if os.name == 'nt':
lib_path_envvar = 'PATH'
@ -322,47 +311,47 @@ def get_subprocess_env(options, gst_version):
prepend_env_var(env, "GST_PLUGIN_PATH", os.path.join(SCRIPTDIR, 'subprojects',
'gst-python', 'plugin'),
options)
options.sysroot)
prepend_env_var(env, "GST_PLUGIN_PATH", os.path.join(PREFIX_DIR, 'lib',
'gstreamer-1.0'),
options)
options.sysroot)
prepend_env_var(env, "GST_PLUGIN_PATH", os.path.join(options.builddir, 'subprojects',
'libnice', 'gst'),
options)
options.sysroot)
prepend_env_var(env, "GST_VALIDATE_SCENARIOS_PATH",
os.path.join(PREFIX_DIR, 'share', 'gstreamer-1.0',
'validate', 'scenarios'),
options)
options.sysroot)
prepend_env_var(env, "GI_TYPELIB_PATH", os.path.join(PREFIX_DIR, 'lib',
'lib', 'girepository-1.0'),
options)
options.sysroot)
prepend_env_var(env, "PKG_CONFIG_PATH", os.path.join(PREFIX_DIR, 'lib', 'pkgconfig'),
options)
options.sysroot)
# tools: gst-launch-1.0, gst-inspect-1.0
prepend_env_var(env, "PATH", os.path.join(options.builddir, 'subprojects',
'gstreamer', 'tools'),
options)
options.sysroot)
# plugin scanner and generator
prepend_env_var(env, "PATH", os.path.join(options.builddir, 'subprojects',
'gstreamer', 'docs'),
options)
options.sysroot)
prepend_env_var(env, "PATH", os.path.join(options.builddir, 'subprojects',
'gst-plugins-base', 'tools'),
options)
options.sysroot)
# Library and binary search paths
prepend_env_var(env, "PATH", os.path.join(PREFIX_DIR, 'bin'),
options)
options.sysroot)
if lib_path_envvar != 'PATH':
prepend_env_var(env, lib_path_envvar, os.path.join(PREFIX_DIR, 'lib'),
options)
options.sysroot)
prepend_env_var(env, lib_path_envvar, os.path.join(PREFIX_DIR, 'lib64'),
options)
options.sysroot)
elif 'QMAKE' in os.environ:
# There's no RPATH on Windows, so we need to set PATH for the qt5 DLLs
prepend_env_var(env, 'PATH', os.path.dirname(os.environ['QMAKE']),
options)
options.sysroot)
meson = get_meson()
targets_s = subprocess.check_output(meson + ['introspect', options.builddir, '--targets'])
@ -396,17 +385,17 @@ def get_subprocess_env(options, gst_version):
if TYPELIB_REG.search(filename):
prepend_env_var(env, "GI_TYPELIB_PATH",
os.path.join(options.builddir, root),
options)
options.sysroot)
elif is_library_target_and_not_plugin(target, filename):
prepend_env_var(env, lib_path_envvar,
os.path.join(options.builddir, root),
options)
options.sysroot)
elif is_binary_target_and_in_path(target, filename, bindir):
paths.add(os.path.join(options.builddir, root))
elif is_gio_module(target, filename, options.builddir):
prepend_env_var(env, 'GIO_EXTRA_MODULES',
os.path.join(options.builddir, root),
options)
options.sysroot)
# Search for the Plugin paths file either in the build directory root
# or check if gstreamer is a subproject of another project
@ -416,16 +405,16 @@ def get_subprocess_env(options, gst_version):
with open(plugin_paths) as f:
for plugin_path in json.load(f):
prepend_env_var(env, 'GST_PLUGIN_PATH', plugin_path,
options)
options.sysroot)
break
# Sort to iterate in a consistent order (`set`s and `hash`es are randomized)
for p in sorted(paths):
prepend_env_var(env, 'PATH', p, options)
prepend_env_var(env, 'PATH', p, options.sysroot)
if os.name != 'nt':
for p in sorted(mono_paths):
prepend_env_var(env, "MONO_PATH", p, options)
prepend_env_var(env, "MONO_PATH", p, options.sysroot)
presets = set()
encoding_targets = set()
@ -467,48 +456,48 @@ def get_subprocess_env(options, gst_version):
os.path.abspath(os.path.join(os.path.dirname(path), '..')))
for p in sorted(presets):
prepend_env_var(env, 'GST_PRESET_PATH', p, options)
prepend_env_var(env, 'GST_PRESET_PATH', p, options.sysroot)
for t in sorted(encoding_targets):
prepend_env_var(env, 'GST_ENCODING_TARGET_PATH', t, options)
prepend_env_var(env, 'GST_ENCODING_TARGET_PATH', t, options.sysroot)
# Check if meson has generated -uninstalled pkgconfig files
meson_uninstalled = pathlib.Path(options.builddir) / 'meson-uninstalled'
if meson_uninstalled.is_dir():
prepend_env_var(env, 'PKG_CONFIG_PATH', str(meson_uninstalled), options)
prepend_env_var(env, 'PKG_CONFIG_PATH', str(meson_uninstalled), options.sysroot)
for python_dir in sorted(python_dirs):
prepend_env_var(env, 'PYTHONPATH', python_dir, options)
prepend_env_var(env, 'PYTHONPATH', python_dir, options.sysroot)
for python_dir in sorted(overrides_dirs):
prepend_env_var(env, '_GI_OVERRIDES_PATH', python_dir, options)
prepend_env_var(env, '_GI_OVERRIDES_PATH', python_dir, options.sysroot)
mesonpath = os.path.join(SCRIPTDIR, "meson")
if os.path.join(mesonpath):
# Add meson/ into PYTHONPATH if we are using a local meson
prepend_env_var(env, 'PYTHONPATH', mesonpath, options)
prepend_env_var(env, 'PYTHONPATH', mesonpath, options.sysroot)
# Ensure that gst-python/gi is used first
prepend_env_var(env, "PYTHONPATH", os.path.join(SCRIPTDIR, 'subprojects', 'gst-python'),
options)
options.sysroot)
# For devhelp books
if 'XDG_DATA_DIRS' not in env or not env['XDG_DATA_DIRS']:
# Preserve default paths when empty
prepend_env_var(env, 'XDG_DATA_DIRS', '/usr/local/share/:/usr/share/', options)
prepend_env_var(env, 'XDG_DATA_DIRS', '/usr/local/share/:/usr/share/', '')
prepend_env_var(env, 'XDG_DATA_DIRS', os.path.join(options.builddir,
'subprojects',
'gst-docs',
'GStreamer-doc'),
options)
options.sysroot)
if 'XDG_CONFIG_DIRS' not in env or not env['XDG_CONFIG_DIRS']:
# Preserve default paths when empty
prepend_env_var(env, 'XDG_CONFIG_DIRS', '/etc/local/xdg:/etc/xdg', options)
prepend_env_var(env, 'XDG_CONFIG_DIRS', '/etc/local/xdg:/etc/xdg', '')
prepend_env_var(env, "XDG_CONFIG_DIRS", os.path.join(PREFIX_DIR, 'etc', 'xdg'),
options)
options.sysroot)
return env
@ -520,15 +509,6 @@ def get_windows_shell():
return result.decode().strip()
def macos_sip_enabled():
if platform.system() != 'Darwin':
return False
ret = subprocess.run(["csrutil", "status"], text=True, capture_output=True)
if not ret.stdout:
return True
return 'enabled' in ret.stdout
if __name__ == "__main__":
parser = argparse.ArgumentParser(prog="gst-env")
@ -592,7 +572,6 @@ if __name__ == "__main__":
else:
new_args += ['/c', 'start', '/b', '/wait'] + args
args = new_args
prompt_export = None
if not args:
if os.name != 'nt':
args = [os.environ.get("SHELL", os.path.realpath("/bin/sh"))]
@ -622,7 +601,7 @@ if __name__ == "__main__":
# Ignore SIGINT while using fish as the shell to make it behave
# like other shells such as bash and zsh.
# See: https://gitlab.freedesktop.org/gstreamer/gst-build/issues/18
signal.signal(signal.SIGINT, lambda _, __: True)
signal.signal(signal.SIGINT, lambda x, y: True)
# Set the prompt
args.append('--init-command')
prompt_cmd = '''functions --copy fish_prompt original_fish_prompt
@ -641,10 +620,10 @@ if __name__ == "__main__":
shutil.copyfileobj(src, tmprc)
tmprc.write('\n' + prompt_export)
tmprc.flush()
set_env_var(env, 'ZDOTDIR', tmpdir.name, options)
env['ZDOTDIR'] = tmpdir.name
try:
if options.only_environment:
for name, value in UPDATED_ENV.items():
for name, value in env.items():
print('{}={}'.format(name, shlex.quote(value)))
print('export {}'.format(name))
if prompt_export:
@ -654,9 +633,6 @@ if __name__ == "__main__":
print("Ignoring SIGINT when running on the CI,"
" as we get spurious sigint in there for some reason.")
signal.signal(signal.SIGINT, signal.SIG_IGN)
if macos_sip_enabled():
print('macOS System Integrity Protection is enabled: DYLD_LIBRARY_PATH cannot be set in the subshell')
print('To fix that, use `./gst-env.py --only-environment > gst.env && source gst.env`')
exit(subprocess.call(args, close_fds=False, env=env))
except subprocess.CalledProcessError as e:

View File

@ -1,5 +1,5 @@
project('gstreamer-full', 'c',
version : '1.27.1.1',
version : '1.27.0.1',
meson_version : '>= 1.4',
default_options : ['buildtype=debugoptimized',
# Needed due to https://github.com/mesonbuild/meson/issues/1889,
@ -35,16 +35,9 @@ endif
gitlint_req = '>= 0.18'
gitlint = find_program('gitlint', version: gitlint_req, required: false)
if gitlint.found()
git = find_program('git', required: false)
if git.found() and fs.is_dir(meson.current_source_dir() / '.git')
gitlint_status = run_command(git, 'hook', 'run', 'commit-msg', check: false)
# exit code 253 means "wrong invocation" in Gitlint
if gitlint_status.returncode() != 253
gitlint_status = run_command(gitlint, 'install-hook', check: false)
if gitlint_status.returncode() != 0
warning(gitlint_status.stderr().strip())
endif
endif
gitlint_status = run_command(gitlint, 'install-hook', check: false)
if gitlint_status.returncode() != 0
warning(gitlint_status.stderr().strip())
endif
else
warning('gitlint not found or too old, please install it with your package manager or `python3 -m pip install gitlint` to enable the commit message hook')
@ -145,6 +138,7 @@ subprojects = [
['gst-devtools', { 'option': get_option('devtools'), 'build-hotdoc': true}],
['gst-integration-testsuites', { 'option': get_option('devtools') }],
['gst-editing-services', { 'option': get_option('ges'), 'build-hotdoc': true}],
['gstreamer-vaapi', { 'option': get_option('vaapi'), 'build-hotdoc': true}],
['gstreamer-sharp', { 'option': get_option('sharp') }],
['pygobject', { 'option': get_option('python'), 'match_gst_version': false, 'sysdep': 'pygobject-3.0', 'sysdep_version': '>= 3.8' }],
['gst-python', { 'option': gst_python_option}],
@ -172,7 +166,7 @@ endif
orc_option = get_option('orc')
# There is a check below to keep this in sync with subprojects/gst-plugins-base/meson.build
orc_req = '>= 0.4.34'
orc_req = '>= 0.4.24'
orc_source_option = get_option('orc-source')
orc_subproject = disabler()
if orc_option.allowed()
@ -419,12 +413,12 @@ if building_full
init_static_plugins_c = configure_file(
output: 'gstinitstaticplugins.c',
command : [generate_init_static_plugins,
'-o', '@OUTPUT@',
'-p', all_plugin_names,
'-e', get_option('gst-full-elements'),
'-t', get_option('gst-full-typefind-functions'),
'-d', get_option('gst-full-device-providers'),
'-T', get_option('gst-full-dynamic-types'),
'-o ' + '@OUTPUT@',
'-p ' + all_plugin_names,
'-e ' + get_option('gst-full-elements'),
'-t ' + get_option('gst-full-typefind-functions'),
'-d ' + get_option('gst-full-device-providers'),
'-T ' + get_option('gst-full-dynamic-types'),
'--giomodules', ';'.join(giomodules),
]
)

View File

@ -8,6 +8,7 @@ option('devtools', type : 'feature', value : 'auto')
option('ges', type : 'feature', value : 'auto')
option('rtsp_server', type : 'feature', value : 'auto')
option('rs', type : 'feature', value : 'disabled')
option('vaapi', type : 'feature', value : 'disabled')
option('gst-examples', type : 'feature', value : 'auto', description : 'Build gst-examples subproject')
# Bindings
option('python', type : 'feature', value : 'auto')
@ -60,8 +61,6 @@ option('extra-checks', type : 'feature', value : 'enabled', description : 'Enabl
option('benchmarks', type : 'feature', value : 'auto')
option('tools', type : 'feature', value : 'auto', yield : true, description : 'Build command line tools')
option('orc', type : 'feature', value : 'auto', description : 'Optimized Inner Loop Runtime Compiler (SIMD)')
option('qt-method', type: 'combo', value: 'auto', choices: ['auto', 'pkg-config', 'qmake'],
description: 'Method to use to find Qt')
option('qt5', type : 'feature', value : 'auto', description : 'Qt5 toolkit support')
option('qt6', type : 'feature', value : 'auto', description : 'Qt6 toolkit support')
option('webrtc', type : 'feature', value : 'auto', description : 'WebRTC support')

View File

@ -18,7 +18,6 @@ if os.name == 'nt':
_GetShortPathNameW.argtypes = [wintypes.LPCWSTR, wintypes.LPWSTR, wintypes.DWORD]
_GetShortPathNameW.restype = wintypes.DWORD
def win32_get_short_path_name(long_name):
"""
Gets the short path name of a given long path.
@ -45,7 +44,8 @@ def get_wine_shortpath(winecmd, wine_paths):
try:
with open(os.devnull, 'w') as stderr:
wine_path = subprocess.check_output(
winecmd + ['cmd', '/C', getShortPathScript] + wine_paths,
winecmd +
['cmd', '/C', getShortPathScript] + wine_paths,
stderr=stderr).decode('utf-8')
except subprocess.CalledProcessError as e:
print("Could not get short paths: %s" % e)
@ -54,8 +54,8 @@ def get_wine_shortpath(winecmd, wine_paths):
os.remove(getShortPathScript)
if len(wine_path) > 2048:
raise AssertionError('WINEPATH size {} > 2048'
' this will cause random failure.'.format(
len(wine_path)))
' this will cause random failure.'.format(
len(wine_path)))
return wine_path
@ -112,6 +112,7 @@ class Colors:
cls.ENDC = '\033[0m'
def git(*args, repository_path='.', fatal=True):
try:
ret = subprocess.check_output(["git"] + list(args), cwd=repository_path,
@ -121,10 +122,9 @@ def git(*args, repository_path='.', fatal=True):
if fatal:
raise e
print("Non-fatal error running git {}:\n{}".format(' '.join(args), e))
return ''
return None
return ret
def accept_command(commands):
"""Search @commands and returns the first found absolute path."""
for command in commands:
@ -133,17 +133,16 @@ def accept_command(commands):
return command
return None
def get_meson():
meson = os.path.join(ROOTDIR, 'meson', 'meson.py')
if os.path.exists(meson):
return [sys.executable, meson]
mesonintrospect = os.environ.get('MESONINTROSPECT', '')
for comp in shlex.split(mesonintrospect):
for comp in shlex.split (mesonintrospect):
# mesonintrospect might look like "/usr/bin/python /somewhere/meson introspect",
# let's not get tricked
if 'python' in os.path.basename(comp):
if 'python' in os.path.basename (comp):
continue
if os.path.exists(comp):
if comp.endswith('.py'):

View File

@ -2,5 +2,4 @@
set -e
rustfmt --version
find -name "*.rs" -exec rustfmt "$@" --edition 2021 {} +

View File

@ -28,6 +28,7 @@ changelog_starts = {
'gst-rtsp-server': '5029c85a46a8c366c4bf272d503e22bbcd624ece',
'gst-editing-services': 'ee8bf88ebf131cf7c7161356540efc20bf411e14',
'gst-python': 'b3e564eff577e2f577d795051bbcca85d47c89dc',
'gstreamer-vaapi': 'c89e9afc5d43837c498a55f8f13ddf235442b83b',
'gst-devtools': 'da962d096af9460502843e41b7d25fdece7ff1c2',
'gstreamer-sharp': 'b94528f8e7979df49fedf137dfa228d8fe475e1b',
}

View File

@ -48,6 +48,14 @@ gst_init_static_plugins (void)
''')
# Retrieve the plugin name as it can be a plugin filename
def get_plugin_name(name):
for p in plugins:
if name in p:
return p
return ''
def process_features(features_list, plugins, feature_prefix):
plugins_list = plugins
feature_declaration = []
@ -58,13 +66,8 @@ def process_features(features_list, plugins, feature_prefix):
split = plugin.split(':')
plugin_name = split[0].strip()
if len(split) == 2:
if plugin_name in plugins_list:
plugins_list.remove(plugin_name)
else:
# The plugin name can be a filename
fname = f'libgst{plugin_name}.a'
if fname in plugins_list:
plugins_list.remove(fname)
if (get_plugin_name(plugin_name)) != '':
plugins_list.remove(get_plugin_name(plugin_name))
features = split[1].split(',')
for feature in features:
feature = feature.replace("-", "_")

View File

@ -125,11 +125,6 @@ def build_cache(builddir, subproject, targets, subdir):
os.path.join(builddir, f'subprojects/{subproject}/docs/gst_plugins_cache.json'),
] + targets
env = os.environ.copy()
try:
del env['GST_PLUGIN_FEATURE_RANK'] # Ensure default ranks are applied
except KeyError:
pass
subprocess.run(cmd)
class StashManager:
@ -195,64 +190,6 @@ def run_doc_checks(modified_files):
for conf_path in confs_need_rebuild:
subprocess.run(['hotdoc', 'run', '--fatal-warnings', '--disable-warnings', '--enabled-warnings', 'missing-since-marker', '--conf-file', conf_path, '--previous-symbol-index', 'subprojects/gst-docs/symbols/symbol_index.json'], check=True)
def check_ges_children_props_docs(modified_files):
"""Check if GES children properties documentation is up to date"""
# Check if any GES source files were modified
ges_source_modified = any(
('subprojects/gst-editing-services/ges/' in f and (f.endswith('.c') or f.endswith('.h')) or f.endswith('document-children-props.py'))
for f in modified_files
)
if not ges_source_modified:
return
print('GES source files modified, checking children properties documentation...')
# Path to the script relative to git root
srcdir = Path(os.getcwd())
script_path = srcdir / 'subprojects/gst-editing-services/docs/libs/document-children-props.py'
if not script_path.exists():
print('WARNING: document-children-props.py script not found, skipping check')
return
# Run the script in gst-env (needs build environment)
builddir = find_builddir()
if builddir is None:
print('WARNING: No build directory found, cannot run document-children-props.py')
return
try:
# Generate environment file to be sourced
with tempfile.NamedTemporaryFile(mode='w', suffix='.sh', delete=False) as env_file:
env_temp_name = env_file.name
cmd = f'./gst-env.py --builddir {builddir} --only-environment > {env_temp_name} && source {env_temp_name} && cd {script_path.parent} && python3 document-children-props.py && rm {env_temp_name}'
subprocess.run(cmd, shell=True, check=True)
# Check if there are any diffs in the children-props markdown files
script_dir = script_path.parent
docs_files = list(script_dir.glob('*-children-props.md'))
if docs_files:
# Convert paths to be relative to git root for git diff
relative_docs_files = [str(f.relative_to(srcdir)) for f in docs_files]
try:
subprocess.run(['git', 'diff', '--ignore-submodules', '--exit-code'] + relative_docs_files, check=True)
print('GES children properties documentation is up to date')
except subprocess.CalledProcessError:
print('WARNING: You have changes in GES children properties documentation')
# Automatically stage the updated documentation files
subprocess.run(['git', 'add'] + relative_docs_files, check=True)
print('Updated documentation files have been automatically staged.')
print('Please verify the changes and proceed with your commit.')
else:
print('No GES children properties documentation files found')
except subprocess.CalledProcessError as e:
print(f'WARNING: Failed to run document-children-props.py: {e}')
print('Please check the script manually if you modified GES properties')
except Exception as e:
print(f'WARNING: Error checking GES children properties documentation: {e}')
def main():
modified_files = system('git', 'diff-index', '--cached',
'--name-only', 'HEAD', '--diff-filter=ACMR').split("\n")[:-1]
@ -261,7 +198,6 @@ def main():
with StashManager():
try:
run_doc_checks(modified_files)
check_ges_children_props_docs(modified_files)
except Exception as e:
print (e)
sys.exit(1)

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python3
#!/usr/bin/env python
from itertools import filterfalse
import os
@ -6,7 +6,6 @@ import re
import subprocess
from gst_indent_common import indent
def readfile(f):
if os.path.exists(f):
expressions = open(f, 'r', encoding='utf-8').read().splitlines()

View File

@ -1,8 +1,8 @@
#!/usr/bin/env python3
#!/usr/bin/env python
from sys import argv
from gst_indent_common import indent
if __name__ == '__main__':
indent(*argv[1:])
indent(argv[1:])

View File

@ -12,6 +12,7 @@ release_modules = [
'gst-editing-services',
'gst-devtools',
'gst-python',
'gstreamer-vaapi',
'gst-docs',
'gstreamer-sharp',
]
@ -42,7 +43,7 @@ if out_of_sync_list.length() > 0
Run
for m in @1@; do cp scripts/gen-changelog.py subprojects/$m/scripts/gen-changelog.py; done
for m in @1@; do cp scripts/gen-changelog.py subprojects/$m/scripts/gen-changelog.py; done
from the top-level git source directory to sync them up.

View File

@ -1,46 +0,0 @@
# Security Advisory 2025-0001 (ZDI-CAN-26596, CVE-2025-3887)
<div class="vertical-table">
| | |
| ----------------- | ----------------------------------------- |
| Summary | Stack buffer-overflow in H.265 codec parser during slice header parsing |
| Date | 2025-04-24 18:00 |
| Affected Versions | GStreamer gst-plugins-bad 1.x < 1.26.1 |
| IDs | GStreamer-SA-2025-0001<br/>ZDI-CAN-26596<br/>CVE-2025-3887 |
</div>
## Details
Stack buffer-overflow in H.265 codec parser when handling malformed streams
before GStreamer 1.26.1.
## Impact
It is possible for a malicious third party to trigger stack buffer-overflows that
can result in a crash of the application.
## Solution
The gst-plugins-bad 1.26.1 release addresses the issue. People using older
branches of GStreamer should apply the patch and recompile.
## References
### The GStreamer project
- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org)
### CVE Database Entries
- [CVE-2025-3887](https://www.cve.org/CVERecord?id=CVE-2025-3887)
### GStreamer 1.26.1 release
- [Release Notes](/releases/1.26/#1.26.1)
- [GStreamer Plugins Bad 1.26.1](/src/gst-plugins-bad/gst-plugins-bad-1.26.1.tar.xz)
### Patches
- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8884.patch)

View File

@ -1,48 +0,0 @@
# Security Advisory 2025-0002 (CVE-2025-47807)
<div class="vertical-table">
| | |
| ----------------- | --- |
| Summary | NULL-pointer dereference in SubRip subtitle parser|
| Date | 2025-05-29 23:30 |
| Affected Versions | GStreamer gst-plugins-base < 1.26.2 |
| IDs | GStreamer-SA-2025-0002<br/>CVE-2025-47807 |
</div>
## Details
A NULL-pointer dereference in the SubRip subtitle parser that can cause crashes
for certain input files.
## Impact
It is possible for a malicious third party to trigger a NULL-pointer dereference
that can result in a crash of the application.
## Solution
The gst-plugins-base 1.26.2 release addresses the issue. People using older
branches of GStreamer should apply the patch and recompile.
## References
### The GStreamer project
- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org)
### CVE Database Entries
- [CVE-2025-47807](https://www.cve.org/CVERecord?id=CVE-2025-47807)
### GStreamer releases
#### 1.26 (current stable)
- [GStreamer 1.26.2 release notes](/releases/1.26/#1.26.2)
- [GStreamer Plugins Base 1.26.2](/src/gst-plugins-base/gst-plugins-base-1.26.2.tar.xz)
### Patches
- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9132.patch) (3-in-1)

View File

@ -1,48 +0,0 @@
# Security Advisory 2025-0003 (CVE-2025-47808)
<div class="vertical-table">
| | |
| ----------------- | --- |
| Summary | NULL-pointer dereference in TMPlayer subtitle parser|
| Date | 2025-05-29 23:30 |
| Affected Versions | GStreamer gst-plugins-base < 1.26.2 |
| IDs | GStreamer-SA-2025-0003<br/>CVE-2025-47808 |
</div>
## Details
A NULL-pointer dereference in the TMPlayer subtitle parser that can cause crashes
for certain input files.
## Impact
It is possible for a malicious third party to trigger a NULL-pointer dereference
that can result in a crash of the application.
## Solution
The gst-plugins-base 1.26.2 release addresses the issue. People using older
branches of GStreamer should apply the patch and recompile.
## References
### The GStreamer project
- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org)
### CVE Database Entries
- [CVE-2025-47808](https://www.cve.org/CVERecord?id=CVE-2025-47808)
### GStreamer releases
#### 1.26 (current stable)
- [GStreamer 1.26.2 release notes](/releases/1.26/#1.26.2)
- [GStreamer Plugins Base 1.26.2](/src/gst-plugins-base/gst-plugins-base-1.26.2.tar.xz)
### Patches
- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9132.patch) (3-in-1)

View File

@ -1,56 +0,0 @@
# Security Advisory 2025-0004 (CVE-2025-47219)
<div class="vertical-table">
| | |
| ----------------- | --- |
| Summary | Out-of-bounds read in MOV/MP4 demuxer|
| Date | 2025-05-29 23:30 |
| Affected Versions | GStreamer gst-plugins-good < 1.26.2 |
| IDs | GStreamer-SA-2025-0004<br/>CVE-2025-47219 |
</div>
## Details
An Out-of-bounds read in the MOV/MP4 demuxer that can cause crashes or
potentially information leaks for certain input files.
## Impact
It is possible for a malicious third party to trigger an Out-of-bounds read
that can result in a crash of the application or potentially information leaks.
## Solution
The gst-plugins-good 1.26.2 release addresses the issue.
People using older versions of GStreamer should either upgrade or apply the
minimal patch and recompile.
Note that the minimal patch is not included in the 1.26.2 release in that form
since this issue was solved independently [in a different way][MR-8929] as part
of a bigger refactoring that solved this and many other issues.
[MR-8929]: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929
## References
### The GStreamer project
- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org)
### CVE Database Entries
- [CVE-2025-47219](https://www.cve.org/CVERecord?id=CVE-2025-47219)
### GStreamer releases
#### 1.26 (current stable)
- [GStreamer 1.26.2 release notes](/releases/1.26/#1.26.2)
- [GStreamer Plugins Good 1.26.2](/src/gst-plugins-good/gst-plugins-good-1.26.2.tar.xz)
### Patches
- [Patch for 1.26.1 and earlier versions](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9137.patch)

View File

@ -1,49 +0,0 @@
# Security Advisory 2025-0005 (CVE-2025-47183)
<div class="vertical-table">
| | |
| ----------------- | --- |
| Summary | Out-of-bounds read in MOV/MP4 demuxer|
| Date | 2025-05-29 23:30 |
| Affected Versions | GStreamer gst-plugins-good < 1.26.2 |
| IDs | GStreamer-SA-2025-0005<br/>CVE-2025-47183 |
</div>
## Details
An Out-of-bounds read in the MOV/MP4 demuxer that can cause crashes or
potentially information leaks for certain input files.
## Impact
It is possible for a malicious third party to trigger an Out-of-bounds read
that can result in a crash of the application or potentially information leaks.
## Solution
The gst-plugins-good 1.26.2 release addresses the issue. People using older
branches of GStreamer should apply the patch and recompile.
## References
### The GStreamer project
- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org)
### CVE Database Entries
- [CVE-2025-47183](https://www.cve.org/CVERecord?id=CVE-2025-47183)
### GStreamer releases
#### 1.26 (current stable)
- [GStreamer 1.26.2 release notes](/releases/1.26/#1.26.2)
- [GStreamer Plugins Good 1.26.2](/src/gst-plugins-good/gst-plugins-good-1.26.2.tar.xz)
### Patches
- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9131.patch)

View File

@ -1,48 +0,0 @@
# Security Advisory 2025-0006 (CVE-2025-47806)
<div class="vertical-table">
| | |
| ----------------- | --- |
| Summary | Stack buffer overflow in SubRip subtitle parser|
| Date | 2025-05-29 23:30 |
| Affected Versions | GStreamer gst-plugins-base < 1.26.2 |
| IDs | GStreamer-SA-2025-0006<br/>CVE-2025-47806 |
</div>
## Details
A stack buffer overflow in the SubRip subtitle parser that can cause crashes for
certain input files.
## Impact
It is possible for a malicious third party to trigger a stack buffer overflow
that can result in a crash of the application.
## Solution
The gst-plugins-base 1.26.2 release addresses the issue. People using older
branches of GStreamer should apply the patch and recompile.
## References
### The GStreamer project
- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org)
### CVE Database Entries
- [CVE-2025-47806](https://www.cve.org/CVERecord?id=CVE-2025-47806)
### GStreamer releases
#### 1.26 (current stable)
- [GStreamer 1.26.2 release notes](/releases/1.26/#1.26.2)
- [GStreamer Plugins Base 1.26.2](/src/gst-plugins-base/gst-plugins-base-1.26.2.tar.xz)
### Patches
- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9132.patch) (3-in-1)

View File

@ -1,10 +1,9 @@
[wrap-file]
directory = fontconfig-2.15.0
source_url = https://www.freedesktop.org/software/fontconfig/release/fontconfig-2.15.0.tar.xz
source_fallback_url = https://deb.debian.org/debian/pool/main/f/fontconfig/fontconfig_2.15.0.orig.tar.xz
source_filename = fontconfig-2.15.0.tar.xz
source_hash = 63a0658d0e06e0fa886106452b58ef04f21f58202ea02a94c39de0d3335d7c0e
diff_files = fontconfig-2.15.0/0001-meson-Always-use-posix-path-even-on-Windows.patch
directory = fontconfig-2.14.2
source_url = https://www.freedesktop.org/software/fontconfig/release/fontconfig-2.14.2.tar.xz
source_filename = fontconfig-2.14.2.tar.xz
source_hash = dba695b57bce15023d2ceedef82062c2b925e51f5d4cc4aef736cf13f60a468b
diff_files = fontconfig-2.14.2/0001-meson-Always-use-posix-path-even-on-Windows.patch, fontconfig-2.14.2/0001-meson-Always-write-utf-8-files-with-LF-newlines.patch
[provide]
fontconfig = fontconfig_dep

View File

@ -1,5 +1,5 @@
[wrap-git]
directory = gl-headers
url = https://gitlab.freedesktop.org/gstreamer/meson-ports/gl-headers.git
push-url = git@gitlab.freedesktop.org:gstreamer/meson-ports/gl-headers.git
revision = 1d237e348de930f9f561620d2e6a31d94019525f
directory=gl-headers
url=https://gitlab.freedesktop.org/gstreamer/meson-ports/gl-headers.git
push-url=git@gitlab.freedesktop.org:gstreamer/meson-ports/gl-headers.git
revision=5c8c7c0d3ca1f0b783272dac0b95e09414e49bc8

View File

@ -1,6 +1,6 @@
[wrap-file]
directory = glib-networking-2.80.1
source_url = https://download.gnome.org/sources/glib-networking/2.80/glib-networking-2.80.1.tar.xz
source_fallback_url = https://deb.debian.org/debian/pool/main/g/glib-networking/glib-networking_2.80.1.orig.tar.xz
source_filename = glib-networking-2.80.1.tar.xz
source_hash = b80e2874157cd55071f1b6710fa0b911d5ac5de106a9ee2a4c9c7bee61782f8e
directory = glib-networking-2.78.1
source_url = https://download.gnome.org/sources/glib-networking/2.78/glib-networking-2.78.1.tar.xz
source_fallback_url = https://ftp.acc.umu.se/pub/gnome/sources/glib-networking/2.78/glib-networking-2.78.1.tar.xz
source_filename = glib-networking-2.78.1.tar.xz
source_hash = e48f2ddbb049832cbb09230529c5e45daca9f0df0eda325f832f7379859bf09f

View File

@ -1,11 +1,10 @@
[wrap-file]
directory = glib-2.82.5
source_url = https://download.gnome.org/sources/glib/2.82/glib-2.82.5.tar.xz
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/glib_2.82.5-1/glib-2.82.5.tar.xz
source_filename = glib-2.82.5.tar.xz
source_hash = 05c2031f9bdf6b5aba7a06ca84f0b4aced28b19bf1b50c6ab25cc675277cbc3f
wrapdb_version = 2.82.5-1
diff_files = glib-2.82.5/0001-Windows-fix-Python-path-cannot-contain-spaces.patch
directory = glib-2.82.4
source_url = https://download.gnome.org/sources/glib/2.82/glib-2.82.4.tar.xz
source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/glib_2.82.4-1/glib-2.82.4.tar.xz
source_filename = glib-2.82.4.tar.xz
source_hash = 37dd0877fe964cd15e9a2710b044a1830fb1bd93652a6d0cb6b8b2dff187c709
wrapdb_version = 2.82.4-1
[provide]
dependency_names = gthread-2.0, gobject-2.0, gmodule-no-export-2.0, gmodule-export-2.0, gmodule-2.0, glib-2.0, gio-2.0, gio-windows-2.0, gio-unix-2.0

View File

@ -1,11 +1,11 @@
[wrap-file]
directory = gobject-introspection-1.84.0
source_url = https://download.gnome.org/sources/gobject-introspection/1.84/gobject-introspection-1.84.0.tar.xz
source_fallback_url = https://ftp.acc.umu.se/pub/gnome/sources/gobject-introspection/1.84/gobject-introspection-1.84.0.tar.xz
source_filename = gobject-introspection-1.84.0.tar.xz
source_hash = 945b57da7ec262e5c266b89e091d14be800cc424277d82a02872b7d794a84779
wrapdb_version = 1.84.0-0
diff_files = gobject-introspection-1.84.0/0003-girepository-Load-typelibs-from-a-relocatable-prefix.patch, gobject-introspection-1.84.0/0004-build-Fix-b_vscrt-value-use-without-converting-it-to.patch, gobject-introspection-1.84.0/0006-tests-Fix-path-parsing-for-Windows.patch, gobject-introspection-1.84.0/0007-g-ir-tools-Support-reading-rspfiles-for-arguments.patch, gobject-introspection-1.84.0/0008-meson-Fix-fs.copyfile-semantics-breaking-GIR-build-w.patch, gobject-introspection-1.84.0/0009-giscanner-Deduplicate-arguments-and-use-response-fil.patch, gobject-introspection-1.84.0/0010-dumper-Fix-introspection-binaries-missing-rpaths-for.patch
directory = gobject-introspection-1.74.0
source_url = https://download.gnome.org/sources/gobject-introspection/1.74/gobject-introspection-1.74.0.tar.xz
source_fallback_url = https://ftp.acc.umu.se/pub/gnome/sources/gobject-introspection/1.74/gobject-introspection-1.74.0.tar.xz
source_filename = gobject-introspection-1.74.0.tar.xz
source_hash = 347b3a719e68ba4c69ff2d57ee2689233ea8c07fc492205e573386779e42d653
wrapdb_version = 1.74.0-0
diff_files = gobject-introspection-1.74.0/0001-Fix-gir-build-when-using-subprojects-dependencies.patch, gobject-introspection-1.74.0/0001-gir-stop-assuming-glib-source-and-build-dirs-using-v.patch, gobject-introspection-1.74.0/0001-build-Work-around-an-undocumented-GLib-variable-rena.patch
[provide]
dependency_names = gobject-introspection-1.0

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,9 @@
This is GStreamer gst-devtools 1.27.1.
This is GStreamer gst-devtools 1.27.0.1.
GStreamer 1.27 is the unstable development branch leading up to the next major
stable version which will be 1.28.
The 1.27 development series adds new features on top of the 1.26 series and is
The 1.27 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.
@ -40,6 +40,10 @@ with other GStreamer modules for a complete multimedia experience.
where you can find audio and video decoders and encoders
for a wide variety of formats including H.264, AAC, etc.
- gstreamer-vaapi: hardware-accelerated video decoding and encoding using
VA-API on Linux. Primarily for Intel graphics hardware.
(Deprecated, use the new "va" plugin instead)
- gst-rtsp-server: library to serve files or streaming pipelines via RTSP
- gst-editing-services: library an plugins for non-linear editing

View File

@ -1,3 +0,0 @@
target/
node_modules/

File diff suppressed because it is too large Load Diff

View File

@ -20,17 +20,17 @@ once_cell = "1"
clap = { version = "4", features = ["derive"] }
serde = { version = "1.0", features = ["derive"] }
actix-web-static-files = "4.0"
static-files = { version = "0.2.5", features = ["sort"] }
static-files = "0.2.1"
glob = "0.3"
single-instance = "0.3.3"
opener = "0.8"
opener = "0.7.1"
anyhow = "1.0"
[target.'cfg(windows)'.dependencies]
windows = { version = "0.61", features = ["Win32_UI_Shell"] }
windows = { version = "0.60", features = ["Win32_UI_Shell"] }
[build-dependencies]
static-files = { version = "0.2.5", features = ["sort"] }
static-files = "0.2.1"
[[bin]]
name = "gst-dots-viewer"

View File

@ -1,18 +0,0 @@
// Import all dependencies first
import $ from 'jquery';
import 'jquery-mousewheel';
import 'jquery-color';
import 'bootstrap';
import 'dragscroll';
import * as vizModule from '@viz-js/viz';
import FuseModule from 'fuse.js';
// Make required libraries available globally
window.$ = window.jQuery = $;
window.viz = vizModule;
window.instance = vizModule.instance;
window.Fuse = FuseModule;
// Import Bootstrap CSS
import 'bootstrap/dist/css/bootstrap.min.css';

View File

@ -1,4 +1,4 @@
if not add_languages('rust', required: get_option('dots_viewer'), native: false)
if not add_languages('rust', required: get_option('dots_viewer'))
subdir_done()
endif

File diff suppressed because it is too large Load Diff

View File

@ -4,30 +4,12 @@
"description": "GStreamer dot files viewer",
"main": "static/js/gstdots.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack",
"build:dev": "webpack --config webpack.config.js --mode development"
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Thibault Saunier <tsaunier@igalia.com>",
"license": "MPL-2.0",
"dependencies": {
"@viz-js/viz": "^3.4.0",
"bootstrap": "^3.3.4",
"dragscroll": "0.0.8",
"fuse.js": "^7.0.0",
"jquery": "^2.2.4",
"jquery-color": "^2.2.0",
"jquery-mousewheel": "^3.2.2"
},
"devDependencies": {
"copy-webpack-plugin": "^11.0.0",
"css-loader": "^7.1.2",
"css-minimizer-webpack-plugin": "^7.0.2",
"file-loader": "^6.2.0",
"mini-css-extract-plugin": "^2.9.2",
"style-loader": "^4.0.0",
"terser-webpack-plugin": "^5.3.14",
"webpack": "^5.98.0",
"webpack-cli": "^5.1.4"
"fuse.js": "^7.0.0"
}
}

View File

@ -30,13 +30,13 @@
white-space: nowrap;
}
/* allow text selection for copying */
/* stop people selecting text on nodes */
.graphviz-svg text {
-webkit-touch-callout: text;
-webkit-user-select: text;
-khtml-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
cursor: text;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: default;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,40 +0,0 @@
/*!
* Sizzle CSS Selector Engine v2.2.1
* http://sizzlejs.com/
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2015-10-17
*/
/*!
* jQuery Color Animations v2.2.0
* https://github.com/jquery/jquery-color
*
* Copyright OpenJS Foundation and other contributors
* Released under the MIT license.
* http://jquery.org/license
*
* Date: Sun May 10 09:02:36 2020 +0200
*/
/*!
* jQuery JavaScript Library v2.2.4
* http://jquery.com/
*
* Includes Sizzle.js
* http://sizzlejs.com/
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2016-05-20T17:23Z
*/
/*!
* jQuery Mousewheel 3.2.2
* Copyright OpenJS Foundation and other contributors
*/

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,5 @@
import "/dist/bundle.js";
import { instance } from "/js/viz-standalone.mjs";
import Fuse from '/js/fuse.min.mjs'
let ws = null;
@ -53,7 +54,7 @@ async function generateSvg(img) {
img.creating_svg = true;
try {
let viz = await window.instance();
let viz = await instance();
const svg = viz.renderSVGElement(img.dot_info.content);
img.src = URL.createObjectURL(new Blob([svg.outerHTML], { type: 'image/svg+xml' }));
img.creating_svg = false;
@ -302,7 +303,7 @@ function updateSearch() {
title: div.querySelector('h2').textContent
}));
const fuse = new window.Fuse(list, options);
const fuse = new Fuse(list, options);
const results = fuse.search(input.value);
for (let div of allDivs) {

View File

@ -1,125 +0,0 @@
/**
* Pipeline dot navigation functionality
*
* Makes pipeline-dot references clickable for navigation between pipeline views.
* Handles URL generation and navigation for pipeline dot references.
*/
class PipelineNavigationManager {
constructor(tooltipManager) {
this.tooltipManager = tooltipManager;
}
/**
* Processes all pipeline-dot references in SVG to make them clickable
* @param {jQuery} $svg - jQuery object containing the SVG element
*/
setupPipelineDotNavigation($svg) {
$svg.find(".cluster").each((index, cluster) => {
$(cluster).find("text, tspan").each((index, element) => {
const text = element.textContent;
if (this.isPipelineDotReference(text)) {
this.makePipelineDotClickable(element, text);
}
});
});
}
/**
* Checks if text content is a pipeline-dot reference
* @param {string} text - Text content to check
* @returns {boolean} True if text is a pipeline-dot reference
*/
isPipelineDotReference(text) {
return text && text.startsWith("pipeline-dot=") && text.includes(".dot");
}
/**
* Makes a pipeline-dot element clickable with proper styling and handlers
* @param {Element} element - DOM element to make clickable
* @param {string} text - Original text content
*/
makePipelineDotClickable(element, text) {
const pipelineDot = this.extractPipelineDotFilename(text);
// Style as a clickable link
$(element).css({
'text-decoration': 'underline',
'cursor': 'pointer',
'color': '#007acc'
});
// Add click handler for navigation
$(element).off('click.pipeline-nav').on('click.pipeline-nav', (evt) => {
evt.preventDefault();
evt.stopPropagation();
// Only hide tooltip if it's not in interactive mode
if (this.tooltipManager && !this.tooltipManager.isInteractive()) {
this.tooltipManager.hideTooltip();
}
this.navigateToPipeline(pipelineDot);
});
// Add hover effects
this.setupHoverEffects(element);
}
/**
* Extracts the pipeline dot filename from the full text
* @param {string} text - Full pipeline-dot text
* @returns {string} Extracted filename
*/
extractPipelineDotFilename(text) {
let pipelineDot = text;
if (pipelineDot.includes("pipeline-dot=\"")) {
pipelineDot = pipelineDot.replace(/pipeline-dot="([^"]+)"/, "$1");
} else {
pipelineDot = pipelineDot.replace(/pipeline-dot=([^\s]+)/, "$1");
}
return pipelineDot;
}
/**
* Sets up hover effects for clickable pipeline-dot links
* @param {Element} element - DOM element to add hover effects to
*/
setupHoverEffects(element) {
$(element).on('mouseenter', function () {
$(this).css({
'color': '#0056b3',
'cursor': 'pointer'
});
}).on('mouseleave', function () {
$(this).css({
'color': '#007acc',
'cursor': 'pointer'
});
});
}
/**
* Navigates to the specified pipeline
* @param {string} pipelineDot - Pipeline dot filename to navigate to
*/
navigateToPipeline(pipelineDot) {
// Check if we're in an iframe (overlay.html context)
if (window.parent !== window) {
// We're in an iframe, navigate the parent window
const newUrl = window.parent.location.origin + "/?pipeline=" + encodeURIComponent(pipelineDot);
window.parent.location.href = newUrl;
} else {
// We're in the main window
const newUrl = window.location.origin + "/?pipeline=" + encodeURIComponent(pipelineDot);
window.location.href = newUrl;
}
}
}
// Export for module usage
if (typeof module !== 'undefined' && module.exports) {
module.exports = PipelineNavigationManager;
} else {
window.PipelineNavigationManager = PipelineNavigationManager;
}

View File

@ -1,173 +0,0 @@
/**
* SVG Overlay Manager
*
* Main coordinator for all SVG overlay functionality including tooltips,
* text ellipsizing, pipeline navigation, and drag-to-pan interaction.
*/
class SvgOverlayManager {
constructor() {
this.tooltipManager = null;
this.pipelineNavigationManager = null;
this.textEllipsizerManager = null;
this.gv = null;
}
/**
* Initializes all managers and sets up the SVG overlay functionality
*/
init() {
// Initialize managers
this.tooltipManager = new TooltipManager();
this.pipelineNavigationManager = new PipelineNavigationManager(this.tooltipManager);
this.textEllipsizerManager = new TextEllipsizerManager(this.tooltipManager, this.pipelineNavigationManager);
// Set up GraphViz SVG functionality
this.setupGraphvizSvg();
}
/**
* Sets up GraphViz SVG functionality and event handlers
*/
setupGraphvizSvg() {
$("#graph").graphviz({
url: this.getSvgUrl(),
ready: () => {
this.onSvgReady();
}
});
}
/**
* Called when SVG is loaded and ready
*/
onSvgReady() {
this.gv = $("#graph").data('graphviz.svg');
const $svg = $("#graph svg");
// Set up node click functionality for highlighting
this.setupNodeHighlighting();
// Set up smart drag-to-pan behavior that doesn't interfere with text selection
this.setupSmartDragBehavior();
// Set up keyboard shortcuts
this.setupKeyboardShortcuts();
// Set up save SVG functionality
this.setupSaveSvg();
// Process SVG content
this.processSvgContent($svg);
}
/**
* Processes SVG content with all managers
* @param {jQuery} $svg - jQuery object containing the SVG element
*/
processSvgContent($svg) {
// Set up pipeline-dot navigation
this.pipelineNavigationManager.setupPipelineDotNavigation($svg);
// Process text ellipsizing (this must come after pipeline navigation setup)
this.textEllipsizerManager.ellipsizeLongText($svg);
}
/**
* Sets up node click functionality for highlighting connected nodes
*/
setupNodeHighlighting() {
this.gv.nodes().on('click', function () {
const gv = $("#graph").data('graphviz.svg');
let $set = $();
$set.push(this);
$set = $set.add(gv.linkedFrom(this, true));
$set = $set.add(gv.linkedTo(this, true));
gv.highlight($set, true);
gv.bringToFront($set);
});
}
/**
* Sets up smart drag behavior that allows text selection while preserving pan functionality
*/
setupSmartDragBehavior() {
const graphDiv = document.getElementById('graph');
// Intercept mousedown events to prevent dragscroll on text elements
graphDiv.addEventListener('mousedown', (e) => {
if (e.target.tagName === 'text' || e.target.tagName === 'tspan') {
if (e.target.textContent &&
e.target.textContent.startsWith("pipeline-dot=") &&
e.target.textContent.includes(".dot")) {
return; // Let pipeline dot click handler take precedence
}
e.stopPropagation(); // Stop dragscroll for regular text
return true;
}
}, true);
}
/**
* Sets up keyboard shortcuts for the SVG viewer
*/
setupKeyboardShortcuts() {
$(document).on('keyup', (evt) => {
if (evt.key == "Escape") {
this.gv.highlight();
} else if (evt.key == "w") {
this.gv.scaleInView((this.gv.zoom.percentage + 100));
} else if (evt.key == "s") {
this.gv.scaleInView((this.gv.zoom.percentage - 100) || 100);
}
});
}
/**
* Sets up SVG save functionality
*/
setupSaveSvg() {
$("#save-svg").on('click', () => {
const svgElement = $("#graph svg")[0];
const svgData = new XMLSerializer().serializeToString(svgElement);
const blob = new Blob([svgData], { type: "image/svg+xml;charset=utf-8" });
const url = URL.createObjectURL(blob);
const title = document.getElementById("title").textContent.trim();
const downloadLink = document.createElement("a");
downloadLink.href = url;
downloadLink.download = title + ".svg";
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
URL.revokeObjectURL(url);
});
}
/**
* Gets the SVG URL from query parameters
* @returns {string} SVG URL
*/
getSvgUrl() {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get('svg');
}
/**
* Gets the title from query parameters and sets it in the document
*/
setTitle() {
const urlParams = new URLSearchParams(window.location.search);
const title = urlParams.get('title');
if (title) {
document.getElementById("title").textContent = title;
document.title = "Dots viewer: " + title;
}
}
}
// Export for module usage
if (typeof module !== 'undefined' && module.exports) {
module.exports = SvgOverlayManager;
} else {
window.SvgOverlayManager = SvgOverlayManager;
}

View File

@ -1,160 +0,0 @@
/**
* Text ellipsizing functionality for SVG elements
*
* Ellipsizes long text content (>80 chars) and provides tooltips with full content.
* Integrates with tooltip system for interactive copy/paste functionality.
*/
class TextEllipsizerManager {
constructor(tooltipManager, pipelineNavigationManager) {
this.tooltipManager = tooltipManager;
this.pipelineNavigationManager = pipelineNavigationManager;
this.maxLength = 80;
}
/**
* Processes all text elements in SVG to ellipsize long content
* @param {jQuery} $svg - jQuery object containing the SVG element
*/
ellipsizeLongText($svg) {
$svg.find("text, tspan").each((index, element) => {
const text = element.textContent;
if (this.shouldEllipsize(text)) {
this.ellipsizeElement(element, text);
}
});
}
/**
* Determines if text should be ellipsized
* @param {string} text - Text content to check
* @returns {boolean} True if text should be ellipsized
*/
shouldEllipsize(text) {
return text && text.length > this.maxLength;
}
/**
* Ellipsizes an element and sets up tooltip functionality
* @param {Element} element - DOM element to ellipsize
* @param {string} originalText - Original full text content
*/
ellipsizeElement(element, originalText) {
const ellipsizedText = originalText.substring(0, 77) + "...";
// Update the text content
$(element).text(ellipsizedText);
// Store original text and mark as having tooltip
$(element).data('original-text', originalText);
$(element).attr('data-has-tooltip', 'true');
// Style to indicate there's more content
$(element).css({
'cursor': 'help'
});
this.setupTooltipHandlers(element, originalText);
}
/**
* Sets up tooltip handlers for ellipsized elements
* @param {Element} element - DOM element to add handlers to
* @param {string} originalText - Original full text content
*/
setupTooltipHandlers(element, originalText) {
const isPipelineDot = this.pipelineNavigationManager.isPipelineDotReference(originalText);
if (!isPipelineDot) {
this.setupRegularTooltipHandlers(element, originalText);
} else {
this.setupPipelineDotTooltipHandlers(element, originalText);
}
}
/**
* Sets up tooltip handlers for regular (non-pipeline-dot) elements
* @param {Element} element - DOM element to add handlers to
* @param {string} originalText - Original full text content
*/
setupRegularTooltipHandlers(element, originalText) {
$(element).on('mouseenter', (e) => {
this.tooltipManager.showTooltip(element, originalText, e);
});
$(element).on('mousemove', (e) => {
if (!this.tooltipManager.isInteractive()) {
this.tooltipManager.showTooltip(element, originalText, e);
}
});
$(element).on('mouseleave.tooltip', () => {
// Don't hide tooltip on mouseleave if it's interactive
if (!this.tooltipManager.isInteractive()) {
this.tooltipManager.hideTooltip();
}
});
// Double-click to make tooltip interactive
$(element).on('dblclick', (e) => {
e.preventDefault();
e.stopPropagation();
if (this.tooltipManager.$tooltip.hasClass('show')) {
this.tooltipManager.makeTooltipInteractive();
}
});
}
/**
* Sets up tooltip handlers for pipeline-dot elements (with navigation functionality)
* @param {Element} element - DOM element to add handlers to
* @param {string} originalText - Original full text content
*/
setupPipelineDotTooltipHandlers(element, originalText) {
// Make it clickable for navigation
this.pipelineNavigationManager.makePipelineDotClickable(element, originalText);
// Add tooltip functionality
$(element).on('mouseenter', (e) => {
$(element).css({
'color': '#0056b3',
'cursor': 'pointer'
});
this.tooltipManager.showTooltip(element, originalText, e);
});
$(element).on('mousemove', (e) => {
if (!this.tooltipManager.isInteractive()) {
this.tooltipManager.showTooltip(element, originalText, e);
}
});
$(element).on('mouseleave.tooltip', () => {
$(element).css({
'color': '#007acc',
'cursor': 'pointer'
});
// Don't hide tooltip on mouseleave if it's interactive
if (!this.tooltipManager.isInteractive()) {
this.tooltipManager.hideTooltip();
}
});
// Right-click to make tooltip interactive (since left-click navigates)
$(element).on('contextmenu', (e) => {
if (this.tooltipManager.$tooltip.hasClass('show')) {
e.preventDefault();
e.stopPropagation();
this.tooltipManager.makeTooltipInteractive();
}
});
}
}
// Export for module usage
if (typeof module !== 'undefined' && module.exports) {
module.exports = TextEllipsizerManager;
} else {
window.TextEllipsizerManager = TextEllipsizerManager;
}

View File

@ -1,118 +0,0 @@
/**
* Custom tooltip functionality for SVG elements
*
* Provides hoverable tooltips with interactive copy/paste mode for ellipsized text.
* Interactive mode allows users to select and copy tooltip content.
*/
class TooltipManager {
constructor() {
this.$tooltip = null;
this.tooltipText = '';
this.isTooltipInteractive = false;
this.currentTooltipElement = null;
this.init();
}
init() {
// Create custom tooltip element
this.$tooltip = $('<div class="custom-tooltip"></div>').appendTo('body');
// Set up document click handler for hiding tooltips
this.setupDocumentClickHandler();
}
/**
* Shows tooltip with given text at event position
* @param {Element} element - Element that triggered the tooltip
* @param {string} text - Text to display in tooltip
* @param {Event} event - Mouse event for positioning
*/
showTooltip(element, text, event) {
this.tooltipText = text;
this.currentTooltipElement = element;
this.$tooltip.text(text);
this.$tooltip.css({
left: event.pageX + 10 + 'px',
top: event.pageY - 30 + 'px'
}).removeClass('interactive').addClass('show');
this.isTooltipInteractive = false;
}
/**
* Makes tooltip interactive (selectable and fixed position)
*/
makeTooltipInteractive() {
if (!this.isTooltipInteractive && this.currentTooltipElement) {
this.$tooltip.addClass('interactive');
this.isTooltipInteractive = true;
// Position tooltip in a fixed position relative to the element
const elementOffset = $(this.currentTooltipElement).offset();
this.$tooltip.css({
left: Math.min(elementOffset.left + 20, window.innerWidth - 420) + 'px',
top: Math.max(elementOffset.top - 80, 10) + 'px',
'pointer-events': 'auto'
});
// Prevent mouseleave from hiding the tooltip by removing the handler temporarily
$(this.currentTooltipElement).off('mouseleave.tooltip');
// Select all text when made interactive
setTimeout(() => {
const range = document.createRange();
range.selectNodeContents(this.$tooltip[0]);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
}, 10);
}
}
/**
* Hides the tooltip and resets state
*/
hideTooltip() {
this.$tooltip.removeClass('show interactive');
this.isTooltipInteractive = false;
this.currentTooltipElement = null;
}
/**
* Sets up document click handler to hide tooltips when clicking outside
*/
setupDocumentClickHandler() {
$(document).on('click', (e) => {
if (this.isTooltipInteractive) {
// Only hide interactive tooltip when clicking outside both tooltip and original element
if (!$(e.target).closest('.custom-tooltip').length &&
!$(e.target).is('[data-has-tooltip]') &&
e.target !== this.currentTooltipElement) {
this.hideTooltip();
}
} else {
// Hide non-interactive tooltip when clicking anywhere except on elements with tooltips
if (!$(e.target).is('[data-has-tooltip]')) {
this.hideTooltip();
}
}
});
}
/**
* Checks if tooltip is currently in interactive mode
* @returns {boolean} True if tooltip is interactive
*/
isInteractive() {
return this.isTooltipInteractive;
}
}
// Export for module usage
if (typeof module !== 'undefined' && module.exports) {
module.exports = TooltipManager;
} else {
window.TooltipManager = TooltipManager;
}

File diff suppressed because one or more lines are too long

View File

@ -22,7 +22,7 @@ furnished to do so, subject to the following conditions:
<html>
<head>
<link rel="stylesheet" href="/dist/bundle.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/css/bootstrap.min.css">
<link rel="stylesheet" href="/css/graphviz.svg.css">
</head>
@ -39,68 +39,71 @@ furnished to do so, subject to the following conditions:
text-align: left;
}
.custom-tooltip {
position: absolute;
background-color: #333;
color: white;
padding: 8px 12px;
border-radius: 4px;
font-size: 12px;
white-space: nowrap;
z-index: 10000;
pointer-events: none;
opacity: 0;
transition: opacity 0.2s;
max-width: 400px;
word-wrap: break-word;
white-space: normal;
user-select: text;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
}
.custom-tooltip.show {
opacity: 1;
}
.custom-tooltip.interactive {
pointer-events: auto;
cursor: text;
border: 2px solid #555;
}
.custom-tooltip.interactive::after {
content: " (Text selected - Ctrl+C to copy)";
font-size: 10px;
color: #aaa;
font-style: italic;
}
</style>
<body>
<h1 style="text-align: center" id="title"> {{ TITLE }}</h1>
<div id="graph" class="dragscroll" style="width: 100%; height: 100%; overflow: scroll;"></div>
<div class="floating-rectangle" id="instructions">
Click node to highlight<br/>Shift-Ctrl-scroll or w/s to zoom<br/>Esc to unhighlight<br/>Double-click ellipsized text to copy
Click node to highlight<br/>Shift-Ctrl-scroll or w/s to zoom<br/>Esc to unhighlight
</div>
<div class="floating-rectangle" id="actions" style="top: auto; bottom: 100px; left: 10px;">
<button id="save-svg" class="btn btn-primary btn-sm" style="margin-right: 5px;">Save SVG</button>
</div>
<script src='/dist/bundle.js'></script>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
<script type="text/javascript" src="https://cdn.rawgit.com/jquery/jquery-mousewheel/master/jquery.mousewheel.min.js"></script>
<script type="text/javascript" src="https://cdn.rawgit.com/jquery/jquery-color/master/jquery.color.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script type="text/javascript" src="http://asvd.github.io/dragscroll/dragscroll.js"></script>
<script type="text/javascript" src="/js/jquery.graphviz.svg.js"></script>
<script type="text/javascript" src="/js/tooltip.js"></script>
<script type="text/javascript" src="/js/pipeline-navigation.js"></script>
<script type="text/javascript" src="/js/text-ellipsizer.js"></script>
<script type="text/javascript" src="/js/svg-overlay-manager.js"></script>
<script type="text/javascript">
$(document).ready(() => {
const svgOverlayManager = new SvgOverlayManager();
svgOverlayManager.setTitle();
svgOverlayManager.init();
let url = new URL(window.location.href);
let searchParams = new URLSearchParams(url.search);
document.getElementById("title").innerHTML = searchParams.get("title");
$(document).ready(function(){
$("#graph").graphviz({
url: searchParams.get("svg"),
ready: function() {
var gv = this;
gv.nodes().click(function () {
var $set = $();
$set.push(this);
$set = $set.add(gv.linkedFrom(this, true));
$set = $set.add(gv.linkedTo(this, true));
gv.highlight($set, true);
gv.bringToFront($set);
});
$(document).keydown(function (evt) {
if (evt.key == "Escape") {
gv.highlight();
} else if (evt.key == "w") {
gv.scaleInView((gv.zoom.percentage + 100));
} else if (evt.key == "s") {
gv.scaleInView((gv.zoom.percentage - 100) || 100);
}
});
$("#save-svg").click(function() {
const svgElement = $("#graph svg")[0];
const svgData = new XMLSerializer().serializeToString(svgElement);
const blob = new Blob([svgData], {type: "image/svg+xml;charset=utf-8"});
const url = URL.createObjectURL(blob);
const title = document.getElementById("title").textContent.trim();
const downloadLink = document.createElement("a");
downloadLink.href = url;
downloadLink.download = title + ".svg";
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
URL.revokeObjectURL(url);
});
}
});
});
</script>
</body>

View File

@ -1,13 +0,0 @@
#!/bin/bash
set -e
if ! command -v npm &> /dev/null; then
echo "npm is not installed. Please install Node.js and npm first."
exit 1
fi
echo "Installing dependencies..."
npm install
echo "Building bundles..."
npm run build

View File

@ -1,72 +0,0 @@
const path = require('path');
const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
module.exports = {
mode: 'production',
entry: {
bundle: './bundle-entry.js'
},
output: {
path: path.resolve(__dirname, 'static/dist'),
filename: '[name].js',
},
module: {
rules: [
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader'
]
},
// For Bootstrap fonts
{
test: /\.(woff|woff2|eot|ttf|svg)$/,
type: 'asset/resource',
generator: {
filename: 'fonts/[name][ext]'
}
}
]
},
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
terserOptions: {
compress: {
drop_console: true,
passes: 2
},
mangle: true,
output: {
comments: false
}
}
}),
new CssMinimizerPlugin() // For CSS optimization
],
},
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
}),
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('production')
}),
new MiniCssExtractPlugin({
filename: '[name].css'
})
],
resolve: {
alias: {
'jquery': path.resolve(__dirname, 'node_modules/jquery/dist/jquery.js'),
'/js/vendor/viz-standalone.mjs': path.resolve(__dirname, 'node_modules/@viz-js/viz/lib/viz-standalone.mjs'),
'/js/vendor/fuse.min.mjs': path.resolve(__dirname, 'node_modules/fuse.js/dist/fuse.mjs')
}
}
};

View File

@ -53,16 +53,6 @@
</GitRepository>
</repository>
<release>
<Version>
<revision>1.27.1</revision>
<branch>main</branch>
<name></name>
<created>2025-07-08</created>
<file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-devtools/gst-devtools-1.27.1.tar.xz" />
</Version>
</release>
<release>
<Version>
<revision>1.26.0</revision>

View File

@ -1,5 +1,5 @@
project('gst-devtools', 'c',
version : '1.27.1.1',
version : '1.27.0.1',
meson_version : '>= 1.4',
default_options : [ 'warning_level=1',
'buildtype=debugoptimized' ])

View File

@ -28,6 +28,7 @@ changelog_starts = {
'gst-rtsp-server': '5029c85a46a8c366c4bf272d503e22bbcd624ece',
'gst-editing-services': 'ee8bf88ebf131cf7c7161356540efc20bf411e14',
'gst-python': 'b3e564eff577e2f577d795051bbcca85d47c89dc',
'gstreamer-vaapi': 'c89e9afc5d43837c498a55f8f13ddf235442b83b',
'gst-devtools': 'da962d096af9460502843e41b7d25fdece7ff1c2',
'gstreamer-sharp': 'b94528f8e7979df49fedf137dfa228d8fe475e1b',
}

View File

@ -1,25 +0,0 @@
The `overrides` field is an array of override structures.
At the moment, these overrides allow you to change the severity level of specific issues,
for example changing a critical issue to a warning to allow tests to pass
when encountering known issues.
Use `gst-validate-1.0 --print-issue-types` to print information about all issue types.
For example:
``` yaml
overrides = {
[change-severity, issue-id=runtime::not-negotiated, new-severity=warning],
[change-severity, issue-id=g-log::critical, new-severity=info],
}
```
**Each override has the following fields**:
* `issue-id`: (string): Issue ID to override - Mandatory
* `new-severity`: (string): New severity level (critical, warning, issue, ignore) - Mandatory
Currently only `change-severity` overrides are supported.
**Warning**: This field is validate only for [`.validatetest`](gst-validate-test-file.md) files, and not `.scenario`.

View File

@ -367,7 +367,6 @@ validate_flow_format_buffer (GstBuffer * buffer, gint checksum_type,
g_string_append_c (content, ' ');
g_string_append_printf (content, "0x%02x", map.data[i]);
}
gst_buffer_unmap (buffer, &map);
buffer_parts[buffer_parts_index++] = g_string_free (content, FALSE);
} else {
@ -437,7 +436,6 @@ validate_flow_format_buffer (GstBuffer * buffer, gint checksum_type,
buffer_parts_index > 0 ? g_strjoinv (", ",
buffer_parts) : g_strdup ("(empty)");
g_strfreev (logged_fields);
g_strfreev (ignored_fields);
g_free (meta_str);
g_free (flags_str);

View File

@ -709,9 +709,3 @@ gst_validate_flow_init (void)
return TRUE;
}
void
_priv_validate_flow_deinit (void)
{
g_clear_list (&all_overrides, gst_object_unref);
}

View File

@ -59,31 +59,28 @@ static gboolean
parse_uri (const gchar * uri, gchar ** host, gint * port, gchar ** path,
GError ** error)
{
GstUri *gst_uri;
GUri *guri;
gboolean ret = FALSE;
gst_uri = gst_uri_from_string (uri);
if (!gst_uri) {
g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
"Invalid URI: %s", uri);
guri = g_uri_parse (uri, 0 /* G_URI_FLAGS_NONE in 2.66 */ , error);
if (!guri)
return FALSE;
}
*host = g_strdup (gst_uri_get_host (gst_uri));
*host = g_strdup (g_uri_get_host (guri));
if (!*host) {
g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
"Invalid URI: missing host");
goto cleanup;
}
*port = gst_uri_get_port (gst_uri);
if (*port == GST_URI_NO_PORT) {
*port = g_uri_get_port (guri);
if (*port == -1) {
g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
"Invalid URI: missing port");
goto cleanup;
}
*path = g_strdup (gst_uri_get_path (gst_uri));
*path = g_strdup (g_uri_get_path (guri));
if (!*path) {
g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
"Invalid URI: missing path");
@ -97,7 +94,7 @@ cleanup:
g_clear_pointer (host, g_free);
g_clear_pointer (path, g_free);
}
gst_uri_unref (gst_uri);
g_uri_unref (guri);
return ret;
}

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