diff --git a/.gitignore b/.gitignore index 30f92df3ee0..059cb2fb55f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ prefix/ .gdbinit # Editor/IDE spcific +.helix/ .vscode/ .vscode-server/ @@ -29,7 +30,6 @@ prefix/ /gst-plugins-rs # Automatic meson redirect wrap files -subprojects/gdk-pixbuf.wrap subprojects/gobject-introspection.wrap subprojects/gtest.wrap subprojects/gvdb.wrap @@ -38,6 +38,7 @@ subprojects/libsass.wrap subprojects/libtiff.wrap subprojects/sassc.wrap subprojects/abseil-cpp.wrap +subprojects/sysprof.wrap subprojects/*/ !subprojects/gst-devtools @@ -70,3 +71,6 @@ subprojects/*/ # apk files from CI (or following its commands) *.apk + +# Cache files (from emacs) +*~ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d44490ca2e1..86cd0db4483 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,9 +1,9 @@ include: - project: 'freedesktop/ci-templates' - ref: "801093be0b88f23c8dbabe9cfce7134548f7ccdc" + ref: "3826695f80807d8a4d999f6b6efb3d405d708db9" file: '/templates/fedora.yml' - project: 'freedesktop/ci-templates' - ref: "801093be0b88f23c8dbabe9cfce7134548f7ccdc" + ref: "3826695f80807d8a4d999f6b6efb3d405d708db9" file: '/templates/debian.yml' ### # IMPORTANT @@ -15,6 +15,7 @@ include: stages: - 'preparation' + - 'check' - 'build' - 'test' # Use the resulting binaries @@ -34,9 +35,9 @@ variables: FEDORA_AMD64_SUFFIX: 'amd64/fedora' DEBIAN_AMD64_SUFFIX: 'amd64/debian' - INDENT_AMD64_SUFFIX: 'amd64/gst-indent' - COMMITLINT_AMD64_SUFFIX: 'amd64/commitlint' + CHECKS_AMD64_SUFFIX: 'amd64/checks' WINDOWS_AMD64_SUFFIX: 'amd64/windows' + ABI_CHECK_AMD64_SUFFIX: 'amd64/abi-check' WINDOWS_IMAGE: "$CI_REGISTRY_IMAGE/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH" WINDOWS_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH" @@ -67,8 +68,11 @@ variables: SIMPLE_BUILD: >- ${DEFAULT_MESON_ARGS} -Dsharp=enabled + -Dgstreamer-sharp:werror=false -Ddoc=disabled + FF_TIMESTAMPS: true + workflow: # https://docs.gitlab.com/ee/ci/yaml/index.html#switch-between-branch-pipelines-and-merge-request-pipelines rules: @@ -127,12 +131,21 @@ trigger: .fedora image: variables: CCACHE_DIR: '/cache/gstreamer/gstreamer/ccache/' - FDO_BASE_IMAGE: 'registry.fedoraproject.org/fedora-toolbox:34' - FDO_DISTRIBUTION_VERSION: '34' + FDO_DISTRIBUTION_VERSION: '40' FDO_REPO_SUFFIX: "$FEDORA_AMD64_SUFFIX" FDO_DISTRIBUTION_TAG: "$FEDORA_TAG-$GST_UPSTREAM_BRANCH" FDO_DISTRIBUTION_EXEC: 'GIT_BRANCH=$CI_COMMIT_REF_NAME GIT_URL=$CI_REPOSITORY_URL bash ci/docker/fedora/prepare.sh' +.fedora fluster image: + variables: + 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] + FDO_DISTRIBUTION_TAG: "fluster-$FEDORA_TAG-$GST_UPSTREAM_BRANCH" + FDO_DISTRIBUTION_EXEC: "bash ./ci/docker/fedora/virtme-fluster-setup.sh" + # Base the fluster image on top of the main fedora build image + FDO_BASE_IMAGE: "$CI_REGISTRY_IMAGE/$FDO_REPO_SUFFIX:$FEDORA_TAG-$GST_UPSTREAM_BRANCH" + fedora amd64 docker: extends: - '.fedora image' @@ -143,6 +156,31 @@ fedora amd64 docker: # (which has faster network connectivity to the registry). tags: [ 'placeholder-job' ] +fedora amd64 docker fluster: + extends: + - '.fedora fluster image' + - '.fdo.container-build@fedora' + 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: [ 'placeholder-job' ] + +# 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: [ 'placeholder-job' ] + 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/' @@ -162,41 +200,23 @@ debian amd64 docker: # (which has faster network connectivity to the registry). tags: [ 'placeholder-job' ] -.gst-indent image: +.checks image: tags: [ 'placeholder-job' ] variables: FDO_DISTRIBUTION_VERSION: 'bookworm' - FDO_REPO_SUFFIX: "$INDENT_AMD64_SUFFIX" - FDO_DISTRIBUTION_TAG: "$INDENT_TAG-$GST_UPSTREAM_BRANCH" - FDO_DISTRIBUTION_PACKAGES: 'curl indent git findutils ca-certificates' - FDO_DISTRIBUTION_EXEC: 'ci/docker/indent/prepare.sh' + FDO_REPO_SUFFIX: "$CHECKS_AMD64_SUFFIX" + FDO_DISTRIBUTION_TAG: "$CHECKS_TAG-$GST_UPSTREAM_BRANCH" + FDO_DISTRIBUTION_PACKAGES: 'curl git findutils ca-certificates python3-pip' + FDO_DISTRIBUTION_EXEC: 'bash ci/docker/checks/prepare.sh' -gst-indent amd64 docker: +checks amd64 docker: extends: - - '.gst-indent image' + - '.checks image' - '.fdo.container-build@debian' stage: 'preparation' # Do not depend on the trigger, as we want to run indent always needs: [] -.commitlint image: - tags: [ 'placeholder-job' ] - variables: - FDO_DISTRIBUTION_VERSION: '37' - FDO_REPO_SUFFIX: "$COMMITLINT_AMD64_SUFFIX" - FDO_DISTRIBUTION_TAG: "$LINT_TAG-$GST_UPSTREAM_BRANCH" - FDO_DISTRIBUTION_PACKAGES: 'python3-pip git' - FDO_DISTRIBUTION_EXEC: 'ci/docker/lint/prepare.sh' - FDO_USER: "ciuser" - -commitlint docker: - extends: - - '.commitlint image' - - '.fdo.container-build@fedora' - stage: 'preparation' - # Do not depend on the trigger, as we want to run indent always - needs: [] - windows amd64 docker: stage: "preparation" timeout: '3h' @@ -222,60 +242,53 @@ windows amd64 docker: - ci/docker/windows/container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $WINDOWS_IMAGE $WINDOWS_UPSTREAM_IMAGE $DOCKERFILE .macos image: - image: "registry.freedesktop.org/gstreamer/gstreamer/macos-arm64/14-sonoma:2023-10-25.0" + image: "registry.freedesktop.org/gstreamer/gstreamer/macos-arm64/15-sequoia:2024-10-28.0" tags: - gst-mac-arm -# ---- Preparation ----- # -# -# gst-indent!! -# -gst indent: - extends: - - '.gst-indent image' - - '.fdo.suffixed-image@debian' +.abi-check image: + variables: + 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] + 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: '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: + # placeholder-job has very minimal CPU available and may overrun the job + # timeout if an image rebuild (which builds GStreamer) needs to be performed. + #tags: [ 'placeholder-job' ] stage: 'preparation' - needs: - - job: 'gst-indent amd64 docker' - artifacts: false - script: - - ./scripts/check-format-c - - ./scripts/format-csharp --check - # We want both wraps to use the same version, overkill to create a separate job for this - - cmp subprojects/gtk-sharp.wrap subprojects/gstreamer-sharp/subprojects/gtk-sharp.wrap - rules: - - !reference [.upstream-branch-rules, rules] - - if: '$CI_PROJECT_NAMESPACE != "gstreamer" || $CI_COMMIT_BRANCH != $GST_UPSTREAM_BRANCH' - when: 'always' - -rustfmt: extends: - - '.fedora image' - - '.fdo.suffixed-image@fedora' - stage: 'preparation' + - '.abi-check image' + - '.fdo.container-build@fedora' needs: - - "fedora amd64 docker" - script: - - export RUSTUP_HOME="/usr/local/rustup" - - export PATH="/usr/local/cargo/bin:$PATH" - - ./scripts/format-rust --check + - 'fedora amd64 docker' -commitlint: +# ---- Preparation ----- # +pre-commit checks: extends: - - '.commitlint image' + - '.checks image' - '.fdo.suffixed-image@fedora' - stage: 'preparation' + stage: 'check' + needs: + - job: 'checks amd64 docker' + artifacts: false variables: GIT_STRATEGY: fetch GIT_DEPTH: 100 - needs: - - job: 'commitlint docker' - artifacts: false - before_script: - - git config --global --add safe.directory $CI_PROJECT_DIR + 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 script: + - export PATH="/usr/local/cargo/bin:$PATH" - echo $CI_MERGE_REQUEST_DIFF_BASE_SHA - gitlint --commits $CI_MERGE_REQUEST_DIFF_BASE_SHA..HEAD + - pre-commit run --show-diff-on-failure --from-ref $CI_MERGE_REQUEST_DIFF_BASE_SHA --to-ref HEAD rules: # Only run on MR as we need CI_MERGE_REQUEST_DIFF_BASE_SHA to know # what commits to check @@ -317,6 +330,18 @@ commitlint: - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH' when: manual +# Check whether the gtk wrap had any changes, and if so, build it +.gtk-build-rules: + rules: + - changes: + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - ".gitlab-ci.yml" + - "meson.build" + - "subprojects/*.wrap" + variables: + GTK_ARGS: "-Dgtk=enabled" + .build: stage: 'build' needs: @@ -333,7 +358,7 @@ commitlint: # https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3197 GI_SCANNER_DISABLE_CACHE: "1" script: - - $CI_PROJECT_DIR/ci/scripts/build.sh + - $CI_PROJECT_DIR/ci/scripts/build.sh build/ - ./gst-env.py gst-inspect-1.0 --version - ./gst-env.py gst-inspect-1.0 after_script: @@ -346,9 +371,13 @@ commitlint: rules: - !reference [.upstream-branch-rules, rules] - changes: - *modules_changes + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + *modules_changes - changes: - - subprojects/gstreamer-vaapi/**/* + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - "subprojects/gstreamer-vaapi/**/*" .build simple: extends: @@ -359,7 +388,7 @@ commitlint: MESON_ARGS: "${SIMPLE_BUILD}" SUBPROJECTS_CACHE_DIR: "/subprojects" script: - - $CI_PROJECT_DIR/ci/scripts/build.sh + - $CI_PROJECT_DIR/ci/scripts/build.sh build/ - ./gst-env.py gst-inspect-1.0 --version - ./gst-env.py gst-inspect-1.0 - G_DEBUG=fatal_criticals ./gst-env.py gst-inspect-1.0 --print-all --gst-disable-registry-fork > /dev/null @@ -375,6 +404,15 @@ commitlint: - "trigger" - "fedora amd64 docker" +.build fedora fluster x86_64: + extends: + - '.fedora fluster image' + - '.fdo.suffixed-image@fedora' + - '.build simple' + needs: + - "trigger" + - "fedora amd64 docker fluster" + build fedora gcc: extends: '.build fedora x86_64' variables: @@ -399,7 +437,17 @@ build fedora gcc: # # 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) - MESON_ARGS: "${DEFAULT_MESON_ARGS} -Dvaapi=disabled -Dpython=auto -Dgst-editing-services:python=disabled -Dintrospection=disabled -Ddoc=disabled -Dgstreamer-sharp:tests=disabled" + # + # Disabling building both qt5 and qt6 when doing static builds since we can only link against one + MESON_ARGS: >- + ${DEFAULT_MESON_ARGS} + -Dvaapi=disabled + -Dpython=auto + -Dgst-editing-services:python=disabled + -Dintrospection=disabled + -Ddoc=disabled + -Dgstreamer-sharp:tests=disabled + -Dqt5=disabled -Dqt6=enabled build fedora clang: extends: '.build fedora x86_64' @@ -412,7 +460,6 @@ build fedora clang: BUILD_GST_DEBUG: ["-Dgstreamer:gst_debug=true", "-Dgstreamer:gst_debug=false"] MESON_ARGS: >- ${SIMPLE_BUILD} - --force-fallback-for=glib - BUILD_TYPE: ["--default-library=static"] BUILD_GST_DEBUG: ["-Dgstreamer:gst_debug=true", "-Dgstreamer:gst_debug=false"] @@ -421,6 +468,8 @@ build fedora clang: # # 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 @@ -428,7 +477,7 @@ build fedora clang: -Dpython=disabled -Ddoc=disabled -Dgstreamer-sharp:tests=disabled - --force-fallback-for=glib + -Dqt5=disabled -Dqt6=enabled build debian x86_64: extends: @@ -463,11 +512,16 @@ build debian x86_64: -Dgst-plugins-good:soup=enabled -Dgst-plugins-bad:d3d11-wgc=enabled rules: + - !reference [.gtk-build-rules, rules] - !reference [.upstream-branch-rules, rules] - changes: - *modules_changes + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + *modules_changes - changes: - - subprojects/win-*/* + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - "subprojects/win-*/*" script: # Make sure powershell exits on errors # https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-6 @@ -480,7 +534,7 @@ build debian x86_64: - $env:PYTHONUNBUFFERED = '1' - ci/scripts/handle-subprojects-cache.py --cache-dir /subprojects subprojects/ - $env:PYTHONUNBUFFERED = '' - - echo $env:MESON_ARGS + - echo $env:MESON_ARGS $env:GTK_ARGS # We do not pick up any deps with cmake, so speed up dependency checks - $env:CMAKE = 'false' artifacts: @@ -493,8 +547,8 @@ build vs2022 amd64: extends: '.build windows' script: - !reference [".build windows", "script"] - - meson setup --vsenv build $env:MESON_ARGS - - meson compile -C build --jobs $env:FDO_CI_CONCURRENT + - .\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 - mkdir destdir @@ -508,9 +562,8 @@ build vs2022 amd64 full-static: extends: ".build windows" script: - !reference [".build windows", "script"] - - echo $env:MESON_ARGS - cmd.exe /C "meson setup --vsenv build --default-library=static $env:MESON_ARGS" - - meson compile -C build --jobs $env:FDO_CI_CONCURRENT + - .\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 variables: @@ -528,8 +581,10 @@ build vs2022 amd64 full-static: # Setting up a cross build with MSVC is still non-trivial because # the --vsenv argument cannot be used to set it up - echo $env:MESON_CROSS_ARGS - - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH && meson setup build $env:MESON_ARGS $env:MESON_CROSS_ARGS" - - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH && meson compile -C build --jobs $env:FDO_CI_CONCURRENT" + - $env:JOB="meson setup build $env:MESON_ARGS $env:GTK_ARGS $env:MESON_CROSS_ARGS" + - cmd.exe /C """C:\BuildTools\VC\Auxiliary\Build\vcvarsamd64_$env:ARCH.bat"" && powershell.exe -ExecutionPolicy Bypass -File .\ci\run_retry.ps1" + - $env:JOB="meson compile -C build --jobs $env:FDO_CI_CONCURRENT" + - cmd.exe /C """C:\BuildTools\VC\Auxiliary\Build\vcvarsamd64_$env:ARCH.bat"" && powershell.exe -ExecutionPolicy Bypass -File .\ci\run_retry.ps1" build vs2022 x86: extends: '.build windows cross' @@ -572,7 +627,7 @@ build msys2: - $env:MESON_ARGS = $env:MESON_ARGS.replace('-Dgst-plugins-bad:d3d11-wgc=enabled','') + ' -Dpython=disabled -Dintrospection=disabled' # Configure MSYS2 to use the UCRT64 environment, start in the same directory # and inherit PATH - - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "meson setup build $env:MESON_ARGS && meson compile -C build --jobs $env:FDO_CI_CONCURRENT" + - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "meson setup build $env:MESON_ARGS $env:GTK_ARGS && meson compile -C build --jobs $env:FDO_CI_CONCURRENT" build macos: extends: @@ -584,11 +639,16 @@ build macos: MESON_ARGS: "${DEFAULT_MESON_ARGS}" SUBPROJECTS_CACHE_DIR: "/Users/gst-ci/subprojects" rules: + - !reference [.gtk-build-rules, rules] - !reference [.upstream-branch-rules, rules] - changes: - *modules_changes + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + *modules_changes - changes: - - subprojects/macos-*/* + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - "subprojects/macos-*/*" parallel: matrix: - BUILD_TYPE: ["--default-library=both"] @@ -606,6 +666,26 @@ build macos: -Dgst-plugins-good:cairo=enabled -Dgst-plugins-good:soup=enabled +abi-check: + stage: 'build' + extends: + - '.abi-check image' + - '.fdo.suffixed-image@fedora' + - '.build' + needs: + - "trigger" + - 'abi-check docker' + script: + - $CI_PROJECT_DIR/ci/scripts/abi-check.sh build/ + variables: + ABI_CHECK_DIR: 'abi-dumps' + artifacts: + expire_in: "7 days" + when: "always" + paths: + - 'meson-logs/' + - '$ABI_CHECK_DIR' + # ---- Tests ----- # .test: @@ -633,15 +713,17 @@ build macos: PYTHONFAULTHANDLER: "enabled" rules: - changes: - *modules_changes + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + *modules_changes script: # Disable gdb debugdir safeload # The CI will execute any code submitted to it anyway - mkdir -p ~/.config/gdb - echo "set auto-load safe-path /" >> ~/.config/gdb/gdbinit - - $CI_PROJECT_DIR/ci/scripts/build.sh - - $CI_PROJECT_DIR/ci/scripts/test.sh + - $CI_PROJECT_DIR/ci/scripts/build.sh build/ + - $CI_PROJECT_DIR/ci/scripts/test.sh build/ $TEST_SUITE after_script: - mv build/meson-logs/ meson-logs artifacts: @@ -670,9 +752,13 @@ check fedora: TEST_SUITE: "check.gst*" rules: - changes: - *modules_changes + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + *modules_changes - changes: - - subprojects/gstreamer-vaapi/**/* + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - "subprojects/gstreamer-vaapi/**/*" integration testsuites fedora: extends: '.test fedora x86_64' @@ -710,17 +796,20 @@ check video formats: MESON_ARGS: "${SIMPLE_BUILD}" BUILD_GST_DEBUG: "-Dgstreamer:gst_debug=true" GST_WERROR: "true" + 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" WL_HEADER: "subprojects/gst-plugins-bad/gst-libs/gst/wayland/gstwlvideoformat.h" script: - - $CI_PROJECT_DIR/ci/scripts/build.sh + - $CI_PROJECT_DIR/ci/scripts/build.sh build/ - $CI_PROJECT_DIR/ci/scripts/check-video-formats.sh rules: - changes: - - ${VIDEO_HEADER} - - ${WL_HEADER} + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - "${VIDEO_HEADER}" + - "${WL_HEADER}" playbin3 integration: extends: 'integration testsuites fedora' @@ -735,11 +824,14 @@ gstreamer-full static build: stage: 'build' variables: BUILD_TYPE: "--default-library=static" + # Disabling building both qt5 and qt6 when doing static builds since we can only link against one MESON_ARGS: >- -Ddoc=disabled + -Dqt5=disabled -Dqt6=enabled + SUBPROJECTS_CACHE_DIR: "/subprojects" script: - - $CI_PROJECT_DIR/ci/scripts/build.sh + - $CI_PROJECT_DIR/ci/scripts/build.sh build/ - meson test -C build -v test-gst-full gstreamer-full-minimal static build: @@ -752,6 +844,7 @@ gstreamer-full-minimal static build: MESON_ARGS: >- -Ddoc=disabled -Dauto_features=disabled + -Dgst-full=enabled -Dgstreamer:check=enabled -Dtests=enabled -Dgst-plugins-base:alsa=enabled @@ -764,7 +857,7 @@ gstreamer-full-minimal static build: SUBPROJECTS_CACHE_DIR: "/subprojects" script: - - $CI_PROJECT_DIR/ci/scripts/build.sh + - $CI_PROJECT_DIR/ci/scripts/build.sh build/ - meson test -C build -v test-gst-full - meson test -C build test-gst-full-features --test-args "-e filesrc,identity,fakesink -E filesink,capsfilter -t audio/x-wav -T video/vivo -d alsadeviceprovider -D v4l2deviceprovider -l GstVideoMultiviewFlagsSet" - strip build/libgstreamer-full-1.0.so @@ -772,7 +865,8 @@ gstreamer-full-minimal static build: # v4l2-stateless-decoders tests fluster v4l2-stateless on visl: - extends: 'gstreamer-full static build' + extends: + - '.build fedora fluster x86_64' stage: 'test' variables: BUILD_GST_DEBUG: '-Dgstreamer:gst_debug=false' @@ -781,6 +875,7 @@ fluster v4l2-stateless on visl: MESON_ARGS: >- -Dvirtme_kernel_image=/opt/linux/bzImage -Dauto_features=disabled + -Dgst-full=enabled -Dgstreamer:check=enabled -Ddoc=disabled -Dtests=enabled @@ -802,22 +897,24 @@ fluster v4l2-stateless on visl: -Dgst-plugins-good:matroska=enabled SUBPROJECTS_CACHE_DIR: "/subprojects" script: - - $CI_PROJECT_DIR/ci/scripts/build.sh + - $CI_PROJECT_DIR/ci/scripts/build.sh build/ - meson test -C build -v --suite v4l2-stateless-decoders artifacts: reports: junit: build/fluster-results-*.xml rules: - changes: - - .gitlab-ci.yml - - .gitlab-image-tags.yml - - subprojects/gst-plugins-bad/sys/v4l2codecs/* - - subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/* - - subprojects/gst-plugins-bad/gst-libs/gst/codecs/* - - subprojects/gst-plugins-bad/gst/videoparsers/* - - tests/virtme/* - - ci/scripts/build-linux.sh - - ci/docker/fedora/* + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - ".gitlab-ci.yml" + - ".gitlab-image-tags.yml" + - "subprojects/gst-plugins-bad/sys/v4l2codecs/*" + - "subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/*" + - "subprojects/gst-plugins-bad/gst-libs/gst/codecs/*" + - "subprojects/gst-plugins-bad/gst/videoparsers/*" + - "tests/virtme/*" + - "ci/scripts/build-linux.sh" + - "ci/docker/fedora/*" # Valgrind .valgrind fedora x86_64: @@ -825,11 +922,16 @@ fluster v4l2-stateless on visl: stage: 'test' variables: EXTRA_VALIDATE_ARGS: "--valgrind" + timeout: "1h30m" rules: - changes: - *modules_changes + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + *modules_changes - changes: - - subprojects/gstreamer-vaapi/**/* + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - "subprojects/gstreamer-vaapi/**/*" valgrind core: extends: '.valgrind fedora x86_64' @@ -837,11 +939,13 @@ valgrind core: TEST_SUITE: "check.gstreamer\\..*" rules: - changes: - - "*" - - scripts/* - - ci/**/* - - subprojects/gst-devtools/**/* - - subprojects/gstreamer/**/* + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - "*" + - "scripts/*" + - "ci/**/*" + - "subprojects/gst-devtools/**/*" + - "subprojects/gstreamer/**/*" valgrind base: extends: '.valgrind fedora x86_64' @@ -849,12 +953,14 @@ valgrind base: TEST_SUITE: "check.gst-plugins-base\\..*" rules: - changes: - - "*" - - scripts/* - - ci//**/* - - subprojects/gst-devtools/**/* - - subprojects/gstreamer/**/* - - subprojects/gst-plugins-base/**/* + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - "*" + - "scripts/*" + - "ci/**/*" + - "subprojects/gst-devtools/**/*" + - "subprojects/gstreamer/**/*" + - "subprojects/gst-plugins-base/**/*" valgrind good: extends: '.valgrind fedora x86_64' @@ -864,13 +970,15 @@ valgrind good: TIMEOUT_FACTOR: "4" rules: - changes: - - "*" - - scripts/* - - ci/**/* - - subprojects/gst-devtools/**/* - - subprojects/gstreamer/**/* - - subprojects/gst-plugins-base/**/* - - subprojects/gst-plugins-good/**/* + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - "*" + - "scripts/*" + - "ci/**/*" + - "subprojects/gst-devtools/**/*" + - "subprojects/gstreamer/**/*" + - "subprojects/gst-plugins-base/**/*" + - "subprojects/gst-plugins-good/**/*" valgrind ugly: extends: '.valgrind fedora x86_64' @@ -878,14 +986,16 @@ valgrind ugly: TEST_SUITE: "check.gst-plugins-ugly\\..*" rules: - changes: - - "*" - - scripts/* - - ci/**/* - - subprojects/gst-devtools/**/* - - subprojects/gstreamer/**/* - - subprojects/gst-plugins-base/**/* - - subprojects/gst-plugins-good/**/* - - subprojects/gst-plugins-ugly/**/* + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - "*" + - "scripts/*" + - "ci/**/*" + - "subprojects/gst-devtools/**/*" + - "subprojects/gstreamer/**/*" + - "subprojects/gst-plugins-base/**/*" + - "subprojects/gst-plugins-good/**/*" + - "subprojects/gst-plugins-ugly/**/*" valgrind bad: extends: '.valgrind fedora x86_64' @@ -893,14 +1003,16 @@ valgrind bad: TEST_SUITE: "check.gst-plugins-bad\\..*" rules: - changes: - - "*" - - scripts/* - - ci/**/* - - subprojects/gst-devtools/**/* - - subprojects/gstreamer/**/* - - subprojects/gst-plugins-base/**/* - - subprojects/gst-plugins-good/**/* - - subprojects/gst-plugins-bad/**/* + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - "*" + - "scripts/*" + - "ci/**/*" + - "subprojects/gst-devtools/**/*" + - "subprojects/gstreamer/**/*" + - "subprojects/gst-plugins-base/**/*" + - "subprojects/gst-plugins-good/**/*" + - "subprojects/gst-plugins-bad/**/*" valgrind ges: extends: '.valgrind fedora x86_64' @@ -908,16 +1020,18 @@ valgrind ges: TEST_SUITE: "check.gst-editing-services\\..*" rules: - changes: - - "*" - - scripts/* - - ci/**/* - - subprojects/gst-devtools/**/* - - subprojects/gstreamer/**/* - - subprojects/gst-plugins-base/**/* - - subprojects/gst-plugins-good/**/* - - subprojects/gst-plugins-bad/**/* - - subprojects/gst-editing-services/**/* - - subprojects/gst-python/**/* + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - "*" + - "scripts/*" + - "ci/**/*" + - "subprojects/gst-devtools/**/*" + - "subprojects/gstreamer/**/*" + - "subprojects/gst-plugins-base/**/*" + - "subprojects/gst-plugins-good/**/*" + - "subprojects/gst-plugins-bad/**/*" + - "subprojects/gst-editing-services/**/*" + - "subprojects/gst-python/**/*" # valgrind ges jobs are racy across the board and simply fail too often. # Someone needs to go through job logs and figure out which jobs to mark # as flaky. Until then, just ignore failures. @@ -941,7 +1055,7 @@ valgrind ges: 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 + - $CI_PROJECT_DIR/ci/scripts/build-docs.sh build/ artifacts: when: always expire_in: "7 days" @@ -978,21 +1092,23 @@ build documentation: - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH' when: never - changes: - - .gitlab-ci.yml - - .gitlab-image-tags.yml - - ci/gitlab/*.py - - subprojects/*.wrap - - subprojects/gst-docs/**/* - - 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/gstreamer/**/* - - subprojects/gstreamer-vaapi/**/* - - subprojects/gst-rtsp-server/**/* + compare_to: "$GST_UPSTREAM_BRANCH" + paths: + - ".gitlab-ci.yml" + - ".gitlab-image-tags.yml" + - "ci/gitlab/*.py" + - "subprojects/*.wrap" + - "subprojects/gst-docs/**/*" + - "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/gstreamer/**/*" + - "subprojects/gstreamer-vaapi/**/*" + - "subprojects/gst-rtsp-server/**/*" # FIXME: Using trigger: causes permission issues, workaround using old REST API. # https://gitlab.com/gitlab-org/gitlab/-/issues/341737 @@ -1001,14 +1117,12 @@ cerbero trigger: timeout: '4h' tags: - placeholder-job - extends: - - '.fedora image' - - '.fdo.suffixed-image@fedora' + image: python:alpine needs: - "trigger" - - "fedora amd64 docker" script: - - ci/gitlab/trigger_cerbero_pipeline.py + - pip install python-gitlab + - python ci/gitlab/trigger_cerbero_pipeline.py rules: - if: '$MESON_COMMIT' @@ -1016,16 +1130,18 @@ cerbero trigger: - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH' when: never - changes: - - .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/**/* + compare_to: "$GST_UPSTREAM_BRANCH" + 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/**/*" diff --git a/.gitlab-image-tags.yml b/.gitlab-image-tags.yml index 52fff8ddde3..4ba7127c55c 100644 --- a/.gitlab-image-tags.yml +++ b/.gitlab-image-tags.yml @@ -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: '2024-04-22.4' + FEDORA_TAG: '2025-01-11.0' - DEBIAN_TAG: '2024-04-22.4' + DEBIAN_TAG: '2025-01-11.0' - INDENT_TAG: '2024-05-28.0' + CHECKS_TAG: '2025-02-04.0' - LINT_TAG: '2024-02-20.0' + ABI_CHECK_TAG: '2025-01-29.0' - WINDOWS_TAG: '2024-04-10.0' + WINDOWS_TAG: '2025-01-11.0' diff --git a/.indent_cpp_list b/.indent_cpp_list index 84398782650..3d6a9bedaeb 100644 --- a/.indent_cpp_list +++ b/.indent_cpp_list @@ -1,3 +1,5 @@ +subprojects/gst-plugins-bad/ext/nvcomp +subprojects/gst-plugins-bad/ext/nvdswrapper subprojects/gst-plugins-bad/ext/qt6d3d11 subprojects/gst-plugins-bad/gst-libs/gst/cuda subprojects/gst-plugins-bad/gst-libs/gst/d3d11 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000000..34637d5fb0c --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,35 @@ +fail_fast: false +repos: +- repo: https://github.com/jorisroovers/gitlint + rev: v0.19.1 + hooks: + - id: gitlint-ci +- repo: local + hooks: + # Use dotnet format installed on your machine + - id: dotnet-format + name: dotnet-format + language: system + files: ^subprojects/gstreamer-sharp/.* + entry: dotnet format subprojects/gstreamer-sharp/gstreamer-sharp.sln -v normal --include + types_or: ["c#", "vb"] + - id: gst-indent + name: gst-indent + language: python + entry: ./scripts/gst-indent-all.py + pass_filenames: false + types_or: ["c", "c++"] + additional_dependencies: ["gst-indent==1.0.0"] + # The rust hook uses cargo fmt, which requires a Cargo.toml + # We use a local hook to run rustfmt directly + - id: rustfmt + name: rustfmt + language: system + entry: rustfmt --verbose --edition 2021 + types_or: ["rust"] + - id: doc-checks + name: doc-checks + language: python + entry: ./scripts/git-hooks/pre-commit-python.hook + pass_filenames: false + additional_dependencies: ["autopep8==2.3.2", "pycodestyle==2.12.1"] diff --git a/README.md b/README.md index 50312ad9363..149feccc8b4 100644 --- a/README.md +++ b/README.md @@ -187,7 +187,7 @@ ABI can be set using `gst-full-libraries` option. glib-2.0, gobject-2.0 and gstreamer-1.0 are always included. ``` -meson --default-library=static -Dgst-full-libraries=app,video builddir +meson setup --default-library=static -Dgst-full-libraries=gstreamer-app-1.0,gstreamer-video-1.0 builddir ``` GStreamer *1.18* requires applications using gstreamer-full-1.0 to initialize @@ -254,6 +254,11 @@ Only linux-like platforms are currently well supported when Windows, MSVC and MinGW, should be considered as *experimental* as the symbols export is still under discussion. +Since 1.24.7, it is possible to disable the `gstreamer-full` library by passing +`-Dgst-full=disabled`. This can be useful in cases where you want a static +build of gstreamer, but you do not want to use gst-full, since linking the +static executables associated with it can be quite CPU/RAM intensive. + #### Full-static build diff --git a/ci/docker/README b/ci/docker/README index 1e99ca0a6f6..6e2f952fff5 100644 --- a/ci/docker/README +++ b/ci/docker/README @@ -1,2 +1,4 @@ GStreamer Docker images +* `fedora`: main image used to build GStreamer +* `checks`: image with pre-commit and gitlint used in the check stage diff --git a/ci/docker/abi-check/install-abi-check-cache.sh b/ci/docker/abi-check/install-abi-check-cache.sh new file mode 100644 index 00000000000..406f118f1fe --- /dev/null +++ b/ci/docker/abi-check/install-abi-check-cache.sh @@ -0,0 +1,13 @@ +#! /bin/bash + +set -eux + +meson_args="${MESON_ARGS:-}" + +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 | xargs -0 -I '{}' bash ./ci/scripts/save-abi.sh {} ${ABI_CHECK_CACHE} ${install_prefix}/include/gstreamer-1.0 + +rm -rf $install_prefix diff --git a/ci/docker/abi-check/prepare.sh b/ci/docker/abi-check/prepare.sh new file mode 100644 index 00000000000..21468bb3cd7 --- /dev/null +++ b/ci/docker/abi-check/prepare.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +set -eux + +bash ./ci/docker/abi-check/install-abi-check-cache.sh diff --git a/ci/docker/indent/prepare.sh b/ci/docker/checks/prepare.sh similarity index 55% rename from ci/docker/indent/prepare.sh rename to ci/docker/checks/prepare.sh index 462e29f9403..74df814de7a 100755 --- a/ci/docker/indent/prepare.sh +++ b/ci/docker/checks/prepare.sh @@ -2,6 +2,7 @@ set -e set -x + # Install dotnet-format apt update -yqq apt install -y gnupg apt-transport-https @@ -17,43 +18,44 @@ apt install -y dotnet-sdk-7.0 dotnet tool install --global dotnet-format ln -s ~/.dotnet/tools/dotnet-format /usr/local/bin/dotnet-format -# Build and install gst-indent-1.0 +# Install build dependencies echo "deb-src http://deb.debian.org/debian/ bookworm main" >> /etc/apt/sources.list apt update -apt-get install --assume-yes devscripts build-essential dpkg-dev wget meson ninja-build -apt-get build-dep --assume-yes indent - -git clone https://gitlab.freedesktop.org/gstreamer/gst-indent.git -cd gst-indent - -meson setup --prefix=/usr _build -meson install -C _build - -# Try it -wget -O gstbayer2rgb.c "https://gitlab.freedesktop.org/gstreamer/gstreamer/-/raw/main/subprojects/gst-plugins-bad/gst/bayer/gstbayer2rgb.c?inline=false" - -for i in 1 2; do -indent \ - --braces-on-if-line \ - --case-brace-indentation0 \ - --case-indentation2 \ - --braces-after-struct-decl-line \ - --line-length80 \ - --no-tabs \ - --cuddle-else \ - --dont-line-up-parentheses \ - --continuation-indentation4 \ - --honour-newlines \ - --tab-size8 \ - --indent-level2 \ - --leave-preprocessor-space \ - gstbayer2rgb.c -done; - -# clean up -cd .. -rm -rf gst-indent - -apt-get remove --assume-yes devscripts build-essential dpkg-dev wget meson ninja-build + +apt-get install --assume-yes devscripts build-essential dpkg-dev wget meson ninja-build pkg-config libssl-dev + +export PIP_BREAK_SYSTEM_PACKAGES=1 +# Install pre-commit +python3 -m pip install --upgrade pip +python3 -m pip install pre-commit==3.6.0 + +# Install gitlint +python3 -m pip install gitlint + +# Install Rust +RUSTUP_VERSION=1.27.1 +RUST_VERSION=1.81.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 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 rustup-init; +./rustup-init -y --no-modify-path --default-toolchain $RUST_VERSION; +rm rustup-init; +chmod -R a+w $RUSTUP_HOME $CARGO_HOME + +cargo install cargo-c --version 0.10.4+cargo-0.82.0 --locked + +rustup --version +cargo --version +rustc --version + +# Clean up +apt-get remove --assume-yes devscripts build-essential dpkg-dev wget meson ninja-build pkg-config libssl-dev apt-get remove --assume-yes libtext-unidecode-perl libxml-namespacesupport-perl libxml-sax-base-perl libxml-sax-perl libxml-libxml-perl texinfo apt-get autoremove --assume-yes diff --git a/ci/docker/debian/deps.txt b/ci/docker/debian/deps.txt index 73a91cea862..467e49facc7 100644 --- a/ci/docker/debian/deps.txt +++ b/ci/docker/debian/deps.txt @@ -163,12 +163,12 @@ libpolkit-gobject-1-dev libpulse-dev libpython3-all-dev libqrencode-dev +libqrencode-dev libqt5waylandclient5-dev libqt5x11extras5-dev libraw1394-dev librsvg2-dev librtmp-dev -librust-wayland-protocols-dev libsbc-dev libsdl2-dev libshaderc1 diff --git a/ci/docker/debian/install-deps.sh b/ci/docker/debian/install-deps.sh index 20a29c512f6..8145449882b 100644 --- a/ci/docker/debian/install-deps.sh +++ b/ci/docker/debian/install-deps.sh @@ -5,6 +5,8 @@ set -eux apt update -y && apt full-upgrade -y apt install -y $(<./ci/docker/debian/deps.txt) -pip3 install --break-system-packages meson hotdoc python-gitlab tomli junitparser +apt remove -y rustc cargo + +pip3 install --break-system-packages meson==1.5.2 hotdoc python-gitlab tomli junitparser apt clean all diff --git a/ci/docker/fedora/deps.txt b/ci/docker/fedora/deps.txt index e091427284f..a964bb38053 100644 --- a/ci/docker/fedora/deps.txt +++ b/ci/docker/fedora/deps.txt @@ -1,54 +1,55 @@ aalib-devel -aom bat bison busybox ccache +clang-analyzer clang-devel +clang-tidy-sarif +clang-tools-extra-devel cmake curl +diffutils dnf-plugins-core elfutils +elfutils-debuginfod-client elfutils-devel +exempi-devel faac-devel +faad2-devel ffmpeg ffmpeg-devel ffmpeg-libs flex flite-devel +game-music-emu-devel gcc gcc-c++ gdb +gettext-common-devel +gettext-devel git-core git-lfs glslc gpac-devel -graphene-devel gsl-devel +gsm-devel gssdp-devel gtest-devel gtk-doc -gtk3-devel -gtk4-devel gupnp-devel gupnp-igd-devel intel-mediasdk-devel iproute -json-glib-devel -libaom-devel -libcaca-devel -libcurl-devel -libdav1d-devel -libdrm-devel +jasper-devel +ladspa-devel +lame-devel +liba52-devel +libICE-devel +libmpcdec-devel libnice-devel -libsodium-devel -libsoup-devel -libunwind-devel -libva-devel -libxcb-devel -libxkbcommon-devel -libxkbcommon-x11-devel -libxml2-devel +libSM-devel +libuuid-devel libxslt-devel libyaml-devel llvm-devel @@ -62,26 +63,19 @@ mesa-libGLES-devel mesa-libGLU-devel mesa-libOpenCL-devel mesa-libOSMesa-devel +mesa-va-drivers mesa-vulkan-drivers -mono-devel nasm -neon-devel ninja-build npm nunit -opencv-devel openjpeg2-devel patch procps-ng -python3 -python3-cairo -python3-cairo-devel -python3-devel -python3-gobject python3-pip python3-wheel -qconf qemu-system-x86 +qrencode-devel qt5-linguist qt5-qtbase-devel qt5-qtbase-private-devel @@ -90,19 +84,188 @@ qt5-qtquickcontrols2-devel qt5-qttools-common qt5-qtwayland-devel qt5-qtx11extras-devel +qt6-doctools +qt6-linguist +qt6-qtbase-devel +qt6-qtbase-private-devel +qt6-qtdeclarative-devel +qt6-qtmultimedia-devel +qt6-qtquickcontrols2-devel +qt6-qtshadertools +qt6-qttools +qt6-qtwayland-devel redhat-rpm-config -sbc-devel -SDL2-devel -srt-devel -srt-libs -toolbox-experience -valgrind -vulkan-devel +soundtouch-devel +subunit-devel +systemd-udev vulkan-loader -x264 -x264-devel -x265 -x264-devel -xorg-x11-server-utils +wildmidi-devel xorg-x11-server-Xvfb xset + +pkgconfig(alsa) +pkgconfig(aom) +pkgconfig(atk) +pkgconfig(avtp) +pkgconfig(bash-completion) +pkgconfig(bluez) +pkgconfig(caca) +pkgconfig(cairo-gobject) +pkgconfig(cairo-png) +pkgconfig(cairo) +pkgconfig(cdparanoia-3) +pkgconfig(dav1d) +pkgconfig(dvdnav) +pkgconfig(dvdread) +pkgconfig(egl) +pkgconfig(fdk-aac) +pkgconfig(flac) +pkgconfig(fluidsynth) +pkgconfig(gbm) +pkgconfig(gdk-3.0) +pkgconfig(gdk-pixbuf-2.0) +pkgconfig(gdk-x11-3.0) +pkgconfig(gio-2.0) +pkgconfig(gio-unix-2.0) +pkgconfig(gl) +pkgconfig(glesv2) +pkgconfig(glib-2.0) +pkgconfig(glx) +pkgconfig(gmodule-2.0) +pkgconfig(gmodule-export-2.0) +pkgconfig(gmodule-no-export-2.0) +pkgconfig(gnutls) +pkgconfig(gobject-2.0) +pkgconfig(gobject-introspection-1.0) +pkgconfig(graphene-gobject-1.0) +pkgconfig(gthread-2.0) +pkgconfig(gtk+-3.0) +pkgconfig(gtk+-wayland-3.0) +pkgconfig(gtk+-x11-3.0) +pkgconfig(gtk4) +pkgconfig(gudev-1.0) +pkgconfig(iso-codes) +pkgconfig(jack) +pkgconfig(json-glib-1.0) +pkgconfig(lc3) +pkgconfig(lcms2) +pkgconfig(ldacBT-enc) +pkgconfig(libass) +pkgconfig(libavc1394) +pkgconfig(libavcodec) +pkgconfig(libavfilter) +pkgconfig(libavformat) +pkgconfig(libavutil) +pkgconfig(libbs2b) +pkgconfig(libcap) +pkgconfig(libcdio) +pkgconfig(libchromaprint) +pkgconfig(libcrypto) +pkgconfig(libcurl) +pkgconfig(libdca) +pkgconfig(libde265) +pkgconfig(libdrm) +pkgconfig(libdv) +pkgconfig(libdw) +pkgconfig(libexif) +pkgconfig(libffi) +pkgconfig(libiec61883) +pkgconfig(libjpeg) +pkgconfig(libmfx) +pkgconfig(libmodplug) +pkgconfig(libmpeg2) +pkgconfig(libmpg123) +pkgconfig(libopenjp2) +pkgconfig(libopenmpt) +pkgconfig(libpng) +pkgconfig(libpulse) +pkgconfig(libqrencode) +pkgconfig(libraw1394) +pkgconfig(librsvg-2.0) +pkgconfig(librtmp) +pkgconfig(libsodium) +pkgconfig(libsoup-2.4) +pkgconfig(libsoup-3.0) +pkgconfig(libsrtp2) +pkgconfig(libssh2) +pkgconfig(libudev) +pkgconfig(libunwind) +pkgconfig(libusb-1.0) +pkgconfig(libv4l2) +pkgconfig(libva-drm) +pkgconfig(libva-wayland) +pkgconfig(libva-x11) +pkgconfig(libva) +pkgconfig(libvisual-0.4) +pkgconfig(libwebp) +pkgconfig(libwebpdemux) +pkgconfig(libwebpmux) +pkgconfig(libxml-2.0) +pkgconfig(lilv-0) +pkgconfig(lrdf) +pkgconfig(microdns) +pkgconfig(mjpegtools) +pkgconfig(mono) +pkgconfig(neon) +pkgconfig(nettle) +pkgconfig(ogg) +pkgconfig(openal) +pkgconfig(opencv4) +pkgconfig(OpenEXR) +pkgconfig(opengl) +pkgconfig(openh264) +pkgconfig(openssl) +pkgconfig(opus) +pkgconfig(pango) +pkgconfig(pangocairo) +pkgconfig(py3cairo) +pkgconfig(pygobject-3.0) +pkgconfig(python-3.12-embed) +pkgconfig(python-3.12) +pkgconfig(Qt5Core) +pkgconfig(Qt6Core) +pkgconfig(sbc) +pkgconfig(sdl2) +pkgconfig(shout) +pkgconfig(sndfile) +pkgconfig(spandsp) +pkgconfig(speex) +pkgconfig(srt) +pkgconfig(SvtAv1Dec) +pkgconfig(SvtAv1Enc) +pkgconfig(SvtHevcEnc) +pkgconfig(SvtVp9Enc) +pkgconfig(taglib) +pkgconfig(theoradec) +pkgconfig(theoraenc) +pkgconfig(twolame) +pkgconfig(valgrind) +pkgconfig(vo-amrwbenc) +pkgconfig(vorbis) +pkgconfig(vorbisenc) +pkgconfig(vpx) +pkgconfig(vulkan) +pkgconfig(wavpack) +pkgconfig(wayland-client) +pkgconfig(wayland-cursor) +pkgconfig(wayland-egl) +pkgconfig(wayland-protocols) +pkgconfig(webrtc-audio-coding-1) +pkgconfig(webrtc-audio-processing-1) +pkgconfig(x11-xcb) +pkgconfig(x11) +pkgconfig(x264) +pkgconfig(x265) +pkgconfig(xcb) +pkgconfig(xdamage) +pkgconfig(xext) +pkgconfig(xfixes) +pkgconfig(xi) +pkgconfig(xkbcommon-x11) +pkgconfig(xkbcommon) +pkgconfig(xrandr) +pkgconfig(xtst) +pkgconfig(xv) +pkgconfig(zbar) +pkgconfig(zlib) +pkgconfig(zvbi-0.2) diff --git a/ci/docker/fedora/install-deps.sh b/ci/docker/fedora/install-deps.sh index 2440de194b7..38c73407c1b 100644 --- a/ci/docker/fedora/install-deps.sh +++ b/ci/docker/fedora/install-deps.sh @@ -6,38 +6,30 @@ set -eux # We need them to cleanly build our doc. 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 +dnf install -y dnf-plugins-core +dnf config-manager --set-enabled '*-debuginfo' + dnf upgrade -y && dnf distro-sync -y -dnf install -y $(<./ci/docker/fedora/deps.txt) # Install the dependencies of gstreamer -dnf builddep -y gstreamer1 \ - gstreamer1-plugins-base \ - gstreamer1-plugins-good \ - gstreamer1-plugins-good-extras \ - gstreamer1-plugins-good-qt \ - gstreamer1-plugins-ugly \ - gstreamer1-plugins-ugly-free \ - gstreamer1-plugins-bad-free \ - gstreamer1-plugins-bad-free-extras \ - gstreamer1-plugins-bad-freeworld \ - gstreamer1-libav \ - gstreamer1-rtsp-server \ - gstreamer1-vaapi \ - python3-gstreamer1 +dnf install --setopt=install_weak_deps=false -y $(<./ci/docker/fedora/deps.txt) -dnf remove -y meson -x ninja-build -pip3 install meson hotdoc python-gitlab tomli junitparser +# Install devhelp files for hotdoc +dnf install -y glib2-doc gdk-pixbuf2-devel gtk3-devel-docs gtk4-devel-docs libsoup-doc -# Remove gst-devel packages installed by builddep above -dnf remove -y "gstreamer1*devel" +# Make sure we don't end up installing these from some transient dependency +dnf remove -y "gstreamer1*-devel" rust cargo meson 'fdk-aac-free*' -dnf install -y glib2-doc gdk-pixbuf2-devel gtk3-devel-docs gtk4-devel-docs libsoup-doc +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 \ @@ -46,6 +38,7 @@ debug_packages=$(rpm -qa | grep -v -i \ -e bluez \ -e boost \ -e ccache \ + -e ceph \ -e clang \ -e cmake \ -e colord \ @@ -86,6 +79,7 @@ debug_packages=$(rpm -qa | grep -v -i \ -e qemu \ -e qt5 \ -e qt6 \ + -e sequoia \ -e spice \ -e sqlite \ -e suitesparse \ @@ -107,5 +101,4 @@ dnf debuginfo-install -y --best --allowerasing --skip-broken $debug_packages echo "Removing DNF cache" dnf clean all -rm -R /root/* rm -rf /var/cache/dnf /var/log/dnf* diff --git a/ci/docker/fedora/install-gdk-pixbuf.sh b/ci/docker/fedora/install-gdk-pixbuf.sh deleted file mode 100644 index b9c513d4beb..00000000000 --- a/ci/docker/fedora/install-gdk-pixbuf.sh +++ /dev/null @@ -1,11 +0,0 @@ -#! /bin/bash - -set -eux - -# Install gdk-pixbuf manually as fedora 34 doesn't build the docs/.devhelp2 -git clone --branch gdk-pixbuf-2-40 https://gitlab.gnome.org/GNOME/gdk-pixbuf.git -cd gdk-pixbuf -meson setup _build --prefix=/usr -Ddocs=true -meson install -C _build -cd .. -rm -rf gdk-pixbuf diff --git a/ci/docker/fedora/install-wayland-protocols.sh b/ci/docker/fedora/install-wayland-protocols.sh deleted file mode 100644 index 8109a69d4a5..00000000000 --- a/ci/docker/fedora/install-wayland-protocols.sh +++ /dev/null @@ -1,11 +0,0 @@ -#! /bin/bash - -set -eux - -# Install a more up to date wayland-protocols -git clone --branch 1.32 https://gitlab.freedesktop.org/wayland/wayland-protocols.git -cd wayland-protocols -meson setup _build --prefix=/usr -Dtests=false -meson install -C _build -cd .. -rm -rf wayland-protocols diff --git a/ci/docker/fedora/prepare.sh b/ci/docker/fedora/prepare.sh index cdb5c91b042..66fd1457763 100644 --- a/ci/docker/fedora/prepare.sh +++ b/ci/docker/fedora/prepare.sh @@ -2,18 +2,12 @@ set -eux +bash ./ci/docker/fedora/install-deps.sh + # Configure git for various usage git config --global user.email "gstreamer@gstreamer.net" git config --global user.name "Gstbuild Runner" -bash ./ci/docker/fedora/install-deps.sh - -bash ./ci/docker/fedora/install-gdk-pixbuf.sh - -bash ./ci/docker/fedora/install-wayland-protocols.sh - bash ./ci/scripts/install-rust.sh -bash ./ci/docker/fedora/virtme-fluster-setup.sh - bash ./ci/scripts/create-subprojects-cache.sh diff --git a/ci/docker/fedora/virtme-fluster-setup.sh b/ci/docker/fedora/virtme-fluster-setup.sh index 38743a73d41..6a25bc5a73f 100644 --- a/ci/docker/fedora/virtme-fluster-setup.sh +++ b/ci/docker/fedora/virtme-fluster-setup.sh @@ -2,6 +2,8 @@ set -eux +sudo dnf install -y bc + # Install virtme-ng git clone https://github.com/arighi/virtme-ng.git pushd virtme-ng diff --git a/ci/docker/lint/prepare.sh b/ci/docker/lint/prepare.sh deleted file mode 100755 index 7fa1d944470..00000000000 --- a/ci/docker/lint/prepare.sh +++ /dev/null @@ -1,6 +0,0 @@ -#! /bin/bash - -set -eux - -python3 -m pip install gitlint - diff --git a/ci/docker/windows/Dockerfile b/ci/docker/windows/Dockerfile index b78b640af0c..0fd0f1d9725 100644 --- a/ci/docker/windows/Dockerfile +++ b/ci/docker/windows/Dockerfile @@ -42,8 +42,18 @@ RUN choco install -y 7zip # 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 v3 RUN choco install --execution-timeout=3600 -y wixtoolset +# Install Wix v5 (complete install, no NuGet) from MSI +RUN Invoke-WebRequest -Uri https://download.visualstudio.microsoft.com/download/pr/78caa28b-2982-43ed-8b9c-20e3369f0795/c771e9fd12a67068436115cf295740f7/dotnet-runtime-6.0.16-win-x86.exe -OutFile C:\TEMP\dotnet-runtime-6.0.16-win-x86.exe +RUN C:\TEMP\dotnet-runtime-6.0.16-win-x86.exe /quiet +RUN Invoke-WebRequest -Uri https://download.visualstudio.microsoft.com/download/pr/456fdf02-f100-4664-916d-fd46c192efea/619bbd8426537632b7598b4c7c467cf1/dotnet-runtime-6.0.16-win-x64.exe -OutFile C:\TEMP\dotnet-runtime-6.0.16-win-x64.exe +RUN C:\TEMP\dotnet-runtime-6.0.16-win-x64.exe /quiet +RUN Invoke-WebRequest -Uri https://github.com/wixtoolset/wix/releases/download/v5.0.1/wix-cli-x64.msi -OutFile C:\TEMP\wix-cli-x64.msi +RUN msiexec /i C:\TEMP\wix-cli-x64.msi + # Remove MAX_PATH limit of 260 characters RUN New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\FileSystem' ` -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force @@ -54,7 +64,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.1.1 python-gitlab +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"' diff --git a/ci/docker/windows/install_rust.ps1 b/ci/docker/windows/install_rust.ps1 index 402e1aa12f4..ef16c99c9ef 100644 --- a/ci/docker/windows/install_rust.ps1 +++ b/ci/docker/windows/install_rust.ps1 @@ -1,6 +1,6 @@ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; -$rust_version = '1.77.2' +$rust_version = '1.83.0' $rustup_url = 'https://win.rustup.rs/x86_64' Invoke-WebRequest -Uri $rustup_url -OutFile C:\rustup-init.exe diff --git a/ci/fluster/visl_references/test_suites/h264/JVT-AVC_V1.json b/ci/fluster/visl_references/test_suites/h264/JVT-AVC_V1.json index a648a307786..02b435063f6 100644 --- a/ci/fluster/visl_references/test_suites/h264/JVT-AVC_V1.json +++ b/ci/fluster/visl_references/test_suites/h264/JVT-AVC_V1.json @@ -761,7 +761,7 @@ "source_checksum": "3644489dab877ffbf5497594098f63e2", "input_file": "FM1_FT_E.264", "output_format": "yuv420p", - "result": "46b584c89e359c39619bc144f9f29162" + "result": "de3efddc727557b89ad9b09edcfb7365" }, { "name": "FM2_SVA_C", diff --git a/ci/fluster/visl_references/test_suites/vp8/VP8-TEST-VECTORS.json b/ci/fluster/visl_references/test_suites/vp8/VP8-TEST-VECTORS.json index 0dba5029fcb..4ec8566ee23 100644 --- a/ci/fluster/visl_references/test_suites/vp8/VP8-TEST-VECTORS.json +++ b/ci/fluster/visl_references/test_suites/vp8/VP8-TEST-VECTORS.json @@ -321,7 +321,7 @@ "source_checksum": "ba633f3350d266dd54d9f31e28a56637", "input_file": "vp80-03-segmentation-1425.ivf", "output_format": "yuv420p", - "result": "2fec50717d8c0bb576a4fba12d10c67f" + "result": "809e484713aa1422f27bed017c06a7d8" }, { "name": "vp80-03-segmentation-1426", @@ -361,7 +361,7 @@ "source_checksum": "9061775e2d282e947c105575a8523a6e", "input_file": "vp80-03-segmentation-1436.ivf", "output_format": "yuv420p", - "result": "a23f2911c7a33f3823096752d9207bc5" + "result": "a6265f9c33a6757e2d0d7b8ee7acf537" }, { "name": "vp80-03-segmentation-1437", diff --git a/ci/gitlab/trigger_cerbero_pipeline.py b/ci/gitlab/trigger_cerbero_pipeline.py index 4a95f39e902..caef3e2e7eb 100755 --- a/ci/gitlab/trigger_cerbero_pipeline.py +++ b/ci/gitlab/trigger_cerbero_pipeline.py @@ -69,14 +69,14 @@ def get_matching_user_project(project, branch): # 'gstreamer' namespace. Fetch the branch name in the same way, just in # case it breaks in the future. if 'CI_MERGE_REQUEST_SOURCE_PROJECT_URL' in os.environ: - project_url = os.environ['CI_MERGE_REQUEST_SOURCE_PROJECT_URL'] + project_path = os.environ['CI_MERGE_REQUEST_SOURCE_PROJECT_PATH'] project_branch = os.environ['CI_MERGE_REQUEST_SOURCE_BRANCH_NAME'] else: - project_url = os.environ['CI_PROJECT_URL'] + project_path = os.environ['CI_PROJECT_PATH'] project_branch = os.environ['CI_COMMIT_REF_NAME'] variables = { - "CI_GSTREAMER_URL": project_url, + "CI_GSTREAMER_PATH": project_path, "CI_GSTREAMER_REF_NAME": project_branch, # This tells cerbero CI that this is a pipeline started via the # trigger API, which means it can use a deps cache instead of diff --git a/ci/run_retry.ps1 b/ci/run_retry.ps1 new file mode 100644 index 00000000000..edf9f6b0698 --- /dev/null +++ b/ci/run_retry.ps1 @@ -0,0 +1,58 @@ +# Set error action preference to stop on errors +$ErrorActionPreference = "Stop" + +# Define error patterns to catch +$ERRORS = @( + 'fatal error C1060: compiler is out of heap space' + 'cc1plus.exe: out of memory allocating' + 'cl : Command line error D8027 : cannot execute' + 'Access is denied (os error 5)' + 'LINK : fatal error LNK1104: cannot open file' + 'PermissionError: [Errno 13] Permission denied:' + 'c1: fatal error C1356: unable to find mspdbcore.dll' +) +$RETRIES = 3 +$LOGFILE = [System.IO.Path]::GetTempPath() + "logfile.txt" + +while ($true) { + $spurious_error = "" + + # Execute command and capture output to log file while displaying it + if ($env:JOB) { + # Bypass argument parsing -- https://github.com/PowerShell/PowerShell/issues/19451 + & iex $env:JOB | Tee-Object -FilePath $LOGFILE *>&1 + } else { + & $args[0] $args[1..($args.Count-1)] | Tee-Object -FilePath $LOGFILE *>&1 + } + $ret = $LASTEXITCODE + + if ($ret -eq 0) { + break + } + + # Read log file and check for known errors + foreach ($line in Get-Content $LOGFILE) { + foreach ($e in $ERRORS) { + if ($line -match [regex]::Escape($e)) { + $spurious_error = $line + break + } + } + if ($spurious_error) { + break + } + } + + # Clean up log file + if (Test-Path $LOGFILE) { + Remove-Item -Force $LOGFILE + } + + # Exit if no spurious error found or no retries left + if ([string]::IsNullOrEmpty($spurious_error) -or $RETRIES -eq 0) { + exit $ret + } + + $RETRIES-- + Write-Host "`nRetrying, caught spurious failure: $spurious_error`n" +} diff --git a/ci/scripts/abi-check.sh b/ci/scripts/abi-check.sh new file mode 100755 index 00000000000..d40d435b98b --- /dev/null +++ b/ci/scripts/abi-check.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +set -eux + +builddir="$1" + +meson_args="${MESON_ARGS:-}" + +if [[ -z "$builddir" ]]; then + echo "Usage: build.sh " + exit 1 +fi + +echo ${ABI_CHECK_CACHE} +echo ${ABI_CHECK_DIR} + +# nproc works on linux +# sysctl for macos +_jobs=$(nproc || sysctl -n hw.ncpu) +jobs="${FDO_CI_CONCURRENT:-$_jobs}" + +install_prefix=/tmp/install +MESON_ARGS="${meson_args} --prefix ${install_prefix} --optimization=g" ./ci/scripts/build.sh build/ +ninja -C $builddir install + +find ${install_prefix}/lib64 -type f -iname *libgst*.so.* -print0 | xargs -0 -I '{}' bash ${CI_PROJECT_DIR}/ci/scripts/save-abi.sh {} ${ABI_CHECK_DIR} ${install_prefix}/include/gstreamer-1.0 + +fail_file=abi-compare-failure +if ! find ${ABI_CHECK_CACHE} -type f -print0 | xargs -0 -I '{}' bash ${CI_PROJECT_DIR}/ci/scripts/compare-abi.sh {} ${CI_PROJECT_DIR}/${ABI_CHECK_DIR}/ ${fail_file} +then + echo ABI comparison failed for the following modules! + cat ${fail_file} + rm -rf $install_prefix + exit 1; +fi + +rm -rf $install_prefix diff --git a/ci/scripts/build-docs.sh b/ci/scripts/build-docs.sh index 8fee83b515e..e0f15846b36 100755 --- a/ci/scripts/build-docs.sh +++ b/ci/scripts/build-docs.sh @@ -1,29 +1,40 @@ #! /bin/bash +builddir="$1" +if [[ -z "$builddir" ]]; then + echo "Usage: build-docs.sh " + exit 1 +fi + set -eux -export PATH="/usr/local/cargo/bin/:/usr/local/bin/:$PATH" -export RUSTUP_HOME="/usr/local/rustup" -export CARGO_HOME="/usr/local/cargo" +source "ci/scripts/source_image_env.sh" -./ci/scripts/handle-subprojects-cache.py --cache-dir /subprojects subprojects/ +# Special doc mode for V4L2 stateless codecs +export GST_V4L2_CODEC_GEN_DOC=1 -echo "$MESON_ARGS" -meson setup build/ $MESON_ARGS +meson_args="${MESON_ARGS:--Ddoc=enabled -Drs=enabled -Dgst-docs:fatal_warnings=true}" +echo "$meson_args" +meson setup "$builddir" $meson_args ccache --show-stats -ninja -C build/ update_girs +ninja -C "$builddir" update_girs # Ignore modifications to wrap files made by meson git checkout $(git ls-files 'subprojects/*.wrap') ./ci/scripts/check-diff.py "gir files" -./gst-env.py ninja -C build/ plugins_doc_caches +./gst-env.py --builddir "$builddir" ninja -C "$builddir" plugins_doc_caches # Ignore modifications to wrap files made by meson git checkout $(git ls-files 'subprojects/*.wrap') ./ci/scripts/check-diff.py -export GI_TYPELIB_PATH="$PWD/girs" -hotdoc run --conf-file build/subprojects/gst-docs/GStreamer-doc.json +ninja -C "$builddir" subprojects/gst-docs/sitemap.txt + +export GI_TYPELIB_PATH=$PWD/girs +hotdoc run --conf-file "$builddir"/subprojects/gst-docs/GStreamer-doc.json + +mv "$builddir/subprojects/gst-docs/GStreamer-doc/html" documentation/ -mv build/subprojects/gst-docs/GStreamer-doc/html documentation/ +pip3 install bs4 +python3 subprojects/gst-docs/scripts/rust_doc_unifier.py documentation/ diff --git a/ci/scripts/build-toolbox-image.sh b/ci/scripts/build-toolbox-image.sh new file mode 100644 index 00000000000..ef382d69803 --- /dev/null +++ b/ci/scripts/build-toolbox-image.sh @@ -0,0 +1,155 @@ +#!/bin/bash +# vi: sw=2 ts=4 + +# Shameless copy of the script from gnome-shell +# https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/.gitlab-ci/build-toolbox-image.sh?ref_type=heads + +set -e + +die() { + echo "$@" >&2 + 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() { + echo Building $TOOLBOX_IMAGE from $BASE_CI_IMAGE + + export BUILDAH_ISOLATION=chroot + export BUILDAH_FORMAT=docker + + local build_cntr=$(buildah from $BASE_CI_IMAGE) + local build_mnt=$(buildah mount $build_cntr) + + [[ -n "$build_mnt" && -n "$build_cntr" ]] || die "Failed to mount the container" + + # Copy pasted from github + # https://github.com/containers/toolbox/blob/main/images/fedora/f39/extra-packages + local extra_packages=( + bash-completion + bc + bzip2 + cracklib-dicts + diffutils + dnf-plugins-core + findutils + flatpak-spawn + fpaste + gawk-all-langpacks + git + glibc-gconv-extra + gnupg2 + gnupg2-smime + gvfs-client + hostname + iproute + iputils + keyutils + krb5-libs + less + lsof + man-db + man-pages + mesa-dri-drivers + mesa-vulkan-drivers + mtr + nano-default-editor + nss-mdns + openssh-clients + passwd + pigz + procps-ng + psmisc + rsync + shadow-utils + sudo + tcpdump + "time" + traceroute + tree + unzip + util-linux + vte-profile + vulkan-loader + wget + which + whois + words + xorg-x11-xauth + xz + zip + ) + local our_extra_packages=( + gdb + ripgrep + fish + zsh + ) + # local debug_packages=( + # glib2 + # ) + + 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 dnf clean all + buildah run $build_cntr rm -rf /var/lib/cache/dnf + + # 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 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 $TOOLBOX_IMAGE + buildah tag $TOOLBOX_IMAGE $TOOLBOX_LATEST +} + +BASE_CI_IMAGE="$1" +TOOLBOX_BRANCH="$2" +GST_UPSTREAM_BRANCH="$3" + +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 + +if ! check_image_base; then + build_container + + podman push "$TOOLBOX_IMAGE" + podman push "$TOOLBOX_LATEST" +fi + +echo "Create your toolbox with either of the following commands" +echo " $ toolbox create gst-toolbox --image $TOOLBOX_LATEST" +echo " $ toolbox create gst-toolbox-$TOOLBOX_BRANCH --image $TOOLBOX_IMAGE" diff --git a/ci/scripts/build.sh b/ci/scripts/build.sh index bd62a0862b6..93c068733b2 100755 --- a/ci/scripts/build.sh +++ b/ci/scripts/build.sh @@ -1,7 +1,20 @@ #! /bin/bash +builddir="$1" + +error="${GST_WERROR:-false}" +gtk_args="${GTK_ARGS:-}" +meson_args="${MESON_ARGS:-}" + +if [[ -z "$builddir" ]]; then + echo "Usage: build.sh " + exit 1 +fi + set -eux +source "ci/scripts/source_image_env.sh" + # Expects: # BUILD_TYPE: Proxy of meson's --default-library arg # must be 'shared' or 'static' or 'both' @@ -11,27 +24,23 @@ set -eux # must be a string of a boolean, "true" or "false". Not yaml bool. # SUBPROJECTS_CACHE_DIR: The location in the image of the subprojects cache -export RUSTUP_HOME="/usr/local/rustup" -export CARGO_HOME="/usr/local/cargo" -export PATH="/usr/local/cargo/bin:$PATH" - # nproc works on linux # sysctl for macos _jobs=$(nproc || sysctl -n hw.ncpu) jobs="${FDO_CI_CONCURRENT:-$_jobs}" date -R -ci/scripts/handle-subprojects-cache.py --cache-dir /subprojects subprojects/ -ARGS="${BUILD_TYPE:---default-library=both} ${BUILD_GST_DEBUG:--Dgstreamer:gst_debug=true} ${MESON_ARGS}" -echo "Werror: $GST_WERROR" +ARGS="${BUILD_TYPE:---default-library=both} ${BUILD_GST_DEBUG:--Dgstreamer:gst_debug=true} $meson_args $gtk_args" +echo "Werror: $error" -if [ "$GST_WERROR" = "true" ]; then +# If the variable is not true, we are either running locally or explicitly false. Thus false by default. +if [ "$error" = "true" ]; then ARGS="$ARGS --native-file ./ci/meson/gst-werror.ini" fi date -R -meson setup build/ --native-file ./ci/meson/gst-ci-cflags.ini ${ARGS} +meson setup "$builddir" --native-file ./ci/meson/gst-ci-cflags.ini ${ARGS} date -R if command -v ccache @@ -40,7 +49,7 @@ then fi date -R -meson compile -C build/ --jobs "$jobs" +meson compile -C "$builddir" --jobs "$jobs" date -R if command -v ccache diff --git a/ci/scripts/compare-abi.sh b/ci/scripts/compare-abi.sh new file mode 100755 index 00000000000..fabb94ba793 --- /dev/null +++ b/ci/scripts/compare-abi.sh @@ -0,0 +1,24 @@ +#! /bin/bash + +set -eux + +old_abi=${1} +output_dir=${2} +output_fail_file=${3} +upstream_branch=${GST_UPSTREAM_BRANCH:-} + +module=$(basename ${old_abi}) + +opts="--drop-private-types" +if [ "x$upstream_branch" = "xmain" ] +then + # don't error out on added symbols + opts="${opts} --no-added-syms" +fi + +mkdir -p ${output_dir} +if ! abidiff ${opts} ${old_abi} ${output_dir}/${module} +then + echo ${module} >> ${output_fail_file} + exit 1; +fi diff --git a/ci/scripts/handle-subprojects-cache.py b/ci/scripts/handle-subprojects-cache.py index 5ad47c89f97..c97c4a3fab0 100755 --- a/ci/scripts/handle-subprojects-cache.py +++ b/ci/scripts/handle-subprojects-cache.py @@ -68,6 +68,15 @@ def copy_cache(options): print("Copying from %s -> %s" % (cache_dir, project_path)) shutil.copytree(cache_dir, project_path) + + # workaround `meson subprojects download` only providing a shallow + # clone. + # If we need to change refs, then the git repo will only ever be + # able to reference the originally cloned ref. + git_path = os.path.join(project_path, '.git') + if os.path.exists(git_path): + subprocess.check_call(['git', '-C', git_path, 'remote', 'set-branches', 'origin', '*']) + subprocess.check_call(['meson', 'subprojects', 'update', '--reset']) diff --git a/ci/scripts/install-rust.sh b/ci/scripts/install-rust.sh index 7f5d34824f0..41a90b6978c 100644 --- a/ci/scripts/install-rust.sh +++ b/ci/scripts/install-rust.sh @@ -3,8 +3,8 @@ set -eux # Install Rust -RUSTUP_VERSION=1.27.0 -RUST_VERSION=1.77.2 +RUSTUP_VERSION=1.27.1 +RUST_VERSION=1.84.0 RUST_ARCH="x86_64-unknown-linux-gnu" RUSTUP_URL=https://static.rust-lang.org/rustup/archive/$RUSTUP_VERSION/$RUST_ARCH/rustup-init @@ -19,8 +19,13 @@ chmod +x rustup-init; rm rustup-init; chmod -R a+w $RUSTUP_HOME $CARGO_HOME -cargo install cargo-c --version 0.9.31+cargo-0.78.0 +cargo install --locked cargo-c --version 0.10.8+cargo-0.85.0 rustup --version cargo --version rustc --version +cargo cinstall --version + +# Cleanup the registry after install +# so we don't have to save 200mb of the index in the ci image +rm -rf "$CARGO_HOME/registry" diff --git a/ci/scripts/save-abi.sh b/ci/scripts/save-abi.sh new file mode 100755 index 00000000000..814989c34b2 --- /dev/null +++ b/ci/scripts/save-abi.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +set -eux + +filename=${1} +output_dir=${2} +header_dir=${3} +module=$(basename ${filename} | cut -f1,2 -d'.') + +mkdir -p ${output_dir} +abidw -o ${output_dir}/${module}.abi --drop-private-types --headers-dir ${header_dir} ${filename} diff --git a/ci/scripts/source_image_env.sh b/ci/scripts/source_image_env.sh new file mode 100644 index 00000000000..97094836aff --- /dev/null +++ b/ci/scripts/source_image_env.sh @@ -0,0 +1,25 @@ +#! /bin/bash + +image_cache="${SUBPROJECTS_CACHE_DIR:-}" + +# On the CI image we install the rust toolcahin under this path +# If it exists set the HOME and PATH variables and print the versions +# of what we have installed +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" + + rustup --version + rustc --version + cargo --version + cargo cinstall --version +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 diff --git a/ci/scripts/test.sh b/ci/scripts/test.sh index 57b299b159a..6e4dcbedf90 100755 --- a/ci/scripts/test.sh +++ b/ci/scripts/test.sh @@ -1,21 +1,46 @@ #! /bin/bash +builddir="$1" +tests="$2" + +if [[ -z "$builddir" || -z "$tests" ]]; then + echo "Usage: test.sh " + exit 1 +fi + set -eux +_jobs=$(nproc || sysctl -n hw.ncpu) +jobs="${FDO_CI_CONCURRENT:-$_jobs}" + timeout="${TIMEOUT_FACTOR:="2"}" validate="${EXTRA_VALIDATE_ARGS:=""}" parent="${CI_PROJECT_DIR:-$(pwd)}" -export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)" -echo "-> Running ${TEST_SUITE}" +# Put the runtime dir inside CI_PROJECT_DIR or in /tmp if we are running locally +export XDG_RUNTIME_DIR="$(mktemp -p "${CI_PROJECT_DIR:-/tmp}" -d xdg-runtime-XXXXXX)" +echo "-> Running $tests" + +# Disable all cpu extensions post AVX to match what valgrind supports +# https://github.com/openssl/openssl/blob/master/NOTES-VALGRIND.md +export OPENSSL_ia32cap=":0" + +# Force Software rendering for GL and Vulkan so the tests run locally +# like they would do in the CI. +export LIBGL_ALWAYS_SOFTWARE="true" +# This the hardcoded value for llvmpipe +export MESA_VK_DEVICE_SELECT="10005:0" ./gst-env.py \ - gst-validate-launcher ${TEST_SUITE} \ + "--builddir=$builddir" \ + gst-validate-launcher "$tests" \ + --jobs "$jobs" \ --check-bugs \ --dump-on-failure \ --mute \ --shuffle \ --no-display \ + --validate-generate-expectations=disabled \ --meson-no-rebuild \ --timeout-factor "$timeout" \ --fail-on-testlist-change \ diff --git a/data/machine-files/macos-native-file.ini b/data/machine-files/macos-native-file.ini index 2d712030055..776804be399 100644 --- a/data/machine-files/macos-native-file.ini +++ b/data/machine-files/macos-native-file.ini @@ -8,7 +8,6 @@ common_args = ['--sysroot=' + macosx_sdk, '-mmacosx-version-min=' + macosx_m # Uncomment for arm64 macs: homebrew_prefix = '/opt/homebrew' openssl_pc = homebrew_prefix / 'opt/openssl@1.1/lib/pkgconfig' -vpx_pc = homebrew_prefix / 'opt/libvpx/lib/pkgconfig' [built-in options] c_args = common_args @@ -19,10 +18,11 @@ c_link_args = common_args cpp_link_args = common_args objc_link_args = common_args objcpp_link_args = common_args -pkg_config_path = [openssl_pc, vpx_pc] -force_fallback_for = ['zlib', 'libffi'] +pkg_config_path = [openssl_pc] +force_fallback_for = ['zlib', 'libffi', 'glib', 'libvpx'] [project options] +ges = 'enabled' rs = 'enabled' libnice = 'enabled' tls = 'enabled' @@ -30,9 +30,19 @@ introspection = 'disabled' python = 'disabled' qt5 = 'enabled' +[libnice:project options] +crypto-library = 'openssl' + +[glib-networking:project options] +gnutls = 'disabled' +openssl = 'enabled' + [gst-plugins-base:project options] gl = 'enabled' pango = 'enabled' +gl_api = ['opengl'] +gl_platform = ['cgl'] +gl_winsys = ['cocoa'] [gst-plugins-bad:project options] applemedia = 'enabled' diff --git a/girs/CudaGst-1.0.gir b/girs/CudaGst-1.0.gir index c38a0d2ed9f..16181800875 100644 --- a/girs/CudaGst-1.0.gir +++ b/girs/CudaGst-1.0.gir @@ -23,6 +23,14 @@ and/or use gtk-doc annotations. --> + + + + + + + + @@ -35,6 +43,10 @@ and/or use gtk-doc annotations. --> + + + + @@ -51,6 +63,215 @@ and/or use gtk-doc annotations. --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -294,6 +515,8 @@ and/or use gtk-doc annotations. --> + + @@ -306,6 +529,48 @@ and/or use gtk-doc annotations. --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -356,6 +621,29 @@ and/or use gtk-doc annotations. --> + + + + + + + + + + + + + + + + + + + + + + + @@ -458,6 +746,48 @@ and/or use gtk-doc annotations. --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/girs/GES-1.0.gir b/girs/GES-1.0.gir index cfa987e9a79..9181b342e5e 100644 --- a/girs/GES-1.0.gir +++ b/girs/GES-1.0.gir @@ -142,7 +142,7 @@ reloading - + Returns an asset with the given properties. If such an asset already exists in the cache (it has been previously created in GES), then a reference to the existing asset is returned. Otherwise, a newly created @@ -192,7 +192,7 @@ asset, or %NULL if an error occurred. - + Requests an asset with the given properties asynchronously (see ges_asset_request()). When the asset has been initialized or fetched from the cache, the given callback function will be called. The @@ -312,6 +312,7 @@ error occurred. + Deprecated: 1.18: This vmethod is no longer called. @@ -326,6 +327,10 @@ error occurred. + A method called by a #GESProject when an asset has +failed to load. @error is the error given by +ges_asset_request_finish (). Returns: %TRUE if a new id for @self was +passed to @proposed_new_id. @@ -343,6 +348,13 @@ error occurred. + A method to be called when an asset is being requested +asynchronously. This will be after the properties of the asset have +been set, so it is tasked with (re)loading the 'state' of the asset. +The return value should indicated whether the loading is complete, is +carrying on asynchronously, or an error occurred. The default +implementation will simply return that loading is already complete (the +asset is already in a usable state after the properties have been set). @@ -385,7 +397,7 @@ error occurred. - + Gets the #GESAsset:extractable-type of the asset. @@ -399,7 +411,7 @@ error occurred. - + Gets the #GESAsset:id of the asset. @@ -413,7 +425,7 @@ error occurred. - + Gets the default #GESAsset:proxy of the asset. @@ -427,7 +439,7 @@ error occurred. - + Gets the #GESAsset:proxy-target of the asset. Note that the proxy target may have loaded with an error, so you should @@ -464,7 +476,7 @@ that @asset has. - + Sets the #GESAsset:proxy for the asset. If @proxy is among the existing proxies of the asset (see @@ -519,11 +531,11 @@ list. - + The #GESExtractable object type that can be extracted from the asset. - + The ID of the asset. This should be unique amongst all assets with the same #GESAsset:extractable-type. Depending on the associated #GESExtractable implementation, this id may convey some information @@ -535,7 +547,7 @@ of the extractable type to see whether they differ from the default behaviour. - + The default proxy for this asset, or %NULL if it has no proxy. A proxy will act as a substitute for the original asset when the original is requested (see ges_asset_request()). @@ -544,7 +556,7 @@ Setting this property will not usually remove the existing proxy, but will replace it as the default (see ges_asset_set_proxy()). - + The asset that this asset is a proxy for, or %NULL if it is not a proxy for another asset. @@ -577,6 +589,13 @@ asset it is now the proxy of/no longer the proxy of. + A method to be called when an asset is being requested +asynchronously. This will be after the properties of the asset have +been set, so it is tasked with (re)loading the 'state' of the asset. +The return value should indicated whether the loading is complete, is +carrying on asynchronously, or an error occurred. The default +implementation will simply return that loading is already complete (the +asset is already in a usable state after the properties have been set). @@ -590,6 +609,11 @@ asset it is now the proxy of/no longer the proxy of. + A method that returns a new object of the asset's +#GESAsset:extractable-type, or %NULL if an error occurs. The default +implementation will fetch the properties of the #GESExtractable from +its get_parameters_from_id() class method and set them on a new +#GESAsset:extractable-type #GObject, which is returned. @@ -622,6 +646,7 @@ error occurred. + Deprecated: 1.18: This vmethod is no longer called. @@ -638,6 +663,10 @@ error occurred. + A method called by a #GESProject when an asset has +failed to load. @error is the error given by +ges_asset_request_finish (). Returns: %TRUE if a new id for @self was +passed to @proposed_new_id. @@ -676,7 +705,7 @@ asynchronously error - + @@ -726,7 +755,7 @@ You can use the following children properties through the - + @@ -821,7 +850,7 @@ track. - + @@ -887,7 +916,7 @@ modify these fields, or add additional ones. - + @@ -927,7 +956,7 @@ be created by clips. - + @@ -937,7 +966,7 @@ be created by clips. - + The location of the file/resource to use. @@ -967,7 +996,7 @@ be created by clips. - + @@ -1096,16 +1125,16 @@ Note that @effect must not be part of a clip, nor can it have A #GESBaseEffect - - The function to use -for querying how a time is translated from the source coordinates to -the sink coordinates of @effect + + The +function to use for querying how a time is translated from the source +coordinates to the sink coordinates of @effect - The function to use -for querying how a time is translated from the sink coordinates to the -source coordinates of @effect + The +function to use for querying how a time is translated from the sink +coordinates to the source coordinates of @effect @@ -1183,10 +1212,10 @@ as core children, nor as additional effects. - + - + @@ -1251,7 +1280,7 @@ property name/value pairs - + @@ -1302,7 +1331,7 @@ property name/value pairs - + @@ -1530,6 +1559,12 @@ do_time_effect_change (GESClip * clip) + Method to create the core #GESTrackElement of a clip +of this class. If a clip of this class may create several track elements per +track type, this should be left as %NULL, and +GESClipClass::create_track_elements should be used instead. Otherwise, you +should implement this class method and leave +GESClipClass::create_track_elements as the default implementation The #GESTrackElement created @@ -1549,6 +1584,10 @@ given @type or an error occurred. + Method to create the (multiple) core +#GESTrackElement-s of a clip of this class. If +GESClipClass::create_track_element is implemented, this should be kept as the +default implementation A list of @@ -1754,7 +1793,7 @@ match any type - + Gets the #GESClip:duration-limit of the clip. @@ -1829,7 +1868,7 @@ be performed. - + Gets the #GESClip:layer of the clip. @@ -1844,7 +1883,7 @@ be performed. - + Gets the #GESClip:supported-formats of the clip. @@ -2070,7 +2109,7 @@ would not be able to adapt itself once the effect is removed. - + Sets the #GESClip:supported-formats of the clip. This should normally only be called by subclasses, which should be responsible for updating its value, rather than the user. @@ -2219,7 +2258,7 @@ the start and end of the clip - + The maximum #GESTimelineElement:duration that can be *currently* set for the clip, taking into account the #GESTimelineElement:in-point, #GESTimelineElement:max-duration, #GESTrackElement:active, and @@ -2236,7 +2275,7 @@ variables, its #GESTimelineElement:duration will be set to the new limit. - + The layer this clip lies in. If you want to connect to this property's #GObject::notify signal, @@ -2244,7 +2283,7 @@ you should connect to it with g_signal_connect_after() since the signal emission may be stopped internally. - + The #GESTrackType-s that the clip supports, which it can create #GESTrackElement-s for. Note that this can be a combination of #GESTrackType flags to indicate support for several @@ -2338,7 +2377,7 @@ natural frame rate. - + Gets track types for which objects extracted from @self can create #GESTrackElement @@ -2353,7 +2392,7 @@ a layer - + Sets track types for which objects extracted from @self can create #GESTrackElement @@ -2370,7 +2409,7 @@ a layer - + The formats supported by the asset. @@ -2420,7 +2459,7 @@ a layer - + @@ -2459,7 +2498,7 @@ default implementation - + @@ -2511,7 +2550,7 @@ Result: (transfer full): A help string. - + @@ -2555,6 +2594,7 @@ The #GESContainer-s to group + Virtual method to add a child @@ -2569,6 +2609,7 @@ The #GESContainer-s to group + Virtual method that is called right after a #GESTimelineElement is added @@ -2583,6 +2624,7 @@ The #GESContainer-s to group + Virtual method that is called right after a #GESTimelineElement is removed @@ -2638,6 +2680,7 @@ be moved to. -1 means no move + Virtual method to remove a child @@ -2824,7 +2867,7 @@ new #GESContainer-s created from the splitting of @container. - + The span of the container's children's #GESTimelineElement:priority values, which is the number of integers that lie between (inclusive) the minimum and maximum priorities found amongst the container's @@ -2892,6 +2935,7 @@ may be stopped internally. + Virtual method that is called right after a #GESTimelineElement is added @@ -2908,6 +2952,7 @@ may be stopped internally. + Virtual method that is called right after a #GESTimelineElement is removed @@ -2924,6 +2969,7 @@ may be stopped internally. + Virtual method to add a child @@ -2940,6 +2986,7 @@ may be stopped internally. + Virtual method to remove a child @@ -2956,6 +3003,8 @@ may be stopped internally. + Virtual method to ungroup a container into a list of +containers @@ -2978,6 +3027,8 @@ new #GESContainer-s created from the splitting of @container. + Virtual method to group a list of containers together under a +single container @@ -2993,6 +3044,7 @@ new #GESContainer-s created from the splitting of @container. + Deprecated @@ -3042,7 +3094,7 @@ be moved to. -1 means no move - + @@ -3136,7 +3188,7 @@ if no track elements are created or an error occurred. - + The timeout to use for the discoverer @@ -3149,7 +3201,7 @@ if no track elements are created or an error occurred. - + Whether to use the cache or not @@ -3162,7 +3214,7 @@ if no track elements are created or an error occurred. - + Sets the timeout to use for the discoverer @@ -3179,7 +3231,7 @@ if no track elements are created or an error occurred. - + Sets whether to use the cache or not @@ -3196,11 +3248,11 @@ if no track elements are created or an error occurred. - + The timeout (in milliseconds) for the #GstDiscoverer operations - + @@ -3254,7 +3306,7 @@ discovery. - + @@ -3266,23 +3318,23 @@ discovery. The edges of an object contain in a #GESTimeline or #GESTrack - + Represents the start of an object. - + Represents the start of an object. - + Represents the end of an object. - + Represents the end of an object. - + Represent the fact we are not working with any edge of an object. - + Represent the fact we are not working with any edge of an object. @@ -3397,7 +3449,7 @@ by the same amount such that the snapped edges will touch. You can also find more explanation about the behaviour of those modes at: [trim, ripple and roll](http://pitivi.org/manual/trimming.html) and [clip management](http://pitivi.org/manual/usingclips.html). - + The element is edited the normal way (default). If acting on the element as a whole (#GES_EDGE_NONE), this will MOVE the element by MOVING its toplevel. When acting on the start of the @@ -3408,7 +3460,7 @@ and [clip management](http://pitivi.org/manual/usingclips.html). of the element (#GES_EDGE_END), this will END-TRIM the element, leaving its toplevel unchanged. - + The element is edited the normal way (default). If acting on the element as a whole (#GES_EDGE_NONE), this will MOVE the element by MOVING its toplevel. When acting on the start of the @@ -3419,7 +3471,7 @@ and [clip management](http://pitivi.org/manual/usingclips.html). of the element (#GES_EDGE_END), this will END-TRIM the element, leaving its toplevel unchanged. - + The element is edited in ripple mode: moving itself as well as later elements, keeping their relative times. This edits the element the same as #GES_EDIT_MODE_NORMAL. In addition, if @@ -3433,7 +3485,7 @@ and [clip management](http://pitivi.org/manual/usingclips.html). edited element. These additional elements will also be shifted by the same shift in layers as the edited element. - + The element is edited in ripple mode: moving itself as well as later elements, keeping their relative times. This edits the element the same as #GES_EDIT_MODE_NORMAL. In addition, if @@ -3447,7 +3499,7 @@ and [clip management](http://pitivi.org/manual/usingclips.html). edited element. These additional elements will also be shifted by the same shift in layers as the edited element. - + The element is edited in roll mode: swapping its content for its neighbour's, or vis versa, in the timeline output. This edits the element the same as #GES_EDIT_MODE_TRIM. In addition, @@ -3465,7 +3517,7 @@ and [clip management](http://pitivi.org/manual/usingclips.html). whole (#GES_EDGE_NONE) is not defined. The element can not shift layers under this mode. - + The element is edited in roll mode: swapping its content for its neighbour's, or vis versa, in the timeline output. This edits the element the same as #GES_EDIT_MODE_TRIM. In addition, @@ -3483,19 +3535,19 @@ and [clip management](http://pitivi.org/manual/usingclips.html). whole (#GES_EDGE_NONE) is not defined. The element can not shift layers under this mode. - + The element is edited in trim mode. When acting on the start of the element, this will START-TRIM it. When acting on the end of the element, this will END-TRIM it. Acting on the element as a whole (#GES_EDGE_NONE) is not defined. - + The element is edited in trim mode. When acting on the start of the element, this will START-TRIM it. When acting on the end of the element, this will END-TRIM it. Acting on the element as a whole (#GES_EDGE_NONE) is not defined. - + The element is edited in slide mode (not yet implemented): moving the element replacing or consuming content on each end. When acting on the element as a whole, this will MOVE the @@ -3508,7 +3560,7 @@ and [clip management](http://pitivi.org/manual/usingclips.html). (#GES_EDGE_START and #GES_EDGE_END) is not defined. The element can not shift layers under this mode. - + The element is edited in slide mode (not yet implemented): moving the element replacing or consuming content on each end. When acting on the element as a whole, this will MOVE the @@ -3581,7 +3633,7 @@ wrong. - + The description of the effect bin with a gst-launch-style pipeline description. @@ -3630,7 +3682,7 @@ to what track type the effect should be used in. - + @@ -3729,14 +3781,14 @@ The asset ID of an effect clip is in the form: - + The description of the audio track of the effect bin with a gst-launch-style pipeline description. This should be used for test purposes. Example: "audiopanorama panorama=1.0" - + The description of the video track of the effect bin with a gst-launch-style pipeline description. This should be used for test purposes. @@ -3766,10 +3818,10 @@ Example: "videobalance saturation=1.5 hue=+0.5" - + - + @@ -3848,6 +3900,11 @@ that is compatible with @self's current state. + This method is called after the #GESAsset of an object is +set. If your class supports the asset of an object changing, then you +can use this method to change the parameters of the object to match the +new asset #GESAsset:id. If setting the asset should be able to fail, +you should implement @set_asset_full instead. @@ -3862,6 +3919,9 @@ that is compatible with @self's current state. + Like @set_asset, but also allows you to return %FALSE +to indicate a failure to change the object in response to a change in +its asset. @@ -3995,6 +4055,11 @@ the new asset on the object. + This method is called after the #GESAsset of an object is +set. If your class supports the asset of an object changing, then you +can use this method to change the parameters of the object to match the +new asset #GESAsset:id. If setting the asset should be able to fail, +you should implement @set_asset_full instead. @@ -4011,6 +4076,9 @@ the new asset on the object. + Like @set_asset, but also allows you to return %FALSE +to indicate a failure to change the object in response to a change in +its asset. @@ -4027,6 +4095,11 @@ the new asset on the object. + The method to call to get the object +properties corresponding to a given asset #GESAsset:id. The default +implementation will simply return no parameters. The default #GESAsset +will call this to set the returned properties on the extracted object, +but other subclasses may ignore this method. @@ -4043,6 +4116,14 @@ the new asset on the object. + The method to fetch the #GESAsset:id of some associated asset. +Note that it may be the case that the object does not have its asset +set, or even that an asset with such an #GESAsset:id does not exist in +the GES cache. Instead, this should return the #GESAsset:id that is +_compatible_ with the current state of the object. The default +implementation simply returns the currently set asset ID, or the type name +of the object, which is what is used as the #GESAsset:id by default, +if no asset is set. @@ -4059,6 +4140,15 @@ that is compatible with @self's current state. + The method to call to get the actual +#GESAsset:extractable-type an asset should have set, given the +requested #GESAsset:id. The default implementation simply returns the +same type as given. You can overwrite this if it is more appropriate +to extract the object from a subclass, depending on the requested +#GESAsset:id. Note that when an asset is requested, this method will be +called before the other class methods. In particular, this means that +the @check_id and @get_parameters_from_id class methods of the returned +type will be used (instead of our own). @@ -4075,6 +4165,8 @@ that is compatible with @self's current state. + The method to set metadata on an asset. This is called +on initiation of the asset, but before it begins to load its state. @@ -4184,6 +4276,7 @@ the asset for the #GESFormatter that has the highest @rank + Whether the URI can be loaded @@ -4441,7 +4534,7 @@ else FALSE. - + @@ -4560,7 +4653,7 @@ ges_container_group() instead, which can return a different - + An overwrite of the #GESTimelineElement:duration property. For a #GESGroup, this is the difference between the earliest #GESTimelineElement:start time and the latest end time (given by @@ -4568,23 +4661,23 @@ ges_container_group() instead, which can return a different its children. - + An overwrite of the #GESTimelineElement:in-point property. This has no meaning for a group and should not be set. - + An overwrite of the #GESTimelineElement:max-duration property. This has no meaning for a group and should not be set. - + An overwrite of the #GESTimelineElement:priority property. Setting #GESTimelineElement priorities is deprecated as all priority management is now done by GES itself. - + An overwrite of the #GESTimelineElement:start property. For a #GESGroup, this is the earliest #GESTimelineElement:start time amongst its children. @@ -4613,7 +4706,7 @@ amongst its children. - + @@ -4626,7 +4719,7 @@ files, do not set the in-point property. - + The location of the file/resource to use. @@ -4656,7 +4749,7 @@ files, do not set the in-point property. - + @@ -4690,6 +4783,7 @@ layers will simply play in addition. + method to get the objects contained in the layer @@ -4871,7 +4965,7 @@ ges_layer_set_active_for_tracks(). - + Gets the #GESLayer:auto-transition of the layer. @@ -4943,7 +5037,7 @@ be the end time of the final clip). - + Get the priority of the layer. When inside a timeline, this is its index in the timeline. See ges_timeline_move_layer(). @@ -5044,7 +5138,7 @@ in the @layer's timeline - + Sets #GESLayer:auto-transition for the layer. Use ges_timeline_set_auto_transition() if you want all layers within a #GESTimeline to have #GESLayer:auto-transition set to %TRUE. Use this @@ -5067,7 +5161,7 @@ the layer - + Sets the layer to the given priority. See #GESLayer:priority. use #ges_timeline_move_layer instead. This deprecation means that you will not need to handle layer priorities at all yourself, GES @@ -5101,7 +5195,7 @@ will make sure there is never 'gaps' between layer priorities. - + Whether to automatically create a #GESTransitionClip whenever two #GESSource-s that both belong to a #GESClip in the layer overlap. See #GESTimeline for what counts as an overlap. @@ -5111,7 +5205,7 @@ When a layer is added to a #GESTimeline, if this property is left as will be set to %TRUE as well. - + The priority of the layer in the #GESTimeline. 0 is the highest priority. Conceptually, a timeline is a stack of layers, and the priority of the layer represents its position in the stack. Two @@ -5198,6 +5292,7 @@ efficient way of providing the list of contained #GESClip-s. + method to get the objects contained in the layer @@ -5250,9 +5345,16 @@ efficient way of providing the list of contained #GESClip-s. - + + + + + + + + The description of the object, to be used in various contexts (string). @@ -5312,7 +5414,7 @@ assets (string). A timed #GESMetaContainer object. - + Current position (in nanoseconds) of the #GESMarker @@ -5324,10 +5426,10 @@ assets (string). - + Marker does not serve any special purpose. - + Marker can be a snapping target. @@ -5425,7 +5527,7 @@ marker by 1. - + Flags indicating how markers on the list should be treated. @@ -5575,8 +5677,8 @@ fields. - A function to call on each of @container's set -metadata fields + A function to call on each of + @container's set metadata fields @@ -6594,13 +6696,13 @@ the latter case, @value will be %NULL. - + The metadata is readable - + The metadata is writable - + The metadata is readable and writable @@ -6651,7 +6753,7 @@ information. - + The uri of the file/resource to use. You can set a start index, a stop index and a sequence pattern. The format is <multifile://start:stop\@location-pattern>. @@ -6690,7 +6792,7 @@ multifile://20:50@/home/you/sequence/\%04d.png - + @@ -6749,10 +6851,10 @@ multifile://20:50@/home/you/sequence/\%04d.png - + - + @@ -6789,7 +6891,7 @@ not considered overlays. - + @@ -6825,7 +6927,7 @@ ges_pipeline_set_render_settings(). - + Gets the #GESPipeline:mode of the pipeline. @@ -6991,7 +7093,7 @@ native size - + Sets the #GESPipeline:mode of the pipeline. Note that the pipeline will be set to #GST_STATE_NULL during this call to @@ -7045,7 +7147,7 @@ result to - + Takes the given timeline and sets it as the #GESPipeline:timeline for the pipeline. @@ -7079,14 +7181,14 @@ immediately before the #GESPipeline:audio-sink. This exposes the #playsink:audio-sink property of the internal #playsink. - + The pipeline's mode. In preview mode (for audio or video, or both) the pipeline can display the timeline's content to an end user. In rendering mode the pipeline can encode the timeline's content and save it to a file. - + The timeline used by this pipeline, whose content it will play and render, or %NULL if the pipeline does not yet have a timeline. @@ -7131,24 +7233,24 @@ immediately before the #GESPipeline:video-sink. This exposes the The various modes a #GESPipeline can be configured to. - + Output the #GESPipeline:timeline's audio to the soundcard - + Output the #GESPipeline:timeline's video to the screen - + Output both the #GESPipeline:timeline's audio and video to the soundcard and screen (default) - + Render the #GESPipeline:timeline with forced decoding (the underlying #encodebin has its #encodebin:avoid-reencoding property set to %FALSE) - + Render the #GESPipeline:timeline, avoiding decoding/reencoding (the underlying #encodebin has its #encodebin:avoid-reencoding property set to %TRUE). @@ -7156,7 +7258,7 @@ avoiding decoding/reencoding (the underlying #encodebin has its > is enabled. - + @@ -7195,7 +7297,7 @@ is really not in good shape and is deprecated. - + @@ -7534,7 +7636,7 @@ MT safe. - + Retrieve the uri that is currently set on @project @@ -7671,7 +7773,7 @@ as defined in #ges_find_formatter_for_uri - + @@ -7947,7 +8049,7 @@ only to find out what the new location is. - + @@ -8106,10 +8208,10 @@ or %NULL if there was an error. - + - + @@ -8286,7 +8388,7 @@ or %NULL if there was an error. - + Get the volume of the test audio signal applied on @self. @@ -8300,7 +8402,7 @@ or %NULL if there was an error. - + Get the #GESVideoTestPattern which is applied on @self. @@ -8345,7 +8447,7 @@ or %NULL if there was an error. - + Sets whether the audio track of this clip is muted or not. @@ -8362,7 +8464,7 @@ or %NULL if there was an error. - + Sets the volume of the test audio signal. @@ -8379,7 +8481,7 @@ or %NULL if there was an error. - + Sets which video pattern to display on @self. @@ -8396,19 +8498,19 @@ or %NULL if there was an error. - + The frequency to generate for audio track elements. - + Whether the sound will be played or not. - + The volume for the audio track elements. - + Video pattern to display in video track elements. @@ -8435,24 +8537,24 @@ or %NULL if there was an error. - + Horizontal alignment of the text. - + align text left - + align text center - + align text right - + align text on xpos position - + @@ -8728,7 +8830,7 @@ of the text render by @self. - + Get the color used by @source. @@ -8742,7 +8844,7 @@ of the text render by @self. - + Get the pango font description used by @self. @@ -8756,7 +8858,7 @@ of the text render by @self. - + Get the horizontal aligment used by @self. @@ -8770,7 +8872,7 @@ of the text render by @self. - + Get the text currently set on @self. @@ -8784,7 +8886,7 @@ of the text render by @self. - + Get the vertical aligment used by @self. @@ -8798,7 +8900,7 @@ of the text render by @self. - + Get the horizontal position used by @source. @@ -8812,7 +8914,7 @@ of the text render by @self. - + Get the vertical position used by @source. @@ -8826,7 +8928,7 @@ of the text render by @self. - + Sets the color of the text. @@ -8843,7 +8945,7 @@ of the text render by @self. - + Sets the pango font description of the text @@ -8877,7 +8979,7 @@ of the text render by @self. - + Sets the text this clip will render. @@ -8912,7 +9014,7 @@ made. - + Sets the horizontal position of the text. @@ -8929,7 +9031,7 @@ made. - + Sets the vertical position of the text. @@ -8946,31 +9048,31 @@ made. - + The color of the text - + Pango font description string - + Horizontal alignment of the text - + The text to diplay - + Vertical alignent of the text - + The horizontal position of the text - + The vertical position of the text @@ -8997,30 +9099,30 @@ made. - + - + Vertical alignment of the text. - + draw text on the baseline - + draw text on the bottom - + draw text on top - + draw text on ypos position - + draw text on the center - + @@ -9425,7 +9527,7 @@ actually taken into account. - + Gets #GESTimeline:auto-transition for the timeline. @@ -9439,7 +9541,7 @@ actually taken into account. - + Get the current #GESTimeline:duration of the timeline @@ -9603,7 +9705,7 @@ or %NULL if there is an error. - + Gets the #GESTimeline:snapping-distance for the timeline. @@ -9818,7 +9920,7 @@ loaded from, before defaulting to the formatter with highest rank. - + Sets #GESTimeline:auto-transition for the timeline. This will also set the corresponding #GESLayer:auto-transition for all of the timeline's layers to the same value. See ges_layer_set_auto_transition() if you @@ -9839,7 +9941,7 @@ to @timeline's layers - + Sets #GESTimeline:snapping-distance for the timeline. This new value will only effect future snappings and will not be used to snap the current element positions within the timeline. @@ -9873,20 +9975,20 @@ actually taken into account. - + Whether to automatically create a transition whenever two #GESSource-s overlap in a track of the timeline. See #GESLayer:auto-transition if you want this to only happen in some layers. - + The current duration (in nanoseconds) of the timeline. A timeline 'starts' at time 0, so this is the maximum end time of all of its #GESTimelineElement-s. - + The distance (in nanoseconds) at which a #GESTimelineElement being moved within the timeline should snap one of its #GESSource-s with another #GESSource-s edge. See #GESEditMode for which edges can @@ -10370,6 +10472,8 @@ ges_timeline_element_list_children_properties(). + Prepare @copy for pasting as a copy of @self. At least by +copying the children properties of @self into @copy. @@ -10449,6 +10553,11 @@ of #GESTrack it can exist in, or will create #GESTrackElement-s for. + List the children properties that have been +registered for the element. The default implementation is able to fetch +all of these, so should be sufficient. If you overwrite this, you +should still call the default implementation to get the full list, and +then edit its content. @@ -10504,6 +10613,9 @@ specification of the child property + Paste @self, which is the @copy prepared by @deep_copy, into +the timeline at the given @paste_position, with @ref_element as a +reference, which is the @self that was passed to @deep_copy. @@ -11072,7 +11184,7 @@ optionally by more name/return location pairs, followed by %NULL - + Gets the #GESTimelineElement:duration for the element. @@ -11118,7 +11230,7 @@ layer. - + Gets the #GESTimelineElement:max-duration for the element. @@ -11132,7 +11244,7 @@ layer. - + Gets the #GESTimelineElement:name for the element. @@ -11178,7 +11290,7 @@ not the case. - + Gets the #GESTimelineElement:parent for the element. @@ -11193,7 +11305,7 @@ not the case. - + Gets the #GESTimelineElement:priority for the element. @@ -11207,7 +11319,7 @@ not the case. - + Gets the #GESTimelineElement:start for the element. @@ -11221,7 +11333,7 @@ not the case. - + Gets the #GESTimelineElement:timeline for the element. @@ -11600,7 +11712,7 @@ name/value pairs, followed by %NULL - + Sets #GESTimelineElement:duration for the element. Whilst the element is part of a #GESTimeline, this is the same as @@ -11647,7 +11759,7 @@ this method will fail. - + Sets #GESTimelineElement:max-duration for the element. If the new maximum duration is below the current #GESTimelineElement:in-point of the element, this method will fail. @@ -11667,7 +11779,7 @@ the element, this method will fail. - + Sets the #GESTimelineElement:name for the element. If %NULL is given for @name, then the library will instead generate a new name based on the type name of the element, such as the name "uriclip3" for a @@ -11701,7 +11813,7 @@ guaranteed. - + Sets the #GESTimelineElement:parent for the element. This is used internally and you should normally not call this. A @@ -11731,7 +11843,7 @@ If @parent is not %NULL, you must ensure it already has a - + Sets the priority of the element within the containing layer. All priority management is done by GES itself now. To set #GESEffect priorities #ges_clip_set_top_effect_index should @@ -11752,7 +11864,7 @@ be used. - + Sets #GESTimelineElement:start for the element. If the element has a parent, this will also move its siblings with the same shift. @@ -11778,7 +11890,7 @@ would place the timeline in an unsupported configuration. - + Sets the #GESTimelineElement:timeline of the element. This is used internally and you should normally not call this. A @@ -11829,7 +11941,7 @@ See ges_timeline_element_edit() with #GES_EDIT_MODE_TRIM and - + The duration that the element is in effect for in the timeline (a time difference in nanoseconds using the time coordinates of the timeline). For example, for a source element, this would determine @@ -11838,7 +11950,7 @@ operation element, this would determine for how long its effect should be applied to any source content. - + The initial offset to use internally when outputting content (in nanoseconds, but in the time coordinates of the internal content). @@ -11854,7 +11966,7 @@ For elements that have no internal content, this should be kept as 0. - + The full duration of internal content that is available (a time difference in nanoseconds using the time coordinates of the internal content). @@ -11871,24 +11983,24 @@ For elements that have no internal content, or whose content is indefinite, this should be kept as #GST_CLOCK_TIME_NONE. - + The name of the element. This should be unique within its timeline. - + The parent container of the element. - + The priority of the element. Priority management is now done by GES itself. - + Whether the element should be serialized. - + The starting position of the element in the timeline (in nanoseconds and in the time coordinates of the timeline). For example, for a source element, this would determine the time at which it should @@ -11897,7 +12009,7 @@ would determine the time at which it should start applying its effect to any source content. - + The timeline that the element lies within. @@ -12019,6 +12131,8 @@ and emitting the notify signal. + Method called just before the #GESTimelineElement:parent +is set. @@ -12038,6 +12152,25 @@ and emitting the notify signal. + Method called just before the #GESTimelineElement:start is +set. This method should check whether the #GESTimelineElement:start can +be changed to the new value and to otherwise prepare the element in +response to what the new value will be. A return of %FALSE means that +the property should not be set. A return of %TRUE means that the +property should be set to the value given to the setter and a notify +emitted. A return of -1 means that the property should not be set but +the setter should still return %TRUE (normally because the method +already handled setting the value, potentially to a snapped value, and +emitted the notify signal). +#GESTimelineElement:duration is set. This method should check +whether the #GESTimelineElement:duration can be changed to the new +value and to otherwise prepare the element in response to what the new +value will be. A return of %FALSE means that the property should not be +set. A return of %TRUE means that the property should be set to the +value given to the setter and a notify emitted. A return of -1 means +that the property should not be set but the setter should still return +%TRUE (normally because the method already handled setting the value, +potentially to a snapped value, and emitted the notify signal). @@ -12057,6 +12190,12 @@ and emitting the notify signal. + Method called just before the +#GESTimelineElement:in-point is set to a new value. This method should +not set the #GESTimelineElement:in-point itself, but should check +whether it can be changed to the new value and to otherwise prepare the +element in response to what the new value will be. A return of %FALSE +means that the property should not be set. @@ -12095,6 +12234,12 @@ and emitting the notify signal. + Method called just before the +#GESTimelineElement:max-duration is set. This method should +not set the #GESTimelineElement:max-duration itself, but should check +whether it can be changed to the new value and to otherwise prepare the +element in response to what the new value will be. A return of %FALSE +means that the property should not be set. @@ -12114,6 +12259,8 @@ and emitting the notify signal. + Method called just before the +#GESTimelineElement:priority is set. @@ -12133,6 +12280,8 @@ and emitting the notify signal. + Set this method to overwrite a redirect to +ges_timeline_element_edit() in ges_timeline_element_ripple(). @@ -12153,6 +12302,8 @@ failure. + Set this method to overwrite a redirect to +ges_timeline_element_edit() in ges_timeline_element_ripple_end(). @@ -12192,6 +12343,8 @@ failure. + Set this method to overwrite a redirect to +ges_timeline_element_edit() in ges_timeline_element_roll_end(). @@ -12211,6 +12364,8 @@ failure. + Set this method to overwrite a redirect to +ges_timeline_element_edit() in ges_timeline_element_trim(). @@ -12230,6 +12385,8 @@ failure. + Prepare @copy for pasting as a copy of @self. At least by +copying the children properties of @self into @copy. @@ -12246,6 +12403,9 @@ failure. + Paste @self, which is the @copy prepared by @deep_copy, into +the timeline at the given @paste_position, with @ref_element as a +reference, which is the @self that was passed to @deep_copy. @@ -12265,6 +12425,11 @@ failure. + List the children properties that have been +registered for the element. The default implementation is able to fetch +all of these, so should be sufficient. If you overwrite this, you +should still call the default implementation to get the full list, and +then edit its content. @@ -12281,6 +12446,11 @@ failure. + Find @child, and its registered child property @pspec, +corresponding to the child property specified by @prop_name. The +default implementation will search for the first child that matches. If +you overwrite this, you will likely still want to call the default +vmethod, which has access to the registered parameter specifications. @@ -12311,6 +12481,7 @@ specification of the child property + Return a the track types for the element. @@ -12417,10 +12588,10 @@ not the case. - + - + @@ -12454,7 +12625,7 @@ See #GESTitleSource for more information about exposed properties - + Get the pango font description used by @self. use #ges_timeline_element_get_children_properties instead. See #GESTitleSource for more information about exposed properties @@ -12470,7 +12641,7 @@ See #GESTitleSource for more information about exposed properties - + Get the horizontal aligment used by @self. use #ges_timeline_element_get_children_properties instead. See #GESTitleSource for more information about exposed properties @@ -12486,7 +12657,7 @@ See #GESTitleSource for more information about exposed properties - + Get the text currently set on @self. use #ges_timeline_element_get_children_properties instead. See #GESTitleSource for more information about exposed properties @@ -12518,7 +12689,7 @@ See #GESTitleSource for more information about exposed properties - + Get the vertical aligment used by @self. use #ges_timeline_element_get_children_properties instead. See #GESTitleSource for more information about exposed properties @@ -12534,7 +12705,7 @@ See #GESTitleSource for more information about exposed properties - + Get the horizontal position used by @self. use #ges_timeline_element_get_children_properties instead. See #GESTitleSource for more information about exposed properties @@ -12550,7 +12721,7 @@ See #GESTitleSource for more information about exposed properties - + Get the vertical position used by @self. use #ges_timeline_element_get_children_property instead @@ -12565,7 +12736,7 @@ See #GESTitleSource for more information about exposed properties - + Sets the background of the text. use #ges_timeline_element_set_children_properties instead. See #GESTitleSource for more information about exposed properties @@ -12584,7 +12755,7 @@ See #GESTitleSource for more information about exposed properties - + Sets the color of the text. use #ges_timeline_element_set_children_properties instead. See #GESTitleSource for more information about exposed properties @@ -12603,7 +12774,7 @@ See #GESTitleSource for more information about exposed properties - + Sets the pango font description of the text. use #ges_timeline_element_set_children_properties instead. See #GESTitleSource for more information about exposed properties @@ -12622,7 +12793,7 @@ See #GESTitleSource for more information about exposed properties - + Sets the horizontal aligment of the text. use #ges_timeline_element_set_children_properties instead. See #GESTitleSource for more information about exposed properties @@ -12641,7 +12812,7 @@ See #GESTitleSource for more information about exposed properties - + Sets the text this clip will render. use #ges_timeline_element_set_children_properties instead. See #GESTitleSource for more information about exposed properties @@ -12661,7 +12832,7 @@ made. - + Sets the vertical aligment of the text. use #ges_timeline_element_set_children_properties instead. See #GESTitleSource for more information about exposed properties @@ -12680,7 +12851,7 @@ See #GESTitleSource for more information about exposed properties - + Sets the horizontal position of the text. use #ges_timeline_element_set_children_properties instead. See #GESTitleSource for more information about exposed properties @@ -12699,7 +12870,7 @@ See #GESTitleSource for more information about exposed properties - + Sets the vertical position of the text. use #ges_timeline_element_set_children_properties instead. See #GESTitleSource for more information about exposed properties @@ -12718,56 +12889,56 @@ See #GESTitleSource for more information about exposed properties - + The background of the text use #ges_timeline_element_set_children_properties or #ges_timeline_element_get_children_properties instead. See #GESTitleSource for more information about exposed properties - + The color of the text use #ges_timeline_element_set_children_properties or #ges_timeline_element_get_children_properties instead. See #GESTitleSource for more information about exposed properties - + Pango font description string use #ges_timeline_element_set_children_properties or #ges_timeline_element_get_children_properties instead. See #GESTitleSource for more information about exposed properties - + Horizontal alignment of the text use #ges_timeline_element_set_children_properties or #ges_timeline_element_get_children_properties instead. See #GESTitleSource for more information about exposed properties - + The text to diplay use #ges_timeline_element_set_children_properties or #ges_timeline_element_get_children_properties instead. See #GESTitleSource for more information about exposed properties - + Vertical alignent of the text use #ges_timeline_element_set_children_properties or #ges_timeline_element_get_children_properties instead. See #GESTitleSource for more information about exposed properties - + The horizontal position of the text use #ges_timeline_element_set_children_properties or #ges_timeline_element_get_children_properties instead. See #GESTitleSource for more information about exposed properties - + The vertical position of the text use #ges_timeline_element_set_children_properties or #ges_timeline_element_get_children_properties instead. @@ -12797,7 +12968,7 @@ See #GESTitleSource for more information about exposed properties - + @@ -13087,7 +13258,7 @@ made. - + @@ -13228,7 +13399,7 @@ needed to be committed. - + Get the #GESTrack:caps of the track. @@ -13261,7 +13432,7 @@ all the #GESTrackElement-s in @track. - + Gets the #GESTrack:mixing of the track. @@ -13275,7 +13446,7 @@ all the #GESTrackElement-s in @track. - + Gets the #GESTrack:restriction-caps of the track. @@ -13367,7 +13538,7 @@ function already set appropriately. - + Sets the #GESTrack:mixing for the track. @@ -13384,7 +13555,7 @@ function already set appropriately. - + Sets the #GESTrack:restriction-caps for the track. > **NOTE**: Restriction caps are **not** taken into account when @@ -13457,7 +13628,7 @@ width=400". - + The capabilities used to choose the output of the #GESTrack's elements. Internally, this is used to select output streams when several may be available, by determining whether its #GstPad is @@ -13477,17 +13648,17 @@ this. Default value: #GST_CAPS_ANY. - + Current duration of the track Default value: O - + The #nlecomposition:id of the underlying #nlecomposition. - + Whether the track should support the mixing of #GESLayer data, such as composing the video data of each layer (when part of the video data is transparent, the next layer will become visible) or adding @@ -13495,7 +13666,7 @@ together the audio data. As such, for audio and video tracks, you'll likely want to keep this set to %TRUE. - + The capabilities that specifies the final output format of the #GESTrack. For example, for a video track, it would specify the height, width, framerate and other properties of the stream. @@ -13507,7 +13678,7 @@ You may change this property after the track has been added to a Default value: #GST_CAPS_ANY. - + The track type of the track. This controls the type of #GESTrackElement-s that can be added to the track. This should match with the track's #GESTrack:caps. @@ -13868,7 +14039,7 @@ for @trackelement. - + Gets #GESTrackElement:auto-clamp-control-sources. @@ -14056,7 +14227,7 @@ nleobject that @object wraps. - + Get the #GESTrackElement:track for the element. @@ -14071,7 +14242,7 @@ or %NULL if it does not belong to a track. - + Gets the #GESTrackElement:track-type for the element. @@ -14224,7 +14395,7 @@ binding from - + Sets #GESTrackElement:active for the element. @@ -14242,7 +14413,7 @@ binding from - + Sets #GESTrackElement:auto-clamp-control-sources. If set to %TRUE, this will immediately clamp all the control sources. @@ -14398,7 +14569,7 @@ gst_direct_control_binding_new_absolute() instead. - + Sets #GESTrackElement:has-internal-source for the element. If this is set to %FALSE, this method will also set the #GESTimelineElement:in-point of the element to 0 and its @@ -14421,7 +14592,7 @@ set to %FALSE, this method will also set the - + Sets the #GESTrackElement:track-type for the element. @@ -14438,13 +14609,13 @@ set to %FALSE, this method will also set the - + Whether the effect of the element should be applied in its #GESTrackElement:track. If set to %FALSE, it will not be used in the output of the track. - + Whether the control sources on the element (see ges_track_element_set_control_source()) will be automatically updated whenever the #GESTimelineElement:in-point or out-point of the @@ -14456,7 +14627,7 @@ per control source. Default value: %TRUE - + This property is used to determine whether the 'internal time' properties of the element have any meaning. In particular, unless this is set to %TRUE, the #GESTimelineElement:in-point and @@ -14493,12 +14664,12 @@ content and manipulate the timing of their data streams (time effects). - + The track that this element belongs to, or %NULL if it does not belong to a track. - + The track type of the element, which determines the type of track the element can be added to (see #GESTrack:track-type). This should correspond to the type of data that the element can produce or @@ -14597,7 +14768,7 @@ property of the track element. - + Get the GESAssetTrackType the #GESTrackElement extracted from @self should get into @@ -14612,7 +14783,7 @@ should get into - + Set the #GESTrackType the #GESTrackElement extracted from @self should get into @@ -14630,7 +14801,7 @@ should get into - + @@ -14679,7 +14850,7 @@ should get into - + @@ -14821,10 +14992,10 @@ usage. - + - + @@ -14834,19 +15005,19 @@ the user of the #GESTrack must set the type to @GES_TRACK_TYPE_CUSTOM. @GES_TRACK_TYPE_UNKNOWN is for internal purposes and should not be used by users - + A track of unknown type (i.e. invalid) - + An audio track - + A video track - + A text (subtitle) track - + A custom-content track @@ -14935,7 +15106,7 @@ or %NULL if something went wrong - + a #GESVideoStandardTransitionType representing the wipe to use @@ -14967,10 +15138,10 @@ to apply. - + - + @@ -14999,7 +15170,7 @@ the URI points to a file of some type. - + Get the location of the resource. @@ -15041,7 +15212,7 @@ the URI points to a file of some type. - + Sets whether the clip is a still image or not. @@ -15058,7 +15229,7 @@ the URI points to a file of some type. - + Sets whether the audio track of this clip is muted or not. @@ -15075,19 +15246,19 @@ the URI points to a file of some type. - + Whether this uri clip represents a still image or not. This must be set before create_track_elements is called. - + Whether the sound will be played or not. - + - + The location of the file/resource to use. @@ -15122,7 +15293,7 @@ before create_track_elements is called. - + Creates a #GESUriClipAsset for @uri Example of request of a GESUriClipAsset: @@ -15174,7 +15345,7 @@ ges_uri_clip_asset_new (uri, (GAsyncReadyCallback) filesource_asset_loaded_cb, u - + Creates a #GESUriClipAsset for @uri synchonously. You should avoid to use it in application, and rather create #GESUriClipAsset asynchronously @@ -15191,7 +15362,7 @@ You can also use multi file uris for #GESMultiFileSource. - + Gets duration of the file represented by @self @@ -15267,11 +15438,11 @@ are different as those can be extended 'infinitely'. - + The duration (in nanoseconds) of the media file - + The duration (in nanoseconds) of the media file @@ -15344,7 +15515,7 @@ are different as those can be extended 'infinitely'. - + @@ -15358,10 +15529,10 @@ are different as those can be extended 'infinitely'. - + - + @@ -15451,14 +15622,14 @@ contains one frame) - + - + @@ -15521,6 +15692,10 @@ account. + method to return the GstElement to put in the source topbin. +Other elements will be queued, like a videoscale. +In the case of a VideoUriSource, for example, the subclass will return a decodebin, +and we will append a videoscale. @@ -15601,285 +15776,285 @@ account. - + - + Transition type has not been set, - + A bar moves from left to right, - + A bar moves from top to bottom, - + A box expands from the upper-left corner to the lower-right corner, - + A box expands from the upper-right corner to the lower-left corner, - + A box expands from the lower-right corner to the upper-left corner, - + A box expands from the lower-left corner to the upper-right corner, - + A box shape expands from each of the four corners toward the center, - + A box shape expands from the center of each quadrant toward the corners of each quadrant, - + A central, vertical line splits and expands toward the left and right edges, - + A central, horizontal line splits and expands toward the top and bottom edges, - + A box expands from the top edge's midpoint to the bottom corners, - + A box expands from the right edge's midpoint to the left corners, - + A box expands from the bottom edge's midpoint to the top corners, - + A box expands from the left edge's midpoint to the right corners, - + A diagonal line moves from the upper-left corner to the lower-right corner, - + A diagonal line moves from the upper right corner to the lower-left corner, - + Two wedge shapes slide in from the top and bottom edges toward the center, - + Two wedge shapes slide in from the left and right edges toward the center, - + A diagonal line from the lower-left to upper-right corners splits and expands toward the opposite corners, - + A diagonal line from upper-left to lower-right corners splits and expands toward the opposite corners, - + Four wedge shapes split from the center and retract toward the four edges, - + A diamond connecting the four edge midpoints simultaneously contracts toward the center and expands toward the edges, - + A wedge shape moves from top to bottom, - + A wedge shape moves from right to left, - + A wedge shape moves from bottom to top, - + A wedge shape moves from left to right, - + A 'V' shape extending from the bottom edge's midpoint to the opposite corners contracts toward the center and expands toward the edges, - + A 'V' shape extending from the left edge's midpoint to the opposite corners contracts toward the center and expands toward the edges, - + A 'V' shape extending from the top edge's midpoint to the opposite corners contracts toward the center and expands toward the edges, - + A 'V' shape extending from the right edge's midpoint to the opposite corners contracts toward the center and expands toward the edges, - + A rectangle expands from the center., - + A radial hand sweeps clockwise from the twelve o'clock position, - + A radial hand sweeps clockwise from the three o'clock position, - + A radial hand sweeps clockwise from the six o'clock position, - + A radial hand sweeps clockwise from the nine o'clock position, - + Two radial hands sweep clockwise from the twelve and six o'clock positions, - + Two radial hands sweep clockwise from the nine and three o'clock positions, - + Four radial hands sweep clockwise, - + A fan unfolds from the top edge, the fan axis at the center, - + A fan unfolds from the right edge, the fan axis at the center, - + Two fans, their axes at the center, unfold from the top and bottom, - + Two fans, their axes at the center, unfold from the left and right, - + A radial hand sweeps clockwise from the top edge's midpoint, - + A radial hand sweeps clockwise from the right edge's midpoint, - + A radial hand sweeps clockwise from the bottom edge's midpoint, - + A radial hand sweeps clockwise from the left edge's midpoint, - + Two radial hands sweep clockwise and counter-clockwise from the top and bottom edges' midpoints, - + Two radial hands sweep clockwise and counter-clockwise from the left and right edges' midpoints, - + Two radial hands attached at the top and bottom edges' midpoints sweep from right to left, - + Two radial hands attached at the left and right edges' midpoints sweep from top to bottom, - + A fan unfolds from the bottom, the fan axis at the top edge's midpoint, - + A fan unfolds from the left, the fan axis at the right edge's midpoint, - + A fan unfolds from the top, the fan axis at the bottom edge's midpoint, - + A fan unfolds from the right, the fan axis at the left edge's midpoint, - + Two fans, their axes at the top and bottom, unfold from the center, - + Two fans, their axes at the left and right, unfold from the center, - + A radial hand sweeps clockwise from the upper-left corner, - + A radial hand sweeps counter-clockwise from the lower-left corner., - + A radial hand sweeps clockwise from the lower-right corner, - + A radial hand sweeps counter-clockwise from the upper-right corner, - + Two radial hands attached at the upper-left and lower-right corners sweep down and up, - + Two radial hands attached at the lower-left and upper-right corners sweep down and up, - + Two radial hands attached at the upper-left and upper-right corners sweep down, - + Two radial hands attached at the upper-left and lower-left corners sweep to the right, - + Two radial hands attached at the lower-left and lower-right corners sweep up, - + Two radial hands attached at the upper-right and lower-right corners sweep to the left, - + Two radial hands attached at the midpoints of the top and bottom halves sweep from right to left, - + Two radial hands attached at the midpoints of the left and right halves sweep from top to bottom, - + Two sets of radial hands attached at the midpoints of the top and bottom halves sweep from top to bottom and bottom to top, - + Two sets of radial hands attached at the midpoints of the left and right halves sweep from left to right and right to left, - + Crossfade - + Similar to crossfade, but fade in the front video without fading out the background one The test pattern to produce - + A standard SMPTE test pattern - + Random noise - + A black image - + A white image - + A red image - + A green image - + A blue image - + Checkers pattern (1px) - + Checkers pattern (2px) - + Checkers pattern (4px) - + Checkers pattern (8px) - + Circular pattern - + Alternate between black and white - + SMPTE test pattern (75% color bars) - + Zone plate - + Gamut checkers - + Chroma zone plate - + Solid color @@ -15944,7 +16119,7 @@ the background one - + @@ -16008,7 +16183,7 @@ modify these fields, or add additional ones. - + @@ -16021,7 +16196,7 @@ modify these fields, or add additional ones. - + Get the border property of @self, this value represents the border width of the transition. Use ges_timeline_element_get_child_property instead. @@ -16038,7 +16213,7 @@ the border width of the transition. - + Get the transition type used by @trans. @@ -16068,7 +16243,7 @@ the direction of the transition. - + Set the border property of @self, this value represents the border width of the transition. In case this value does not make sense for the current transition type, it is cached @@ -16110,7 +16285,7 @@ for later use. - + Sets the transition being used to @type. @@ -16128,16 +16303,16 @@ for later use. - + This value represents the border width of the transition. - + This value represents the direction of the transition. Use ges_timeline_element_[sg]et_child_property instead. - + @@ -16164,7 +16339,7 @@ for later use. - + @@ -16174,7 +16349,7 @@ for later use. - + The location of the file/resource to use. @@ -16204,7 +16379,7 @@ for later use. - + @@ -16233,7 +16408,7 @@ for later use. - + diff --git a/girs/Gst-1.0.gir b/girs/Gst-1.0.gir index 4765abc16df..30ae84187e6 100644 --- a/girs/Gst-1.0.gir +++ b/girs/Gst-1.0.gir @@ -101,6 +101,30 @@ See also #GstBufferMapInfo. + + The aggregator function will combine the parameters from @params0 and @param1 +and write the result back into @aggregated_params. + + + %TRUE if the parameters were successfully aggregated, %FALSE otherwise. + + + + + This structure will be updated with the + combined parameters from both @params0 and @params1. + + + + a #GstStructure containing the new parameters to be aggregated. + + + + a #GstStructure containing the new parameters to be aggregated. + + + + Parameters to control the allocation of memory @@ -398,6 +422,7 @@ use an alignment of 7. + implementation that acquires memory @@ -421,6 +446,7 @@ use an alignment of 7. + implementation that releases memory @@ -446,26 +472,26 @@ use an alignment of 7. Flags for allocators. - + The allocator has a custom alloc function. Only elements designed to work with this allocator should be using it, other elements should ignore it from allocation propositions. This implies %GST_ALLOCATOR_FLAG_NO_COPY. - + When copying a #GstMemory allocated with this allocator, the copy will instead be allocated using the default allocator. Use this when allocating a new memory is an heavy opperation that should only be done with a #GstBufferPool for example. - + first flag that can be used for custom purposes - + - + The #GstAtomicQueue object implements a queue that can be used from multiple threads without performing any blocking operations. @@ -1551,13 +1577,13 @@ of @bin. See also gst_element_sync_state_with_parent(). - + If set to %TRUE, the bin will handle asynchronous state changes. This should be used only if the bin subclass is modifying the state of its children on its own. - + Forward all children messages, even those that would normally be filtered by the bin. This can be interesting when one wants to be notified of the EOS state of individual elements, for example. @@ -1874,19 +1900,19 @@ this message should chain up to the parent class implementation so the GstBinFlags are a set of flags specific to bins. Most are set/used internally. They can be checked using the GST_OBJECT_FLAG_IS_SET() macro, and (un)set using GST_OBJECT_FLAG_SET() and GST_OBJECT_FLAG_UNSET(). - + Don't resync a state change when elements are added or linked in the bin - + Indicates whether the bin can handle elements that add/remove source pads at any point in time without first posting a no-more-pads signal. - + The last enum in the series of flags for bins. Derived classes can use this as first value in a list of flags. - + @@ -3500,91 +3526,91 @@ Either @nbuf or the #GstBuffer pointed to by @obuf may be %NULL. A set of flags that can be provided to the gst_buffer_copy_into() function to specify which items should be copied. - + copy nothing - + flag indicating that buffer flags should be copied - + flag indicating that buffer pts, dts, duration, offset and offset_end should be copied - + flag indicating that buffer meta should be copied - + flag indicating that buffer memory should be reffed and appended to already existing memory. Unless the memory is marked as NO_SHARE, no actual copy of the memory is made but it is simply reffed. Add @GST_BUFFER_COPY_DEEP to force a real copy. - + flag indicating that buffer memory should be merged - + flag indicating that memory should always be copied instead of reffed A set of buffer flags used to describe properties of a #GstBuffer. - + the buffer is live data and should be discarded in the PAUSED state. - + the buffer contains data that should be dropped because it will be clipped against the segment boundaries or because it does not contain data that should be shown to the user. - + the buffer marks a data discontinuity in the stream. This typically occurs after a seek or a dropped buffer from a live or network source. - + the buffer timestamps might have a discontinuity and this buffer is a good point to resynchronize. - + the buffer data is corrupted. - + the buffer contains a media specific marker. for video this is the end of a frame boundary, for audio this is the start of a talkspurt. for RTP packets this matches the marker flag in the RTP packet header. - + the buffer contains header information that is needed to decode the following data. - + the buffer has been created to fill a gap in the stream and contains media neutral data (elements can switch to optimized code path that ignores the buffer content). - + the buffer can be dropped without breaking the stream, for example to reduce bandwidth. - + this unit cannot be decoded independently. - + this flag is set when memory of the buffer is added/removed - + Elements which write to disk or permanent storage should ensure the data is synced after writing the contents of this buffer. - + This buffer is important and should not be dropped. This can be used to mark important buffers, e.g. to flag RTP packets @@ -3592,7 +3618,7 @@ carrying keyframes or codec setup data for RTP Forward Error Correction purposes, or to prevent still video frames from being dropped by elements due to QoS. - + additional media specific flags can be added starting from this flag. @@ -3627,7 +3653,7 @@ When @meta is set to %NULL, the item will be removed from the buffer. - + Buffer lists are an object containing a list of buffers. Buffer lists are created with gst_buffer_list_new() and filled with data @@ -4413,7 +4439,10 @@ This function takes ownership of @config. Start the bufferpool. The default implementation will preallocate -min-buffers buffers and put them in the queue. +min-buffers buffers and put them in the queue. + +Subclasses do not need to chain up to the parent's default implementation +if they don't want min-buffers based preallocation. whether the pool could be started. @@ -4655,21 +4684,21 @@ allocating buffers. Additional flags to control the allocation of a buffer - + no flags - + buffer is keyframe - + when the bufferpool is empty, acquire_buffer will by default block until a buffer is released into the pool again. Setting this flag makes acquire_buffer return #GST_FLOW_EOS instead of blocking. - + buffer is discont - + last flag, subclasses can use private flags starting from this value. @@ -4914,21 +4943,21 @@ successful. - + The different types of buffering methods. - + a small amount of data is buffered - + the stream is being downloaded - + the stream is being downloaded in a ringbuffer - + the stream is a live stream @@ -5577,7 +5606,7 @@ matching message was posted on the bus. - + Enables async message delivery support for bus watches, gst_bus_pop() and similar API. Without this only the synchronous message handlers are called. @@ -5680,10 +5709,10 @@ gst_bus_enable_sync_message_emission() before. The standard flags that a bus may have. - + The bus is currently dropping all messages - + offset to define more flags @@ -5717,7 +5746,7 @@ Note that this function is used as a #GSourceFunc which means that returning - + @@ -5749,13 +5778,13 @@ message should not be unreffed by the sync handler. The result values for a GstBusSyncHandler. - + drop the message - + pass the message to the async queue - + pass message to async queue, continue if message is handled @@ -5777,6 +5806,7 @@ array cannot grow. + Reallocate @data. @@ -5943,6 +5973,219 @@ evaluates to @def_return. + + Output an debugging message in the given category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + printf-style message to output + + + + + Output an debugging message belonging to the given object in the given category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + the #GObject the message belongs to + + + printf-style message to output + + + + + Output an error message in the given category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + printf-style message to output + + + + + Output an error message belonging to the given object in the given category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + the #GObject the message belongs to + + + printf-style message to output + + + + + Output an fixme message in the given category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + printf-style message to output + + + + + Output a fixme message belonging to the given object in the given category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + the #GObject the message belongs to + + + printf-style message to output + + + + + Output an informational message in the given category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + printf-style message to output + + + + + Output an informational message belonging to the given object in the given +category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + the #GObject the message belongs to + + + printf-style message to output + + + + + Outputs a debugging message. This is the most general macro for outputting +debugging messages. You will probably want to use one of the ones described +below. + +There is no need to finish the end of the debug message with a newline +character, a newline character will be added automatically. + + + + category to use + + + the severity of the message + + + the #GObject the message belongs to or %NULL if none + + + A printf-style message to output + + + + + Outputs a debugging message. This is the most general macro for outputting +debugging messages. You will probably want to use one of the ones described +below. + +There is no need to finish the end of the debug message with a newline +character, a newline character will be added automatically. + + + + category to use + + + the severity of the message + + + the identifier of the object this message + relates to, or %NULL if none + + + A printf-style message to output + + + + + Output an logging message in the given category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + printf-style message to output + + + + + Output an logging message belonging to the given object in the given category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + the #GObject the message belongs to + + + printf-style message to output + + + Output a hexdump of @data in the given category. @@ -6013,6 +6256,73 @@ character, a newline character will be added automatically. + + Output a tracing message in the given category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + printf-style message to output + + + + + Output a tracing message belonging to the given object in the given +category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + the #GObject the message belongs to + + + printf-style message to output + + + + + Output an warning message in the given category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + printf-style message to output + + + + + Output a warning message belonging to the given object in the given category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + category to use + + + the #GObject the message belongs to + + + printf-style message to output + + + Check whether a GStreamer version equal to or greater than major.minor.micro is present. @@ -6354,6 +6664,45 @@ are not copied; the returned #GstCaps owns the structures. + + Creates a new #GstCaps that contains one #GstStructure with name +@media_type. + + + the new #GstCaps + + + + + the media type of the structure + + + + + + Creates a new #GstCaps that contains one #GstStructure. The +structure is defined by the arguments, which have the same format +as gst_structure_new(). + + + the new #GstCaps + + + + + the media type of the structure + + + + first field to set + + + + additional arguments + + + + Creates a new #GstCaps that contains one #GstStructure. The structure is defined by the arguments, which have the same format @@ -6378,6 +6727,51 @@ as gst_structure_new(). + + Creates a new #GstCaps that contains one #GstStructure with name +@media_type. + +@media_type needs to be valid for the remaining lifetime of the process, e.g. +has to be a static string. + + + the new #GstCaps + + + + + the media type of the structure + + + + + + Creates a new #GstCaps that contains one #GstStructure. The +structure is defined by the arguments, which have the same format +as gst_structure_new(). + +@media_type, @fieldname and all other fieldnames need to be valid for the +remaining lifetime of the process, e.g. have to be static strings. + + + the new #GstCaps + + + + + the media type of the structure + + + + first field to set + + + + additional arguments + + + + Appends the structures contained in @caps2 to @caps1. The structures in @caps2 are not copied -- they are transferred to @caps1, and then @caps2 is @@ -6640,6 +7034,73 @@ gst_structure_set(). + + Sets fields in a #GstCaps. The arguments must be passed in the same +manner as gst_structure_id_str_set(), and be %NULL-terminated. + + + + + + + the #GstCaps to set + + + + first field to set + + + + additional parameters + + + + + + Sets fields in a #GstCaps. The arguments must be passed in the same +manner as gst_structure_id_str_set(), and be %NULL-terminated. + + + + + + + the #GstCaps to set + + + + first field to set + + + + additional parameters + + + + + + Sets the given @field on all structures of @caps to the given @value. +This is a convenience function for calling gst_structure_set_value() on +all structures of @caps. + + + + + + + a writable caps + + + + name of the field to set + + + + value to set the field to + + + + Creates a new #GstCaps that contains all the formats that are common to both @caps1 and @caps2. Defaults to %GST_CAPS_INTERSECT_ZIG_ZAG mode. @@ -7093,6 +7554,56 @@ manner as gst_structure_set(), and be %NULL-terminated. + + Sets fields in a #GstCaps. The arguments must be passed in the same +manner as gst_structure_set(), and be %NULL-terminated. + +@field and all other field names need to be valid for the remaining lifetime +of the process, e.g. have to be static strings. + + + + + + + the #GstCaps to set + + + + first field to set + + + + additional parameters + + + + + + Sets fields in a #GstCaps. The arguments must be passed in the same +manner as gst_structure_set(), and be %NULL-terminated. + +@field and all other field names need to be valid for the remaining lifetime +of the process, e.g. have to be static strings. + + + + + + + the #GstCaps to set + + + + first field to set + + + + additional parameters + + + + Sets fields in a #GstCaps. The arguments must be passed in the same manner as gst_structure_set(), and be %NULL-terminated. @@ -7138,6 +7649,32 @@ all structures of @caps. + + Sets the given @field on all structures of @caps to the given @value. +This is a convenience function for calling gst_structure_set_value() on +all structures of @caps. + +@field needs to be valid for the remaining lifetime of the process, e.g. +has to be a static string. + + + + + + + a writable caps + + + + name of the field to set + + + + value to set the field to + + + + Converts the given @caps into a representation that represents the same set of formats, but in a simpler form. Component structures that are @@ -7329,7 +7866,7 @@ of @new_caps. - + #GstCapsFeatures can optionally be set on a #GstCaps to add requirements for additional features for a specific #GstStructure. Caps structures with the same name but with a non-equal set of caps features are not compatible. @@ -7386,9 +7923,10 @@ unfixed. - + Creates a new #GstCapsFeatures with the given features. The last argument must be 0. + Use gst_caps_features_new_id_str(). a new, empty #GstCapsFeatures @@ -7405,8 +7943,46 @@ The last argument must be 0. - + + Creates a new #GstCapsFeatures with the given features. +The last argument must be 0. + + + a new, empty #GstCapsFeatures + + + + + name of first feature to set + + + + additional features + + + + + + Creates a new #GstCapsFeatures with the given features. + + + a new, empty #GstCapsFeatures + + + + + name of first feature to set + + + + variable argument list + + + + + Creates a new #GstCapsFeatures with the given features. + Use gst_caps_features_new_id_str_valist(). a new, empty #GstCapsFeatures @@ -7437,6 +8013,66 @@ The last argument must be 0. + + Creates a new #GstCapsFeatures with a single feature. + +@feature needs to be valid for the remaining lifetime of the process, e.g. has +to be a static string. + + + a new #GstCapsFeatures + + + + + The feature + + + + + + Creates a new #GstCapsFeatures with the given features. +The last argument must be %NULL. + +@feature1 and all other features need to be valid for the remaining lifetime +of the process, e.g. have to be a static string. + + + a new, empty #GstCapsFeatures + + + + + name of first feature to set + + + + additional features + + + + + + Creates a new #GstCapsFeatures with the given features. + +@feature1 and all other features need to be valid for the remaining lifetime +of the process, e.g. have to be a static string. + + + a new, empty #GstCapsFeatures + + + + + name of first feature to set + + + + variable argument list + + + + Creates a new #GstCapsFeatures with the given features. @@ -7472,8 +8108,9 @@ The last argument must be 0. - + Adds @feature to @features. + Use gst_caps_features_add_id_str(). @@ -7489,6 +8126,43 @@ The last argument must be 0. + + Adds @feature to @features. + + + + + + + a #GstCapsFeatures. + + + + a feature. + + + + + + Adds @feature to @features. + +@feature needs to be valid for the remaining lifetime of the process, e.g. has +to be a static string. + + + + + + + a #GstCapsFeatures. + + + + a feature. + + + + Checks if @features contains @feature. @@ -7507,8 +8181,9 @@ The last argument must be 0. - + Checks if @features contains @feature. + Use gst_caps_features_contains_id_str(). %TRUE if @features contains @feature. @@ -7525,6 +8200,24 @@ The last argument must be 0. + + Checks if @features contains @feature. + + + %TRUE if @features contains @feature. + + + + + a #GstCapsFeatures. + + + + a feature + + + + Duplicates a #GstCapsFeatures and all its values. @@ -7571,8 +8264,9 @@ have a parent when this function is called. - + Returns the @i-th feature of @features. + Use gst_caps_features_get_nth_id_str(). The @i-th feature of @features. @@ -7589,6 +8283,24 @@ have a parent when this function is called. + + Returns the @i-th feature of @features. + + + The @i-th feature of @features. + + + + + a #GstCapsFeatures. + + + + index of the feature + + + + Returns the number of features in @features. @@ -7652,8 +8364,9 @@ have a parent when this function is called. - + Removes @feature from @features. + Use gst_caps_features_remove_id_str(). @@ -7669,6 +8382,23 @@ have a parent when this function is called. + + Removes @feature from @features. + + + + + + + a #GstCapsFeatures. + + + + a feature. + + + + Sets the parent_refcount field of #GstCapsFeatures. This field is used to determine whether a caps features is mutable or not. This function should only be @@ -7755,7 +8485,7 @@ removed from the caps if %FALSE is returned. Extra flags for a caps. - + Caps has no specific content, but can contain anything. @@ -7806,10 +8536,10 @@ caps and intersect them with this mode. another element's caps priority order when intersecting with its own caps. Example: If caps1 is `[A, B, C]` and caps2 is `[E, B, D, A]`, the result would be `[A, B]`, maintaining the first caps priority on the intersection. - + Zig-zags over both caps. - + Keeps the first caps order. @@ -8272,6 +9002,7 @@ usage. For plain #GObject @target is the same as @object. + Fetch a child object by name @@ -8292,6 +9023,7 @@ usage. For plain #GObject @target is the same as @object. + Fetch a child object by index @@ -8312,6 +9044,7 @@ usage. For plain #GObject @target is the same as @object. + Get the number of children in @parent @@ -8327,6 +9060,7 @@ usage. For plain #GObject @target is the same as @object. + Called when @child is added to @parent @@ -8349,6 +9083,7 @@ usage. For plain #GObject @target is the same as @object. + Called when @child is removed from @parent @@ -8746,10 +9481,10 @@ unscheduled with gst_clock_id_unschedule(). - The time @master of the master clock and the time @slave of the slave -clock are added to the list of observations. If enough observations -are available, a linear regression algorithm is run on the -observations and @clock is recalibrated. + The time @observation_external of the external or master clock and the time +@observation_internal of the internal or slave clock are added to the list of +observations. If enough observations are available, a linear regression +algorithm is run on the observations and @clock is recalibrated. If this functions returns %TRUE, @r_squared will contain the correlation coefficient of the interpolation. A value of 1.0 @@ -8767,12 +9502,12 @@ regression algorithm. a #GstClock - - a time on the slave + + a time on the internal clock - - a time on the master + + a time on the external clock @@ -8783,8 +9518,8 @@ regression algorithm. Add a clock observation to the internal slaving algorithm the same as -gst_clock_add_observation(), and return the result of the master clock -estimation, without updating the internal calibration. +gst_clock_add_observation(), and return the result of the external or master +clock estimation, without updating the internal calibration. The caller can then take the results and call gst_clock_set_calibration() with the values, or some modified version of them. @@ -8799,12 +9534,12 @@ regression algorithm. a #GstClock - - a time on the slave + + a time on the internal clock - - a time on the master + + a time on the external clock @@ -8990,7 +9725,7 @@ given invalid input. - + Gets the amount of time that master and slave clocks are sampled. @@ -9214,7 +9949,7 @@ is set on the clock, and is intended to be called by subclasses only. - + Sets the amount of time, in nanoseconds, to sample master and slave clocks @@ -9344,13 +10079,13 @@ is not set on the clock, or if the clock is already synced. - + - + - + @@ -9588,88 +10323,88 @@ not be extended or allocated using a custom allocator. The type of the clock entry - + a single shot timeout - + a periodic timeout request The capabilities of this clock - + clock can do a single sync timeout request - + clock can do a single async timeout request - + clock can do sync periodic timeout requests - + clock can do async periodic timeout callbacks - + clock's resolution can be changed - + clock can be slaved to a master clock - + clock needs to be synced before it can be used - + subclasses can add additional flags starting from this flag - + The return value of a clock operation. - + The operation succeeded. - + The operation was scheduled too late. - + The clockID was unscheduled - + The ClockID is busy - + A bad time was provided to a function. - + An error occurred - + Operation is not supported - + The ClockID is done waiting The different kind of clocks. - + time since Epoch - + monotonic time since some unspecified starting point - + some other time source is used (Since: 1.0.5) - + time since Epoch, but using International Atomic Time as reference (Since: 1.18) - + #GstContext is a container object used to store contexts like a device context, a display server connection and similar concepts that should be shared between multiple elements. @@ -10162,7 +10897,7 @@ property, %FALSE otherwise - + @@ -10347,7 +11082,7 @@ or %NULL if the property isn't controlled. - + @@ -10505,53 +11240,53 @@ undefined contain NANs. Core errors are errors inside the core GStreamer library. - + a general error which doesn't fit in any other category. Make sure you add a custom message to the error call. - + do not use this except as a placeholder for deciding where to go while developing code. - + use this when you do not want to implement this functionality yet. - + used for state change errors. - + used for pad-related errors. - + used for thread-related errors. - + used for negotiation-related errors. - + used for event-related errors. - + used for seek-related errors. - + used for caps-related errors. - + used for negotiation-related errors. - + used if a plugin is missing. - + used for clock related errors. - + used if functionality has been disabled at compile time. - + the number of core error types. @@ -10648,6 +11383,18 @@ the metadata on @transbuf. + + Output a debugging message in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + printf-style message to output + + + @@ -10821,6 +11568,37 @@ freed by the caller. + + Output a debugging message for the given identifier in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + An identifier of the message provider + + + printf-style message to output + + + + + Output a debugging message belonging to the given object in the default +category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + the #GObject the message belongs to + + + printf-style message to output + + + Evaluates to 2 strings, that describe the pad. Often used in debugging statements. @@ -11057,6 +11835,13 @@ Used to generate `gst_device_provider_register_*(GstPlugin* plugin)`. + + + + + + + This macro can be used to register a dynamic type into a #GstPlugin. This method will be usually called in the plugin init function @@ -11096,7 +11881,7 @@ Used to generate `gst_dynamic_type_register_*(GstPlugin* plugin)`. - + Struct to store date, time and timezone information altogether. #GstDateTime is refcounted and immutable. @@ -11782,69 +12567,69 @@ debugging message. These are some terminal style flags you can use when creating your debugging categories to make them stand out in debugging output. - + Use black as foreground color. - + Use red as foreground color. - + Use green as foreground color. - + Use yellow as foreground color. - + Use blue as foreground color. - + Use magenta as foreground color. - + Use cyan as foreground color. - + Use white as foreground color. - + Use black as background color. - + Use red as background color. - + Use green as background color. - + Use yellow as background color. - + Use blue as background color. - + Use magenta as background color. - + Use cyan as background color. - + Use white as background color. - + Make the output bold. - + Underline the output. - + Do not use colors in logs. - + Paint logs in a platform-specific way. - + Paint logs with UNIX terminal color codes no matter what platform GStreamer is running on. @@ -11862,27 +12647,27 @@ pointer to a void pointer Available details for pipeline graphs produced by GST_DEBUG_BIN_TO_DOT_FILE() and GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(). - + show caps-name on edges - + show caps-details on edges - + show modified parameters on elements - + show element states - + show full element parameter values even if they are very long - + show all the typical details that one might want - + show all details regardless of how large or verbose they make the resulting output @@ -11890,37 +12675,37 @@ and GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(). The level defines the importance of a debugging message. The more important a message is, the greater the probability that the debugging system outputs it. - + No debugging level specified or desired. Used to deactivate debugging output. - + Error messages are to be used only when an error occurred that stops the application from keeping working correctly. An examples is gst_element_error, which outputs a message with this priority. It does not mean that the application is terminating as with g_error. - + Warning messages are to inform about abnormal behaviour that could lead to problems or weird behaviour later on. An example of this would be clocking issues ("your computer is pretty slow") or broken input data ("Can't synchronize to stream.") - + Fixme messages are messages that indicate that something in the executed code path is not fully implemented or handled yet. Note that this does not replace proper error handling in any way, the purpose of this message is to make it easier to spot incomplete/unfinished pieces of code when reading the debug log. - + Informational messages should be used to keep the developer updated about what is happening. Examples where this should be used are when a typefind function has successfully determined the type of the stream or when an mp3 plugin detects the format to be used. ("This file has mono sound.") - + Debugging messages should be used when something common happens that is not the expected default behavior, or something that's useful to know but doesn't happen all the time (ie. per loop iteration or @@ -11928,23 +12713,23 @@ message is, the greater the probability that the debugging system outputs it. - + Log messages are messages that are very common but might be useful to know. As a rule of thumb a pipeline that is running as expected should never output anything else but LOG messages whilst processing data. Use this log level to log recurring information in chain functions and loop functions, for example. - + Tracing-related messages. Examples for this are referencing/dereferencing of objects. - + memory dump messages are used to log (small) chunks of data as memory dumps in the log. They will be displayed as hexdump with ASCII characters. - + The number of defined debugging levels. @@ -11962,7 +12747,7 @@ message is, the greater the probability that the debugging system outputs it. - + Gets the string representation of a #GstDebugMessage. This function is used @@ -12069,7 +12854,7 @@ create a unique name. - + Getter for the #GstCaps that this device supports. @@ -12084,7 +12869,7 @@ gst_caps_unref() when done. - + Gets the "class" of a device. This is a "/" separated list of classes that represent this device. They are a subset of the classes of the #GstDeviceProvider that produced this device. @@ -12100,7 +12885,7 @@ classes of the #GstDeviceProvider that produced this device. - + Gets the user-friendly name of the device. @@ -12114,7 +12899,7 @@ classes of the #GstDeviceProvider that produced this device. - + Gets the extra properties of a device. @@ -12193,16 +12978,16 @@ device in the PLAYING state. - + - + - + - + @@ -12231,6 +13016,8 @@ device in the PLAYING state. + Creates the fully configured element to access this device. + Subclasses need to override this and return a new element. @@ -12252,6 +13039,9 @@ create a unique name. + This only needs to be implemented by subclasses if the + element can be reconfigured to use a different device. See the documentation + for gst_device_reconfigure_element(). @@ -12515,7 +13305,7 @@ will be emitted on the bus when the list of devices changes. - + @@ -12544,10 +13334,10 @@ will be emitted on the bus when the list of devices changes. - + - + @@ -12590,6 +13380,9 @@ from all relevant providers. + Returns a list of devices that are currently available. + This should never block. The devices should not have a parent and should + be floating. @@ -12955,6 +13748,9 @@ all devices again. + Returns a list of devices that are currently available. + This should never block. The devices should not have a parent and should + be floating. @@ -12970,6 +13766,8 @@ all devices again. + Starts monitoring for new devices. Only subclasses that can know + that devices have been added or remove need to implement this method. @@ -12985,6 +13783,8 @@ all devices again. + Stops monitoring for new devices. Only subclasses that implement + the start() method need to implement this method. @@ -13320,11 +14120,11 @@ metadata. Free with g_strfreev() when no longer needed. - + The opaque #GstDeviceProviderFactoryClass data structure. - + @@ -13363,7 +14163,7 @@ plugin_init (GstPlugin * plugin) - + @@ -14027,6 +14827,48 @@ application will be informed. + + Output an error message in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + printf-style message to output + + + + + Output an error message for the given identifier in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + An identifier of the message provider + + + printf-style message to output + + + + + Output an error message belonging to the given object in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + the #GObject the message belongs to + + + printf-style message to output + + + Builds a string using errno describing the previously failed system call. To be used as the debug argument in #GST_ELEMENT_ERROR. @@ -14494,6 +15336,7 @@ MT safe. + called when a request pad is to be released @@ -14662,6 +15505,7 @@ MT safe. + called immediately after a new state was set. @@ -16772,6 +17616,7 @@ functionality. + called when a new pad is requested @@ -16802,6 +17647,7 @@ request. Can be %NULL. + called when a request pad is to be released @@ -16818,6 +17664,7 @@ request. Can be %NULL. + get the state of the element @@ -16853,6 +17700,7 @@ MT safe. + set a new state on the element @@ -16874,6 +17722,7 @@ MT safe. + called by @set_state to perform an incremental state change @@ -16893,6 +17742,7 @@ MT safe. + called immediately after a new state was set. @@ -16915,6 +17765,7 @@ MT safe. + set a #GstBus on the element @@ -16933,6 +17784,7 @@ MT safe. + gets the #GstClock provided by the element @@ -16951,6 +17803,7 @@ MT safe. + set the #GstClock on the element @@ -16974,6 +17827,7 @@ MT safe. + send a #GstEvent to the element @@ -16994,6 +17848,7 @@ as flushing seeks and steps) will emit %GST_MESSAGE_ASYNC_DONE. + perform a #GstQuery on the element @@ -17015,6 +17870,8 @@ MT safe. + called when a message is posted on the element. Chain up to + the parent class' handler to have it posted on the bus. @@ -17037,6 +17894,7 @@ MT safe. + set a #GstContext on the element @@ -17862,30 +18720,30 @@ make a copy of the protocol string array if you need to. - + The standard flags that an element may have. - + ignore state changes from parent - + the element is a sink - + the element is a source. - + the element can provide a clock - + the element requires a clock - + the element can use an index - + offset to define more flags @@ -18831,9 +19689,10 @@ check the name of a custom event. - + Checks if @event has the given @name. This function is usually used to check the name of a custom event. + Use gst_event_has_name(). %TRUE if @name matches the name of the event structure. @@ -19673,128 +20532,128 @@ that can't be expressed using normal GStreamer buffer passing semantics. Custom events carry an arbitrary #GstStructure. Specific custom events are distinguished by the name of the structure. - + unknown event. - + Start a flush operation. This event clears all data from the pipeline and unblock all streaming threads. - + Stop a flush operation. This event resets the running-time of the pipeline. - + Event to mark the start of a new stream. Sent before any other serialized event and only sent at the start of a new stream, not after flushing seeks. - + #GstCaps event. Notify the pad of a new media type. - + A new media segment follows in the dataflow. The segment events contains information for clipping buffers and converting buffer timestamps to running-time and stream-time. - + A new #GstStreamCollection is available (Since: 1.10) - + A new set of metadata tags has been found in the stream. - + Notification of buffering requirements. Currently not used yet. - + An event that sinks turn into a message. Used to send messages that should be emitted in sync with rendering. - + Indicates that there is no more data for the stream group ID in the message. Sent before EOS in some instances and should be handled mostly the same. (Since: 1.10) - + End-Of-Stream. No more data is to be expected to follow without either a STREAM_START event, or a FLUSH_STOP and a SEGMENT event. - + An event which indicates that a new table of contents (TOC) was found or updated. - + An event which indicates that new or updated encryption information has been found in the stream. - + Marks the end of a segment playback. - + Marks a gap in the datastream. - + Notify downstream that a playback rate override should be applied as soon as possible. (Since: 1.18) - + A quality message. Used to indicate to upstream elements that the downstream elements should adjust their processing rate. - + A request for a new playback position and rate. - + Navigation events are usually used for communicating user requests, such as mouse or keyboard movements, to upstream elements. - + Notification of new latency adjustment. Sinks will use the latency information to adjust their synchronisation. - + A request for stepping through the media. Sinks will usually execute the step operation. - + A request for upstream renegotiating caps and reconfiguring. - + A request for a new playback position based on TOC entry's UID. - + A request to select one or more streams (Since: 1.10) - + Sent by the pipeline to notify elements that handle the instant-rate-change event about the running-time when the rate multiplier should be applied (or was applied). (Since: 1.18) - + Upstream custom event - + Downstream custom event that travels in the data flow. - + Custom out-of-band downstream event. - + Custom sticky downstream event. - + Custom upstream or downstream event. In-band when travelling downstream. - + Custom upstream or downstream out-of-band event. @@ -19860,24 +20719,66 @@ A lower value represents a higher-priority event. #GstEventTypeFlags indicate the aspects of the different #GstEventType values. You can get the type flags of a #GstEventType with the gst_event_type_get_flags() function. - + Set if the event can travel upstream. - + Set if the event can travel downstream. - + Set if the event should be serialized with data flow. - + Set if the event is sticky on the pads. - + Multiple sticky events can be on a pad, each identified by the event name. + + Output a fixme message in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + printf-style message to output + + + + + Output a fixme message for the given identifier in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + An identifier of the message provider + + + printf-style message to output + + + + + Output a fixme message belonging to the given object in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + the #GObject the message belongs to + + + printf-style message to output + + + A mask value with all bits set, for use as a GstFlagSet mask where all flag bits must match @@ -19940,77 +20841,77 @@ when serializing, for easier debugging. Note that the custom return values should not be exposed outside of the element scope. - + Pre-defined custom success code. - + Pre-defined custom success code (define your custom success code to this to avoid compiler warnings). - + Elements can use values starting from this (and higher) to define custom success codes. - + Data passing was ok. - + Pad is not linked. - + Pad is flushing. - + Pad is EOS. - + Pad is not negotiated. - + Some (fatal) error occurred. Element generating this error should post an error message using GST_ELEMENT_ERROR() with more details. - + This operation is not supported. - + Elements can use values starting from this (and lower) to define custom error codes. - + Pre-defined custom error code (define your custom error code to this to avoid compiler warnings). - + Pre-defined custom error code. Standard predefined formats - + undefined format - + the default format of the pad/element. This can be samples for raw audio, frames/fields for raw video (some, but not all, elements support this; use @GST_FORMAT_TIME if you don't have a good reason to query for samples/frames) - + bytes - + time in nanoseconds - + buffers (few, if any, elements implement this as of May 2009) - + percentage of stream (few, if any, elements implement this as of May 2009) @@ -20167,7 +21068,7 @@ Can be used as a default value in variables used to store group_id. The different flags that can be set on #GST_EVENT_GAP events. See gst_event_set_gap_flags() for details. - + The #GST_EVENT_GAP signals missing data, for example because of packet loss. @@ -20407,9 +21308,53 @@ is unlinked and links to the new target are established. if @newtarget is - + + + Output an informational message in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + printf-style message to output + + + + + Output an informational message for the given identifier the default +category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + An identifier of the message provider + + + printf-style message to output + + + + + Output an informational message belonging to the given object in the default +category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + the #GObject the message belongs to + + + printf-style message to output + + + @@ -21064,6 +22009,298 @@ whenever the datastructure changes. + + A #GstIdStr is string type optimized for short strings and used for structure +names, structure field names and in other places. + +Strings up to 16 bytes (including NUL terminator) are stored inline, other +strings are stored on the heap. + +```cpp +GstIdStr s = GST_ID_STR_INIT; + +gst_id_str_set (&s, "Hello, World!"); +g_print ("%s\n", gst_id_str_as_str (&s)); + +gst_id_str_clear (&s); +``` + + + + + + + + + + + Returns a newly heap allocated empty string. + + + A heap-allocated string. + + + + + + + the NUL-terminated string representation of @s. + + + + + A %GstIdStr + + + + + + Clears @s and sets it to the empty string. + + + + + + + A %GstIdStr + + + + + + Copies @s into newly allocated heap memory. + + + A heap-allocated copy of @s. + + + + + A %GstIdStr + + + + + + Copies @s into @d. + + + + + + + The destination %GstIdStr + + + + The source %GstIdStr + + + + + + Frees @s. This should only be called for heap-allocated #GstIdStr. + + + + + + + A heap allocated %GstIdStr + + + + + + Returns the length of @s, exluding the NUL-terminator. This is equivalent to +calling `strcmp()` but potentially faster. + + + + + + + A %GstIdStr + + + + + + Initializes a (usually stack-allocated) id string @s. The newly-initialized +id string will contain an empty string by default as value. + + + + + + + A %GstIdStr + + + + + + Compares @s1 and @s2 for equality. + + + %TRUE if @s1 and @s2 are equal. + + + + + A %GstIdStr + + + + A %GstIdStr + + + + + + Compares @s1 and @s2 for equality. + + + %TRUE if @s1 and @s2 are equal. + + + + + A %GstIdStr + + + + A string + + + + + + Compares @s1 and @s2 with length @len for equality. @s2 does not have to be +NUL-terminated and @len should not include the NUL-terminator. + +This is generally faster than gst_id_str_is_equal_to_str() if the length is +already known. + + + %TRUE if @s1 and @s2 are equal. + + + + + A %GstIdStr + + + + A string + + + + Length of @s2. + + + + + + Moves @s into @d and resets @s. + + + + + + + The destination %GstIdStr + + + + The source %GstIdStr + + + + + + Sets @s to the string @value. + + + + + + + A %GstIdStr + + + + A NUL-terminated string + + + + + + Sets @s to the string @value. @value needs to be valid for the remaining +lifetime of the process, e.g. has to be a static string. + + + + + + + A %GstIdStr + + + + A NUL-terminated string + + + + + + Sets @s to the string @value of length @len. @value needs to be valid for the +remaining lifetime of the process, e.g. has to be a static string. + +@value must be NUL-terminated and @len should not include the +NUL-terminator. + + + + + + + A %GstIdStr + + + + A string + + + + Length of the string + + + + + + Sets @s to the string @value of length @len. @value does not have to be +NUL-terminated and @len should not include the NUL-terminator. + + + + + + + A %GstIdStr + + + + A string + + + + Length of the string + + + + + A fundamental type that describes a #gint64 range @@ -21318,11 +22555,11 @@ MT safe. The #GstIterator to filter - + the compare function to select elements - + user data passed to the compare function @@ -21607,13 +22844,13 @@ The function will be called with the iterator lock held. The result of a #GstIteratorItemFunction. - + Skip this item - + Return item - + Stop after this item. @@ -21664,16 +22901,16 @@ The function will be called with the iterator lock held. The result of gst_iterator_next(). - + No more items in the iterator - + An item was retrieved - + Datastructure changed while iterating - + An error happened @@ -21707,30 +22944,72 @@ The function will be called with the iterator lock held. + + Output a logging message in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + printf-style message to output + + + + + Output a logging message for the given identifier in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + An identifier of the message provider + + + printf-style message to output + + + + + Output a logging message belonging to the given object in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + the #GObject the message belongs to + + + printf-style message to output + + + Library errors are for errors from the library being used by elements (initializing, finalizing, settings, ...) - + a general error which doesn't fit in any other category. Make sure you add a custom message to the error call. - + do not use this except as a placeholder for deciding where to go while developing code. - + used when the library could not be opened. - + used when the library could not be closed. - + used when the library doesn't accept settings. - + used when the library generated an encoding error. - + the number of library error types. @@ -21742,16 +23021,16 @@ deciding where to go while developing code. Flags used when locking miniobjects - + lock for read access - + lock for write access - + lock for exclusive access - + first flag that can be used for custom purposes @@ -22283,13 +23562,13 @@ gst_mini_object_lock() and gst_mini_object_unlock(). Flags used when mapping memory - + map for read access - + map for write access - + first flag that can be used for custom purposes @@ -22762,32 +24041,32 @@ If @size is set to -1, all bytes starting at @offset are copied. Flags for wrapped memory. - + memory is readonly. It is not allowed to map the memory with #GST_MAP_WRITE. - + memory must not be shared. Copies will have to be made when this memory needs to be shared between buffers. (DEPRECATED: do not use in new code, instead you should create a custom GstAllocator for memory pooling instead of relying on the GstBuffer they were originally attached to.) - + the memory prefix is filled with 0 bytes - + the memory padding is filled with 0 bytes - + the memory is physically contiguous. (Since: 1.2) - + the memory can't be mapped via gst_memory_map() without any preconditions. (Since: 1.2) - + first flag that can be used for custom purposes @@ -25540,8 +26819,8 @@ want to write to the @details structure. The returned structure must not be freed. - - The details, or NULL if none. + + The details @@ -25621,32 +26900,32 @@ of @new_message. The different message types that are available. - + an undefined message - + end-of-stream reached in a pipeline. The application will only receive this message in the PLAYING state and every time it sets a pipeline to PLAYING that is in the EOS state. The application can perform a flushing seek in the pipeline, which will undo the EOS state again. - + an error occurred. When the application receives an error message it should stop playback of the pipeline and not assume that more data will be played. It is possible to specify a redirection url to the error messages by setting a `redirect-location` field into the error message, application or high level bins might use the information as required. - + a warning occurred. - + an info message occurred - + a tag was found. - + the pipeline is buffering. When the application receives a buffering message in the PLAYING state for a non-live pipeline it must PAUSE the pipeline until the buffering completes, when the percentage @@ -25654,152 +26933,152 @@ field in the message is 100%. For live pipelines, no action must be performed and the buffering percentage can be used to inform the user about the progress. - + a state change happened - + an element changed state in a streaming thread. This message is deprecated. - + a stepping operation finished. - + an element notifies its capability of providing a clock. This message is used internally and never forwarded to the application. - + The current clock as selected by the pipeline became unusable. The pipeline will select a new clock on the next PLAYING state change. The application should set the pipeline to PAUSED and back to PLAYING when this message is received. - + a new clock was selected in the pipeline. - + the structure of the pipeline changed. This message is used internally and never forwarded to the application. - + status about a stream, emitted when it starts, stops, errors, etc.. - + message posted by the application, possibly via an application-specific element. - + element-specific message, see the specific element's documentation - + pipeline started playback of a segment. This message is used internally and never forwarded to the application. - + pipeline completed playback of a segment. This message is forwarded to the application after all elements that posted @GST_MESSAGE_SEGMENT_START posted a GST_MESSAGE_SEGMENT_DONE message. - + The duration of a pipeline changed. The application can get the new duration with a duration query. - + Posted by elements when their latency changes. The application should recalculate and distribute a new latency. - + Posted by elements when they start an ASYNC #GstStateChange. This message is not forwarded to the application but is used internally. - + Posted by elements when they complete an ASYNC #GstStateChange. The application will only receive this message from the toplevel pipeline. - + Posted by elements when they want the pipeline to change state. This message is a suggestion to the application which can decide to perform the state change on (part of) the pipeline. - + A stepping operation was started. - + A buffer was dropped or an element changed its processing strategy for Quality of Service reasons. - + A progress message. - + A new table of contents (TOC) was found or previously found TOC was updated. - + Message to request resetting the pipeline's running time from the pipeline. This is an internal message which applications will likely never receive. - + Message indicating start of a new stream. Useful e.g. when using playbin in gapless playback mode, to get notified when the next title actually starts playing (which will be some time after the URI for the next title has been set). - + Message indicating that an element wants a specific context (Since: 1.2) - + Message indicating that an element created a context (Since: 1.2) - + Message is an extended message type (see below). These extended message IDs can't be used directly with mask-based API like gst_bus_poll() or gst_bus_timed_pop_filtered(), but you can still filter for GST_MESSAGE_EXTENDED and then check the result for the specific type. (Since: 1.4) - + Message indicating a #GstDevice was added to a #GstDeviceProvider (Since: 1.4) - + Message indicating a #GstDevice was removed from a #GstDeviceProvider (Since: 1.4) - + Message indicating a #GObject property has changed (Since: 1.10) - + Message indicating a new #GstStreamCollection is available (Since: 1.10) - + Message indicating the active selection of #GstStreams has changed (Since: 1.10) - + Message indicating to request the application to try to play the given URL(s). Useful if for example a HTTP 302/303 response is received with a non-HTTP URL inside. (Since: 1.10) - + Message indicating a #GstDevice was changed a #GstDeviceProvider (Since: 1.16) - + Message sent by elements to request the running time from the pipeline when an instant rate change should be applied (which may be in the past when the answer arrives). (Since: 1.18) - + mask for all of the above messages. @@ -25944,6 +27223,37 @@ to remember the size of previous data to preallocate the next. + + When a element like `tee` decides the allocation, each downstream element may +fill different parameters and pass them to gst_query_add_allocation_meta(). +In order to keep these parameters, a merge operation is needed. This +aggregate function can combine the parameters from @params0 and @param1, and +write the result back into @aggregated_params. + + + %TRUE if the parameters were successfully aggregated, %FALSE otherwise. + + + + + the GType of the API for which the parameters are being aggregated. + + + + This structure will be updated with the + combined parameters from both @params0 and @params1. + + + + a #GstStructure containing the new parameters to be aggregated. + + + + a #GstStructure containing the new parameters to be aggregated. + + + + @@ -25998,6 +27308,24 @@ to remember the size of previous data to preallocate the next. + + This function sets the aggregator function for a specific API type. + + + + + + + the #GType of the API for which the aggregator function is being set. + + + + the aggregator function to be associated with the given API + type. + + + + Recreate a #GstMeta from serialized data returned by gst_meta_serialize() and add it to @buffer. @@ -26197,19 +27525,19 @@ when a pooled buffer is returned. Extra metadata flags. - + no flags - + metadata should not be modified - + metadata is managed by a bufferpool - + metadata should not be removed - + additional flags can be added starting from this flag. @@ -26947,20 +28275,20 @@ and the memory associated with the object is freed. Flags for the mini object - + the object can be locked and unlocked with gst_mini_object_lock() and gst_mini_object_unlock(). - + the object is permanently locked in READONLY mode. Only read locks can be performed on the object. - + the object is expected to stay alive even after gst_deinit() has been called and so should be ignored by leak detection tools. (Since: 1.10) - + first flag that can be used by subclasses. @@ -27350,6 +28678,7 @@ Either @newobj and the value pointed to by @oldobj may be %NULL. + default signal handler @@ -27497,7 +28826,7 @@ curve or apply a control curve sample by sample. - + Returns a copy of the name of @object. Caller should g_free() the return value after usage. For a nameless object, this returns %NULL, which you can safely g_free() @@ -27519,7 +28848,7 @@ MT safe. This function grabs and releases @object's LOCK. - + Returns the parent of @object. This function increases the refcount of the parent object so you should gst_object_unref() it after usage. @@ -27810,7 +29139,7 @@ The control-rate should not change if the element is in %GST_STATE_PAUSED or - + Sets the name of @object, or gives @object a guaranteed unique name (if @name is %NULL). This function makes a copy of the provided name, so the caller @@ -27835,7 +29164,7 @@ MT safe. This function grabs and releases @object's LOCK. - + Sets the parent of @object to @parent. The object's reference count will be incremented, and any floating reference will be removed (see gst_object_ref_sink()). @@ -27930,10 +29259,10 @@ this might deadlock the dispose function. - + - + The parent of the object. Please note, that when changing the 'parent' property, we don't emit #GObject::notify and #GstObject::deep-notify signals due to locking issues. In some cases one can use @@ -28005,6 +29334,7 @@ the elements contained in that bin. + default signal handler @@ -28031,12 +29361,12 @@ the elements contained in that bin. The standard flags that an gstobject may have. - + the object is expected to stay alive even after gst_deinit() has been called and so should be ignored by leak detection tools. (Since: 1.10) - + Flag that's set when the object has been constructed. This can be used by API such as base class setters to differentiate between the case where they're called from a subclass's instance init function (and where the @@ -28044,7 +29374,7 @@ object isn't fully constructed yet, and so one shouldn't do anything but set values in the instance structure), and the case where the object is constructed. - + subclasses can add additional flags starting from this flag @@ -29342,8 +30672,8 @@ MT safe. - #GstPadProbeCallback that will be called with notifications of - the pad state + #GstPadProbeCallback that will be called with + notifications of the pad state @@ -29666,7 +30996,7 @@ incremented ref-count or %NULL when pad has no caps. Unref after usage. - + Gets the direction of the pad. The direction of the pad is decided at construction time so this function does not take the LOCK. @@ -29712,7 +31042,7 @@ No locking is performed in this function. - + Get the offset applied to the running time of @pad. @pad has to be a source pad. @@ -31090,7 +32420,7 @@ of the peer sink pad, if present. - + Set the offset that will be applied to the running time of @pad. Upon next buffer, every sticky events (notably segment) will be pushed again with their running time adjusted. For that reason this is only reliable on @@ -31207,8 +32537,8 @@ event. If @foreach_func returns %FALSE the iteration is immediately stopped. - the #GstPadStickyEventsForeachFunction that - should be called for every event. + the + #GstPadStickyEventsForeachFunction that should be called for every event. @@ -31302,10 +32632,10 @@ be renegotiated to something else. - + - + The offset that will be applied to the running time of the pad. @@ -31646,13 +32976,13 @@ post an error on the bus and return an appropriate #GstFlowReturn value. The direction of a pad. - + direction is unknown. - + the pad is a source pad. - + the pad is a sink pad. @@ -31711,63 +33041,63 @@ return it. Pad state flags - + is dataflow on a pad blocked - + is pad flushing - + is pad in EOS state - + is pad currently blocking on a buffer or event - + ensure that there is a parent object before calling into the pad callbacks. - + the pad should be reconfigured/renegotiated. The flag has to be unset manually after reconfiguration happened. - + the pad has pending events - + the pad is using fixed caps. This means that once the caps are set on the pad, the default caps query function will only return those caps. - + the default event and query handler will forward all events and queries to the internally linked pads instead of discarding them. - + the default query handler will forward allocation queries to the internally linked pads instead of discarding them. - + the default query handler will forward scheduling queries to the internally linked pads instead of discarding them. - + the default accept-caps handler will check it the caps intersect the query-caps result instead of checking for a subset. This is interesting for parsers that can accept incompletely specified caps. - + the default accept-caps handler will use the template pad caps instead of query caps to compare with the accept caps. Use this in combination with %GST_PAD_FLAG_ACCEPT_INTERSECT. (Since: 1.6) - + offset to define more flags @@ -31887,28 +33217,28 @@ specified, expensive but safe @GST_PAD_LINK_CHECK_CAPS are performed. > will not fail because of hierarchy/caps compatibility failures. If uncertain, > use the default checks (%GST_PAD_LINK_CHECK_DEFAULT) or the regular methods > for linking the pads. - + Don't check hierarchy or caps compatibility. - + Check the pads have same parents/grandparents. Could be omitted if it is already known that the two elements that own the pads are in the same bin. - + Check if the pads are compatible by using their template caps. This is much faster than @GST_PAD_LINK_CHECK_CAPS, but would be unsafe e.g. if one pad has %GST_CAPS_ANY. - + Check if the pads are compatible by comparing the caps returned by gst_pad_query_caps(). - + Disables pushing a reconfigure event when pads are linked. - + The default checks done when linking pads (i.e. the ones used by gst_pad_link()). @@ -31939,25 +33269,25 @@ specified, expensive but safe @GST_PAD_LINK_CHECK_CAPS are performed. Result values from gst_pad_link and friends. - + link succeeded - + pads have no common grandparent - + pad was already linked - + pads have wrong direction - + pads do not have common format - + pads cannot cooperate in scheduling - + refused for some reason @@ -31965,13 +33295,13 @@ specified, expensive but safe @GST_PAD_LINK_CHECK_CAPS are performed. The status of a GstPad. After activating a pad, which usually happens when the parent element goes from READY to PAUSED, the GstPadMode defines if the pad operates in push or pull mode. - + Pad will not handle dataflow - + Pad handles dataflow in downstream push mode - + Pad handles dataflow in upstream pull mode @@ -31991,18 +33321,18 @@ pad operates in push or pull mode. Indicates when this pad will become available. - + the pad is always available - + the pad will become available depending on the media stream - + the pad is only available on request with gst_element_request_pad(). - + @@ -32125,31 +33455,31 @@ The callback is allowed to modify the data pointer in @info. Different return values for the #GstPadProbeCallback. - + drop data in data probes. For push mode this means that the data item is not sent downstream. For pull mode, it means that the data item is not passed upstream. In both cases, no other probes are called for this item and %GST_FLOW_OK or %TRUE is returned to the caller. - + normal probe return value. This leaves the probe in place, and defers decisions about dropping or passing data to other probes, if any. If there are no other probes, the default behaviour for the probe type applies ('block' for blocking probes, and 'pass' for non-blocking probes). - + remove this probe, passing the data. For blocking probes this will cause data flow to unblock, unless there are also other blocking probes installed. - + pass the data item in the block probe and block on the next item. Note, that if there are multiple pad probes installed and any probe returns PASS, the data will be passed. - + Data has been handled in the probe and will not be forwarded further. For events and buffers this is the same behaviour as %GST_PAD_PROBE_DROP (except that in this case you need to unref the buffer @@ -32164,73 +33494,73 @@ The callback is allowed to modify the data pointer in @info. The different probing types that can occur. When either one of @GST_PAD_PROBE_TYPE_IDLE or @GST_PAD_PROBE_TYPE_BLOCK is used, the probe will be a blocking probe. - + invalid probe type - + probe idle pads and block while the callback is called - + probe and block pads - + probe buffers - + probe buffer lists - + probe downstream events - + probe upstream events - + probe flush events. This probe has to be explicitly enabled and is not included in the @@GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM or @@GST_PAD_PROBE_TYPE_EVENT_UPSTREAM probe types. - + probe downstream queries - + probe upstream queries - + probe push - + probe pull - + probe and block at the next opportunity, at data flow or when idle - + probe downstream data (buffers, buffer lists, and events) - + probe upstream data (events) - + probe upstream and downstream data (buffers, buffer lists, and events) - + probe and block downstream data (buffers, buffer lists, and events) - + probe and block upstream data (events) - + probe upstream and downstream events - + probe upstream and downstream queries - + probe upstream events and queries and downstream buffers, buffer lists, events and queries - + probe push and pull @@ -32443,7 +33773,7 @@ and with the given arguments. - + Gets the capabilities of the pad template. @@ -32510,11 +33840,11 @@ expose "stable" caps to the reader. - + The capabilities of the pad described by the pad template. - + The direction of the pad described by the pad template. @@ -32522,11 +33852,11 @@ expose "stable" caps to the reader. The type of the pad described by the pad template. - + The name template of the pad template. - + When the pad described by the pad template will become available. @@ -32606,7 +33936,7 @@ expose "stable" caps to the reader. Flags for the padtemplate - + first flag that can be used by subclasses. @@ -32712,7 +34042,7 @@ for re-use. - + Opaque structure. @@ -32777,28 +34107,28 @@ of %GST_PARSE_ERROR_NO_SUCH_ELEMENT was returned. The different parsing errors that can occur. - + A syntax error occurred. - + The description contained an unknown element - + An element did not have a specified property - + There was an error linking two pads. - + There was an error setting a property - + An empty bin was specified. - + An empty description was specified - + A delayed link did not get resolved. @@ -32811,19 +34141,19 @@ of %GST_PARSE_ERROR_NO_SUCH_ELEMENT was returned. Parsing options. - + Do not use any special parsing options. - + Always return %NULL when an error occurs (default behaviour is to return partially constructed bins or elements in some cases) - + If a bin only has a single element, just return the element. - + If more than one toplevel element is described by the pipeline description string, put them in a #GstBin instead of a #GstPipeline. (Since: 1.10) @@ -32917,7 +34247,7 @@ MT safe. - + Check if @pipeline will automatically flush messages when going to the NULL state. @@ -32988,7 +34318,7 @@ MT safe. - + Get the configured delay (see gst_pipeline_set_delay()). @@ -33004,7 +34334,7 @@ MT safe. - + Gets the latency that should be configured on the pipeline. See gst_pipeline_set_latency(). @@ -33052,7 +34382,7 @@ MT safe. - + Usually, when a pipeline goes from READY to NULL state, it automatically flushes all pending messages on the bus, which is done for refcounting purposes, to break circular references. @@ -33105,7 +34435,7 @@ MT safe. - + Set the expected delay needed for all elements to perform the PAUSED to PLAYING state change. @delay will be added to the base time of the elements so that they wait an additional @delay @@ -33131,7 +34461,7 @@ MT safe. - + Sets the latency that should be configured on the pipeline. Setting GST_CLOCK_TIME_NONE will restore the default behaviour of using the minimum latency from the LATENCY query. Setting this is usually not required and @@ -33178,19 +34508,19 @@ MT safe. - + Whether or not to automatically flush all messages on the pipeline's bus when going from READY to NULL state. Please see gst_pipeline_set_auto_flush_bus() for more information on this option. - + The expected delay needed for elements to spin up to the PLAYING state expressed in nanoseconds. see gst_pipeline_set_delay() for more information on this option. - + Latency to configure on the pipeline. See gst_pipeline_set_latency(). @@ -33236,14 +34566,14 @@ see gst_pipeline_set_delay() for more information on this option. Pipeline flags - + this pipeline works with a fixed clock - + offset to define more flags - + @@ -33840,38 +35170,38 @@ The cache is flushed every time the registry is rebuilt. - + Ignore enum members when generating the plugins cache. This is useful if the members of the enum are generated dynamically, in order not to expose incorrect documentation to the end user. - + Flags used in connection with gst_plugin_add_dependency(). - + no special flags - + recurse into subdirectories - + use paths argument only if none of the environment variables is set - + interpret filename argument as filter suffix and check all matching files in the directory - + interpret filename argument as filter prefix and check all matching files in the directory. Since: 1.8. - + interpret non-absolute paths as relative to the main executable directory. Since 1.14. @@ -33941,13 +35271,13 @@ BSD, MIT/X11, Proprietary, unknown. The plugin loading errors - + The plugin could not be loaded - + The plugin has unresolved dependencies - + The plugin has already be loaded from a different file @@ -34160,7 +35490,7 @@ the most appropriate feature. - + @@ -34204,10 +35534,10 @@ to get a list of plugins that match certain criteria. The plugin loading state - + Temporarily loaded plugins - + The plugin won't be scanned (again) @@ -34250,7 +35580,7 @@ register each #GstPluginFeature. - + A #GstPoll keeps track of file descriptors much like fd_set (used with select ()) or a struct pollfd array (used with poll ()). Once created with gst_poll_new(), the set can be used to wait for file descriptors to be @@ -35139,6 +36469,7 @@ data @tag names can be something like e.g. "comment". Supplying %NULL for the + virtual method to get list of presets @@ -35157,6 +36488,7 @@ data @tag names can be something like e.g. "comment". Supplying %NULL for the + virtual methods to get properties that are persistent @@ -35175,6 +36507,7 @@ data @tag names can be something like e.g. "comment". Supplying %NULL for the + virtual methods to load a preset into properties @@ -35194,6 +36527,7 @@ data @tag names can be something like e.g. "comment". Supplying %NULL for the + virtual methods to save properties into a preset @@ -35213,6 +36547,7 @@ data @tag names can be something like e.g. "comment". Supplying %NULL for the + virtual methods to rename a preset @@ -35236,6 +36571,7 @@ data @tag names can be something like e.g. "comment". Supplying %NULL for the + virtual methods to remove a preset @@ -35255,6 +36591,7 @@ data @tag names can be something like e.g. "comment". Supplying %NULL for the + virtual methods to set textual meta data to a preset @@ -35282,6 +36619,7 @@ data @tag names can be something like e.g. "comment". Supplying %NULL for the + virtual methods to get textual meta data from a preset @@ -35318,19 +36656,19 @@ or no value for the given @tag The type of a %GST_MESSAGE_PROGRESS. The progress messages inform the application of the status of asynchronous tasks. - + A new task started. - + A task completed and a new one continues. - + A task completed. - + A task was canceled. - + A task caused an error. An error message is also posted on the bus. @@ -35555,18 +36893,18 @@ immediately with the current result. The result of a #GstPromise - + Initial state. Waiting for transition to any other state. - + Interrupted by the consumer as it doesn't want the value anymore. - + A producer marked a reply - + The promise expired (the carrying object lost all refs) and the promise will never be fulfilled. @@ -35724,24 +37062,24 @@ be %NULL. Unref target pad after usage. - + The different types of QoS events that can be given to the gst_event_new_qos() method. - + The QoS event type that is produced when upstream elements are producing data too quickly and the element can't keep up processing the data. Upstream should reduce their production rate. This type is also used when buffers arrive early or in time. - + The QoS event type that is produced when upstream elements are producing data too slowly and need to speed up their production rate. - + The QoS event type that is produced when the application enabled throttling to limit the data rate. @@ -37800,68 +39138,68 @@ Either @new_query or the #GstQuery pointed to by @old_query may be %NULL. Standard predefined Query types - + unknown query type - + current position in stream - + total duration of the stream - + latency of stream - + current jitter of stream - + current rate of the stream - + seeking capabilities - + segment start/stop positions - + convert values between formats - + query supported formats for convert - + query available media for efficient seeking. - + a custom application or element defined query. - + query the URI of the source or sink. - + the buffer allocation properties - + the scheduling properties - + the accept caps query - + the caps query - + wait till all serialized data is consumed downstream - + query the pipeline-local context from downstream or upstream (since 1.2) - + the bitrate query (since 1.16) - + Query stream selection capability. @@ -37911,13 +39249,13 @@ Either @new_query or the #GstQuery pointed to by @old_query may be %NULL. #GstQueryTypeFlags indicate the aspects of the different #GstQueryType values. You can get the type flags of a #GstQueryType with the gst_query_type_get_flags() function. - + Set if the query can travel upstream. - + Set if the query can travel downstream. - + Set if the query should be serialized with data flow. @@ -38184,16 +39522,16 @@ will choose this element over an alternative one with the same function. These constants serve as a rough guidance for defining the rank of a #GstPluginFeature. Any value is valid, including values bigger than @GST_RANK_PRIMARY. - + will be chosen last or not at all - + unlikely to be chosen - + likely to be chosen - + will be chosen first @@ -38757,64 +40095,64 @@ replacing a previously-added one by the same name) - + Resource errors are for any resource used by an element: memory, files, network connections, process space, ... They're typically used by source and sink elements. - + a general error which doesn't fit in any other category. Make sure you add a custom message to the error call. - + do not use this except as a placeholder for deciding where to go while developing code. - + used when the resource could not be found. - + used when resource is busy. - + used when resource fails to open for reading. - + used when resource fails to open for writing. - + used when resource cannot be opened for both reading and writing, or either (but unspecified which). - + used when the resource can't be closed. - + used when the resource can't be read from. - + used when the resource can't be written to. - + used when a seek on the resource fails. - + used when a synchronize on the resource fails. - + used when settings can't be manipulated on. - + used when the resource has no space left. - + used when the resource can't be opened due to missing authorization. (Since: 1.2.4) - + the number of resource error types. @@ -39239,7 +40577,7 @@ strings. - + A #GstSample is a small object containing data, a type, timing and extra arbitrary information. @@ -39485,25 +40823,25 @@ sample will be freed. The different scheduling flags. - + if seeking is possible - + if sequential access is recommended - + if bandwidth is limited and buffering possible (since 1.2) The different search modes. - + Only search for exact matches. - + Search for an exact match or the element just before. - + Search for an exact match or the element just after. @@ -39559,67 +40897,67 @@ one that is located after in the actual source stream. Also see part-seeking.txt in the GStreamer design documentation for more details on the meaning of these flags and the behaviour expected of elements that handle them. - + no flag - + flush pipeline - + accurate position is requested, this might be considerably slower for some formats. - + seek to the nearest keyframe. This might be faster but less accurate. - + perform a segment seek. - + when doing fast forward or fast reverse playback, allow elements to skip frames instead of generating all frames. (Since: 1.6) - + Deprecated backward compatibility flag, replaced by %GST_SEEK_FLAG_TRICKMODE - + go to a location before the requested position, if %GST_SEEK_FLAG_KEY_UNIT this means the keyframe at or before the requested position the one at or before the seek target. - + go to a location after the requested position, if %GST_SEEK_FLAG_KEY_UNIT this means the keyframe at of after the requested position. - + go to a position near the requested position, if %GST_SEEK_FLAG_KEY_UNIT this means the keyframe closest to the requested position, if both keyframes are at an equal distance, behaves like %GST_SEEK_FLAG_SNAP_BEFORE. - + when doing fast forward or fast reverse playback, request that elements only decode keyframes and skip all other content, for formats that have keyframes. (Since: 1.6) - + when doing fast forward or fast reverse playback, request that audio decoder elements skip decoding and output only gap events or silence. (Since: 1.6) - + When doing fast forward or fast reverse playback, request that elements only decode keyframes and forward predicted frames and skip all other content (for example B-Frames), for formats that have keyframes and forward predicted frames. (Since: 1.18) - + Signals that a rate change should be applied immediately. Only valid if start/stop position are GST_CLOCK_TIME_NONE, the playback direction does not change @@ -39629,13 +40967,13 @@ elements that handle them. The different types of seek events. When constructing a seek event with gst_event_new_seek() or when doing gst_segment_do_seek (). - + no change in position is required - + absolute position is requested - + relative position to duration is requested @@ -40349,45 +41687,45 @@ to get the real negative stream time. Flags for the GstSegment structure. Currently mapped to the corresponding values of the seek flags. - + no flags - + reset the pipeline running_time to the segment running_time - + perform skip playback (Since: 1.6) - + Deprecated backward compatibility flag, replaced by @GST_SEGMENT_FLAG_TRICKMODE - + send SEGMENT_DONE instead of EOS - + Decode only keyframes, where possible (Since: 1.6) - + Decode only keyframes or forward predicted frames, where possible (Since: 1.18) - + Do not decode any audio, where possible (Since: 1.6) - + No special flags specified. - + Serialize using the old format for nested structures. - + Serialization fails if a value cannot be serialized instead of using placeholder "NULL" value (e.g. pointers, objects). @@ -40466,16 +41804,16 @@ Setting @max_threads to 0 effectively freezes the pool. - + - + Try to retrieve the minimum information available, which may be none on some platforms (Since: 1.18) - + Try to retrieve as much information as possible, including source information when getting the stack trace @@ -40484,21 +41822,21 @@ Setting @max_threads to 0 effectively freezes the pool. The possible states an element can be in. States can be changed using gst_element_set_state() and checked using gst_element_get_state(). - + no pending state. - + the NULL state or initial state of an element. - + the element is ready to go to PAUSED. - + the element is PAUSED, it is ready to accept and process data. Sink elements however only accept one buffer and then block. - + the element is PLAYING, the #GstClock is running and the data is flowing. @@ -40507,14 +41845,14 @@ gst_element_set_state() and checked using gst_element_get_state(). These are the different state changes an element goes through. %GST_STATE_NULL &rArr; %GST_STATE_PLAYING is called an upwards state change and %GST_STATE_PLAYING &rArr; %GST_STATE_NULL a downwards state change. - + state change from NULL to READY. * The element must check if the resources it needs are available. Device sinks and -sources typically try to probe the device to constrain their caps. * The element opens the device (in case feature need to be probed). - + state change from READY to PAUSED. * The element pads are activated in order to receive data in PAUSED. Streaming threads are started. @@ -40526,7 +41864,7 @@ and %GST_STATE_PLAYING &rArr; %GST_STATE_NULL a downwards state change. - + state change from PAUSED to PLAYING. * Most elements ignore this state change. * The pipeline selects a #GstClock and distributes this to all the children @@ -40543,7 +41881,7 @@ and %GST_STATE_PLAYING &rArr; %GST_STATE_NULL a downwards state change. - + state change from PLAYING to PAUSED. * Most elements ignore this state change. * The pipeline calculates the running_time based on the last selected @@ -40558,7 +41896,7 @@ and %GST_STATE_PLAYING &rArr; %GST_STATE_NULL a downwards state change. - + state change from PAUSED to READY. * Sinks unblock any waits in the preroll. * Elements unblock any waits on devices @@ -40568,25 +41906,25 @@ and %GST_STATE_PLAYING &rArr; %GST_STATE_NULL a downwards state change. - + state change from READY to NULL. * Elements close devices * Elements reset any internal state. - + state change from NULL to NULL. (Since: 1.14) - + state change from READY to READY, This might happen when going to PAUSED asynchronously failed, in that case elements should make sure they are in a proper, coherent READY state. (Since: 1.14) - + state change from PAUSED to PAUSED. This might happen when elements were in PLAYING state and 'lost state', they should make sure to go back to real 'PAUSED' state (prerolling for example). (Since: 1.14) - + state change from PLAYING to PLAYING. (Since: 1.14) @@ -40608,16 +41946,16 @@ they should make sure to go back to real 'PAUSED' state (prerolling for example) The possible return values from a state change function such as gst_element_set_state(). Only @GST_STATE_CHANGE_FAILURE is a real failure. - + the state change failed - + the state change succeeded - + the state change will happen asynchronously - + the state change succeeded but the element cannot produce data in %GST_STATE_PAUSED. This typically happens with live sources. @@ -40764,7 +42102,7 @@ a new one will be automatically generated - + Retrieve the caps for @stream, if any @@ -40778,7 +42116,7 @@ a new one will be automatically generated - + Retrieve the current stream flags for @stream @@ -40792,7 +42130,7 @@ a new one will be automatically generated - + Returns the stream ID of @stream. @@ -40807,7 +42145,7 @@ during the lifetime of @stream. - + Retrieve the stream type for @stream @@ -40821,7 +42159,7 @@ during the lifetime of @stream. - + Retrieve the tags for @stream, if any @@ -40835,7 +42173,7 @@ during the lifetime of @stream. - + Set the caps for the #GstStream @@ -40852,7 +42190,7 @@ during the lifetime of @stream. - + Set the @flags for the @stream. @@ -40869,7 +42207,7 @@ during the lifetime of @stream. - + Set the stream type of @stream @@ -40886,7 +42224,7 @@ during the lifetime of @stream. - + Set the tags for the #GstStream @@ -40903,23 +42241,23 @@ during the lifetime of @stream. - + The #GstCaps of the #GstStream. - + - + The unique identifier of the #GstStream. Can only be set at construction time. - + The #GstStreamType of the #GstStream. Can only be set at construction time. - + The #GstTagList of the #GstStream. @@ -40985,6 +42323,7 @@ Applications can activate streams from a collection by using the + default signal handler for the stream-notify signal @@ -41053,7 +42392,7 @@ The caller should not modify the returned #GstStream - + Returns the upstream id of the @collection. @@ -41067,7 +42406,7 @@ The caller should not modify the returned #GstStream - + stream-id @@ -41111,6 +42450,7 @@ streams within the collection. + default signal handler for the stream-notify signal @@ -41135,62 +42475,62 @@ streams within the collection. - + Stream errors are for anything related to the stream being processed: format errors, media type errors, ... They're typically used by decoders, demuxers, converters, ... - + a general error which doesn't fit in any other category. Make sure you add a custom message to the error call. - + do not use this except as a placeholder for deciding where to go while developing code. - + use this when you do not want to implement this functionality yet. - + used when the element doesn't know the stream's type. - + used when the element doesn't handle this type of stream. - + used when there's no codec to handle the stream's type. - + used when decoding fails. - + used when encoding fails. - + used when demuxing fails. - + used when muxing fails. - + used when the stream is of the wrong format (for example, wrong caps). - + used when the stream is encrypted and can't be decrypted because this is not supported by the element. - + used when the stream is encrypted and can't be decrypted because no suitable key is available. - + the number of stream error types. @@ -41201,20 +42541,20 @@ can't be decrypted because no suitable key is available. - + This stream has no special attributes - + This stream is a sparse stream (e.g. a subtitle stream), data may flow only in irregular intervals with large gaps in between. - + This stream should be selected by default. This flag may be used by demuxers to signal that a stream should be selected by default in a playback scenario. - + This stream should not be selected by default. This flag may be used by demuxers to signal that a stream should not be selected by default in a playback scenario, but only if explicitly @@ -41222,31 +42562,31 @@ can't be decrypted because no suitable key is available. a director's commentary track). - + The type of a %GST_MESSAGE_STREAM_STATUS. The stream status messages inform the application of new streaming threads and their status. - + A new thread need to be created. - + a thread entered its loop function - + a thread left its loop function - + a thread is destroyed - + a thread is started - + a thread is paused - + a thread is stopped @@ -41257,19 +42597,19 @@ flows of data in #GstStream objects. Note that this is a flag, and therefore users should not assume it will be a single value. Do not use the equality operator for checking whether a stream is of a certain type. - + The stream is of unknown (unclassified) type. - + The stream is of audio data - + The stream carries video data - + The stream is a muxed container type - + The stream contains subtitle / subpicture data. @@ -41353,14 +42693,14 @@ values are explicitly typed. Some types have special delimiters: -- [GstValueArray](GST_TYPE_ARRAY) are inside curly brackets (`{` and `}`). - For example `a-structure, array={1, 2, 3}` +- [GstValueArray](GST_TYPE_ARRAY) are inside "less and greater than" (`<` and + `>`). For example `a-structure, array=<1, 2, 3> - Ranges are inside brackets (`[` and `]`). For example `a-structure, range=[1, 6, 2]` 1 being the min value, 6 the maximum and 2 the step. To specify a #GST_TYPE_INT64_RANGE you need to explicitly specify it like: `a-structure, a-int64-range=(gint64) [1, 5]` -- [GstValueList](GST_TYPE_LIST) are inside "less and greater than" (`<` and - `>`). For example `a-structure, list=<1, 2, 3> +- [GstValueList](GST_TYPE_LIST) are inside curly brackets (`{` and `}`). + For example `a-structure, list={1, 2, 3}` Structures are delimited either by a null character `\0` or a semicolon `;` the latter allowing to store multiple structures in the same string (see @@ -41494,7 +42834,7 @@ Free-function: gst_structure_free - + Creates a new #GstStructure with the given name as a GQuark, followed by fieldname quark, GType, argument(s) "triplets" in the same format as gst_structure_id_set(). Basically a convenience wrapper around @@ -41503,6 +42843,7 @@ gst_structure_new_id_empty() and gst_structure_id_set(). The last variable argument must be %NULL (or 0). Free-function: gst_structure_free + Use gst_structure_new_id_str(). a new #GstStructure @@ -41523,10 +42864,11 @@ Free-function: gst_structure_free - + Creates a new, empty #GstStructure with the given name as a GQuark. Free-function: gst_structure_free + Use gst_structure_new_id_str_empty(). a new, empty #GstStructure @@ -41539,6 +42881,159 @@ Free-function: gst_structure_free + + Creates a new #GstStructure with the given name as a GQuark, followed by +fieldname GstIdStr, GType, argument(s) "triplets" in the same format as +gst_structure_id_str_set(). Basically a convenience wrapper around +gst_structure_new_id_str_empty() and gst_structure_id_str_set(). + +The last variable argument must be %NULL (or 0). + +Free-function: gst_structure_free + + + a new #GstStructure + + + + + name of new structure + + + + the GstIdStr for the name of the field to set + + + + variable arguments + + + + + + Creates a new, empty #GstStructure with the given name. + +Free-function: gst_structure_free + + + a new, empty #GstStructure + + + + + name of new structure + + + + + + Creates a new #GstStructure with the given @name. Structure fields +are set according to the varargs in a manner similar to +gst_structure_new_id_str(). + +Free-function: gst_structure_free + + + a new #GstStructure + + + + + name of new structure + + + + name of first field to set + + + + variable argument list + + + + + + Creates a new #GstStructure with the given name. Parses the +list of variable arguments and sets fields to the values listed. +Variable arguments should be passed as field name, field type, +and value. Last variable argument should be %NULL. + +@name, @firstfield and all field names need to be valid for the remaining +lifetime of the process, e.g. have to be a static string. + +Free-function: gst_structure_free + + + a new #GstStructure + + + + + name of new structure + + + + name of first field to set + + + + additional arguments + + + + + + Creates a new, empty #GstStructure with the given @name. + +See gst_structure_set_name() for constraints on the @name parameter. + +@name needs to be valid for the remaining lifetime of the process, e.g. has +to be a static string. + +Free-function: gst_structure_free + + + a new, empty #GstStructure + + + + + name of new structure + + + + + + Creates a new #GstStructure with the given @name. Structure fields +are set according to the varargs in a manner similar to +gst_structure_new(). + +See gst_structure_set_name() for constraints on the @name parameter. + +@name, @firstfield and all field names need to be valid for the remaining +lifetime of the process, e.g. have to be a static string. + +Free-function: gst_structure_free + + + a new #GstStructure + + + + + name of new structure + + + + name of first field to set + + + + variable argument list + + + + Creates a new #GstStructure with the given @name. Structure fields are set according to the varargs in a manner similar to @@ -41602,12 +43097,13 @@ Free-function: gst_structure_free - + Calls the provided function once for each field in the #GstStructure. In contrast to gst_structure_foreach(), the function may modify the fields. In contrast to gst_structure_map_in_place(), the field is removed from the structure if %FALSE is returned from the function. The structure must be mutable. + Use gst_structure_filter_and_map_in_place_id_str(). @@ -41627,6 +43123,31 @@ The structure must be mutable. + + Calls the provided function once for each field in the #GstStructure. In +contrast to gst_structure_foreach_id_str(), the function may modify the fields. +In contrast to gst_structure_map_in_place_id_str(), the field is removed from +the structure if %FALSE is returned from the function. +The structure must be mutable. + + + + + + + a #GstStructure + + + + a function to call for each field + + + + private data + + + + Fixate all values in @structure using gst_value_fixate(). @structure will be modified in-place and should be writable. @@ -41779,10 +43300,11 @@ integer to @target that is a subset of the existing field. - + Calls the provided function once for each field in the #GstStructure. The function must not modify the fields. Also see gst_structure_map_in_place() and gst_structure_filter_and_map_in_place(). + Use gst_structure_foreach_id_str(). %TRUE if the supplied function returns %TRUE For each of the fields, @@ -41804,6 +43326,31 @@ and gst_structure_filter_and_map_in_place(). + + Calls the provided function once for each field in the #GstStructure. The +function must not modify the fields. Also see gst_structure_map_in_place_id_str() +and gst_structure_filter_and_map_in_place_id_str(). + + + %TRUE if the supplied function returns %TRUE For each of the fields, +%FALSE otherwise. + + + + + a #GstStructure + + + + a function to call for each field + + + + private data + + + + Frees a #GstStructure and all its fields and values. The structure must not have a parent when this function is called. @@ -42249,8 +43796,9 @@ function returns %FALSE. - + Get the name of @structure as a GQuark. + Use gst_structure_get_name_id_str(). the quark representing the name of the structure. @@ -42263,6 +43811,20 @@ function returns %FALSE. + + Get the name of @structure as a GstIdStr. + + + the name of the structure. + + + + + a #GstStructure + + + + Finds the field corresponding to @fieldname, and returns the string contained in the field's value. Caller is responsible for making @@ -42440,7 +44002,7 @@ name. - + Parses the variable arguments and reads fields from @structure accordingly. Variable arguments should be in the form field id quark, field type (as a GType), pointer(s) to a variable(s) to hold the return value(s). @@ -42456,6 +44018,7 @@ For refcounted (mini)objects you will receive a new reference which you must release with a suitable _unref\() when no longer needed. For strings and boxed types you will receive a copy which you will need to release with either g_free() or the suitable function for the boxed type. + Use gst_structure_id_str_get(). %FALSE if there was a problem reading any of the fields (e.g. @@ -42478,10 +44041,11 @@ release with either g_free() or the suitable function for the boxed type. - + Parses the variable arguments and reads fields from @structure accordingly. valist-variant of gst_structure_id_get(). Look at the documentation of gst_structure_id_get() for more details. + Use gst_structure_id_str_get_valist(). %TRUE, or %FALSE if there was a problem reading any of the fields @@ -42521,8 +44085,9 @@ name identifier. - + Check if @structure contains a field named @field. + Use gst_structure_id_str_has_field(). %TRUE if the structure contains a field with the given name @@ -42539,8 +44104,9 @@ name identifier. - + Check if @structure contains a field named @field and with GType @type. + Use gst_structure_id_str_has_field_typed(). %TRUE if the structure contains a field with the given name and type @@ -42561,12 +44127,13 @@ name identifier. - + Identical to gst_structure_set, except that field names are passed using the GQuark for the field name. This allows more efficient setting of the structure if the caller already knows the associated quark values. The last variable argument must be %NULL. + Use gst_structure_id_str_set(). @@ -42586,8 +44153,9 @@ The last variable argument must be %NULL. - + va_list form of gst_structure_id_set(). + Use gst_structure_id_str_set_valist(). @@ -42607,10 +44175,11 @@ The last variable argument must be %NULL. - + Sets the field with the given GQuark @field to @value. If the field does not exist, it is created. If the field exists, the previous value is replaced and freed. + Use gst_structure_id_str_set_value(). @@ -42630,10 +44199,318 @@ value is replaced and freed. - + + Parses the variable arguments and reads fields from @structure accordingly. +Variable arguments should be in the form field name (as GstIdStr), field type +(as a GType), pointer(s) to a variable(s) to hold the return value(s). The +last variable argument should be %NULL. + +For refcounted (mini)objects you will receive a new reference which +you must release with a suitable _unref\() when no longer needed. For +strings and boxed types you will receive a copy which you will need to +release with either g_free() or the suitable function for the boxed type. + + + %FALSE if there was a problem reading any of the fields (e.g. + because the field requested did not exist, or was of a type other + than the type specified), otherwise %TRUE. + + + + + a #GstStructure + + + + the name of the first field to read + + + + variable arguments + + + + + + Finds the field with the given name, and returns the type of the +value it contains. If the field is not found, G_TYPE_INVALID is +returned. + + + the #GValue of the field + + + + + a #GstStructure + + + + the name of the field + + + + + + Parses the variable arguments and reads fields from @structure accordingly. +valist-variant of gst_structure_id_str_get(). Look at the documentation of +gst_structure_id_str_get() for more details. + + + %TRUE, or %FALSE if there was a problem reading any of the fields + + + + + a #GstStructure + + + + the name of the first field to read + + + + variable arguments + + + + + + Get the value of the field with name @fieldname. + + + the #GValue corresponding to the field with the given +name. + + + + + a #GstStructure + + + + the name of the field to get + + + + + + Check if @structure contains a field named @fieldname. + + + %TRUE if the structure contains a field with the given name + + + + + a #GstStructure + + + + the name of a field + + + + + + Check if @structure contains a field named @fieldname and with GType @type. + + + %TRUE if the structure contains a field with the given name and type + + + + + a #GstStructure + + + + the name of a field + + + + the type of a value + + + + + + Get the name (as a GstIdStr) of the given field number, +counting from 0 onwards. + + + the name of the given field number + + + + + a #GstStructure + + + + the index to get the name of + + + + + + Removes the field with the given name. If the field with the given +name does not exist, the structure is unchanged. + + + + + + + a #GstStructure + + + + the name of the field to remove + + + + + + Removes the fields with the given names. If a field does not exist, the +argument is ignored. + + + + + + + a #GstStructure + + + + the name of the field to remove + + + + %NULL-terminated list of more fieldnames to remove + + + + + + va_list form of gst_structure_id_str_remove_fields(). + + + + + + + a #GstStructure + + + + the name of the field to remove + + + + %NULL-terminated list of more fieldnames to remove + + + + + + Identical to gst_structure_set, except that field names are +passed using a GstIdStr for the field name. This allows more efficient +setting of the structure if the caller already owns the associated +GstIdStr values or if they can be built from static literals. +The last variable argument must be %NULL. + + + + + + + a #GstStructure + + + + the the name of the field to set + + + + variable arguments + + + + + + va_list form of gst_structure_id_str_set(). + + + + + + + a #GstStructure + + + + the name of the field to set + + + + variable arguments + + + + + + Sets the field with the given name @field to @value. If the field +does not exist, it is created. If the field exists, the previous +value is replaced and freed. + + + + + + + a #GstStructure + + + + the name of the field to set + + + + the new value of the field + + + + + + Sets the field with the given GstIdStr @field to @value. If the field +does not exist, it is created. If the field exists, the previous +value is replaced and freed. + + + + + + + a #GstStructure + + + + the name of the field to set + + + + the new value of the field + + + + + Sets the field with the given GQuark @field to @value. If the field does not exist, it is created. If the field exists, the previous value is replaced and freed. + Use gst_structure_id_str_take_value(). @@ -42709,10 +44586,11 @@ structure name and for all fields that are existing in @superset, - + Calls the provided function once for each field in the #GstStructure. In contrast to gst_structure_foreach(), the function may modify but not delete the fields. The structure must be mutable. + Use gst_structure_map_in_place_id_str(). %TRUE if the supplied function returns %TRUE For each of the fields, @@ -42734,6 +44612,31 @@ fields. The structure must be mutable. + + Calls the provided function once for each field in the #GstStructure. In +contrast to gst_structure_foreach_id_str(), the function may modify but not delete the +fields. The structure must be mutable. + + + %TRUE if the supplied function returns %TRUE For each of the fields, +%FALSE otherwise. + + + + + a #GstStructure + + + + a function to call for each field + + + + private data + + + + Get the number of fields in the structure. @@ -42982,6 +44885,47 @@ letter and can be followed by letters, numbers and any of "/-_.:". + + Sets the name of the structure to the given @name. The string +provided is copied before being used. It must not be empty, start with a +letter and can be followed by letters, numbers and any of "/-_.:". + + + + + + + a #GstStructure + + + + the new name of the structure + + + + + + Sets the name of the structure to the given @name. The string +provided is copied before being used. It must not be empty, start with a +letter and can be followed by letters, numbers and any of "/-_.:". + +@name needs to be valid for the remaining lifetime of the process, e.g. has +to be a static string. + + + + + + + a #GstStructure + + + + the new name of the structure + + + + Sets the parent_refcount field of #GstStructure. This field is used to determine whether a structure is mutable or not. This function should only be @@ -43003,6 +44947,57 @@ the MT Refcounting section of the design documents. + + Parses the variable arguments and sets fields accordingly. Fields that +weren't already part of the structure are added as needed. +Variable arguments should be in the form field name, field type +(as a GType), value(s). The last variable argument should be %NULL. + +@fieldname and all other field names needs to be valid for the remaining +lifetime of the process, e.g. has to be a static string. + + + + + + + a #GstStructure + + + + the name of the field to set + + + + variable arguments + + + + + + va_list form of gst_structure_set_static_str(). + +@fieldname and all other field names needs to be valid for the remaining +lifetime of the process, e.g. has to be a static string. + + + + + + + a #GstStructure + + + + the name of the field to set + + + + variable arguments + + + + va_list form of gst_structure_set(). @@ -43047,6 +45042,32 @@ value is replaced and freed. + + Sets the field with the given name @field to @value. If the field +does not exist, it is created. If the field exists, the previous +value is replaced and freed. + +@fieldname needs to be valid for the remaining lifetime of the process, e.g. +has to be a static string. + + + + + + + a #GstStructure + + + + the name of the field to set + + + + the new value of the field + + + + Sets the field with the given name @field to @value. If the field does not exist, it is created. If the field exists, the previous @@ -43070,6 +45091,32 @@ value is replaced and freed. The function will take ownership of @value. + + Sets the field with the given name @field to @value. If the field +does not exist, it is created. If the field exists, the previous +value is replaced and freed. The function will take ownership of @value. + +@fieldname needs to be valid for the remaining lifetime of the process, e.g. +has to be a static string. + + + + + + + a #GstStructure + + + + the name of the field to set + + + + the new value of the field + + + + Converts @structure to a human-readable string representation. @@ -43125,10 +45172,10 @@ It is a programming error if both @newstr and the value pointed to by The type of a %GST_MESSAGE_STRUCTURE_CHANGE. - + Pad linking is starting or done. - + Pad unlinking is starting or done. @@ -43157,6 +45204,31 @@ should be removed. + + A function that will be called in gst_structure_filter_and_map_in_place_id_str(). +The function may modify @value, and the value will be removed from the +structure if %FALSE is returned. + + + %TRUE if the field should be preserved, %FALSE if it +should be removed. + + + + + the #GstIdStr field name + + + + the #GValue of the field + + + + user data + + + + A function that will be called in gst_structure_foreach(). The function may not modify @value. @@ -43181,6 +45253,30 @@ the foreach operation should stop with %FALSE. + + A function that will be called in gst_structure_foreach_id_str(). The +function may not modify @value. + + + %TRUE if the foreach operation should continue, %FALSE if +the foreach operation should stop with %FALSE. + + + + + the #GstIdStr field name + + + + the #GValue of the field + + + + user data + + + + A function that will be called in gst_structure_map_in_place(). The function may modify @value. @@ -43205,6 +45301,30 @@ the map operation should stop with %FALSE. + + A function that will be called in gst_structure_map_in_place_id_str(). The +function may modify @value. + + + %TRUE if the map operation should continue, %FALSE if +the map operation should stop with %FALSE. + + + + + the #GstIdStr field name + + + + the #GValue of the field + + + + user data + + + + The GStreamer core provides a GstSystemClock based on the system time. Asynchronous callbacks are scheduled from an internal thread. @@ -43248,7 +45368,7 @@ MT safe. - + @@ -43274,7 +45394,7 @@ MT safe. - + @@ -44105,6 +46225,18 @@ returned by gst_toc_entry_set_loop() to indicate infinite looping. + + Output a tracing message in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + printf-style message to output + + + @@ -44189,6 +46321,36 @@ returned by gst_toc_entry_set_loop() to indicate infinite looping. + + Output a tracing message for the given identifier in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + An identifier of the message provider + + + printf-style message to output + + + + + Output a tracing message belonging to the given object in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + the #GObject the message belongs to + + + printf-style message to output + + + @@ -44295,19 +46457,19 @@ Used to generate `gst_type_find_register_*(GstPlugin* plugin)`. Extra tag flags used when registering tags. - + undefined flag - + tag is meta data - + tag is encoded - + tag is decoded - + number of tag flags @@ -45644,38 +47806,38 @@ In the table below this is shown for the cases that a tag exists in the list | PREPEND | B, A | A | B | ø | | KEEP | A | A | B | ø | | KEEP_ALL | A | A | ø | ø | - + undefined merge mode - + replace all tags (clear list and append) - + replace tags - + append tags - + prepend tags - + keep existing tags - + keep all existing tags - + the number of merge modes GstTagScope specifies if a taglist applies to the complete medium or only to one single stream. - + tags specific to this single stream - + global tags for the complete medium @@ -46597,6 +48759,7 @@ instead. + prepare the threadpool @@ -46611,6 +48774,7 @@ instead. + make sure all threads are stopped @@ -46625,6 +48789,7 @@ instead. + start a new thread @@ -46652,6 +48817,7 @@ instead. + join a thread @@ -46706,18 +48872,18 @@ instead. - + The different states a task can be in - + the task is started and running - + the task is stopped - + the task is paused @@ -46754,7 +48920,7 @@ instead. - + #GstToc functions are used to create/free #GstToc and #GstTocEntry structures. Also they are used to convert #GstToc into #GstStructure and vice versa. @@ -46945,7 +49111,7 @@ a track listing from different sources). - + Create new #GstTocEntry structure. @@ -47232,25 +49398,25 @@ values, %FALSE otherwise. The different types of TOC entries (see #GstTocEntry). There are two types of TOC entries: alternatives or parts in a sequence. - + entry is an angle (i.e. an alternative) - + entry is a version (i.e. alternative) - + entry is an edition (i.e. alternative) - + invalid entry type value - + entry is a title (i.e. a part of a sequence) - + entry is a track (i.e. a part of a sequence) - + entry is a chapter (i.e. a part of a sequence) @@ -47273,26 +49439,26 @@ There are two types of TOC entries: alternatives or parts in a sequence. How a #GstTocEntry should be repeated. By default, entries are played a single time. - + single forward playback - + repeat forward - + repeat backward - + repeat forward and backward The scope of a TOC. - + global TOC representing all selectable options (this is what applications are usually interested in) - + TOC for the currently active/selected stream (this is a TOC representing the current stream from start to EOS, and is what a TOC writer / muxer is usually interested in; it will @@ -47404,7 +49570,7 @@ contextual data, which they must not modify. - + @@ -47429,6 +49595,42 @@ contextual data, which they must not modify. + + Sets whether the tracer should use structure parameters for configuration. +This function configures how parameters should be passed when instantiating +the tracer. + +This is typically called in the tracer's class initialization function to +indicate its parameter handling preference. + + + + + + + + + + %TRUE to use structure parameters, %FALSE otherwise + + + + + + If set, the tracer subsystem will consider parameters passed to the +`GST_TRACERS` environment variable as a #GstStructure and use its +fields as properties to instanciate the tracer. + + + %TRUE if the tracer uses structure parameters, %FALSE otherwise + + + + + + + + Use gst_tracer_factory_get_list() to get a list of tracer factories known to @@ -47468,10 +49670,10 @@ the factory is not loaded. - + - + @@ -47541,21 +49743,21 @@ the category "GST_TRACER". - + Flag that describe the value. These flags help applications processing the logs to understand the values. - + no flags - + the value is optional. When using this flag one need to have an additional boolean arg before this value in the var-args list passed to gst_tracer_record_log(). - + the value is a combined figure, since the start of tracing. Examples are averages or timestamps. @@ -47566,16 +49768,16 @@ meta-data. One such meta data are values that tell where a measurement was taken. This enumerating declares to which scope such a meta data field relates to. If it is e.g. %GST_TRACER_VALUE_SCOPE_PAD, then each of the log events may contain values for different #GstPads. - + the value is related to the process - + the value is related to a thread - + the value is related to an #GstElement - + the value is related to a #GstPad @@ -47584,6 +49786,7 @@ events may contain values for different #GstPads. stream. + Method to peek data. @@ -47603,6 +49806,7 @@ stream. + Method to suggest #GstCaps with a given probability. @@ -47626,6 +49830,7 @@ stream. + Returns the length of current data. @@ -47963,7 +50168,7 @@ e.g. assume a certain media type based on the file extension. - + @@ -47986,22 +50191,22 @@ e.g. assume a certain media type based on the file extension. The probability of the typefind function. Higher values have more certainty in doing a reliable typefind. - + type undetected. - + unlikely typefind. - + possible type detected. - + likely a type was detected. - + nearly certain that a type was detected. - + very certain a type was detected. @@ -48014,17 +50219,17 @@ in doing a reliable typefind. Different URI-related errors that can occur. - + The protocol is not supported - + There was a problem with the URI - + Could not set or change the URI because the URI handler was in a state where that is not possible or not permitted - + There was a problem with the entity that the URI references @@ -48159,6 +50364,7 @@ Returns #GST_URI_UNKNOWN if the @handler isn't implemented correctly. + Method to tell whether the element handles source or sink URI. @@ -48172,6 +50378,7 @@ Returns #GST_URI_UNKNOWN if the @handler isn't implemented correctly. + Method to return the list of protocols handled by the element. @@ -48187,6 +50394,7 @@ Returns #GST_URI_UNKNOWN if the @handler isn't implemented correctly. + Method to return the URI currently handled by the element. @@ -48205,6 +50413,7 @@ Returns #GST_URI_UNKNOWN if the @handler isn't implemented correctly. + Method to set a new URI. @@ -48226,13 +50435,13 @@ Returns #GST_URI_UNKNOWN if the @handler isn't implemented correctly. The different types of URI direction. - + The URI direction is unknown - + The URI is a consumer. - + The URI is a producer. @@ -48283,7 +50492,7 @@ Returns #GST_URI_UNKNOWN if the @handler isn't implemented correctly. - + A #GstUri object can be used to parse and split a URI string into its constituent parts. Two #GstUri objects can be joined to make a new #GstUri using the algorithm described in RFC3986. @@ -49496,7 +51705,7 @@ determine a order for the two provided values. - + The micro version of GStreamer at compile time: @@ -49875,7 +52084,7 @@ Free-function: g_free - + #GstVecDeque is an object that provides standard double-ended queue (deque) functionality based on an array instead of linked lists. This reduces the overhead caused by memory management by a large factor. @@ -50235,16 +52444,21 @@ to call gst_vec_deque_sort() first. - + + Pushes the element at address @p_struct to the tail of the queue @array +(Copies the contents of a structure of the struct_size specified when +creating the queue into the array). + a #GstVecDeque object + address of element or structure to push to the tail of the queue @@ -50332,6 +52546,48 @@ of size @struct_size, with an initial queue size of @initial_size. + + Output a warning message in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + printf-style message to output + + + + + Output a warning message for the given identifier in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + An identifier of the message provider + + + printf-style message to output + + + + + Output a warning message belonging to the given object in the default category. + +There is no need to finish the end of the message string with a newline +character, a newline character will be added automatically. + + + + the #GObject the message belongs to + + + printf-style message to output + + + Store a 16 bit unsigned integer value in big endian format into the memory buffer. @@ -52994,6 +55250,37 @@ of @new_message. + + When a element like `tee` decides the allocation, each downstream element may +fill different parameters and pass them to gst_query_add_allocation_meta(). +In order to keep these parameters, a merge operation is needed. This +aggregate function can combine the parameters from @params0 and @param1, and +write the result back into @aggregated_params. + + + %TRUE if the parameters were successfully aggregated, %FALSE otherwise. + + + + + the GType of the API for which the parameters are being aggregated. + + + + This structure will be updated with the + combined parameters from both @params0 and @params1. + + + + a #GstStructure containing the new parameters to be aggregated. + + + + a #GstStructure containing the new parameters to be aggregated. + + + + @@ -55098,7 +57385,8 @@ element or %NULL if nothing was found - function to compare two elements, @search_data will always be passed as second argument + function to compare two + elements, @search_data will always be passed as second argument @@ -55116,7 +57404,7 @@ element or %NULL if nothing was found - Return a max num of log2. + Returns smallest integral value not less than log2(v). a computed #guint val. @@ -55200,6 +57488,19 @@ the result. + + Returns smallest integral value not bigger than log2(v). + + + a computed #guint val. + + + + + + + + Adds the fractions @a_n/@a_d and @b_n/@b_d and stores the result in @res_n and @res_d. @@ -55297,6 +57598,41 @@ the result in @res_n and @res_d. + + Multiplies the fractions @a_n/@a_d and @b_n/@b_d and stores +the result in @res_n and @res_d. + + + %FALSE on overflow, %TRUE otherwise. + + + + + Numerator of first value + + + + Denominator of first value + + + + Numerator of second value + + + + Denominator of second value + + + + Pointer to #gint to hold the result numerator + + + + Pointer to #gint to hold the result denominator + + + + Transforms a fraction to a #gdouble. diff --git a/girs/GstAllocators-1.0.gir b/girs/GstAllocators-1.0.gir index 6828ff3b936..60e8ece52ae 100644 --- a/girs/GstAllocators-1.0.gir +++ b/girs/GstAllocators-1.0.gir @@ -161,10 +161,10 @@ number and the height is scaled according to the sub-sampling. - + - + @@ -405,6 +405,8 @@ The memory is only mmapped on gst_buffer_map() request. + Implementations shall return the physicall memory address + that is backing the provided memory, or 0 if none. @@ -426,6 +428,8 @@ The memory is only mmapped on gst_buffer_map() request. + Implementations shall return the physicall memory address + that is backing the provided memory, or 0 if none. diff --git a/girs/GstAnalytics-1.0.gir b/girs/GstAnalytics-1.0.gir index 571d6441d5a..ca4a4645937 100644 --- a/girs/GstAnalytics-1.0.gir +++ b/girs/GstAnalytics-1.0.gir @@ -4,6 +4,7 @@ and/or use gtk-doc annotations. --> + @@ -16,11 +17,11 @@ and/or use gtk-doc annotations. --> is generally expected to be allocated on the stack. - Instance identifier. + Instance identifier - Instance of #GstAnalyticsRelationMeta where the analysis-metadata + Instance of #GstAnalyticsRelationMeta where the analytics-metadata identified by @id is stored. @@ -34,7 +35,7 @@ identified by @id is stored. Instance handle - + Quark of the class @@ -53,7 +54,7 @@ Get index of class represented by @quark Instance handle Get number of classes - + @@ -67,7 +68,7 @@ Get number of classes instance handle - + Object class index @@ -84,7 +85,7 @@ Get number of classes Instance handle - + index of the class @@ -125,11 +126,11 @@ infinite. is generally expected to be allocated on the stack. - Instance identifier. + Instance identifier - Instance of #GstAnalyticsRelationMeta where the analysis-metadata + Instance of #GstAnalyticsRelationMeta where the analytics-metadata identified by @id is stored. @@ -143,7 +144,7 @@ identified by @id is stored. Instance of #GstAnalyticsMtd - + @@ -157,7 +158,7 @@ identified by @id is stored. Instance of #GstAnalyticsMtd Get analysis result type. - + @@ -171,7 +172,7 @@ Get analysis result type. Instance of #GstAnalyticsMtd - + @@ -199,6 +200,9 @@ have a static lifetime (never be freed). + A pointer to a function that will be called +when the containing meta is transform to potentially copy the data +into a new Mtd into the new meta. @@ -223,8 +227,27 @@ have a static lifetime (never be freed). + + A pointer to a function that will be called when the +containing meta is cleared to potetially do cleanup (ex. _unref or release) +resources it was using. + + + + + + + + + + + + + + + - + @@ -234,11 +257,11 @@ have a static lifetime (never be freed). is generally expected to be allocated on the stack. - Instance identifier. + Instance identifier - Instance of #GstAnalyticsRelationMeta where the analysis-metadata + Instance of #GstAnalyticsRelationMeta where the analytics-metadata identified by @id is stored. @@ -252,7 +275,7 @@ identified by @id is stored. instance - + Confidence on object location @@ -270,7 +293,7 @@ identified by @id is stored. instance - + x component of upper-left corner of the object location @@ -304,10 +327,50 @@ identified by @id is stored. Instance handle - + + + Retrieve oriented location and location confidence level. + + + TRUE on success, otherwise FALSE. + + + + + instance + + + + x component of upper-left corner of the object location (pre-rotation) + + + + y component of upper-left corner of the object location (pre-rotation) + + + + bounding box width of the object location + + + + bounding box height of the object location + + + + Rotation of the bounding box in radians <0, 2xPI> + with respect to the bounding box center + (the rotation value is a clock-wise angle) + + + + Confidence on object location + + + + Get an id that represent object-detection metadata type @@ -329,15 +392,17 @@ identified by @id is stored. First analysis-meta contain second analysis-meta. + First analysis-meta relate to second analysis-meta. - - reserved + + Used to express relations between two groups where each group's components +correspond to the respective component in the other group. Only use for criteria. - + An opaque #GstMeta that can be used to hold various types of results from analysis processes. @@ -476,6 +541,113 @@ new struct sub-classing GstAnalyticsRelatableMtd. + + + + Added successfully + + + + + Instance of #GstAnalyticsRelationMeta where to add classification instance + + + + Quark of the object type + + + + x component of bounding box upper-left corner (pre-rotation) + + + + y component of bounding box upper-left corner (pre-rotation) + + + + bounding box width + + + + bounding box height + + + + bounding box rotation in radians <0, 2xPI> + with respect to the bounding box center + (the rotation value is a clock-wise angle) + + + + confidence level on the object location + + + + Handle updated with newly added object detection + meta. Add an object-detetion metadata to @instance. + + + + + + Add analytics segmentation metadata to @instance. The rectangle (@masks_loc_x, +@mask_loc_y, @mask_loc_w, @mask_loc_h) define a area of the image that +correspond to the segmentation masks stored in @buffer. For example if the +segmentation masks stored in @buffer describe the segmented regions for the +entire image the rectangular area will be (@masks_loc_x = 0, @masks_loc_y = 0, +@masks_loc_w = image_width, @masks_loc_h = image_height). + + + TRUE if added successfully, otherwise FALSE + + + + + Instance of #GstAnalyticsRelationMeta where to add segmentation +instance. + + + + Buffer containing segmentation masks. @buffer +must have a #GstVideoMeta attached + + + + Segmentation type + + + + Number of regions in the masks + + + + Arrays of region ids present in the mask. + + + + + + Left coordinate of the rectangle corresponding to the masks in the image. + + + + Top coordinate of the rectangle corresponding to the masks in the image. + + + + Width of the rectangle corresponding to the masks in the image. + + + + Height of the rectangle corresponding to the masks in the image. + + + + Handle update with newly added segmentation meta. + + + + @@ -517,7 +689,7 @@ between @an_meta_first_id and @an_meta_second_id. a #GstAnalyticsRelationMeta describing analysis-meta relation - + First analysis-meta @@ -649,7 +821,7 @@ otherwise this method return FALSE and @rlt is invalid. Instance of GstAnalyticsRelationMeta - + Id of GstAnalyticsMtd instance to retrieve @@ -693,7 +865,7 @@ Ids (@an_meta_first_id and @an_meta_second_id) must be from a call to a #GstAnalyticsRelationMeta - + Id of first analysis-meta @@ -705,6 +877,30 @@ Ids (@an_meta_first_id and @an_meta_second_id) must be from a call to + + Fill @rlt if a analytics-meta with id == @an_meta_id exist in @meta instance, +otherwise this method return FALSE and @rlt is invalid. + + + TRUE if successful. + + + + + Instance of #GstAnalyticsRelationMeta + + + + Id of #GstAnalyticsSegmentationMtd instance to retrieve + + + + Will be filled with relatable + meta + + + + Fill @rlt if a analytics-meta with id == @an_meta_id exist in @meta instance, otherwise this method return FALSE and @rlt is invalid. @@ -806,15 +1002,543 @@ Ids must have been obtained a call to + + This type of metadata holds information on which pixels belongs to + a region of the image representing a type of object. + + It supports two types of segmentation, semantic or instance: + * Semantic: All objects of the same type have the same id + * Instance: Each instance of an object has a different id + + The results of the segmentation are stored in a #GstBuffer that has a + #GstVideoMeta associated with it. This buffer is stored in the + GstAnalyticsSegmentationMtd using + #gst_analytics_relation_meta_add_segmentation_mtd(). The #GstBuffer + containing the segmentation mask is image-like but the color values are + arbitrary values, referred by region-id in this API, without meaning beyond + specifying that two pixels in the original image with the same values in + their corresponding mask value belong to the same region. + + To further describe a region, the #GstAnalyticsSegmentationMtd can be + associated with other #GstAnalyticsMtd. Since region ids are + generated by the segmentation process itself and are not always sequential, + we use a map of indexes to region ids starting with 0 without discontinuity + which facilitate N-to-N mapping with other #GstAnalyticsMtd. For + example it can be associated with #GstAnalyticsClsMtd to describe the class + of object matching the pixels of a segmented region. + + Example: Associate Instance Segmentation with Classification + + In the following example the segmentation process will fill segmask with + values of 0 for background, 12 for the first region which correspond to a + to a strawberry, 7 for the second region that also correspond to a + strawberry in the image and 31 for the third region that correspond to a + leaf in the image. + region_ids is fill during segmentation post-processing + + region_ids: + |region-index | region-id | + |-------------|-----------| + | 0 | 0 | + | 1 | 12 | + | 2 | 7 | + | 3 | 31 | + + region_count = 4 + + ``` C + GstAnalyticsSegmentationMtd segmtd; + GstAnalyticsClassificationMtd clsmtd; + GstBuffer *segmask, *img; + guint *region_ids; + gsize region_count, class_count; + gfloat *class_confidence; + GQuark *classes; + + ... (segmentation filling segmask based on img) + + gst_analytics_relation_meta_add_segmentation_mtd (rmeta, segmask, + GST_SEGMENTATION_TYPE_INSTANCE, region_count, region_ids, &segmtd); + class_count = region_count; + + ... (class-index must match and correspond to region-index) + classes [0] = g_quark_from_string ("background"); + classes [1] = g_quark_from_string ("strawberry"); + classes [2] = g_quark_from_string ("strawberry"); + classes [3] = g_quark_from_string ("leaf"); + + ... (set confidence level for each class associated with a region + ... where -1.0 mean undefined.) + class_confidence [0] = -1.0; + class_confidence [1] = 0.6; + class_confidence [2] = 0.9; + class_confidence [3] = 0.8; + + gst_analytics_relation_meta_add_cls_mtd (rmeta, class_count, + class_confidence, classes, &clsmtd); + + gst_analytics_relation_meta_set_relation (rmeta, + GST_ANALYTICS_REL_TYPE_RELATE_TO, segmtd.id, clsmtd.id); + ``` + + Example: Associate Semantic Segmentation with Classification + Assuming the same context as for Instance Segmentation above but instead + a semantic segmentation is performed, therefore region-id-12 and region-id-7 + are now represented by the same region-id-12 + + region_ids: (here + |region-index | region-id | + |-------------|-----------| + | 0 | 0 | + | 1 | 12 | + | 2 | 31 | + + Code remain the same except that we set all confidence level to undefined + (-1.0). + + ``` + ... (class-index must match and correspond to region-index) + classes [0] = g_quark_from_string ("background"); + classes [1] = g_quark_from_string ("strawberry"); + classes [2] = g_quark_from_string ("leaf"); + + ... (set confidence level for each class associated with a region + ... where -1.0 mean undefined.) + class_confidence [0] = -1.0; + class_confidence [1] = -1.0; + class_confidence [2] = -1.0; + + gst_analytics_relation_meta_add_cls_mtd (rmeta, class_count, + class_confidence, classes, &clsmtd); + + gst_analytics_relation_meta_set_relation (rmeta, + GST_ANALYTICS_REL_TYPE_RELATE_TO, segmtd.id, clsmtd.id); + ``` + + Example: Retrieving class associated with a segmentation region-id-12 + This the typical case for an overlay as we visit the segmentation mask we + we find region-id values + + ``` + gsize idx; + gst_analytics_segmentation_mtd_get_region_index (&segmtd, &idx, 12); + gst_analytics_relation_meta_get_direct_related (rmeta, segmtd.id, + GST_ANALYTICS_REL_TYPE_RELATE_TO, gst_analytics_cls_mtd_get_type (), + NULL, &clsmtd); + + GQuark region_class = gst_analytics_cls_mtd_get_quark (&segmtd, idx) + ... + ``` + + Since: 1.26 + + + Instance identifier + + + + Instance of #GstAnalyticsRelationMeta where the analytics-metadata +identified by @id is stored. + + + + Get segmentation mask data. + + + Segmentation mask data stored in a #GstBuffer + + + + + Instance + + + + Left coordinate of the +rectangle corresponding to the mask in the image. + + + + Top coordinate of the +rectangle corresponding to the mask in the image. + + + + Width of the rectangle +corresponding to the mask in the image. + + + + Height of the rectangle +corresponding to the mask in the image. + + + + + + Get the regions count. + + + Number of regions segmented + + + + + Instance + + + + + + Get id of the region corresponding to @index, which should be +smaller than the return value of +gst_analytics_segmentation_mtd_get_region_count() + + + The region ID + + + + + Instance + + + + Region index + + + + + + Get region index of the region identified by @id. + + + TRUE if a region with @id exist, otherwise FALSE + + + + + Instance + + + + Region index + + + + Region id + + + + + + Get an instance of #GstAnalyticsMtdType that represent segmentation +metadata type. + + + A #GstAnalyticsMtdType type + + + + + + Enum value describing supported segmentation type + + + Segmentation where the belonging of each +pixel to a class of objects is identified. + + + Segmentation where the belonging of each +pixel to instance of an object is identified. + + + + Hold tensor data + + + semantically identify the contents of the tensor + + + + Indicate tensor layout + + + + #GstTensorDataType of tensor data + + + + #GstBuffer holding tensor data + + + + Indicate tensor elements layout in memory. + + + + number of tensor dimensions + + + + number of tensor dimensions + + + + + + Allocate a tensor with @num_dims dimensions. + + + tensor allocated + + + + + Number of dimension of the tensors + + + + + + Allocates a new #GstTensor of @dims_order ROW_MAJOR or COLUMN_MAJOR and +with an interleaved layout + + + A newly allocated #GstTensor + + + + + semantically identify the contents of the tensor + + + + #GstTensorDataType of tensor data + + + + #GstBuffer holding tensor data + + + + Indicate tensor dimension indexing order + + + + number of tensor dimensions + + + + tensor dimensions. Value of 0 mean the +dimension is dynamic. + + + + + + + + Create a copy of @tensor. + + + a new #GstTensor + + + + + a #GstTensor to be copied + + + + + + Free tensor + + + + + + + pointer to tensor to free + + + + + + Gets the dimensions of the tensor. + + + The dims array form the tensor + + + + + + + a #GstTensor + + + + The number of dimensions + + + + + + + Describe the type of data contain in the tensor. + + + signed 4 bit integer tensor data + + + signed 8 bit integer tensor data + + + signed 16 bit integer tensor data + + + signed 32 bit integer tensor data + + + signed 64 bit integer tensor data + + + unsigned 4 bit integer tensor data + + + unsigned 8 bit integer tensor data + + + unsigned 16 bit integer tensor data + + + unsigned 32 bit integer tensor data + + + unsigned 64 bit integer tensor data + + + 16 bit floating point tensor data + + + 32 bit floating point tensor data + + + 64 bit floating point tensor data + + + "brain" 16 bit floating point tensor data + + + + Indicate to read tensor from memory in row-major or column-major order. + + + elements along a row are consecutive in memory + + + elements along a column are consecutive in memory + + + + Indicate tensor storage in memory. + + + indicate the tensor is stored in a dense format in memory + + + + + + parent + + + + number of tensors + + + + + + + Retrieves a tensor from the #GstTensorMeta, the index must be +smaller than #GstTensorMeta.num_tensors + + + a GstTensor + + + + + A #GstTensorMeta + + + + The number of the tensor to get + + + + + + Finds the first tensor with the requsted ID in the meta + + + The index of the tensor inthe meta, or -1 if + its not found. + + + + + a #GstTensorMeta + + + + The tensor id to look for + + + + + + Sets tensors into the #GstTensorMeta + + + + + + + a #GstTensorMeta + + + + The number of tensors in the @tensors array + + + + An array of poiners to #GstTensor + + + + + + + + + + + + + Store information on results of object tracking - Instance identifier. + Instance identifier - Instance of #GstAnalyticsRelationMeta where the analysis-metadata + Instance of #GstAnalyticsRelationMeta where the analytics-metadata identified by @id is stored. @@ -828,7 +1552,7 @@ identified by @id is stored. Instance of tracking metadata - + Updated tracking id @@ -927,6 +1651,20 @@ analysis meta. + + Adds a #GstTensorMeta to a buffer or returns the existing one + + + The new #GstTensorMeta + + + + + A writable #GstBuffer + + + + Retrives the meta or %NULL if it doesn't exist @@ -941,6 +1679,20 @@ analysis meta. + + Gets the #GstTensorMeta from a buffer + + + The #GstTensorMeta if there is wone + + + + + A #GstBuffer + + + + Get an id identifying #GstAnalyticsMtd type. @@ -1005,7 +1757,7 @@ information about the tracking, for example, it can be used alongside a Instance of #GstAnalyticsRelationMeta - + @@ -1023,6 +1775,27 @@ information about the tracking, for example, it can be used alongside a + + Get an instance of #GstAnalyticsMtdType that represent segmentation +metadata type. + + + A #GstAnalyticsMtdType type + + + + + + + + + + + + + + + diff --git a/girs/GstApp-1.0.gir b/girs/GstApp-1.0.gir index 8fbc44a4f5a..336da1aca91 100644 --- a/girs/GstApp-1.0.gir +++ b/girs/GstApp-1.0.gir @@ -52,13 +52,13 @@ and/or use gtk-doc annotations. --> Buffer dropping scheme to avoid the element's internal queue to block when full. - + Not Leaky - + Leaky on upstream (new buffers) - + Leaky on downstream (old buffers) @@ -309,7 +309,7 @@ condition. - + Get the configured caps on @appsink. @@ -323,7 +323,7 @@ condition. - + 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). @@ -339,7 +339,7 @@ filled. - + Check if appsink will emit the "new-preroll" and "new-sample" signals. @@ -354,7 +354,7 @@ signals. - + Get the maximum amount of buffers that can be queued in @appsink. @@ -368,7 +368,7 @@ signals. - + Get the maximum total size, in bytes, that can be queued in @appsink. @@ -382,7 +382,7 @@ signals. - + Get the maximum total duration that can be queued in @appsink. @@ -396,7 +396,7 @@ signals. - + Check if @appsink will wait for all buffers to be consumed when an EOS is received. @@ -573,7 +573,7 @@ way. - + Set the capabilities on the appsink element. This function takes a copy of the caps structure. After calling this method, the sink will only accept caps that match @caps. If @caps is non-fixed, or incomplete, @@ -593,7 +593,7 @@ you must check the caps on the samples to get the actual used caps. - + 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). @@ -611,7 +611,7 @@ data is reached, that is, when any configured limit is hit (max-buffers, max-tim - + Make appsink emit the "new-preroll" and "new-sample" signals. This option is by default disabled because signal emission is expensive and unneeded when the application prefers to operate in pull mode. @@ -630,7 +630,7 @@ the application prefers to operate in pull mode. - + 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 elements until a sample is pulled from @appsink, unless 'drop' is set, in which @@ -650,7 +650,7 @@ case new buffers will be discarded. - + Set the maximum total size that can be queued in @appsink. After this amount of buffers are queued in appsink, any more buffers will block upstream elements until a sample is pulled from @appsink, unless 'drop' is set, in which @@ -670,7 +670,7 @@ case new buffers will be discarded. - + Set the maximum total duration that can be queued in @appsink. After this amount of buffers are queued in appsink, any more buffers will block upstream elements until a sample is pulled from @appsink, unless 'drop' is set, in which @@ -690,7 +690,7 @@ case new buffers will be discarded. - + Instruct @appsink to wait for all buffers to be consumed when an EOS is received. @@ -811,34 +811,34 @@ condition. - + - + - + - + - + - + Maximum amount of buffers in the queue (0 = unlimited). - + Maximum amount of bytes in the queue (0 = unlimited) - + Maximum total duration of data in the queue (0 = unlimited) - + Wait for all buffers to be processed after receiving an EOS. In cases where it is uncertain if an @appsink will have a consumer for its buffers @@ -1075,6 +1075,8 @@ for the EOS condition. gst_app_sink_set_callbacks(). + Called when the end-of-stream has been reached. This callback + is called from the streaming thread. @@ -1091,6 +1093,11 @@ gst_app_sink_set_callbacks(). + Called when a new preroll sample is available. + This callback is called from the streaming thread. + The new preroll sample can be retrieved with + gst_app_sink_pull_preroll() either from this callback + or from any other thread. @@ -1107,6 +1114,11 @@ gst_app_sink_set_callbacks(). + Called when a new sample is available. + This callback is called from the streaming thread. + The new sample can be retrieved with + gst_app_sink_pull_sample() either from this callback + or from any other thread. @@ -1123,6 +1135,14 @@ gst_app_sink_set_callbacks(). + Called when a new event is available. + This callback is called from the streaming thread. + The new event can be retrieved with + gst_app_sink_pull_event() either from this callback + or from any other thread. + The callback should return %TRUE if the event has been handled, + %FALSE otherwise. + Since: 1.20 @@ -1139,6 +1159,12 @@ gst_app_sink_set_callbacks(). + Called when the propose_allocation query is available. + This callback is called from the streaming thread. + The allocation query can be retrieved with + gst_app_sink_propose_allocation() either from this callback + or from any other thread. + Since: 1.24 @@ -1305,7 +1331,7 @@ Call gst_mini_object_unref() after usage. - + @@ -1526,7 +1552,7 @@ element is the last buffer of the stream. - + Get the configured caps on @appsrc. @@ -1540,7 +1566,7 @@ element is the last buffer of the stream. - + Get the number of currently queued buffers inside @appsrc. @@ -1554,7 +1580,7 @@ element is the last buffer of the stream. - + Get the number of currently queued bytes inside @appsrc. @@ -1568,7 +1594,7 @@ element is the last buffer of the stream. - + Get the amount of currently queued time inside @appsrc. @@ -1582,7 +1608,7 @@ element is the last buffer of the stream. - + Get the duration of the stream in nanoseconds. A value of GST_CLOCK_TIME_NONE means that the duration is not known. @@ -1597,7 +1623,7 @@ not known. - + Check if appsrc will emit the "new-preroll" and "new-buffer" signals. @@ -1633,7 +1659,7 @@ signals. - + Returns the currently set #GstAppLeakyType. See gst_app_src_set_leaky_type() for more details. @@ -1648,7 +1674,7 @@ for more details. - + Get the maximum amount of buffers that can be queued in @appsrc. @@ -1662,7 +1688,7 @@ for more details. - + Get the maximum amount of bytes that can be queued in @appsrc. @@ -1676,7 +1702,7 @@ for more details. - + Get the maximum amount of time that can be queued in @appsrc. @@ -1690,7 +1716,7 @@ for more details. - + Get the size of the stream in bytes. A value of -1 means that the size is not known. @@ -1705,7 +1731,7 @@ not known. - + Get the stream type. Control the stream type of @appsrc with gst_app_src_set_stream_type(). @@ -1833,7 +1859,7 @@ way. - + Set the capabilities on the appsrc element. This function takes a copy of the caps structure. After calling this method, the source will only produce caps that match @caps. @caps must be fixed and the caps on the @@ -1853,7 +1879,7 @@ buffers must match the caps or left NULL. - + Set the duration of the stream in nanoseconds. A value of GST_CLOCK_TIME_NONE means that the duration is not known. @@ -1871,7 +1897,7 @@ not known. - + Make appsrc emit the "new-preroll" and "new-buffer" signals. This option is by default disabled because signal emission is expensive and unneeded when the application prefers to operate in pull mode. @@ -1912,7 +1938,7 @@ default latency calculations for pseudo-live sources will be used. - + When set to any other value than GST_APP_LEAKY_TYPE_NONE then the appsrc 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 @@ -1932,7 +1958,7 @@ buffers. - + Set the maximum amount of buffers that can be queued in @appsrc. After the maximum amount of buffers are queued, @appsrc will emit the "enough-data" signal. @@ -1951,7 +1977,7 @@ After the maximum amount of buffers are queued, @appsrc will emit the - + Set the maximum amount of bytes that can be queued in @appsrc. After the maximum amount of bytes are queued, @appsrc will emit the "enough-data" signal. @@ -1970,7 +1996,7 @@ After the maximum amount of bytes are queued, @appsrc will emit the - + Set the maximum amount of time that can be queued in @appsrc. After the maximum amount of time are queued, @appsrc will emit the "enough-data" signal. @@ -1989,7 +2015,7 @@ After the maximum amount of time are queued, @appsrc will emit the - + Set the size of the stream in bytes. A value of -1 means that the size is not known. @@ -2007,7 +2033,7 @@ not known. - + Set the stream type on @appsrc. For seekable streams, the "seek" signal must be connected to. @@ -2027,46 +2053,46 @@ A stream_type stream - + When max-bytes are queued and after the enough-data signal has been emitted, block any further push-buffer calls until the amount of queued bytes drops below the max-bytes limit. - + The GstCaps that will negotiated downstream and will be put on outgoing buffers. - + The number of currently queued buffers inside appsrc. - + The number of currently queued bytes inside appsrc. - + The amount of currently queued time inside appsrc. - + The total duration in nanoseconds of the data stream. If the total duration is known, it is recommended to configure it with this property. - + Make appsrc emit the "need-data", "enough-data" and "seek-data" signals. This option is by default enabled for backwards compatibility reasons but can disabled when needed because signal emission is expensive. - + The format to use for segment events. When the source is producing timestamped buffers this property should be set to GST_FORMAT_TIME. - + When enabled, appsrc will check GstSegment in GstSample which was pushed via gst_app_src_push_sample() or "push-sample" signal action. If a GstSegment is changed, corresponding segment event will be followed @@ -2077,55 +2103,55 @@ GstAppSrc::format should be time. However, possibly #GstAppSrc can support other formats. - + Instruct the source to behave like a live source. This includes that it will only push out buffers in the PLAYING state. - + When set to any other value than GST_APP_LEAKY_TYPE_NONE then the appsrc 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. - + The maximum amount of buffers that can be queued internally. After the maximum amount of buffers are queued, appsrc will emit the "enough-data" signal. - + The maximum amount of bytes that can be queued internally. After the maximum amount of bytes are queued, appsrc will emit the "enough-data" signal. - + - + The maximum amount of time that can be queued internally. After the maximum amount of time are queued, appsrc will emit the "enough-data" signal. - + The minimum latency of the source. A value of -1 will use the default latency calculations of #GstBaseSrc. - + Make appsrc emit the "need-data" signal when the amount of bytes in the queue drops below this percentage of max-bytes. - + The total size in bytes of the data stream. If the total size is known, it is recommended to configure it with this property. - + The type of stream that this source is producing. For seekable streams the application should connect to the seek-data signal. @@ -2259,6 +2285,9 @@ This callback is only called for seekable stream types. gst_app_src_set_callbacks(). + Called when the appsrc needs more data. A buffer or EOS should be + pushed to appsrc from this thread or another thread. @length is just a hint + and when it is set to -1, any number of bytes can be pushed into @appsrc. @@ -2278,6 +2307,9 @@ gst_app_src_set_callbacks(). + Called when appsrc has enough data. It is recommended that the + application stops calling push-buffer until the need_data callback is + emitted again to avoid excessive buffer queueing. @@ -2294,6 +2326,9 @@ gst_app_src_set_callbacks(). + Called when a seek should be performed to the offset. + The next push-buffer should produce buffers from the new @offset. + This callback is only called for seekable stream types. @@ -2454,20 +2489,20 @@ extracted - + The stream type. - + No seeking is supported in the stream, such as a live stream. - + The stream is seekable but seeking might not be very fast, such as data from a webserver. - + The stream is seekable and seeking is fast, such as in a local file. diff --git a/girs/GstAudio-1.0.gir b/girs/GstAudio-1.0.gir index 0fbffd648c7..857777731e7 100644 --- a/girs/GstAudio-1.0.gir +++ b/girs/GstAudio-1.0.gir @@ -1247,6 +1247,10 @@ additional information in the info #GstStructure of the returned sample: - "size" G_TYPE_UINT size of the input buffer in samples + Aggregates one input buffer to the output + buffer. The in_offset and out_offset are in "frames", which is + the size of a sample times the number of channels. Returns TRUE if + any non-silence was added to the buffer @@ -1276,6 +1280,7 @@ additional information in the info #GstStructure of the returned sample: + Create a new output buffer contains num_frames frames. @@ -1306,20 +1311,20 @@ additional information in the info #GstStructure of the returned sample: - + - + - + Causes the element to aggregate on a timeout even when no live source is connected to its sinks. See #GstAggregator:min-upstream-latency for a companion property: in the vast majority of cases where you plan to plug in live sources with a non-zero latency, you should set it to a non-zero value. - + Don't wait for inactive pads when live. An inactive pad is a pad that hasn't yet received a buffer, but that has been waited on at least once. @@ -1330,10 +1335,10 @@ data flow, for example the user may decide to connect it later, but wants to configure it already. - + - + Output block size in nanoseconds, expressed as a fraction. @@ -1359,6 +1364,7 @@ but wants to configure it already. + Create a new output buffer contains num_frames frames. @@ -1375,6 +1381,10 @@ but wants to configure it already. + Aggregates one input buffer to the output + buffer. The in_offset and out_offset are in "frames", which is + the size of a sample times the number of channels. Returns TRUE if + any non-silence was added to the buffer @@ -1442,13 +1452,14 @@ See #GstAudioAggregator for more details. - + The default implementation of GstPad used with #GstAudioAggregator + Convert a buffer from one format to another. @@ -1469,6 +1480,8 @@ See #GstAudioAggregator for more details. + Called when either the input or output + formats have changed. @@ -1479,7 +1492,7 @@ See #GstAudioAggregator for more details. - + Emit QoS messages when dropping buffers. @@ -1505,6 +1518,7 @@ See #GstAudioAggregator for more details. + Convert a buffer from one format to another. @@ -1527,6 +1541,8 @@ See #GstAudioAggregator for more details. + Called when either the input or output + formats have changed. @@ -1545,10 +1561,10 @@ See #GstAudioAggregator for more details. - + - + @@ -1573,6 +1589,10 @@ the returned buffer (see gst_object_set_parent()). + payload data in a format suitable to write to the sink. If no + payloading is required, returns a reffed copy of the original + buffer, else returns the payloaded buffer with all other metadata + copied. @@ -1602,7 +1622,7 @@ the returned buffer (see gst_object_set_parent()). - + Get the current alignment threshold, in nanoseconds, used by @sink. @@ -1616,7 +1636,7 @@ the returned buffer (see gst_object_set_parent()). - + Get the current discont wait, in nanoseconds, used by @sink. @@ -1630,7 +1650,7 @@ the returned buffer (see gst_object_set_parent()). - + Get the current drift tolerance, in microseconds, used by @sink. @@ -1644,7 +1664,7 @@ the returned buffer (see gst_object_set_parent()). - + Queries whether @sink will provide a clock or not. See also gst_audio_base_sink_set_provide_clock. @@ -1659,7 +1679,7 @@ gst_audio_base_sink_set_provide_clock. - + Get the current slave method used by @sink. @@ -1690,7 +1710,7 @@ for the custom slave method. - + Controls the sink's alignment threshold. @@ -1739,7 +1759,7 @@ method were used. - + Controls how long the sink will wait before creating a discontinuity. @@ -1756,7 +1776,7 @@ method were used. - + Controls the sink's drift tolerance. @@ -1773,7 +1793,7 @@ method were used. - + Controls whether @sink will provide a clock or not. If @provide is %TRUE, gst_element_provide_clock() will return a clock that reflects the datarate of @sink. If @provide is %FALSE, gst_element_provide_clock() will return @@ -1793,7 +1813,7 @@ NULL. - + Controls how clock slaving will be performed in @sink. @@ -1810,32 +1830,32 @@ NULL. - + - + - + - + A window of time in nanoseconds to wait before creating a discontinuity as a result of breaching the drift-tolerance. - + Controls the amount of time in microseconds that clocks are allowed to drift before resynchronisation happens. - + - + - + @@ -1877,6 +1897,7 @@ functionality. + create and return a #GstAudioRingBuffer to write to. @@ -1892,6 +1913,10 @@ functionality. + payload data in a format suitable to write to the sink. If no + payloading is required, returns a reffed copy of the original + buffer, else returns the payloaded buffer with all other metadata + copied. @@ -1971,42 +1996,42 @@ discontinuity happens. Different possible reasons for discontinuities. This enum is useful for the custom slave method. - + No discontinuity occurred - + New caps are set, causing renegotiotion - + Samples have been flushed - + Sink was synchronized to the estimated latency (occurs during initialization) - + Aligning buffers failed because the timestamps are too discontinuous - + Audio output device experienced and recovered from an error but introduced latency in the process (see also gst_audio_base_sink_report_device_failure()) - + Different possible clock slaving algorithms used when the internal audio clock is not selected as the pipeline master clock. - + Resample to match the master clock - + Adjust playout pointer when master clock drifts too much. - + No adjustment is done. - + Use custom clock slaving algorithm (Since: 1.6) @@ -2047,7 +2072,7 @@ returned buffer (see gst_object_set_parent()). - + Queries whether @src will provide a clock or not. See also gst_audio_base_src_set_provide_clock. @@ -2062,7 +2087,7 @@ gst_audio_base_src_set_provide_clock. - + Get the current slave method used by @src. @@ -2076,7 +2101,7 @@ gst_audio_base_src_set_provide_clock. - + Controls whether @src will provide a clock or not. If @provide is %TRUE, gst_element_provide_clock() will return a clock that reflects the datarate of @src. If @provide is %FALSE, gst_element_provide_clock() will return NULL. @@ -2095,7 +2120,7 @@ of @src. If @provide is %FALSE, gst_element_provide_clock() will return NULL. - + Controls how clock slaving will be performed in @src. @@ -2112,24 +2137,24 @@ of @src. If @provide is %FALSE, gst_element_provide_clock() will return NULL. - + Actual configured size of audio buffer in microseconds. - + Actual configured audio latency in microseconds. - + - + - + - + @@ -2168,6 +2193,7 @@ functionality. + create and return a #GstAudioRingBuffer to read from. @@ -2188,24 +2214,24 @@ functionality. - + Different possible clock slaving algorithms when the internal audio clock was not selected as the pipeline clock. - + Resample to match the master clock. - + Retimestamp output buffers with master clock time. - + Adjust capture pointer when master clock drifts too much. - + No adjustment is done. @@ -2481,6 +2507,7 @@ The track entries in the TOC will be sorted by track number. + closing the device @@ -2492,6 +2519,7 @@ The track entries in the TOC will be sorted by track number. + opening the device @@ -2506,6 +2534,7 @@ The track entries in the TOC will be sorted by track number. + reading a sector @@ -2540,13 +2569,13 @@ copy of the structure (and take ownership of the taglist if there is one). - + - + - + @@ -2577,6 +2606,7 @@ copy of the structure (and take ownership of the taglist if there is one). + opening the device @@ -2593,6 +2623,7 @@ copy of the structure (and take ownership of the taglist if there is one). + closing the device @@ -2606,6 +2637,7 @@ copy of the structure (and take ownership of the taglist if there is one). + reading a sector @@ -2630,14 +2662,14 @@ copy of the structure (and take ownership of the taglist if there is one). Mode in which the CD audio source operates. Influences timestamping, EOS handling and seeking. - + each single track is a stream - + the entire disc is a single stream - + @@ -2680,7 +2712,7 @@ on the pipeline's #GstBus instead. - + Free memory allocated by @mix. @@ -2820,19 +2852,19 @@ Perform channel mixing on @in_data and write the result to @out_data. Flags passed to gst_audio_channel_mixer_new() - + no flag - + input channels are not interleaved - + output channels are not interleaved - + input channels are explicitly unpositioned - + output channels are explicitly unpositioned @@ -2861,102 +2893,108 @@ This is expressed in caps by having a channel mask with no bits set. As another special case it is allowed to have two channels without a channel mask. This implicitly means that this is a stereo stream with a front left and front right channel. - + used for position-less channels, e.g. from a sound card that records 1024 channels; mutually exclusive with any other channel position - + Mono without direction; can only be used with 1 channel - + invalid position - + Front left - + Front right - + Front center - + Low-frequency effects 1 (subwoofer) - + Rear left - + Rear right - + Front left of center - + Front right of center - + Rear center - + Low-frequency effects 2 (subwoofer) - + Side left - + Side right - + Top front left - + Top front right - + Top front center - + Top center - + Top rear left - + Top rear right - + Top side right - + Top rear right - + Top rear center - + Bottom front center - + Bottom front left - + Bottom front right - + Wide left (between front left and side left) - + Wide right (between front right and side right) - + Surround left (between rear left and side left) - + Surround right (between rear right and side right) + + Top surround left (between rear left and side left). + + + Top surround right (between rear right and side right). + Extra buffer metadata describing how much audio has to be clipped from @@ -3155,7 +3193,7 @@ be used. - + This object is used to convert audio samples from one format to another. The object can perform conversion of: @@ -3461,14 +3499,14 @@ option and values. Extra flags passed to gst_audio_converter_new() and gst_audio_converter_samples(). - + no flag - + the input sample arrays are writable and can be used as temporary storage during conversion. - + allow arbitrary rate updates with gst_audio_converter_update_config(). @@ -3565,6 +3603,9 @@ Things that subclass need to take care of: data for indicated duration. + Optional. + Called when the element changes to GST_STATE_NULL. + Allows closing external resources. @@ -3576,6 +3617,12 @@ Things that subclass need to take care of: + Optional. + Setup the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -3590,6 +3637,11 @@ Things that subclass need to take care of: + Optional. + Instructs subclass to clear any codec caches and discard + any pending samples and not yet returned decoded data. + @hard indicates whether a FLUSH is being processed, + or otherwise a DISCONT (or conceptually similar). @@ -3604,6 +3656,11 @@ Things that subclass need to take care of: + Optional. + Allows for a custom sink getcaps implementation. + If not implemented, + default returns gst_audio_decoder_proxy_getcaps + applied to sink template caps. @@ -3618,6 +3675,11 @@ Things that subclass need to take care of: + Provides input data (or NULL to clear any remaining data) + to subclass. Input data ref management is performed by + base class, subclass should not care or intervene, + and input data is only valid until next call to base class, + most notably a call to gst_audio_decoder_finish_frame(). @@ -3648,6 +3710,9 @@ negotiate fails. + Optional. + Called when the element changes to GST_STATE_READY. + Allows opening external resources. @@ -3679,6 +3744,10 @@ negotiate fails. + Optional. + Called just prior to pushing (encoded data) buffer downstream. + Subclass has full discretionary access to buffer, + and a not OK flow return will abort downstream pushing. @@ -3693,6 +3762,10 @@ negotiate fails. + Optional. + Propose buffer allocation parameters for upstream elements. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -3707,6 +3780,7 @@ negotiate fails. + Notifies subclass of incoming data format (caps). @@ -3721,6 +3795,9 @@ negotiate fails. + Optional. + Event handler on the sink pad. Subclasses should chain up to + the parent implementation to invoke the default handler. @@ -3735,6 +3812,11 @@ negotiate fails. + Optional. + Query handler on the sink pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.6 @@ -3749,6 +3831,9 @@ negotiate fails. + Optional. + Event handler on the src pad. Subclasses should chain up to + the parent implementation to invoke the default handler. @@ -3763,6 +3848,11 @@ negotiate fails. + Optional. + Query handler on the source pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.6 @@ -3777,6 +3867,9 @@ negotiate fails. + Optional. + Called when the element starts processing. + Allows opening external resources. @@ -3788,6 +3881,9 @@ negotiate fails. + Optional. + Called when the element stops processing. + Allows closing external resources. @@ -3799,6 +3895,11 @@ negotiate fails. + Optional. Transform the metadata on the input buffer to the + output buffer. By default this method copies all meta without + tags and meta with only the "audio" tag. subclasses can + implement this method and return %TRUE if the metadata is to be + copied. Since: 1.6 @@ -4001,7 +4102,7 @@ latency. - + currently configured decoder tolerated error count. @@ -4014,7 +4115,7 @@ latency. - + Queries decoder's latency aggregation. @@ -4067,7 +4168,7 @@ MT safe. - + Queries decoder packet loss concealment handling. @@ -4096,7 +4197,7 @@ MT safe. - + Queries current audio jitter tolerance threshold. @@ -4260,7 +4361,7 @@ so the pipeline can reconfigure its global latency. - + Sets numbers of tolerated decoder errors, where a tolerated one is then only warned about, but more than tolerated will lead to fatal error. You can set -1 for never returning fatal errors. Default is set to @@ -4280,7 +4381,7 @@ GST_AUDIO_DECODER_MAX_ERRORS. - + Sets decoder minimum aggregation latency. MT safe. @@ -4362,7 +4463,7 @@ caps features. - + Enable or disable decoder packet loss concealment, provided subclass and codec are capable and allow handling plc. @@ -4399,7 +4500,7 @@ MT safe. - + Configures decoder audio jitter tolerance threshold. MT safe. @@ -4440,18 +4541,18 @@ handler with %GST_PAD_SET_ACCEPT_INTERSECT and - + Maximum number of tolerated consecutive decode errors. See gst_audio_decoder_set_max_errors() for more details. - + - + - + @@ -4491,6 +4592,9 @@ overridden. + Optional. + Called when the element starts processing. + Allows opening external resources. @@ -4504,6 +4608,9 @@ overridden. + Optional. + Called when the element stops processing. + Allows closing external resources. @@ -4517,6 +4624,7 @@ overridden. + Notifies subclass of incoming data format (caps). @@ -4533,6 +4641,11 @@ overridden. + Optional. + Allows chopping incoming data into manageable units (frames) + for subsequent decoding. This division is at subclass + discretion and may or may not correspond to 1 (or more) + frames as defined by audio format. @@ -4555,6 +4668,11 @@ overridden. + Provides input data (or NULL to clear any remaining data) + to subclass. Input data ref management is performed by + base class, subclass should not care or intervene, + and input data is only valid until next call to base class, + most notably a call to gst_audio_decoder_finish_frame(). @@ -4571,6 +4689,11 @@ overridden. + Optional. + Instructs subclass to clear any codec caches and discard + any pending samples and not yet returned decoded data. + @hard indicates whether a FLUSH is being processed, + or otherwise a DISCONT (or conceptually similar). @@ -4587,6 +4710,10 @@ overridden. + Optional. + Called just prior to pushing (encoded data) buffer downstream. + Subclass has full discretionary access to buffer, + and a not OK flow return will abort downstream pushing. @@ -4603,6 +4730,9 @@ overridden. + Optional. + Event handler on the sink pad. Subclasses should chain up to + the parent implementation to invoke the default handler. @@ -4619,6 +4749,9 @@ overridden. + Optional. + Event handler on the src pad. Subclasses should chain up to + the parent implementation to invoke the default handler. @@ -4635,6 +4768,9 @@ overridden. + Optional. + Called when the element changes to GST_STATE_READY. + Allows opening external resources. @@ -4648,6 +4784,9 @@ overridden. + Optional. + Called when the element changes to GST_STATE_NULL. + Allows closing external resources. @@ -4661,6 +4800,10 @@ overridden. + Optional. + Negotiate with downstream and configure buffer pools, etc. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -4676,6 +4819,12 @@ overridden. + Optional. + Setup the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -4692,6 +4841,10 @@ overridden. + Optional. + Propose buffer allocation parameters for upstream elements. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -4708,6 +4861,11 @@ overridden. + Optional. + Query handler on the sink pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.6 @@ -4724,6 +4882,11 @@ overridden. + Optional. + Query handler on the source pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.6 @@ -4740,6 +4903,11 @@ overridden. + Optional. + Allows for a custom sink getcaps implementation. + If not implemented, + default returns gst_audio_decoder_proxy_getcaps + applied to sink template caps. @@ -4756,6 +4924,11 @@ overridden. + Optional. Transform the metadata on the input buffer to the + output buffer. By default this method copies all meta without + tags and meta with only the "audio" tag. subclasses can + implement this method and return %TRUE if the metadata is to be + copied. Since: 1.6 @@ -4783,21 +4956,21 @@ overridden. - + Set of available dithering methods. - + No dithering - + Rectangular dithering - + Triangular dithering (default) - + High frequency triangular dithering @@ -4938,6 +5111,9 @@ Things that subclass need to take care of: + Optional. + Called when the element changes to GST_STATE_NULL. + Allows closing external resources. @@ -4949,6 +5125,12 @@ Things that subclass need to take care of: + Optional. + Setup the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -4963,6 +5145,9 @@ Things that subclass need to take care of: + Optional. + Instructs subclass to clear any codec caches and discard + any pending samples and not yet returned encoded data. @@ -4974,6 +5159,11 @@ Things that subclass need to take care of: + Optional. + Allows for a custom sink getcaps implementation (e.g. + for multichannel input specification). If not implemented, + default returns gst_audio_encoder_proxy_getcaps + applied to sink template caps. @@ -4988,6 +5178,12 @@ Things that subclass need to take care of: + Provides input samples (or NULL to clear any remaining data) + according to directions as configured by the subclass + using the API. Input data ref management is performed + by base class, subclass should not care or intervene, + and input data is only valid until next call to base class, + most notably a call to gst_audio_encoder_finish_frame(). @@ -5018,6 +5214,9 @@ negotiate fails. + Optional. + Called when the element changes to GST_STATE_READY. + Allows opening external resources. @@ -5029,6 +5228,10 @@ negotiate fails. + Optional. + Called just prior to pushing (encoded data) buffer downstream. + Subclass has full discretionary access to buffer, + and a not OK flow return will abort downstream pushing. @@ -5043,6 +5246,10 @@ negotiate fails. + Optional. + Propose buffer allocation parameters for upstream elements. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -5057,6 +5264,8 @@ negotiate fails. + Notifies subclass of incoming data format. + GstAudioInfo contains the format according to provided caps. @@ -5071,6 +5280,9 @@ negotiate fails. + Optional. + Event handler on the sink pad. Subclasses should chain up to + the parent implementation to invoke the default handler. @@ -5085,6 +5297,11 @@ negotiate fails. + Optional. + Query handler on the sink pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.6 @@ -5099,6 +5316,9 @@ negotiate fails. + Optional. + Event handler on the src pad. Subclasses should chain up to + the parent implementation to invoke the default handler. @@ -5113,6 +5333,11 @@ negotiate fails. + Optional. + Query handler on the source pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.6 @@ -5127,6 +5352,9 @@ negotiate fails. + Optional. + Called when the element starts processing. + Allows opening external resources. @@ -5138,6 +5366,9 @@ negotiate fails. + Optional. + Called when the element stops processing. + Allows closing external resources. @@ -5149,6 +5380,11 @@ negotiate fails. + Optional. Transform the metadata on the input buffer to the + output buffer. By default this method copies all meta without + tags and meta with only the "audio" tag. subclasses can + implement this method and return %TRUE if the metadata is to be + copied. Since: 1.6 @@ -5328,7 +5564,7 @@ MT safe. - + @@ -5374,7 +5610,7 @@ latency. - + Queries if the encoder will handle granule marking. @@ -5390,7 +5626,7 @@ MT safe. - + Queries encoder perfect timestamp behaviour. @@ -5406,7 +5642,7 @@ MT safe. - + Queries current audio jitter tolerance threshold. @@ -5624,7 +5860,7 @@ MT safe. - + @@ -5738,7 +5974,7 @@ MT safe. - + Enable or disable encoder perfect output timestamp preference. MT safe. @@ -5757,7 +5993,7 @@ MT safe. - + Configures encoder audio jitter tolerance threshold. MT safe. @@ -5776,16 +6012,16 @@ MT safe. - + - + - + - + @@ -5824,6 +6060,9 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Called when the element starts processing. + Allows opening external resources. @@ -5837,6 +6076,9 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Called when the element stops processing. + Allows closing external resources. @@ -5850,6 +6092,8 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Notifies subclass of incoming data format. + GstAudioInfo contains the format according to provided caps. @@ -5866,6 +6110,12 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Provides input samples (or NULL to clear any remaining data) + according to directions as configured by the subclass + using the API. Input data ref management is performed + by base class, subclass should not care or intervene, + and input data is only valid until next call to base class, + most notably a call to gst_audio_encoder_finish_frame(). @@ -5882,6 +6132,9 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Instructs subclass to clear any codec caches and discard + any pending samples and not yet returned encoded data. @@ -5895,6 +6148,10 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Called just prior to pushing (encoded data) buffer downstream. + Subclass has full discretionary access to buffer, + and a not OK flow return will abort downstream pushing. @@ -5911,6 +6168,9 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Event handler on the sink pad. Subclasses should chain up to + the parent implementation to invoke the default handler. @@ -5927,6 +6187,9 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Event handler on the src pad. Subclasses should chain up to + the parent implementation to invoke the default handler. @@ -5943,6 +6206,11 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Allows for a custom sink getcaps implementation (e.g. + for multichannel input specification). If not implemented, + default returns gst_audio_encoder_proxy_getcaps + applied to sink template caps. @@ -5959,6 +6227,9 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Called when the element changes to GST_STATE_READY. + Allows opening external resources. @@ -5972,6 +6243,9 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Called when the element changes to GST_STATE_NULL. + Allows closing external resources. @@ -5985,6 +6259,10 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Negotiate with downstream and configure buffer pools, etc. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -6000,6 +6278,12 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Setup the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -6016,6 +6300,10 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Propose buffer allocation parameters for upstream elements. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -6032,6 +6320,11 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. Transform the metadata on the input buffer to the + output buffer. By default this method copies all meta without + tags and meta with only the "audio" tag. subclasses can + implement this method and return %TRUE if the metadata is to be + copied. Since: 1.6 @@ -6054,6 +6347,11 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Query handler on the sink pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.6 @@ -6070,6 +6368,11 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. + Optional. + Query handler on the source pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.6 @@ -6091,7 +6394,7 @@ needed. At minimum @set_format and @handle_frame needs to be overridden. - + @@ -6110,6 +6413,7 @@ Derived classes should override the #GstAudioFilterClass.setup() and virtual functions in their class_init function. + virtual function called whenever the format changes @@ -6145,6 +6449,7 @@ function. + virtual function called whenever the format changes @@ -6188,152 +6493,152 @@ This function is usually used from within a GObject class_init function. Extra audio flags - + no valid flag - + the position array explicitly contains unpositioned channels. Enum value describing the most common audio formats. - + unknown or unset audio format - + encoded audio format - + 8 bits in 8 bits, signed - + 8 bits in 8 bits, unsigned - + 16 bits in 16 bits, signed, little endian - + 16 bits in 16 bits, signed, big endian - + 16 bits in 16 bits, unsigned, little endian - + 16 bits in 16 bits, unsigned, big endian - + 24 bits in 32 bits, signed, little endian - + 24 bits in 32 bits, signed, big endian - + 24 bits in 32 bits, unsigned, little endian - + 24 bits in 32 bits, unsigned, big endian - + 32 bits in 32 bits, signed, little endian - + 32 bits in 32 bits, signed, big endian - + 32 bits in 32 bits, unsigned, little endian - + 32 bits in 32 bits, unsigned, big endian - + 24 bits in 24 bits, signed, little endian - + 24 bits in 24 bits, signed, big endian - + 24 bits in 24 bits, unsigned, little endian - + 24 bits in 24 bits, unsigned, big endian - + 20 bits in 24 bits, signed, little endian - + 20 bits in 24 bits, signed, big endian - + 20 bits in 24 bits, unsigned, little endian - + 20 bits in 24 bits, unsigned, big endian - + 18 bits in 24 bits, signed, little endian - + 18 bits in 24 bits, signed, big endian - + 18 bits in 24 bits, unsigned, little endian - + 18 bits in 24 bits, unsigned, big endian - + 32-bit floating point samples, little endian - + 32-bit floating point samples, big endian - + 64-bit floating point samples, little endian - + 64-bit floating point samples, big endian - + 16 bits in 16 bits, signed, native endianness - + 16 bits in 16 bits, unsigned, native endianness - + 24 bits in 32 bits, signed, native endianness - + 24 bits in 32 bits, unsigned, native endianness - + 32 bits in 32 bits, signed, native endianness - + 32 bits in 32 bits, unsigned, native endianness - + 24 bits in 24 bits, signed, native endianness - + 24 bits in 24 bits, unsigned, native endianness - + 20 bits in 24 bits, signed, native endianness - + 20 bits in 24 bits, unsigned, native endianness - + 18 bits in 24 bits, signed, native endianness - + 18 bits in 24 bits, unsigned, native endianness - + 32-bit floating point samples, native endianness - + 64-bit floating point samples, native endianness @@ -6437,19 +6742,19 @@ versions were printing a critical warning and returned %NULL. The different audio flags that a format info can have. - + integer samples - + float samples - + signed samples - + complex layout - + the format can be used in #GstAudioFormatUnpack and #GstAudioFormatPack functions @@ -6831,10 +7136,10 @@ Note: This initializes @info first, no values are preserved. Layout of the audio samples for the different channels. - + interleaved audio - + non-interleaved audio @@ -6904,28 +7209,28 @@ meta as well as extracting it. Set of available noise shaping methods - + No noise shaping (default) - + Error feedback - + Simple 2-pole noise shaping - + Medium 5-pole noise shaping - + High 8-pole noise shaping The different flags that can be used when packing and unpacking. - + No flag - + When the source has a smaller depth than the target format, set the least significant bits of the target to 0. This is likely slightly faster but less accurate. When this flag @@ -6933,7 +7238,7 @@ meta as well as extracting it. in the least significant bits of the destination. - + Free a #GstAudioQuantize. @@ -7039,14 +7344,14 @@ the @dither and @ns parameters. Extra flags that can be passed to gst_audio_quantize_new() - + no flags - + samples are non-interleaved - + #GstAudioResampler is a structure which holds the information required to perform various kinds of resampling filtering. @@ -7278,50 +7583,50 @@ for @quality in @options. The different filter interpolation methods. - + no interpolation - + linear interpolation of the filter coefficients. - + cubic interpolation of the filter coefficients. Select for the filter tables should be set up. - + Use interpolated filter tables. This uses less memory but more CPU and is slightly less accurate but it allows for more efficient variable rate resampling with gst_audio_resampler_update(). - + Use full filter table. This uses more memory but less CPU. - + Automatically choose between interpolated and full filter tables. Different resampler flags. - + no flags - + input samples are non-interleaved. an array of blocks of samples, one for each channel, should be passed to the resample function. - + output samples are non-interleaved. an array of blocks of samples, one for each channel, should be passed to the resample function. - + optimize for dynamic updates of the sample rates with gst_audio_resampler_update(). This will select an interpolating filter when #GST_AUDIO_RESAMPLER_FILTER_MODE_AUTO is configured. @@ -7329,21 +7634,21 @@ for @quality in @options. Different subsampling and upsampling methods - + Duplicates the samples when upsampling and drops when downsampling - + Uses linear interpolation to reconstruct missing samples and averaging to downsample - + Uses cubic interpolation - + Uses Blackman-Nuttall windowed sinc interpolation - + Uses Kaiser windowed sinc interpolation @@ -7608,6 +7913,7 @@ MT safe. + resume processing of samples after pause @@ -8459,6 +8765,7 @@ called to fill the memory at @data with @len bytes of samples. + open the device, don't set any params or allocate anything @@ -8476,6 +8783,7 @@ MT safe. + allocate the resources for the ringbuffer using the given spec @@ -8497,6 +8805,7 @@ MT safe. + free resources of the ringbuffer @@ -8514,6 +8823,7 @@ MT safe. + close the device @@ -8531,6 +8841,7 @@ MT safe. + start processing of samples @@ -8548,6 +8859,7 @@ MT safe. + pause processing of samples @@ -8565,6 +8877,7 @@ MT safe. + resume processing of samples after pause @@ -8578,6 +8891,7 @@ MT safe. + stop processing of samples @@ -8595,6 +8909,7 @@ MT safe. + get number of frames queued in device @@ -8612,6 +8927,8 @@ MT safe. + activate the thread that starts pulling and monitoring the +consumed segments in the device. @@ -8632,6 +8949,7 @@ FALSE on error. + write samples into the ringbuffer @@ -8671,6 +8989,10 @@ with a flush or stop. + Optional. + Clear the entire ringbuffer. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -8692,56 +9014,56 @@ with a flush or stop. The format of the samples in the ringbuffer. - + samples in linear or float - + samples in mulaw - + samples in alaw - + samples in ima adpcm - + samples in mpeg audio (but not AAC) format - + samples in gsm format - + samples in IEC958 frames (e.g. AC3) - + samples in AC3 format - + samples in EAC3 format - + samples in DTS format - + samples in MPEG-2 AAC ADTS format - + samples in MPEG-4 AAC ADTS format - + samples in MPEG-2 AAC raw format (Since: 1.12) - + samples in MPEG-4 AAC raw format (Since: 1.12) - + samples in FLAC format (Since: 1.12) - + samples in DSD format (Since: 1.24) - + @@ -8801,16 +9123,16 @@ only the rate, channels, position, and bpf fields in @info are populated. The state of the ringbuffer. - + The ringbuffer is stopped - + The ringbuffer is paused - + The ringbuffer is started - + The ringbuffer has encountered an error after it has been started, e.g. because the device was disconnected (Since: 1.2) @@ -8840,6 +9162,7 @@ together with #GstAudioBaseSink using a default implementation of a #GstAudioRingBuffer that uses threads. + Close the device. @@ -8851,6 +9174,8 @@ together with #GstAudioBaseSink using a default implementation of a + Return how many frames are still in the device. Participates in + computing the time for audio clocks and drives the synchronisation. @@ -8862,6 +9187,8 @@ together with #GstAudioBaseSink using a default implementation of a + Open the device. No configuration needs to be done at this point. + This function is also used to check if the device is available. @@ -8873,6 +9200,9 @@ together with #GstAudioBaseSink using a default implementation of a + Pause the device and unblock write as fast as possible. + For retro compatibility, the audio sink will fallback + to calling reset if this vmethod is not provided. Since: 1.18 @@ -8884,6 +9214,7 @@ together with #GstAudioBaseSink using a default implementation of a + Prepare the device to operate with the specified parameters. @@ -8898,6 +9229,9 @@ together with #GstAudioBaseSink using a default implementation of a + Returns as quickly as possible from a write and flush any pending + samples from the device. + This vmethod is deprecated. Please provide pause and stop instead. @@ -8909,6 +9243,7 @@ together with #GstAudioBaseSink using a default implementation of a + Resume the device. Since: 1.18 @@ -8920,6 +9255,10 @@ together with #GstAudioBaseSink using a default implementation of a + Stop the device and unblock write as fast as possible. + Pending samples are flushed from the device. + For retro compatibility, the audio sink will fallback + to calling reset if this vmethod is not provided. Since: 1.18 @@ -8931,6 +9270,7 @@ together with #GstAudioBaseSink using a default implementation of a + Undo operations done in prepare. @@ -8981,6 +9321,8 @@ together with #GstAudioBaseSink using a default implementation of a + Open the device. No configuration needs to be done at this point. + This function is also used to check if the device is available. @@ -8994,6 +9336,7 @@ together with #GstAudioBaseSink using a default implementation of a + Prepare the device to operate with the specified parameters. @@ -9010,6 +9353,7 @@ together with #GstAudioBaseSink using a default implementation of a + Undo operations done in prepare. @@ -9023,6 +9367,7 @@ together with #GstAudioBaseSink using a default implementation of a + Close the device. @@ -9036,6 +9381,10 @@ together with #GstAudioBaseSink using a default implementation of a + Write data to the device. + This vmethod is allowed to block until all the data is written. + If such is the case then it is expected that pause, stop and + reset will unblock the write when called. @@ -9058,6 +9407,8 @@ together with #GstAudioBaseSink using a default implementation of a + Return how many frames are still in the device. Participates in + computing the time for audio clocks and drives the synchronisation. @@ -9071,6 +9422,9 @@ together with #GstAudioBaseSink using a default implementation of a + Returns as quickly as possible from a write and flush any pending + samples from the device. + This vmethod is deprecated. Please provide pause and stop instead. @@ -9084,6 +9438,9 @@ together with #GstAudioBaseSink using a default implementation of a + Pause the device and unblock write as fast as possible. + For retro compatibility, the audio sink will fallback + to calling reset if this vmethod is not provided. Since: 1.18 @@ -9097,6 +9454,7 @@ together with #GstAudioBaseSink using a default implementation of a + Resume the device. Since: 1.18 @@ -9110,6 +9468,10 @@ together with #GstAudioBaseSink using a default implementation of a + Stop the device and unblock write as fast as possible. + Pending samples are flushed from the device. + For retro compatibility, the audio sink will fallback + to calling reset if this vmethod is not provided. Since: 1.18 @@ -9160,6 +9522,7 @@ together with #GstAudioBaseSrc using a default implementation of a #GstAudioRingBuffer that uses threads. + close the device @@ -9171,6 +9534,7 @@ together with #GstAudioBaseSrc using a default implementation of a + the number of frames queued in the device @@ -9182,6 +9546,7 @@ together with #GstAudioBaseSrc using a default implementation of a + open the device with the specified caps @@ -9193,6 +9558,7 @@ together with #GstAudioBaseSrc using a default implementation of a + configure device with format @@ -9232,6 +9598,7 @@ together with #GstAudioBaseSrc using a default implementation of a + unblock a read to the device and reset. @@ -9243,6 +9610,7 @@ together with #GstAudioBaseSrc using a default implementation of a + undo the configuration @@ -9274,6 +9642,7 @@ functionality. + open the device with the specified caps @@ -9287,6 +9656,7 @@ functionality. + configure device with format @@ -9303,6 +9673,7 @@ functionality. + undo the configuration @@ -9316,6 +9687,7 @@ functionality. + close the device @@ -9329,6 +9701,7 @@ functionality. + read samples from the audio device @@ -9355,6 +9728,7 @@ functionality. + the number of frames queued in the device @@ -9368,6 +9742,7 @@ functionality. + unblock a read to the device and reset. @@ -9386,7 +9761,7 @@ functionality. - + #GstAudioStreamAlign provides a helper object that helps tracking audio stream alignment and discontinuities, and detects discontinuities if possible. @@ -9778,31 +10153,31 @@ in a more readable fashion. Enum value describing how DSD bits are grouped. - + unknown / invalid DSD format - + 8 DSD bits in 1 byte - + 16 DSD bits in 2 bytes, little endian order - + 16 DSD bits in 2 bytes, big endian order - + 32 DSD bits in 4 bytes, little endian order - + 32 DSD bits in 4 bytes, big endian order - + number of valid DSD formats - + 16 DSD bits in 2 bytes, native endianness - + 32 DSD bits in 4 bytes, native endianness @@ -10400,7 +10775,7 @@ The volume property is defined to be a linear volume factor. - + Returns %TRUE if the stream is muted @@ -10413,7 +10788,7 @@ The volume property is defined to be a linear volume factor. - + The current stream volume as linear factor @@ -10430,7 +10805,7 @@ The volume property is defined to be a linear volume factor. - + @@ -10446,7 +10821,7 @@ The volume property is defined to be a linear volume factor. - + @@ -10466,10 +10841,10 @@ The volume property is defined to be a linear volume factor. - + - + @@ -11247,6 +11622,12 @@ the @dither and @ns parameters. positions @to. @from and @to must contain the same number of positions and the same positions, only in a different order. +This function internally calls gst_audio_get_channel_reorder_map() and +gst_audio_reorder_channels_with_reorder_map(). It is more efficient to call +gst_audio_get_channel_reorder_map() once to retrieve the reorder map and +then call gst_audio_reorder_channels_with_reorder_map() with the same +reorder map until the channel positions change. + Note: this function assumes the audio data is in interleaved layout @@ -11287,6 +11668,45 @@ Note: this function assumes the audio data is in interleaved layout + + Reorders @data with the given @reorder_map. + +The reorder map can be retrieved for example with +gst_audio_get_channel_reorder_map(). + +Note: this function assumes the audio data is in interleaved layout + + + + + + + The pointer to + the memory. + + + + + + The size of the memory. + + + + The number of bytes per sample. + + + + The number of channels. + + + + The channel reorder map. + + + + + + Make a new resampler. diff --git a/girs/GstBadAudio-1.0.gir b/girs/GstBadAudio-1.0.gir index 9ba916248bb..9d9b5490abe 100644 --- a/girs/GstBadAudio-1.0.gir +++ b/girs/GstBadAudio-1.0.gir @@ -251,6 +251,12 @@ is defined this way (this is all done by the base class automatically): subsong duration regardless of the output mode. + Optional. + Sets up the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -265,6 +271,11 @@ is defined this way (this is all done by the base class automatically): + Always required. + Allocates an output buffer, fills it with decoded audio samples, and must be passed on to + *buffer . The number of decoded samples must be passed on to *num_samples. + If decoding finishes or the decoding is no longer possible (for example, due to an + unrecoverable error), this function returns FALSE, otherwise TRUE. @@ -282,6 +293,12 @@ is defined this way (this is all done by the base class automatically): + Optional. + Returns the current subsong. + If the current subsong mode is not GST_NONSTREAM_AUDIO_SUBSONG_MODE_SINGLE, this + function's return value is undefined. + If this function is implemented by the subclass, + @get_num_subsongs should be implemented as well. @@ -293,6 +310,13 @@ is defined this way (this is all done by the base class automatically): + Optional. + Returns a tag list containing the main song tags, or NULL if there are + no such tags. Returned tags will be unref'd. Use this vfunc instead of + manually pushing a tag event downstream to avoid edge cases where not yet + pushed sticky tag events get overwritten before they are pushed (can for + example happen with decodebin if tags are pushed downstream before the + decodebin pads are linked). @@ -304,6 +328,8 @@ is defined this way (this is all done by the base class automatically): + Optional. + Returns the number of loops for playback. @@ -315,6 +341,16 @@ is defined this way (this is all done by the base class automatically): + Optional. + Returns the number of subsongs available. + The return values 0 and 1 have a similar, but distinct, meaning. + If this function returns 0, then this decoder does not support subsongs at all. + @get_current_subsong must then also always return 0. In other words, this function + either never returns 0, or never returns anything else than 0. + A return value of 1 means that the media contains either only one or no subsongs + (the entire song is then considered to be one single subsong). 1 also means that only + this very media has no or just one subsong, and the decoder itself can + support multiple subsongs. @@ -326,6 +362,8 @@ is defined this way (this is all done by the base class automatically): + Optional. + Returns the duration of a subsong. Returns GST_CLOCK_TIME_NONE if duration is unknown. @@ -340,6 +378,9 @@ is defined this way (this is all done by the base class automatically): + Optional. + Returns tags for a subsong, or NULL if there are no tags. + Returned tags will be unref'd. @@ -354,6 +395,10 @@ is defined this way (this is all done by the base class automatically): + Always required. + Returns a bitmask containing the output modes the subclass supports. + The mask is formed by a bitwise OR combination of integers, which can be calculated + this way: 1 << GST_NONSTREAM_AUDIO_OUTPUT_MODE_<mode> , where mode is either STEADY or LOOPING @@ -365,6 +410,14 @@ is defined this way (this is all done by the base class automatically): + Required if loads_from_sinkpad is set to TRUE (the default value). + Loads the media from the given buffer. The entire media is supplied at once, + so after this call, loading should be finished. This function + can also make use of a suggested initial subsong & subsong mode and initial + playback position (but isn't required to). In case it chooses a different starting + position, the function must pass this position to *initial_position. + The subclass does not have to unref the input buffer; the base class does that + already. @@ -394,6 +447,10 @@ is defined this way (this is all done by the base class automatically): + Required if loads_from_sinkpad is set to FALSE. + Loads the media in a way defined by the custom sink. Data is not supplied; + the derived class has to handle this on its own. Otherwise, this function is + identical to @load_from_buffer. @@ -431,6 +488,10 @@ is defined this way (this is all done by the base class automatically): + Optional. + Proposes buffer allocation parameters for upstream elements. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -445,6 +506,14 @@ is defined this way (this is all done by the base class automatically): + Optional. + Called when a seek event is received by the parent class. + new_position is a pointer to a GstClockTime integer which + contains a position relative to the current subsong. + Minimum is 0, maximum is the subsong length. + After this function finishes, new_position is set to the + actual new position (which may differ from the request + position, depending on the decoder). @@ -459,6 +528,15 @@ is defined this way (this is all done by the base class automatically): + Optional. + Sets the current subsong. This function is allowed to switch to a different + subsong than the required one, and can optionally make use of the suggested initial + position. In case it chooses a different starting position, the function must pass + this position to *initial_position. + This function switches the subsong mode to GST_NONSTREAM_AUDIO_SUBSONG_MODE_SINGLE + automatically. + If this function is implemented by the subclass, @get_current_subsong and + @get_num_subsongs should be implemented as well. @@ -476,6 +554,19 @@ is defined this way (this is all done by the base class automatically): + Optional. + Sets the number of loops for playback. If this is called during playback, + the subclass must set any internal loop counters to zero. A loop value of -1 + means infinite looping; 0 means no looping; and when the num_loops is greater than 0, + playback should loop exactly num_loops times. If this function is implemented, + @get_num_loops should be implemented as well. The function can ignore the given values + and choose another; however, @get_num_loops should return this other value afterwards. + It is up to the subclass to define where the loop starts and ends. It can mean that only + a subset at the end or in the middle of a song is repeated, for example. + If the current subsong mode is GST_NONSTREAM_AUDIO_SUBSONG_MODE_SINGLE, then the subsong + is repeated this many times. If it is GST_NONSTREAM_AUDIO_SUBSONG_MODE_ALL, then all + subsongs are repeated this many times. With GST_NONSTREAM_AUDIO_SUBSONG_MODE_DECODER_DEFAULT, + the behavior is decoder specific. @@ -490,6 +581,11 @@ is defined this way (this is all done by the base class automatically): + Optional. + Sets the output mode the subclass has to use. Unlike with most other functions, the subclass + cannot choose a different mode; it must use the requested one. + If the output mode is set to LOOPING, @gst_nonstream_audio_decoder_handle_loop + must be called after playback moved back to the start of a loop. @@ -507,6 +603,13 @@ is defined this way (this is all done by the base class automatically): + Optional. + Sets the current subsong mode. Since this might influence the current playback position, + this function must set the initial_position integer argument to a defined value. + If the playback position is not affected at all, it must be set to GST_CLOCK_TIME_NONE. + If the subsong is restarted after the mode switch, it is recommended to set the value + to the position in the playback right after the switch (or 0 if the subsongs are always + reset back to the beginning). @@ -524,6 +627,11 @@ is defined this way (this is all done by the base class automatically): + Optional. + Called when a position query is received by the parent class. + The position that this function returns must be relative to + the current subsong. Thus, the minimum is 0, and the maximum + is the subsong length. @@ -697,16 +805,16 @@ gst_nonstream_audio_decoder_set_output_format(). - + - + - + - + @@ -804,6 +912,14 @@ loads_from_sinkpad is TRUE. + Optional. + Called when a seek event is received by the parent class. + new_position is a pointer to a GstClockTime integer which + contains a position relative to the current subsong. + Minimum is 0, maximum is the subsong length. + After this function finishes, new_position is set to the + actual new position (which may differ from the request + position, depending on the decoder). @@ -820,6 +936,11 @@ loads_from_sinkpad is TRUE. + Optional. + Called when a position query is received by the parent class. + The position that this function returns must be relative to + the current subsong. Thus, the minimum is 0, and the maximum + is the subsong length. @@ -833,6 +954,14 @@ loads_from_sinkpad is TRUE. + Required if loads_from_sinkpad is set to TRUE (the default value). + Loads the media from the given buffer. The entire media is supplied at once, + so after this call, loading should be finished. This function + can also make use of a suggested initial subsong & subsong mode and initial + playback position (but isn't required to). In case it chooses a different starting + position, the function must pass this position to *initial_position. + The subclass does not have to unref the input buffer; the base class does that + already. @@ -864,6 +993,10 @@ loads_from_sinkpad is TRUE. + Required if loads_from_sinkpad is set to FALSE. + Loads the media in a way defined by the custom sink. Data is not supplied; + the derived class has to handle this on its own. Otherwise, this function is + identical to @load_from_buffer. @@ -892,6 +1025,13 @@ loads_from_sinkpad is TRUE. + Optional. + Returns a tag list containing the main song tags, or NULL if there are + no such tags. Returned tags will be unref'd. Use this vfunc instead of + manually pushing a tag event downstream to avoid edge cases where not yet + pushed sticky tag events get overwritten before they are pushed (can for + example happen with decodebin if tags are pushed downstream before the + decodebin pads are linked). @@ -905,6 +1045,15 @@ loads_from_sinkpad is TRUE. + Optional. + Sets the current subsong. This function is allowed to switch to a different + subsong than the required one, and can optionally make use of the suggested initial + position. In case it chooses a different starting position, the function must pass + this position to *initial_position. + This function switches the subsong mode to GST_NONSTREAM_AUDIO_SUBSONG_MODE_SINGLE + automatically. + If this function is implemented by the subclass, @get_current_subsong and + @get_num_subsongs should be implemented as well. @@ -924,6 +1073,12 @@ loads_from_sinkpad is TRUE. + Optional. + Returns the current subsong. + If the current subsong mode is not GST_NONSTREAM_AUDIO_SUBSONG_MODE_SINGLE, this + function's return value is undefined. + If this function is implemented by the subclass, + @get_num_subsongs should be implemented as well. @@ -937,6 +1092,16 @@ loads_from_sinkpad is TRUE. + Optional. + Returns the number of subsongs available. + The return values 0 and 1 have a similar, but distinct, meaning. + If this function returns 0, then this decoder does not support subsongs at all. + @get_current_subsong must then also always return 0. In other words, this function + either never returns 0, or never returns anything else than 0. + A return value of 1 means that the media contains either only one or no subsongs + (the entire song is then considered to be one single subsong). 1 also means that only + this very media has no or just one subsong, and the decoder itself can + support multiple subsongs. @@ -950,6 +1115,8 @@ loads_from_sinkpad is TRUE. + Optional. + Returns the duration of a subsong. Returns GST_CLOCK_TIME_NONE if duration is unknown. @@ -966,6 +1133,9 @@ loads_from_sinkpad is TRUE. + Optional. + Returns tags for a subsong, or NULL if there are no tags. + Returned tags will be unref'd. @@ -982,6 +1152,13 @@ loads_from_sinkpad is TRUE. + Optional. + Sets the current subsong mode. Since this might influence the current playback position, + this function must set the initial_position integer argument to a defined value. + If the playback position is not affected at all, it must be set to GST_CLOCK_TIME_NONE. + If the subsong is restarted after the mode switch, it is recommended to set the value + to the position in the playback right after the switch (or 0 if the subsongs are always + reset back to the beginning). @@ -1001,6 +1178,19 @@ loads_from_sinkpad is TRUE. + Optional. + Sets the number of loops for playback. If this is called during playback, + the subclass must set any internal loop counters to zero. A loop value of -1 + means infinite looping; 0 means no looping; and when the num_loops is greater than 0, + playback should loop exactly num_loops times. If this function is implemented, + @get_num_loops should be implemented as well. The function can ignore the given values + and choose another; however, @get_num_loops should return this other value afterwards. + It is up to the subclass to define where the loop starts and ends. It can mean that only + a subset at the end or in the middle of a song is repeated, for example. + If the current subsong mode is GST_NONSTREAM_AUDIO_SUBSONG_MODE_SINGLE, then the subsong + is repeated this many times. If it is GST_NONSTREAM_AUDIO_SUBSONG_MODE_ALL, then all + subsongs are repeated this many times. With GST_NONSTREAM_AUDIO_SUBSONG_MODE_DECODER_DEFAULT, + the behavior is decoder specific. @@ -1017,6 +1207,8 @@ loads_from_sinkpad is TRUE. + Optional. + Returns the number of loops for playback. @@ -1030,6 +1222,10 @@ loads_from_sinkpad is TRUE. + Always required. + Returns a bitmask containing the output modes the subclass supports. + The mask is formed by a bitwise OR combination of integers, which can be calculated + this way: 1 << GST_NONSTREAM_AUDIO_OUTPUT_MODE_<mode> , where mode is either STEADY or LOOPING @@ -1043,6 +1239,11 @@ loads_from_sinkpad is TRUE. + Optional. + Sets the output mode the subclass has to use. Unlike with most other functions, the subclass + cannot choose a different mode; it must use the requested one. + If the output mode is set to LOOPING, @gst_nonstream_audio_decoder_handle_loop + must be called after playback moved back to the start of a loop. @@ -1062,6 +1263,11 @@ loads_from_sinkpad is TRUE. + Always required. + Allocates an output buffer, fills it with decoded audio samples, and must be passed on to + *buffer . The number of decoded samples must be passed on to *num_samples. + If decoding finishes or the decoding is no longer possible (for example, due to an + unrecoverable error), this function returns FALSE, otherwise TRUE. @@ -1094,6 +1300,12 @@ loads_from_sinkpad is TRUE. + Optional. + Sets up the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -1110,6 +1322,10 @@ loads_from_sinkpad is TRUE. + Optional. + Proposes buffer allocation parameters for upstream elements. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -1472,7 +1688,7 @@ Free-function: gst_buffer_unref - + diff --git a/girs/GstBadBaseCameraBin-1.0.gir b/girs/GstBadBaseCameraBin-1.0.gir index 9ea665eb1e1..10a488af841 100644 --- a/girs/GstBadBaseCameraBin-1.0.gir +++ b/girs/GstBadBaseCameraBin-1.0.gir @@ -54,6 +54,7 @@ and/or use gtk-doc annotations. --> + construct pipeline @@ -96,6 +97,7 @@ and/or use gtk-doc annotations. --> + set the zoom @@ -110,6 +112,7 @@ and/or use gtk-doc annotations. --> + configure pipeline for the chosen settings @@ -167,7 +170,7 @@ and/or use gtk-doc annotations. --> - + Set the chosen #GstCameraBinMode capture mode. @@ -214,16 +217,16 @@ and/or use gtk-doc annotations. --> - + - + - + - + When %TRUE, preview images should be posted to the bus when captures are made @@ -234,7 +237,7 @@ captures are made - + When TRUE new capture can be prepared. If FALSE capturing is ongoing and starting a new capture immediately is not possible. @@ -244,7 +247,7 @@ function, please schedule a new thread to do it. If you're using glib's mainloop you can use g_idle_add() for example. - + @@ -308,6 +311,7 @@ mainloop you can use g_idle_add() for example. + construct pipeline @@ -321,6 +325,7 @@ mainloop you can use g_idle_add() for example. + configure pipeline for the chosen settings @@ -334,6 +339,7 @@ mainloop you can use g_idle_add() for example. + set the zoom @@ -350,6 +356,7 @@ mainloop you can use g_idle_add() for example. + set the mode @@ -416,9 +423,9 @@ mainloop you can use g_idle_add() for example. - + - + diff --git a/girs/GstBase-1.0.gir b/girs/GstBase-1.0.gir index 889df8ad682..bcdf9a5391a 100644 --- a/girs/GstBase-1.0.gir +++ b/girs/GstBase-1.0.gir @@ -207,7 +207,11 @@ buffer pushed in it. Gets the maximum amount of bytes available, that is it returns the maximum value that can be supplied to gst_adapter_map() without that function -returning %NULL. +returning %NULL. + +Calling gst_adapter_map() with the amount of bytes returned by this function +may require expensive operations (like copying the data into a temporary +buffer) in some cases. number of bytes available in @adapter @@ -221,8 +225,11 @@ returning %NULL. - Gets the maximum number of bytes that are immediately available without -requiring any expensive operations (like copying the data into a + Gets the maximum number of bytes that can be retrieved in a single map +operation without merging buffers. + +Calling gst_adapter_map() with the amount of bytes returned by this function +will never require any expensive operations (like copying the data into a temporary buffer). @@ -962,7 +969,7 @@ buffer in the list before freeing the list after usage. - + @@ -1029,6 +1036,13 @@ Control is given to the subclass when all pads have data. This class used to live in gst-plugins-bad and was moved to core. + Mandatory. + Called when buffers are queued on all sinkpads. Classes + should iterate the GstElement->sinkpads and peek or steal + buffers from the #GstAggregatorPads. If the subclass returns + GST_FLOW_EOS, sending of the eos event will be taken care + of. Once / if a buffer has been constructed from the + aggregated buffers, the subclass should call _finish_buffer. @@ -1043,6 +1057,14 @@ This class used to live in gst-plugins-bad and was moved to core. + Optional. + Called when a buffer is received on a sink pad, the task of + clipping it and translating it to the current segment falls + on the subclass. The function should use the segment of data + and the negotiated media type on the pad to perform + clipping of input buffer. This function takes ownership of + buf and should output a buffer or return NULL in + if the buffer should be dropped. @@ -1060,6 +1082,10 @@ This class used to live in gst-plugins-bad and was moved to core. + Optional. + Called when a new pad needs to be created. Allows subclass that + don't have a single sink pad template to provide a pad based + on the provided information. @@ -1080,6 +1106,11 @@ This class used to live in gst-plugins-bad and was moved to core. + Optional. + Allows the subclass to influence the allocation choices. + Setup the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. @@ -1132,6 +1163,10 @@ sent before pushing the buffer. + Optional. + Fixate and return the src pad caps provided. The function takes + ownership of @caps and returns a fixated version of + @caps. @caps is not guaranteed to be writable. @@ -1146,6 +1181,10 @@ sent before pushing the buffer. + Optional. + Called after a successful flushing seek, once all the flush + stops have been received. Flush pad-specific data in + #GstAggregatorPad->flush. @@ -1157,6 +1196,12 @@ sent before pushing the buffer. + Optional. + Called when the element needs to know the running time of the next + rendered buffer for live pipelines. This causes deadline + based aggregation to occur. Defaults to returning + GST_CLOCK_TIME_NONE causing the element to wait for buffers + on all sink pads before aggregating. @@ -1184,6 +1229,8 @@ if #GstAggregatorClass::negotiate fails. + Optional. + Notifies subclasses what caps format has been negotiated @@ -1220,6 +1267,8 @@ control aggregating parameters for a given set of input samples. + Optional. + Allows the subclass to handle the allocation query from upstream. @@ -1240,6 +1289,9 @@ control aggregating parameters for a given set of input samples. + Optional. + Called when an event is received on a sink pad, the subclass + should always chain up. @@ -1257,6 +1309,9 @@ control aggregating parameters for a given set of input samples. + Optional. + Called when an event is received on a sink pad before queueing up + serialized events. The subclass should always chain up (Since: 1.18). @@ -1274,6 +1329,9 @@ control aggregating parameters for a given set of input samples. + Optional. + Called when a query is received on a sink pad, the subclass + should always chain up. @@ -1291,6 +1349,9 @@ control aggregating parameters for a given set of input samples. + Optional. + Called when a query is received on a sink pad before queueing up + serialized queries. The subclass should always chain up (Since: 1.18). @@ -1308,6 +1369,9 @@ control aggregating parameters for a given set of input samples. + Optional. + Called when the src pad is activated, it will start/stop its + pad task right after that call. @@ -1325,6 +1389,9 @@ control aggregating parameters for a given set of input samples. + Optional. + Called when an event is received on the src pad, the subclass + should always chain up. @@ -1339,6 +1406,9 @@ control aggregating parameters for a given set of input samples. + Optional. + Called when a query is received on the src pad, the subclass + should always chain up. @@ -1353,6 +1423,10 @@ control aggregating parameters for a given set of input samples. + Optional. + Called when the element goes from READY to PAUSED. + The subclass should get ready to process + aggregated buffers. @@ -1364,6 +1438,9 @@ control aggregating parameters for a given set of input samples. + Optional. + Called when the element goes from PAUSED to READY. + The subclass should free all resources and reset its state. @@ -1495,7 +1572,7 @@ by @trans; free it after use it - + Retrieves the latency values reported by @self in response to the latency query, or %GST_CLOCK_TIME_NONE if there is not live source connected and the element will not wait for the clock. @@ -1551,6 +1628,28 @@ control aggregating parameters for a given set of input samples. + + This method will push the provided event downstream. If needed, mandatory +events such as stream-start, caps, and segment events will be sent before +pushing the event. + +This API does not allow pushing stream-start, caps, segment and EOS events. +Specific API like gst_aggregator_set_src_caps() should be used for these. + + + + + + + The #GstAggregator + + + + the #GstEvent to push. + + + + Subclasses should call this when they have prepared the buffers they will aggregate for each of their sink pads, but @@ -1626,7 +1725,7 @@ sure upstream has had a fair chance to start up. - + Lets #GstAggregator sub-classes tell the baseclass what their internal latency is. Will also post a LATENCY message on the bus so the pipeline can reconfigure its global latency if the values changed. @@ -1705,14 +1804,14 @@ if it is used at all. - + Enables the emission of signals such as #GstAggregator::samples-selected - + - + Force minimum upstream latency (in nanoseconds). When sources with a higher latency are expected to be plugged in dynamically after the aggregator has started playing, this allows overriding the minimum @@ -1720,10 +1819,10 @@ latency reported by the initial source(s). This is only taken into account when larger than the actually reported minimum latency. - + - + @@ -1787,6 +1886,10 @@ _finish_buffer from inside that function. + Optional. + Called after a successful flushing seek, once all the flush + stops have been received. Flush pad-specific data in + #GstAggregatorPad->flush. @@ -1800,6 +1903,14 @@ _finish_buffer from inside that function. + Optional. + Called when a buffer is received on a sink pad, the task of + clipping it and translating it to the current segment falls + on the subclass. The function should use the segment of data + and the negotiated media type on the pad to perform + clipping of input buffer. This function takes ownership of + buf and should output a buffer or return NULL in + if the buffer should be dropped. @@ -1819,6 +1930,13 @@ _finish_buffer from inside that function. + Optional. + Called when a subclass calls gst_aggregator_finish_buffer() + from their aggregate function to push out a buffer. + Subclasses can override this to modify or decorate buffers + before they get pushed out. This function takes ownership + of the buffer passed. Subclasses that override this method + should always chain up to the parent class virtual method. @@ -1837,6 +1955,9 @@ _finish_buffer from inside that function. + Optional. + Called when an event is received on a sink pad, the subclass + should always chain up. @@ -1856,6 +1977,9 @@ _finish_buffer from inside that function. + Optional. + Called when a query is received on a sink pad, the subclass + should always chain up. @@ -1875,6 +1999,9 @@ _finish_buffer from inside that function. + Optional. + Called when an event is received on the src pad, the subclass + should always chain up. @@ -1891,6 +2018,9 @@ _finish_buffer from inside that function. + Optional. + Called when a query is received on the src pad, the subclass + should always chain up. @@ -1907,6 +2037,9 @@ _finish_buffer from inside that function. + Optional. + Called when the src pad is activated, it will start/stop its + pad task right after that call. @@ -1926,6 +2059,13 @@ _finish_buffer from inside that function. + Mandatory. + Called when buffers are queued on all sinkpads. Classes + should iterate the GstElement->sinkpads and peek or steal + buffers from the #GstAggregatorPads. If the subclass returns + GST_FLOW_EOS, sending of the eos event will be taken care + of. Once / if a buffer has been constructed from the + aggregated buffers, the subclass should call _finish_buffer. @@ -1942,6 +2082,9 @@ _finish_buffer from inside that function. + Optional. + Called when the element goes from PAUSED to READY. + The subclass should free all resources and reset its state. @@ -1955,6 +2098,10 @@ _finish_buffer from inside that function. + Optional. + Called when the element goes from READY to PAUSED. + The subclass should get ready to process + aggregated buffers. @@ -1968,6 +2115,12 @@ _finish_buffer from inside that function. + Optional. + Called when the element needs to know the running time of the next + rendered buffer for live pipelines. This causes deadline + based aggregation to occur. Defaults to returning + GST_CLOCK_TIME_NONE causing the element to wait for buffers + on all sink pads before aggregating. @@ -1981,6 +2134,10 @@ _finish_buffer from inside that function. + Optional. + Called when a new pad needs to be created. Allows subclass that + don't have a single sink pad template to provide a pad based + on the provided information. @@ -2003,6 +2160,12 @@ _finish_buffer from inside that function. + Lets subclasses update the #GstCaps representing + the src pad caps before usage. The result should end up + in @ret. Return %GST_AGGREGATOR_FLOW_NEED_DATA to indicate that the + element needs more information (caps, a buffer, etc) to + choose the correct caps. Should return ANY caps if the + stream has not caps at all. @@ -2022,6 +2185,10 @@ _finish_buffer from inside that function. + Optional. + Fixate and return the src pad caps provided. The function takes + ownership of @caps and returns a fixated version of + @caps. @caps is not guaranteed to be writable. @@ -2038,6 +2205,8 @@ _finish_buffer from inside that function. + Optional. + Notifies subclasses what caps format has been negotiated @@ -2054,6 +2223,11 @@ _finish_buffer from inside that function. + Optional. + Allows the subclass to influence the allocation choices. + Setup the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. @@ -2070,6 +2244,8 @@ _finish_buffer from inside that function. + Optional. + Allows the subclass to handle the allocation query from upstream. @@ -2092,6 +2268,8 @@ _finish_buffer from inside that function. + Optional. + Negotiate the caps with the peer (Since: 1.18). @@ -2107,6 +2285,9 @@ _finish_buffer from inside that function. + Optional. + Called when an event is received on a sink pad before queueing up + serialized events. The subclass should always chain up (Since: 1.18). @@ -2126,6 +2307,9 @@ _finish_buffer from inside that function. + Optional. + Called when a query is received on a sink pad before queueing up + serialized queries. The subclass should always chain up (Since: 1.18). @@ -2194,6 +2378,10 @@ _finish_buffer from inside that function. This class used to live in gst-plugins-bad and was moved to core. + Optional + Called when the pad has received a flush stop, this is the place + to flush any information specific to the pad, it allows for individual + pads to be flushed while others might not be. @@ -2208,6 +2396,9 @@ This class used to live in gst-plugins-bad and was moved to core. + Optional + Called before input buffers are queued in the pad, return %TRUE + if the buffer should be skipped. @@ -2312,7 +2503,7 @@ usage. - + Enables the emission of signals such as #GstAggregatorPad::buffer-consumed @@ -2348,6 +2539,10 @@ usage. + Optional + Called when the pad has received a flush stop, this is the place + to flush any information specific to the pad, it allows for individual + pads to be flushed while others might not be. @@ -2364,6 +2559,9 @@ usage. + Optional + Called before input buffers are queued in the pad, return %TRUE + if the buffer should be skipped. @@ -2388,21 +2586,21 @@ usage. - + - + - + Start at running time 0. - + Start at the running time of the first buffer that is received. - + Start at the running time selected by the `start-time` property. @@ -2913,6 +3111,8 @@ Things that subclass need to take care of: frame intervals. + Optional. + Convert between formats. @@ -2936,6 +3136,10 @@ Things that subclass need to take care of: + Optional. + Called until it doesn't return GST_FLOW_OK anymore for + the first buffers. Can be used by the subclass to detect + the stream format. @@ -2950,6 +3154,8 @@ Things that subclass need to take care of: + Optional. + Allows the subclass to do its own sink get caps if needed. @@ -2991,6 +3197,12 @@ if desired. + Optional. + Called just prior to pushing a frame (after any pending + events have been sent) to give subclass a chance to perform + additional actions at this time (e.g. tag sending) or to + decide whether this buffer should be dropped or not + (e.g. custom segment clipping). @@ -3005,6 +3217,8 @@ if desired. + Optional. + Allows the subclass to be notified of the actual caps set. @@ -3019,6 +3233,10 @@ if desired. + Optional. + Event handler on the sink pad. This function should chain + up to the parent implementation to let the default handler + run. @@ -3033,6 +3251,10 @@ if desired. + Optional. + Query handler on the sink pad. This function should chain + up to the parent implementation to let the default handler + run (Since: 1.2) @@ -3047,6 +3269,9 @@ if desired. + Optional. + Event handler on the source pad. Should chain up to the + parent to let the default handler run. @@ -3061,6 +3286,9 @@ if desired. + Optional. + Query handler on the source pad. Should chain up to the + parent to let the default handler run (Since: 1.2) @@ -3075,6 +3303,9 @@ if desired. + Optional. + Called when the element starts processing. + Allows opening external resources. @@ -3086,6 +3317,9 @@ if desired. + Optional. + Called when the element stops processing. + Allows closing external resources. @@ -3514,7 +3748,7 @@ into the frame data that the picture starts. - + If set to %TRUE, baseparse will unconditionally force parsing of the incoming data. This can be required in the rare cases where the incoming side-data (caps, pts, dts, ...) is not trusted by the user and wants to @@ -3557,6 +3791,9 @@ needed. At minimum @handle_frame needs to be overridden. + Optional. + Called when the element starts processing. + Allows opening external resources. @@ -3570,6 +3807,9 @@ needed. At minimum @handle_frame needs to be overridden. + Optional. + Called when the element stops processing. + Allows closing external resources. @@ -3583,6 +3823,8 @@ needed. At minimum @handle_frame needs to be overridden. + Optional. + Allows the subclass to be notified of the actual caps set. @@ -3599,6 +3841,16 @@ needed. At minimum @handle_frame needs to be overridden. + Parses the input data into valid frames as defined by subclass + which should be passed to gst_base_parse_finish_frame(). + The frame's input buffer is guaranteed writable, + whereas the input frame ownership is held by caller + (so subclass should make a copy if it needs to hang on). + Input buffer (data) is provided by baseclass with as much + metadata set as possible by baseclass according to upstream + information and/or subclass settings, + though subclass may still set buffer timestamp and duration + if desired. @@ -3618,6 +3870,12 @@ needed. At minimum @handle_frame needs to be overridden. + Optional. + Called just prior to pushing a frame (after any pending + events have been sent) to give subclass a chance to perform + additional actions at this time (e.g. tag sending) or to + decide whether this buffer should be dropped or not + (e.g. custom segment clipping). @@ -3634,6 +3892,8 @@ needed. At minimum @handle_frame needs to be overridden. + Optional. + Convert between formats. @@ -3659,6 +3919,10 @@ needed. At minimum @handle_frame needs to be overridden. + Optional. + Event handler on the sink pad. This function should chain + up to the parent implementation to let the default handler + run. @@ -3675,6 +3939,9 @@ needed. At minimum @handle_frame needs to be overridden. + Optional. + Event handler on the source pad. Should chain up to the + parent to let the default handler run. @@ -3691,6 +3958,8 @@ needed. At minimum @handle_frame needs to be overridden. + Optional. + Allows the subclass to do its own sink get caps if needed. @@ -3707,6 +3976,10 @@ needed. At minimum @handle_frame needs to be overridden. + Optional. + Called until it doesn't return GST_FLOW_OK anymore for + the first buffers. Can be used by the subclass to detect + the stream format. @@ -3723,6 +3996,10 @@ needed. At minimum @handle_frame needs to be overridden. + Optional. + Query handler on the sink pad. This function should chain + up to the parent implementation to let the default handler + run (Since: 1.2) @@ -3739,6 +4016,9 @@ needed. At minimum @handle_frame needs to be overridden. + Optional. + Query handler on the source pad. Should chain up to the + parent to let the default handler run (Since: 1.2) @@ -3915,7 +4195,7 @@ allocated on the stack. when the first non-queued frame is finished - + @@ -4034,6 +4314,11 @@ perform an ASYNC state change. This feature is mostly usable when dealing with non-synchronized streams or sparse streams. + Subclasses should override this when they can provide an + alternate method of spawning a thread to drive the pipeline in pull mode. + Should start or stop the pulling thread, depending on the value of the + "active" argument. Called after actually activating the sink pad in pull + mode. The default implementation starts a task on the sink pad. @@ -4048,6 +4333,7 @@ with non-synchronized streams or sparse streams. + Override this to handle events arriving on the sink pad @@ -4062,6 +4348,8 @@ with non-synchronized streams or sparse streams. + Only useful in pull mode. Implement if you have + ideas about what should be the default values for the caps you support. @@ -4114,6 +4402,8 @@ with non-synchronized streams or sparse streams. + Called to prepare the buffer for @render and @preroll. This + function is called before synchronisation is performed. @@ -4128,6 +4418,8 @@ with non-synchronized streams or sparse streams. + Called to prepare the buffer list for @render_list. This + function is called before synchronisation is performed. @@ -4142,6 +4434,7 @@ with non-synchronized streams or sparse streams. + Called to present the preroll buffer if desired. @@ -4156,6 +4449,7 @@ with non-synchronized streams or sparse streams. + configure the allocation query @@ -4170,6 +4464,7 @@ with non-synchronized streams or sparse streams. + perform a #GstQuery on the element. @@ -4184,6 +4479,8 @@ with non-synchronized streams or sparse streams. + Called when a buffer should be presented or output, at the + correct moment if the #GstBaseSink has been set to sync to the clock. @@ -4198,6 +4495,8 @@ with non-synchronized streams or sparse streams. + Same as @render but used with buffer lists instead of + buffers. @@ -4212,6 +4511,7 @@ with non-synchronized streams or sparse streams. + Notify subclass of changed caps @@ -4226,6 +4526,7 @@ with non-synchronized streams or sparse streams. + Start processing. Ideal for opening resources in the subclass @@ -4237,6 +4538,7 @@ with non-synchronized streams or sparse streams. + Stop processing. Subclasses should use this to close resources. @@ -4248,6 +4550,8 @@ with non-synchronized streams or sparse streams. + Unlock any pending access to the resource. Subclasses should + unblock any blocked function ASAP and call gst_base_sink_wait_preroll() @@ -4259,6 +4563,11 @@ with non-synchronized streams or sparse streams. + Clear the previous unlock request. Subclasses should clear + any state they set during #GstBaseSinkClass::unlock, and be ready to + continue where they left off after gst_base_sink_wait_preroll(), + gst_base_sink_wait() or gst_wait_sink_wait_clock() return or + #GstBaseSinkClass::render is called again. @@ -4270,6 +4579,9 @@ with non-synchronized streams or sparse streams. + Override this to implement custom logic to wait for the event + time (for events like EOS and GAP). Subclasses should always first + chain up to the default implementation. @@ -4307,7 +4619,7 @@ continue. Any other return value should be returned from the render vmethod. - + Get the number of bytes that the sink will pull when it is operating in pull mode. @@ -4338,7 +4650,7 @@ current segment. - + Get the last sample that arrived in the sink and was used for preroll or for rendering. This property can be used to generate thumbnails. @@ -4373,7 +4685,7 @@ Free-function: gst_sample_unref - + Get the maximum amount of bits per second that the sink will render. @@ -4387,7 +4699,7 @@ Free-function: gst_sample_unref - + Gets the max lateness value. See gst_base_sink_set_max_lateness() for more details. @@ -4404,7 +4716,7 @@ unlimited time. - + Get the processing deadline of @sink. see gst_base_sink_set_processing_deadline() for more information about the processing deadline. @@ -4420,7 +4732,7 @@ the processing deadline. - + Get the render delay of @sink. see gst_base_sink_set_render_delay() for more information about the render delay. @@ -4435,7 +4747,7 @@ information about the render delay. - + Return various #GstBaseSink statistics. This function returns a #GstStructure with name `application/x-gst-base-sink-stats` with the following fields: @@ -4454,7 +4766,7 @@ with name `application/x-gst-base-sink-stats` with the following fields: - + Checks if @sink is currently configured to synchronize against the clock. @@ -4469,7 +4781,7 @@ clock. - + Get the time that will be inserted between frames to control the maximum buffers per second. @@ -4484,7 +4796,7 @@ maximum buffers per second. - + Get the synchronisation offset of @sink. @@ -4603,7 +4915,7 @@ against the clock or when it is dealing with sparse streams. - + Set the number of bytes that the sink will pull when it is operating in pull mode. @@ -4656,7 +4968,7 @@ property. - + Set the maximum amount of bits per second that the sink will render. @@ -4673,7 +4985,7 @@ property. - + Sets the new max lateness value to @max_lateness. This value is used to decide if a buffer should be dropped or not based on the buffer timestamp and the current clock time. A value of -1 means @@ -4693,7 +5005,7 @@ an unlimited time. - + Maximum amount of time (in nanoseconds) that the pipeline can take for processing the buffer. This is added to the latency of live pipelines. @@ -4731,7 +5043,7 @@ This function is usually called by subclasses. - + Set the render delay in @sink to @delay. The render delay is the time between actual rendering of a buffer and its synchronisation time. Some devices might delay media rendering which can be compensated for with this @@ -4756,7 +5068,7 @@ This function is usually called by subclasses. - + Configures @sink to synchronize on the clock or not. When @sync is %FALSE, incoming samples will be played as fast as possible. If @sync is %TRUE, the timestamps of the incoming @@ -4777,7 +5089,7 @@ contents. - + Set the time that will be inserted between rendered buffers. This can be used to control the maximum buffers per second that the sink will render. @@ -4796,7 +5108,7 @@ will render. - + Adjust the synchronisation of @sink with @offset. A negative value will render buffers earlier than their timestamp. A positive value will delay rendering. This function can be used to fix playback of badly timestamped @@ -4916,55 +5228,55 @@ continue. Any other return value should be returned from the render vmethod. - + If set to %TRUE, the basesink will perform asynchronous state changes. When set to %FALSE, the sink will not signal the parent when it prerolls. Use this option when dealing with sparse streams or when synchronisation is not required. - + The amount of bytes to pull when operating in pull mode. - + Enable the last-sample property. If %FALSE, basesink doesn't keep a reference to the last buffer arrived and the last-sample property is always set to %NULL. This can be useful if you need buffers to be released as soon as possible, eg. if you're using a buffer pool. - + The last buffer that arrived in the sink and was used for preroll or for rendering. This property can be used to generate thumbnails. This property can be %NULL when the sink has not yet received a buffer. - + Control the maximum amount of bits that will be rendered per second. Setting this property to a value bigger than 0 will make the sink delay rendering of the buffers when it would exceed to max-bitrate. - + - + Maximum amount of time (in nanoseconds) that the pipeline can take for processing the buffer. This is added to the latency of live pipelines. - + - + The additional delay between synchronisation and actual rendering of the media. This property will add additional latency to the device in order to make other sinks compensate for the delay. - + Various #GstBaseSink statistics. This property returns a #GstStructure with name `application/x-gst-base-sink-stats` with the following fields: @@ -4973,16 +5285,16 @@ with name `application/x-gst-base-sink-stats` with the following fields: - "rendered" G_TYPE_UINT64 Number of rendered frames - + - + The time to insert between buffers. This property can be used to control the maximum amount of buffers per second to render. Setting this property to a value bigger than 0 will make the sink create THROTTLE QoS events. - + Controls the final synchronisation, a negative value will render the buffer earlier while a positive value delays playback. This property can be used to fix synchronisation in bad files. @@ -5064,6 +5376,7 @@ output/present buffers. + Called to get sink pad caps from the subclass @@ -5080,6 +5393,7 @@ output/present buffers. + Notify subclass of changed caps @@ -5096,6 +5410,8 @@ output/present buffers. + Only useful in pull mode. Implement if you have + ideas about what should be the default values for the caps you support. @@ -5112,6 +5428,11 @@ output/present buffers. + Subclasses should override this when they can provide an + alternate method of spawning a thread to drive the pipeline in pull mode. + Should start or stop the pulling thread, depending on the value of the + "active" argument. Called after actually activating the sink pad in pull + mode. The default implementation starts a task on the sink pad. @@ -5128,6 +5449,8 @@ output/present buffers. + Called to get the start and end times for synchronising + the passed buffer to the clock @@ -5152,6 +5475,7 @@ output/present buffers. + configure the allocation query @@ -5168,6 +5492,7 @@ output/present buffers. + Start processing. Ideal for opening resources in the subclass @@ -5181,6 +5506,7 @@ output/present buffers. + Stop processing. Subclasses should use this to close resources. @@ -5194,6 +5520,8 @@ output/present buffers. + Unlock any pending access to the resource. Subclasses should + unblock any blocked function ASAP and call gst_base_sink_wait_preroll() @@ -5207,6 +5535,11 @@ output/present buffers. + Clear the previous unlock request. Subclasses should clear + any state they set during #GstBaseSinkClass::unlock, and be ready to + continue where they left off after gst_base_sink_wait_preroll(), + gst_base_sink_wait() or gst_wait_sink_wait_clock() return or + #GstBaseSinkClass::render is called again. @@ -5220,6 +5553,7 @@ output/present buffers. + perform a #GstQuery on the element. @@ -5236,6 +5570,7 @@ output/present buffers. + Override this to handle events arriving on the sink pad @@ -5252,6 +5587,9 @@ output/present buffers. + Override this to implement custom logic to wait for the event + time (for events like EOS and GAP). Subclasses should always first + chain up to the default implementation. @@ -5268,6 +5606,8 @@ output/present buffers. + Called to prepare the buffer for @render and @preroll. This + function is called before synchronisation is performed. @@ -5284,6 +5624,8 @@ output/present buffers. + Called to prepare the buffer list for @render_list. This + function is called before synchronisation is performed. @@ -5300,6 +5642,7 @@ output/present buffers. + Called to present the preroll buffer if desired. @@ -5316,6 +5659,8 @@ output/present buffers. + Called when a buffer should be presented or output, at the + correct moment if the #GstBaseSink has been set to sync to the clock. @@ -5332,6 +5677,8 @@ output/present buffers. + Same as @render but used with buffer lists instead of + buffers. @@ -5353,7 +5700,7 @@ output/present buffers. - + @@ -5515,6 +5862,7 @@ implementation will call alloc if no allocated @buf is provided and then call fi + configure the allocation query @@ -5529,6 +5877,7 @@ implementation will call alloc if no allocated @buf is provided and then call fi + Perform seeking on the resource to the indicated segment. @@ -5543,6 +5892,7 @@ implementation will call alloc if no allocated @buf is provided and then call fi + Override this to implement custom event handling. @@ -5557,6 +5907,8 @@ implementation will call alloc if no allocated @buf is provided and then call fi + Ask the subclass to fill the buffer with data for offset and size. The + passed buffer is guaranteed to hold the requested amount of bytes. @@ -5647,6 +5999,7 @@ out. The base class will sync on the clock using these times. + Check if the source can seek @@ -5678,6 +6031,12 @@ buffer is allocated. + Prepare the #GstSegment that will be passed to the + #GstBaseSrcClass::do_seek vmethod for executing a seek + request. Sub-classes should override this if they support seeking in + formats other than the configured native format. By default, it tries to + convert the seek arguments to the configured native format and prepare a + segment in that format. @@ -5695,6 +6054,7 @@ buffer is allocated. + Handle a requested query. @@ -5727,6 +6087,10 @@ buffer is allocated. + Start processing. Subclasses should open resources and prepare + to produce data. Implementation should call gst_base_src_start_complete() + when the operation completes, either from the current thread or any other + thread that finishes the start operation asynchronously. @@ -5738,6 +6102,7 @@ buffer is allocated. + Stop processing. Subclasses should use this to close resources. @@ -5749,6 +6114,12 @@ buffer is allocated. + Unlock any pending access to the resource. Subclasses should unblock + any blocked function ASAP. In particular, any `create()` function in + progress should be unblocked and should return GST_FLOW_FLUSHING. Any + future #GstBaseSrcClass::create function call should also return + GST_FLOW_FLUSHING until the #GstBaseSrcClass::unlock_stop function has + been called. @@ -5760,6 +6131,9 @@ buffer is allocated. + Clear the previous unlock request. Subclasses should clear any + state they set during #GstBaseSrcClass::unlock, such as clearing command + queues. @@ -5795,7 +6169,7 @@ used - + Get the number of bytes that @src will push out with each buffer. @@ -5823,7 +6197,7 @@ by the src; unref it after usage. - + Query if @src timestamps outgoing buffers based on the current running_time. @@ -6025,7 +6399,7 @@ blocking operation should be unblocked with the unlock vmethod. - + If @automatic_eos is %TRUE, @src will automatically go EOS if a buffer after the total size is returned. By default this is %TRUE but sources that can't return an authoritative size and only know that they're EOS @@ -6051,7 +6425,7 @@ returns %GST_FLOW_EOS. - + Set the number of bytes that @src will push out with each buffer. When @blocksize is set to -1, a default length will be used. @@ -6087,7 +6461,7 @@ returns %GST_FLOW_EOS. - + Configure @src to automatically timestamp outgoing buffers based on the current running_time of the pipeline. This property is mostly useful for live sources. @@ -6260,20 +6634,20 @@ continue. Any other return value should be returned from the create vmethod. - + See gst_base_src_set_automatic_eos() - + - + - + - + @@ -6346,6 +6720,7 @@ buffers. + Called to get the caps to report @@ -6362,6 +6737,7 @@ buffers. + Negotiated the caps with the peer. @@ -6377,6 +6753,8 @@ buffers. + Called during negotiation if caps need fixating. Implement instead of + setting a fixate function on the source pad. @@ -6394,6 +6772,7 @@ buffers. + Notify subclass of changed output caps @@ -6413,6 +6792,7 @@ buffers. + configure the allocation query @@ -6429,6 +6809,10 @@ buffers. + Start processing. Subclasses should open resources and prepare + to produce data. Implementation should call gst_base_src_start_complete() + when the operation completes, either from the current thread or any other + thread that finishes the start operation asynchronously. @@ -6442,6 +6826,7 @@ buffers. + Stop processing. Subclasses should use this to close resources. @@ -6455,6 +6840,9 @@ buffers. + Given a buffer, return the start and stop time when it + should be pushed out. The base class will sync on the clock using + these times. @@ -6477,6 +6865,8 @@ buffers. + Return the total size of the resource, in the format set by + gst_base_src_set_format(). @@ -6494,6 +6884,7 @@ buffers. + Check if the source can seek @@ -6507,6 +6898,12 @@ buffers. + Prepare the #GstSegment that will be passed to the + #GstBaseSrcClass::do_seek vmethod for executing a seek + request. Sub-classes should override this if they support seeking in + formats other than the configured native format. By default, it tries to + convert the seek arguments to the configured native format and prepare a + segment in that format. @@ -6526,6 +6923,7 @@ buffers. + Perform seeking on the resource to the indicated segment. @@ -6542,6 +6940,12 @@ buffers. + Unlock any pending access to the resource. Subclasses should unblock + any blocked function ASAP. In particular, any `create()` function in + progress should be unblocked and should return GST_FLOW_FLUSHING. Any + future #GstBaseSrcClass::create function call should also return + GST_FLOW_FLUSHING until the #GstBaseSrcClass::unlock_stop function has + been called. @@ -6555,6 +6959,9 @@ buffers. + Clear the previous unlock request. Subclasses should clear any + state they set during #GstBaseSrcClass::unlock, such as clearing command + queues. @@ -6568,6 +6975,7 @@ buffers. + Handle a requested query. @@ -6584,6 +6992,7 @@ buffers. + Override this to implement custom event handling. @@ -6600,6 +7009,13 @@ buffers. + Ask the subclass to create a buffer with offset and size. When the + subclass returns GST_FLOW_OK, it MUST return a buffer of the requested size + unless fewer bytes are available because an EOS condition is near. No + buffer should be returned when the return value is different from + GST_FLOW_OK. A return value of GST_FLOW_EOS signifies that the end of + stream is reached. The default implementation will call + #GstBaseSrcClass::alloc and then call #GstBaseSrcClass::fill. @@ -6622,6 +7038,8 @@ buffers. + Ask the subclass to allocate a buffer with for offset and size. The + default implementation will create a new buffer from the negotiated allocator. @@ -6644,6 +7062,8 @@ buffers. + Ask the subclass to fill the buffer with data for offset and size. The + passed buffer is guaranteed to hold the requested amount of bytes. @@ -6684,7 +7104,7 @@ buffers. offset to define more flags - + @@ -6794,6 +7214,10 @@ It provides for: * Implied %FALSE if ONLY transform function is implemented. + Optional. + Subclasses can override this method to check if @caps can be + handled by the element. The default implementation might not be + the most optimal way to check this in all cases. @@ -6811,6 +7235,10 @@ It provides for: + Optional. + This method is called right before the base class will + start processing. Dynamic properties or other delayed + configuration could be performed in this method. @@ -6825,6 +7253,10 @@ It provides for: + Optional. + Copy the metadata from the input buffer to the output buffer. + The default implementation will copy the flags, timestamps and + offsets of the buffer. @@ -6842,6 +7274,14 @@ It provides for: + Setup the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. This function is only called + when not operating in passthrough mode. The default + implementation will remove all memory dependent metadata. + If there is a @filter_meta method implementation, it will + be called for all metadata API in the downstream query, + otherwise the metadata API is removed. @@ -6856,6 +7296,9 @@ It provides for: + Return %TRUE if the metadata API should be proposed in the + upstream allocation query. The default implementation is %NULL + and will cause all metadata to be removed. @@ -6944,6 +7387,14 @@ It provides for: + Propose buffer allocation parameters for upstream elements. + This function must be implemented if the element reads or + writes the buffer content. The query that was passed to + the decide_allocation is passed in this method (or %NULL + when the element is in passthrough mode). The default + implementation will pass the query downstream when in + passthrough mode and will copy all the filtered metadata + API in non-passthrough mode. @@ -6961,6 +7412,10 @@ It provides for: + Optional. + Handle a requested query. Subclasses that implement this + must chain up to the parent if they didn't handle the + query @@ -6978,6 +7433,7 @@ It provides for: + Allows the subclass to be notified of the actual caps set. @@ -7023,6 +7479,9 @@ It provides for: + Optional. + Called when the element starts processing. + Allows opening external resources. @@ -7034,6 +7493,9 @@ It provides for: + Optional. + Called when the element stops processing. + Allows closing external resources. @@ -7045,6 +7507,13 @@ It provides for: + Function which accepts a new input buffer and pre-processes it. + The default implementation performs caps (re)negotiation, then + QoS if needed, and places the input buffer into the @queued_buf + member variable. If the buffer is dropped due to QoS, it returns + GST_BASE_TRANSFORM_FLOW_DROPPED. If this input buffer is not + contiguous with any previous input buffer, then @is_discont + is set to %TRUE. (Since: 1.6) @@ -7062,6 +7531,10 @@ It provides for: + Required if the element does not operate in-place. + Transforms one incoming buffer to one outgoing buffer. + The function is allowed to change size/timestamp/duration + of the outgoing buffer. @@ -7079,6 +7552,9 @@ It provides for: + Optional. Given the pad in this direction and the given + caps, what caps are allowed on the other pad in this + element ? @@ -7099,6 +7575,8 @@ It provides for: + Required if the element operates in-place. + Transform the incoming buffer in-place. @@ -7113,6 +7591,10 @@ It provides for: + Optional. Transform the metadata on the input buffer to the + output buffer. By default this method copies all meta without + tags. Subclasses can implement this method and return %TRUE if + the metadata is to be copied. @@ -7472,7 +7954,7 @@ downstream - + @@ -7527,6 +8009,9 @@ same type and quantity) it should provide @transform_ip. + Optional. Given the pad in this direction and the given + caps, what caps are allowed on the other pad in this + element ? @@ -7549,6 +8034,10 @@ same type and quantity) it should provide @transform_ip. + Optional. Given the pad in this direction and the given + caps, fixate the caps on the other pad. The function takes + ownership of @othercaps and returns a fixated version of + @othercaps. @othercaps is not guaranteed to be writable. @@ -7571,6 +8060,10 @@ same type and quantity) it should provide @transform_ip. + Optional. + Subclasses can override this method to check if @caps can be + handled by the element. The default implementation might not be + the most optimal way to check this in all cases. @@ -7590,6 +8083,7 @@ same type and quantity) it should provide @transform_ip. + Allows the subclass to be notified of the actual caps set. @@ -7609,6 +8103,10 @@ same type and quantity) it should provide @transform_ip. + Optional. + Handle a requested query. Subclasses that implement this + must chain up to the parent if they didn't handle the + query @@ -7628,6 +8126,14 @@ same type and quantity) it should provide @transform_ip. + Setup the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. This function is only called + when not operating in passthrough mode. The default + implementation will remove all memory dependent metadata. + If there is a @filter_meta method implementation, it will + be called for all metadata API in the downstream query, + otherwise the metadata API is removed. @@ -7644,6 +8150,9 @@ same type and quantity) it should provide @transform_ip. + Return %TRUE if the metadata API should be proposed in the + upstream allocation query. The default implementation is %NULL + and will cause all metadata to be removed. @@ -7666,6 +8175,14 @@ same type and quantity) it should provide @transform_ip. + Propose buffer allocation parameters for upstream elements. + This function must be implemented if the element reads or + writes the buffer content. The query that was passed to + the decide_allocation is passed in this method (or %NULL + when the element is in passthrough mode). The default + implementation will pass the query downstream when in + passthrough mode and will copy all the filtered metadata + API in non-passthrough mode. @@ -7685,6 +8202,11 @@ same type and quantity) it should provide @transform_ip. + Optional. Given the size of a buffer in the given direction + with the given caps, calculate the size in bytes of a buffer + on the other pad with the given other caps. + The default implementation uses get_unit_size and keeps + the number of units the same. @@ -7713,6 +8235,8 @@ same type and quantity) it should provide @transform_ip. + Required if the transform is not in-place. + Get the size in bytes of one unit for the given caps. @@ -7732,6 +8256,9 @@ same type and quantity) it should provide @transform_ip. + Optional. + Called when the element starts processing. + Allows opening external resources. @@ -7745,6 +8272,9 @@ same type and quantity) it should provide @transform_ip. + Optional. + Called when the element stops processing. + Allows closing external resources. @@ -7758,6 +8288,9 @@ same type and quantity) it should provide @transform_ip. + Optional. + Event handler on the sink pad. The default implementation + handles the event and forwards it downstream. @@ -7774,6 +8307,9 @@ same type and quantity) it should provide @transform_ip. + Optional. + Event handler on the source pad. The default implementation + handles the event and forwards it upstream. @@ -7790,6 +8326,15 @@ same type and quantity) it should provide @transform_ip. + Optional. + Subclasses can override this to do their own + allocation of output buffers. Elements that only do + analysis can return a subbuffer or even just + return a reference to the input buffer (if in + passthrough mode). The default implementation will + use the negotiated allocator or bufferpool and + transform_size to allocate an output buffer or it + will return the input buffer in passthrough mode. @@ -7809,6 +8354,10 @@ same type and quantity) it should provide @transform_ip. + Optional. + Copy the metadata from the input buffer to the output buffer. + The default implementation will copy the flags, timestamps and + offsets of the buffer. @@ -7828,6 +8377,10 @@ same type and quantity) it should provide @transform_ip. + Optional. Transform the metadata on the input buffer to the + output buffer. By default this method copies all meta without + tags. Subclasses can implement this method and return %TRUE if + the metadata is to be copied. @@ -7850,6 +8403,10 @@ same type and quantity) it should provide @transform_ip. + Optional. + This method is called right before the base class will + start processing. Dynamic properties or other delayed + configuration could be performed in this method. @@ -7866,6 +8423,10 @@ same type and quantity) it should provide @transform_ip. + Required if the element does not operate in-place. + Transforms one incoming buffer to one outgoing buffer. + The function is allowed to change size/timestamp/duration + of the outgoing buffer. @@ -7885,6 +8446,8 @@ same type and quantity) it should provide @transform_ip. + Required if the element operates in-place. + Transform the incoming buffer in-place. @@ -7901,6 +8464,13 @@ same type and quantity) it should provide @transform_ip. + Function which accepts a new input buffer and pre-processes it. + The default implementation performs caps (re)negotiation, then + QoS if needed, and places the input buffer into the @queued_buf + member variable. If the buffer is dropped due to QoS, it returns + GST_BASE_TRANSFORM_FLOW_DROPPED. If this input buffer is not + contiguous with any previous input buffer, then @is_discont + is set to %TRUE. (Since: 1.6) @@ -7920,6 +8490,15 @@ same type and quantity) it should provide @transform_ip. + Called after each new input buffer is submitted repeatedly + until it either generates an error or fails to generate an output + buffer. The default implementation takes the contents of the + @queued_buf variable, generates an output buffer if needed + by calling the class @prepare_output_buffer, and then + calls either @transform or @transform_ip. Elements that don't + do 1-to-1 transformations of input to output buffers can either + return GST_BASE_TRANSFORM_FLOW_DROPPED or simply not generate + an output buffer until they are ready to do so. (Since: 1.6) @@ -7941,7 +8520,7 @@ same type and quantity) it should provide @transform_ip. - + @@ -11185,7 +11764,7 @@ memory and resources allocated for it. - + @@ -12049,7 +12628,7 @@ gst_collect_pads_set_flushing nor gst_collect_pads_clear from this function. - + @@ -12386,13 +12965,13 @@ MT Safe. - + - + - + @@ -12555,7 +13134,7 @@ This function should also drop the reference to @object the owner of the - + @@ -12574,7 +13153,7 @@ This function should also drop the reference to @object the owner of the - + Utility struct to help handling #GstFlowReturn combination. Useful for #GstElement<!-- -->s that have multiple source pads and need to combine the different #GstFlowReturn for those pads. @@ -12981,6 +13560,7 @@ no allocated @buf is provided and then call fill. + Ask the subclass to fill the buffer with data. @@ -13013,6 +13593,10 @@ buffers. + Ask the subclass to create a buffer. The subclass decides which + size this buffer should be. Other then that, refer to + #GstBaseSrc<!-- -->.create() for more details. If this method is + not implemented, @alloc followed by @fill will be called. @@ -13029,6 +13613,9 @@ buffers. + Ask the subclass to allocate a buffer. The subclass decides which + size this buffer should be. The default implementation will create + a new buffer from the negotiated allocator. @@ -13045,6 +13632,7 @@ buffers. + Ask the subclass to fill the buffer with data. @@ -13066,7 +13654,7 @@ buffers. - + #GstQueueArray is an object that provides standard queue functionality based on an array instead of linked lists. This reduces the overhead caused by memory management by a large factor. @@ -13547,7 +14135,7 @@ of size @struct_size, with an initial queue size of @initial_size. - + The opaque #GstTypeFindData structure. diff --git a/girs/GstCheck-1.0.gir b/girs/GstCheck-1.0.gir index f729651ce10..a562e9cacf2 100644 --- a/girs/GstCheck-1.0.gir +++ b/girs/GstCheck-1.0.gir @@ -31,7 +31,7 @@ and/or use gtk-doc annotations. --> - + Opaque structure containing data about a log filter function. @@ -2124,10 +2124,10 @@ MT safe. - + - + Opaque handle representing a GstHarness stress testing thread. @@ -2145,7 +2145,7 @@ MT safe. - + Opaque consistency checker handle. @@ -2674,10 +2674,10 @@ with information about the pending clock notification - + - + When a #GstTestClock is constructed it will have a certain start time set. If the clock was created using gst_test_clock_new_with_start_time() then this property contains the value of the @start_time argument. If @@ -2700,7 +2700,7 @@ this property contains the value 0. - + diff --git a/girs/GstCodecs-1.0.gir b/girs/GstCodecs-1.0.gir index cc58e6407bf..61713f1c299 100644 --- a/girs/GstCodecs-1.0.gir +++ b/girs/GstCodecs-1.0.gir @@ -7,6 +7,7 @@ and/or use gtk-doc annotations. --> + @@ -384,7 +385,7 @@ decoding process for the #GstAV1Picture - + @@ -862,7 +863,7 @@ the @system_frame_number - + The compliance controls the behavior of the decoder to handle some subtle cases and contexts, such as the low-latency DPB bumping or mapping the baseline profile as the constrained-baseline profile, @@ -1085,17 +1086,17 @@ etc. - + The decoder behavior is automatically choosen. - + The decoder behavior strictly conforms to the SPEC. All the decoder behaviors conform to the SPEC, not including any nonstandard behavior which is not mentioned in the SPEC. - + The decoder behavior normally conforms to the SPEC. Most behaviors conform to the SPEC but including some nonstandard features which are widely used or @@ -1109,7 +1110,7 @@ etc. have problems when a real baseline stream comes with FMO or ASO. - + The decoder behavior flexibly conforms to the SPEC. It uses the nonstandard features more aggressively in order to get better performance(for @@ -1119,10 +1120,10 @@ etc. disorder when reference frames POC decrease in decoder order. - + - + Store the @picture @@ -2217,10 +2218,10 @@ the @system_frame_number - + - + Store the @picture and perform increase pic_latency_cnt as defined in @@ -2646,6 +2647,759 @@ corresponding to the @system_frame_number + + The opaque #GstH266Decoder data structure. + + + Provides per slice data with parsed slice header and required raw bitstream +for subclass to decode it. + + + + + + + a #GstH266Decoder + + + + a #GstH266Picture + + + + a #GstH266Slice + + + + + + Optional. Called per one #GstH266Picture to notify subclass to finish +decoding process for the #GstH266Picture + + + + + + + a #GstH266Decoder + + + + a #GstH266Picture + + + + + + Optional. Called by baseclass to query whether delaying output is +preferred by subclass or not. + + + the number of perferred delayed output frame + + + + + a #GstH266Decoder + + + + whether upstream is live or not + + + + + + Optional. Called whenever new #GstH266Picture is created. +Subclass can set implementation specific user data +on the #GstH266Picture via gst_h266_picture_set_user_data + + + + + + + a #GstH266Decoder + + + + a #GstVideoCodecFrame + + + + a #GstH266Picture + + + + + + Notifies subclass of video sequence update + + + + + + + a #GstH266Decoder + + + + a #GstH266SPS + + + + the size of dpb including preferred output delay + by subclass reported via get_preferred_output_delay method. + + + + + + + + + + + + + + + + + + + + + + + Optional. Called per one #GstH266Picture to notify subclass to prepare +decoding process for the #GstH266Picture + + + + + + + a #GstH266Decoder + + + + a #GstH266Picture + + + + a #GstH266Slice + + + + a #GstH266Dpb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The opaque #GstH266DecoderClass data structure. + + + + + + + + + + + + + a #GstH266Decoder + + + + a #GstH266SPS + + + + the size of dpb including preferred output delay + by subclass reported via get_preferred_output_delay method. + + + + + + + + + + + + + + a #GstH266Decoder + + + + a #GstVideoCodecFrame + + + + a #GstH266Picture + + + + + + + + + + + + + + a #GstH266Decoder + + + + a #GstH266Picture + + + + a #GstH266Slice + + + + a #GstH266Dpb + + + + + + + + + + + + + + a #GstH266Decoder + + + + a #GstH266Picture + + + + a #GstH266Slice + + + + + + + + + + + + + + a #GstH266Decoder + + + + a #GstH266Picture + + + + + + + + + + + + + + + + + + + + + + + + + + + + + the number of perferred delayed output frame + + + + + a #GstH266Decoder + + + + whether upstream is live or not + + + + + + + + + + + + + + + + The #GstH266Dpb represents the dpb for decoding. + + + Store the @picture and perform increase pic_latency_cnt as defined in +"C.5.2.3 Additional bumping" process + + + + + + + a #GstH266Dpb + + + + a #GstH266Picture + + + + + + Perform bumping process as defined in C.5.2.4 "Bumping" process. +If @drain is %TRUE, @dpb will remove a #GstH266Picture from internal array +so that returned #GstH266Picture could hold the last reference of it. + + + a #GstH266Picture which is needed to be +outputted + + + + + a #GstH266Dpb + + + + whether draining or not + + + + + + Clear all stored #GstH266Picture + + + + + + + a #GstH266Dpb + + + + + + Delete unneeded pictures from dpb as defined in "C.5.2.2 Output and +removal of pictures from the DPB". + + + + + + + a #GstH266Dpb + + + + + + Free the @dpb + + + + + + + a #GstH266Dpb to free + + + + + + + + the number of maximum pictures + + + + + a #GstH266Dpb + + + + + + Find a picture which has matching poc + + + a #GstH266Picture + + + + + a #GstH266Dpb + + + + a picture order count + + + + + + Find a picture which has matching poc_lsb + + + a #GstH266Picture + + + + + a #GstH266Dpb + + + + a picture order count lsb + + + + + + + + a #GArray of + #GstH266Picture stored in @dpb + + + + + + + a #GstH266Dpb + + + + + + + + the length of stored dpb array + + + + + a #GstH266Dpb + + + + + + Mark all pictures are no needed for output + + + + + + + a #GstH266Dpb + + + + + + Mark all pictures are not referenced + + + + + + + a #GstH266Dpb + + + + + + + + %TRUE if bumping is required + + + + + a #GstH266Dpb + + + + dpb_max_num_reorder_pics[HighestTid] + + + + MaxLatencyPictures[HighestTid] + + + + dpb_max_dec_pic_buffering_minus1[HighestTid] + 1 + or zero if this shouldn't be used for bumping decision. + + + + + + + + The number of referenced pictures in dpb. + + + + + a #GstH266Dpb + + + + + + Set the number of maximum allowed pictures to store + + + + + + + a #GstH266Dpb + + + + the maximum number of picture + + + + + + Create new #GstH266Dpb + + + a new #GstH266Dpb + + + + + + The #GstH266Picture represents a picture for decoding. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create new #GstH266Picture + + + a new #GstH266Picture + + + + + + The #GstH266Slice represents a slice for decoding. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2709,6 +3463,27 @@ corresponding to the @system_frame_number + + + + + + + + + + + + + + + + + + + + + @@ -3215,10 +3990,10 @@ decoding process for the #GstMpeg2Picture - + - + Store the @picture @@ -3616,6 +4391,9 @@ outputted + Optional. + Called per one #GstVp8Picture to notify subclass to finish + decoding process for the #GstVp8Picture @@ -3649,6 +4427,10 @@ preferred by subclass or not. + Optional. + Called whenever new #GstVp8Picture is created. + Subclass can set implementation specific user data + on the #GstVp8Picture via gst_vp8_picture_set_user_data @@ -3666,6 +4448,7 @@ preferred by subclass or not. + Notifies subclass of SPS update @@ -3683,6 +4466,11 @@ preferred by subclass or not. + Called with a #GstVp8Picture which is required to be outputted. + Subclass can retrieve parent #GstVideoCodecFrame by using + gst_video_decoder_get_frame() with system_frame_number + and the #GstVideoCodecFrame must be consumed by subclass via + gst_video_decoder_{finish,drop,release}_frame(). @@ -3700,6 +4488,9 @@ preferred by subclass or not. + Optional. + Called per one #GstVp8Picture to notify subclass to prepare + decoding process for the #GstVp8Picture @@ -3743,6 +4534,7 @@ preferred by subclass or not. + Notifies subclass of SPS update @@ -3762,6 +4554,10 @@ preferred by subclass or not. + Optional. + Called whenever new #GstVp8Picture is created. + Subclass can set implementation specific user data + on the #GstVp8Picture via gst_vp8_picture_set_user_data @@ -3781,6 +4577,9 @@ preferred by subclass or not. + Optional. + Called per one #GstVp8Picture to notify subclass to prepare + decoding process for the #GstVp8Picture @@ -3816,6 +4615,9 @@ preferred by subclass or not. + Optional. + Called per one #GstVp8Picture to notify subclass to finish + decoding process for the #GstVp8Picture @@ -3832,6 +4634,11 @@ preferred by subclass or not. + Called with a #GstVp8Picture which is required to be outputted. + Subclass can retrieve parent #GstVideoCodecFrame by using + gst_video_decoder_get_frame() with system_frame_number + and the #GstVideoCodecFrame must be consumed by subclass via + gst_video_decoder_{finish,drop,release}_frame(). @@ -3875,7 +4682,7 @@ preferred by subclass or not. - + @@ -4294,7 +5101,7 @@ profile. - + @@ -4998,6 +5805,14 @@ gst_vp9_stateful_parser_free() after use. + + Create new #GstH266Dpb + + + a new #GstH266Dpb + + + Create new #GstMpeg2Dpb diff --git a/girs/GstController-1.0.gir b/girs/GstController-1.0.gir index 0c3b8f52e3f..5b2af56ea29 100644 --- a/girs/GstController-1.0.gir +++ b/girs/GstController-1.0.gir @@ -269,7 +269,7 @@ target property range without any transformations. - + @@ -503,7 +503,7 @@ All functions are MT-safe. - + @@ -529,22 +529,22 @@ All functions are MT-safe. - + The various interpolation modes available. - + steps-like interpolation, default - + linear interpolation - + cubic interpolation (natural), may overshoot the min or max values set by the control point, but is more 'curvy' - + monotonic cubic interpolation, will not produce any values outside of the min-max range set by the control points (Since: 1.8) @@ -568,21 +568,21 @@ All functions are MT-safe. - + Specifies the amplitude for the waveform of this #GstLFOControlSource. - + Specifies the frequency that should be used for the waveform of this #GstLFOControlSource. It should be large enough so that the period is longer than one nanosecond. - + Specifies the value offset for the waveform of this #GstLFOControlSource. - + Specifies the timeshift to the right that should be used for the waveform of this #GstLFOControlSource in nanoseconds. @@ -590,7 +590,7 @@ To get a n nanosecond shift to the left use "(GST_SECOND / frequency) - n". - + Specifies the waveform that should be used for this #GstLFOControlSource. @@ -620,24 +620,24 @@ To get a n nanosecond shift to the left use - + The various waveform modes available. - + sine waveform - + square waveform - + saw waveform - + reverse saw waveform - + triangle waveform @@ -1007,7 +1007,7 @@ time. - + @@ -1028,7 +1028,7 @@ All functions are MT-safe. - + @@ -1054,7 +1054,7 @@ All functions are MT-safe. - + diff --git a/girs/GstCuda-1.0.gir b/girs/GstCuda-1.0.gir index 4b60dddf06b..52489448ded 100644 --- a/girs/GstCuda-1.0.gir +++ b/girs/GstCuda-1.0.gir @@ -42,6 +42,11 @@ and/or use gtk-doc annotations. --> + + #G_TYPE_BOOLEAN Allows stream ordered allocation. Default is %FALSE + + + @@ -109,6 +114,13 @@ and/or use gtk-doc annotations. --> + + + + + + + Name of cuda memory type @@ -340,7 +352,7 @@ This method is conceptually identical to gst_buffer_pool_set_active method. - + @@ -374,7 +386,7 @@ This method is conceptually identical to gst_buffer_pool_set_active method. - + @@ -494,14 +506,28 @@ so all CUDA functions that operate on the current context are affected. - + - + + The default stack size for each GPU thread. + + + + External resource interop API support + + + OS handle supportability in virtual memory management - + + + + + + + Virtual memory management supportability @@ -518,7 +544,7 @@ so all CUDA functions that operate on the current context are affected. - + @@ -668,6 +694,9 @@ Free with gst_cuda_graphics_resource_free + + Resource represents a EGL resource. + @@ -847,16 +876,116 @@ CUDA stream is in use CUDA memory allocation method - + - + Memory allocated via cuMemAlloc or cuMemAllocPitch - + Memory allocated via cuMemCreate and cuMemMap - + + Called to request cuda memory pool object. If callee returns a memory pool, +@allocator will allocate memory via cuMemAllocFromPoolAsync. +Otherwise device default memory pool will be used with cuMemAllocAsync method + + + Configured #GstCudaMemoryPool object + + + + + a #GstCudaAllocator + + + + a #GstCudaContext + + + + the user data + + + + + + + + + + + + + + + + + Creates a new #GstCudaMemoryPool with @props. If @props is %NULL, +non-exportable pool property will be used. + + + a new #GstCudaMemoryPool or %NULL on +failure + + + + + a #GstCudaContext + + + + a CUmemPoolProps + + + + + + Get CUDA memory pool handle + + + a CUmemoryPool handle + + + + + a #GstCudaMemoryPool + + + + + + Increase the reference count of @pool. + + + @pool + + + + + a #GstCudaMemoryPool + + + + + + Decrease the reference count of @pool. + + + + + + + a #GstCudaMemoryPool + + + + + + + + + @@ -925,6 +1054,32 @@ CUDA stream is in use + + Creates a new #GstCudaPoolAllocator instance with given @config + + + a new #GstCudaPoolAllocator instance + + + + + a #GstCudaContext + + + + a #GstCudaStream + + + + a #GstVideoInfo + + + + a #GstStructure with configuration options + + + + Acquires a #GstMemory from @allocator. @memory should point to a memory location that can hold a pointer to the new #GstMemory. @@ -977,7 +1132,7 @@ inactive. - + @@ -1055,7 +1210,7 @@ failure - + @@ -1100,6 +1255,13 @@ failure + + + + + + + @@ -1160,6 +1322,23 @@ on @config or %NULL if @config doesn't hold #GstCudaStream + + + + %TRUE stream ordered allocation option was specified + + + + + a buffer pool config + + + + whether stream ordered allocation was requested or not + + + + Sets allocation method @@ -1193,6 +1372,36 @@ on @config or %NULL if @config doesn't hold #GstCudaStream + + Sets stream ordered allocation option + + + + + + + a buffer pool config + + + + whether stream ordered allocation is allowed + + + + + + Clears a reference to a #GstCudaMemoryPool. + + + + + + + a pointer to a #GstCudaMemoryPool reference + + + + Clears a reference to a #GstCudaStream. @@ -1395,6 +1604,27 @@ otherwise %NULL + + Sets global need-pool callback function + + + + + + + the callbacks + + + + an user_data argument for the callback + + + + a destory notify function + + + + diff --git a/girs/GstGL-1.0.gir b/girs/GstGL-1.0.gir index 26958180232..e9fd842c10e 100644 --- a/girs/GstGL-1.0.gir +++ b/girs/GstGL-1.0.gir @@ -40,23 +40,23 @@ synchronization metadata on buffers from the pool. - + no API - + Desktop OpenGL up to and including 3.1. The compatibility profile when the OpenGL version is >= 3.2 - + Desktop OpenGL >= 3.2 core profile - + OpenGL ES 1.x - + OpenGL ES 2.x and 3.x - + Any OpenGL API @@ -530,6 +530,9 @@ context. It also provided some wrappers around #GstBaseTransform's context is available and current in the calling thread. + called in the GL thread when caps are set on @filter. + Note: this will also be called when changing OpenGL contexts + where #GstBaseTransform::set_caps may not. @@ -547,6 +550,7 @@ context is available and current in the calling thread. + called in the GL thread to setup the element GL state. @@ -558,6 +562,7 @@ context is available and current in the calling thread. + called in the GL thread to setup the element GL state. @@ -636,6 +641,7 @@ context is available and current in the calling thread. + called in the GL thread to setup the element GL state. @@ -649,6 +655,7 @@ context is available and current in the calling thread. + called in the GL thread to setup the element GL state. @@ -662,6 +669,9 @@ context is available and current in the calling thread. + called in the GL thread when caps are set on @filter. + Note: this will also be called when changing OpenGL contexts + where #GstBaseTransform::set_caps may not. @@ -686,7 +696,7 @@ context is available and current in the calling thread. - + @@ -850,6 +860,7 @@ multiple times. This must be called before any other GstGLBaseMemory operation. Opaque #GstGLBaseMemoryAllocator struct + a #GstGLBaseMemoryAllocatorAllocFunction a newly allocated #GstGLBaseMemory from @allocator and @params @@ -1022,14 +1033,14 @@ function to allocate and OpenGL resources needed for your application - + generic failure - + the implementation is too old and doesn't implement enough features - + a resource could not be found @@ -1040,11 +1051,11 @@ function to allocate and OpenGL resources needed for your application - + the texture needs downloading to the data pointer - + the data pointer needs uploading to the texture @@ -1184,7 +1195,7 @@ is available and is not available within this element. - + @@ -1194,6 +1205,7 @@ context. It also provided some wrappers around #GstBaseSrc's `start()` and current in the calling thread. + called in the GL thread to fill the current video texture. @@ -1208,6 +1220,7 @@ current in the calling thread. + called in the GL thread to setup the element GL state. @@ -1219,6 +1232,7 @@ current in the calling thread. + called in the GL thread to setup the element GL state. @@ -1229,7 +1243,7 @@ current in the calling thread. - + @@ -1275,6 +1289,7 @@ current in the calling thread. + called in the GL thread to setup the element GL state. @@ -1288,6 +1303,7 @@ current in the calling thread. + called in the GL thread to setup the element GL state. @@ -1301,6 +1317,7 @@ current in the calling thread. + called in the GL thread to fill the current video texture. @@ -1322,7 +1339,7 @@ current in the calling thread. - + @@ -1497,7 +1514,7 @@ gst_buffer_pool_set_config() will cause this function to return a new - + @@ -1720,17 +1737,17 @@ yuv to rgb - + - + none - + slow - + non-conformant @@ -1749,16 +1766,16 @@ yuv to rgb - + none - + window - + pbuffer - + pixmap @@ -1980,6 +1997,7 @@ case. + choose a format for the framebuffer @@ -1991,6 +2009,7 @@ case. + create the OpenGL context @@ -2008,6 +2027,7 @@ case. + destroy the OpenGL context @@ -2748,6 +2768,7 @@ MT-safe + get the backing platform specific OpenGL context @@ -2763,6 +2784,7 @@ MT-safe + get the available OpenGL api's that this context can work with @@ -2793,6 +2815,7 @@ MT-safe + get an function pointer to an OpenGL function @@ -2809,6 +2832,7 @@ MT-safe + call eglMakeCurrent or similar @@ -2828,6 +2852,7 @@ MT-safe + choose a format for the framebuffer @@ -2841,6 +2866,7 @@ MT-safe + create the OpenGL context @@ -2860,6 +2886,7 @@ MT-safe + destroy the OpenGL context @@ -2873,6 +2900,7 @@ MT-safe + swap the default framebuffer's front/back buffers @@ -2970,22 +2998,22 @@ MT-safe OpenGL context errors. - + Failed for an unspecified reason - + The configuration requested is not correct - + The OpenGL API requested is not correct - + The OpenGL libraries are too old - + glXCreateContext (or similar) failed - + A resource is not available @@ -2995,7 +3023,7 @@ MT-safe - + @@ -3206,7 +3234,7 @@ second argument is @data. some data to pass to @compare_func - + a comparison function to run @@ -3335,7 +3363,7 @@ second argument is @data. some data to pass to @compare_func - + a comparison function to run @@ -3421,57 +3449,68 @@ display's object lock held. - + - + no display type - + X11 display - + Wayland display - + Cocoa display - + Win32 display - + Dispmanx display - + EGL display - + Vivante Framebuffer display - + Mesa3D GBM display - + EGLDevice display. - + EAGL display. - + WinRT display. - + Android display. - + Mesa3D surfaceless display using the EGL_PLATFORM_SURFACELESS_MESA extension. - + any display type + + + include external-only formats + + + only include formats with linear modifier + + + include emulated formats + + #GstGLFilter helps to implement simple OpenGL filter elements taking a single input and producing a single output with a #GstGLFramebuffer @@ -3488,6 +3527,10 @@ single input and producing a single output with a #GstGLFramebuffer + perform operations on the input and output buffers. In general, + you should avoid using this method if at all possible. One valid + use-case for using this is keeping previous buffers for future calculations. + Note: If @filter exists, then @filter_texture is not run @@ -3527,6 +3570,7 @@ single input and producing a single output with a #GstGLFramebuffer + perform initialization when the Framebuffer object is created @@ -3538,6 +3582,7 @@ single input and producing a single output with a #GstGLFramebuffer + mirror from #GstBaseTransform @@ -3555,6 +3600,8 @@ single input and producing a single output with a #GstGLFramebuffer + Perform sub-class specific modifications of the + caps to be processed between upload on input and before download for output. @@ -3738,6 +3785,7 @@ See also: gst_gl_filter_render_to_target() + mirror from #GstBaseTransform @@ -3757,6 +3805,10 @@ See also: gst_gl_filter_render_to_target() + perform operations on the input and output buffers. In general, + you should avoid using this method if at all possible. One valid + use-case for using this is keeping previous buffers for future calculations. + Note: If @filter exists, then @filter_texture is not run @@ -3776,6 +3828,8 @@ See also: gst_gl_filter_render_to_target() + given @in_tex, transform it into @out_tex. Not used + if @filter exists @@ -3799,6 +3853,7 @@ See also: gst_gl_filter_render_to_target() + perform initialization when the Framebuffer object is created @@ -3812,6 +3867,8 @@ See also: gst_gl_filter_render_to_target() + Perform sub-class specific modifications of the + caps to be processed between upload on input and before download for output. @@ -3861,68 +3918,68 @@ See also: gst_gl_filter_render_to_target() - + Single component replicated across R, G, and B textures components - + Single component stored in the A texture component - + Combination of #GST_GL_LUMINANCE and #GST_GL_ALPHA - + Single component stored in the R texture component - + Single 8-bit component stored in the R texture component - + Two components stored in the R and G texture components - + Two 8-bit components stored in the R and G texture components - + Three components stored in the R, G, and B texture components - + Three 8-bit components stored in the R, G, and B texture components - + Three components of bit depth 5, 6 and 5 stored in the R, G, and B texture components respectively. - + Three 16-bit components stored in the R, G, and B texture components - + Four components stored in the R, G, B, and A texture components respectively. - + Four 8-bit components stored in the R, G, B, and A texture components respectively. - + Four 16-bit components stored in the R, G, B, and A texture components respectively. - + A single 16-bit component for depth information. - + A 24-bit component for depth information and a 8-bit component for stencil informat. - + - + Single 16-bit component stored in the R texture component - + Two 16-bit components stored in the R and G texture components @@ -4225,10 +4282,10 @@ with. - + - + Structure containing function pointers to OpenGL functions. Each field is named exactly the same as the OpenGL function without the @@ -4933,7 +4990,7 @@ manually. - + @@ -4997,7 +5054,7 @@ manually. - + @@ -5044,26 +5101,26 @@ manually. - + no platform - + the EGL platform used primarily with the X11, wayland and android window systems as well as on embedded Linux - + the GLX platform used primarily with the X11 window system - + the WGL platform used primarily on Windows - + the CGL platform used primarily on OS X - + the EAGL platform used primarily on iOS - + any OpenGL platform @@ -5263,13 +5320,13 @@ GStreamer elements. - + no query - + query the time elapsed - + query the current time @@ -5489,13 +5546,13 @@ multiple times. This must be called before any other GstGLRenderbuffer operatio Compilation stage that caused an error - + Compilation error occurred - + Link error occurred - + General program error occurred @@ -5507,19 +5564,19 @@ multiple times. This must be called before any other GstGLRenderbuffer operatio GLSL profiles - + no profile supported/available - + OpenGL|ES profile - + OpenGL core profile - + OpenGL compatibility profile - + any OpenGL/OpenGL|ES profile @@ -5783,60 +5840,60 @@ multiple times. This must be called before any other GstGLRenderbuffer operatio - + GLSL version list - + no version - + version 100 (only valid for ES) - + version 110 (only valid for compatibility desktop GL) - + version 120 (only valid for compatibility desktop GL) - + version 130 (only valid for compatibility desktop GL) - + version 140 (only valid for compatibility desktop GL) - + version 150 (valid for compatibility/core desktop GL) - + version 300 (only valid for ES) - + version 310 (only valid for ES) - + version 320 (only valid for ES) - + version 330 (valid for compatibility/core desktop GL) - + version 400 (valid for compatibility/core desktop GL) - + version 410 (valid for compatibility/core desktop GL) - + version 420 (valid for compatibility/core desktop GL) - + version 430 (valid for compatibility/core desktop GL) - + version 440 (valid for compatibility/core desktop GL) - + version 450 (valid for compatibility/core desktop GL) @@ -7025,7 +7082,7 @@ Note: must be called in the GL thread and @shader must have been linked. - + @@ -7049,18 +7106,18 @@ Note: must be called in the GL thread and @shader must have been linked. - + Output anaglyph type to generate when downmixing to mono - + Dubois optimised Green-Magenta anaglyph - + Dubois optimised Red-Cyan anaglyph - + Dubois optimised Amber-Blue anaglyph @@ -7081,6 +7138,7 @@ with the CPU or with other OpenGL contexts. + set a sync point in the OpenGL command stream @@ -7097,6 +7155,7 @@ with the CPU or with other OpenGL contexts. + the same as @set_sync but called from @context's thread @@ -7113,6 +7172,7 @@ with the CPU or with other OpenGL contexts. + execute a wait on the previously set sync point into the OpenGL command stream @@ -7129,6 +7189,7 @@ with the CPU or with other OpenGL contexts. + the same as @wait but called from @context's thread @@ -7145,6 +7206,7 @@ with the CPU or with other OpenGL contexts. + wait for the previously set sync point to pass from the CPU @@ -7161,6 +7223,7 @@ with the CPU or with other OpenGL contexts. + the same as @wait_cpu but called from @context's thread @@ -7177,6 +7240,7 @@ with the CPU or with other OpenGL contexts. + copy @data into a new #GstGLSyncMeta @@ -7199,6 +7263,7 @@ with the CPU or with other OpenGL contexts. + free @data @@ -7215,6 +7280,7 @@ with the CPU or with other OpenGL contexts. + free @data in @context's thread @@ -7297,17 +7363,17 @@ gst_gl_value_set_texture_target_from_mask(), gst_gl_value_get_texture_target_mask(), and gst_gl_value_set_texture_target() functions can be used for handling texture targets with #GValue's when e.g. dealing with #GstCaps. - + no texture target - + 2D texture target (`GL_TEXTURE_2D`) - + rectangle texture target (`GL_TEXTURE_RECTANGLE`) - + external oes texture target (`GL_TEXTURE_EXTERNAL_OES`) @@ -7580,23 +7646,23 @@ gst_gl_upload_set_caps() creating a new #GstBuffer in @outbuf_ptr. - + - + No further processing required - + An unspecified error occurred - + The configuration is unsupported. - + This element requires a reconfiguration. - + private return value. @@ -8098,19 +8164,19 @@ setting the caps with gst_gl_view_convert_set_caps(). - + - + - + - + - + @@ -8182,7 +8248,7 @@ setting the caps with gst_gl_view_convert_set_caps(). - + @@ -8203,6 +8269,7 @@ either be a user visible window (onscreen) or hidden (offscreen). + close the connection to the display @@ -8241,6 +8308,7 @@ either be a user visible window (onscreen) or hidden (offscreen). + Gets the current windowing system display connection the windowing system display handle for this @window @@ -8254,6 +8322,9 @@ either be a user visible window (onscreen) or hidden (offscreen). + Gets the current window handle that this #GstGLWindow is + rendering into. This may return a different value to + what is passed into @set_window_handle the window handle we are currently rendering into @@ -8302,6 +8373,7 @@ from the @window. + open the connection to the display @@ -9089,6 +9161,7 @@ direct handle comparision. + Gets the current windowing system display connection @@ -9104,6 +9177,7 @@ direct handle comparision. + Set a window handle to render into @@ -9122,6 +9196,9 @@ direct handle comparision. + Gets the current window handle that this #GstGLWindow is + rendering into. This may return a different value to + what is passed into @set_window_handle @@ -9137,6 +9214,7 @@ direct handle comparision. + redraw the window with the specified dimensions @@ -9151,6 +9229,7 @@ direct handle comparision. + run the mainloop @@ -9165,6 +9244,7 @@ direct handle comparision. + send a quit to the mainloop @@ -9179,6 +9259,7 @@ direct handle comparision. + invoke a function on the window thread. Required to be reentrant. @@ -9201,6 +9282,8 @@ direct handle comparision. + invoke a function on the window thread. @run may or may + not have been called. Required to be reentrant. @@ -9227,6 +9310,7 @@ direct handle comparision. + open the connection to the display @@ -9240,6 +9324,7 @@ direct handle comparision. + close the connection to the display @@ -9253,6 +9338,9 @@ direct handle comparision. + whether to handle 'extra' events from the windowing system. + Basic events like surface moves and resizes are still valid + things to listen for. @@ -9271,6 +9359,8 @@ direct handle comparision. + request that the window change surface size. The + implementation is free to ignore this information. @@ -9293,6 +9383,7 @@ direct handle comparision. + request that the window be shown to the user @@ -9307,6 +9398,7 @@ direct handle comparision. + request a rectangle to render into. See #GstVideoOverlay @@ -9338,6 +9430,7 @@ direct handle comparision. + request a resize to occur when possible @@ -9352,6 +9445,8 @@ direct handle comparision. + Whether the window takes care of glViewport setup. + and the user does not need to deal with viewports @@ -9367,6 +9462,7 @@ direct handle comparision. + Whether the window has output surface or not. (Since: 1.18) @@ -9388,13 +9484,13 @@ direct handle comparision. - + failed for a unspecified reason - + the implementation is too old - + no such resource was found @@ -9404,7 +9500,7 @@ direct handle comparision. - + @@ -9476,6 +9572,30 @@ user-defined purposes. + + Stores a debug message in @ad for later output + + + + the #GstGLAsyncDebug to store the message in + + + the #GstDebugCategory to output the message in + + + the #GstDebugLevel + + + a #GObject to associate with the debug message + + + a printf style format string + + + the list of arguments for @format + + + Stores a debug message in @ad for later output @@ -9692,7 +9812,7 @@ user-defined purposes. - + @@ -9939,7 +10059,7 @@ e.g. for `CONFIG_ID`: `GST_GL_CONFIG_ATTRIB_NAME (CONFIG_ID)` - + @@ -10801,6 +10921,62 @@ multiple times. This must be called before any other #GstGLBuffer operation. + + Given the DRM formats in @src #GValue, collect corresponding GST formats to +@dst #GValue. This function returns %FALSE if the context is not an EGL +context. + + + whether any valid GST video formats were found and stored in @dst + + + + + a #GstContext + + + + value of "drm-format" field in #GstCaps as #GValue + + + + transformation flags + + + + empty destination #GValue + + + + + + Given the video formats in @src #GValue, collect corresponding drm formats +supported by @context into @dst #GValue. This function returns %FALSE if +the context is not an EGL context. + + + whether any valid drm formats were found and stored in @dst + + + + + a #GstContext + + + + value of "format" field in #GstCaps as #GValue + + + + transformation flags + + + + empty destination #GValue + + + + @@ -11201,6 +11377,23 @@ multiple times. This must be called before any other GstGLMemory operation. + + + + + + + + + + + + + + + + + @@ -11261,6 +11454,23 @@ GStreamer elements. + + + + + + + + + + + + + + + + + diff --git a/girs/GstGLEGL-1.0.gir b/girs/GstGLEGL-1.0.gir new file mode 100644 index 00000000000..0aa3a6ca979 --- /dev/null +++ b/girs/GstGLEGL-1.0.gir @@ -0,0 +1,914 @@ + + + + + + + + + + + #GstEGLImage represents and holds an `EGLImage` handle. + +A #GstEGLImage can be created from a dmabuf with gst_egl_image_from_dmabuf(), +or gst_egl_image_from_dmabuf_direct(), or #GstGLMemoryEGL provides a +#GstAllocator to allocate `EGLImage`'s bound to and OpenGL texture. + + + + + + + + + + + + + + + + + + + + + + + + + + + + a new #GstEGLImage wrapping @image + + + + + a #GstGLContext (must be an EGL context) + + + + the image to wrap + + + + the #GstGLFormat + + + + user data + + + + called when @user_data is no longer needed + + + + + + + + + + + + + + + + + + + + + + + + + + + + the `EGLImage` of @image + + + + + a #GstEGLImage + + + + + + Checks if the given @context can emulate @format using a limited subset of +RGB texture formats. Such @format is then suitable for importing using +gst_egl_image_from_dmabuf() even when GL supports the video format as +external-only or not at all. + + + #TRUE if @format can be emulated + + + + + a #GstGLContext (must be an EGL context) + + + + a #GstVideoFormat + + + + + + Creates an EGL image that imports the dmabuf FD. The dmabuf data +is passed as RGBA data. Shaders later take this "RGBA" data and +convert it from its true format (described by in_info) to actual +RGBA output. For example, with I420, three EGL images are created, +one for each @plane, each EGL image with a single-channel R format. +With NV12, two EGL images are created, one with R format, one +with RG format etc. + + + a #GstEGLImage wrapping @dmabuf or %NULL on failure + + + + + a #GstGLContext (must be an EGL context) + + + + the DMA-Buf file descriptor + + + + the #GstVideoInfo in @dmabuf + + + + the plane in @in_info to create and #GstEGLImage for + + + + the byte-offset in the data + + + + + + Creates an EGL image that imports the dmabuf FD. The dmabuf data +is passed directly as the format described in in_info. This is +useful if the hardware is capable of performing color space conversions +internally. The appropriate DRM format is picked, and the EGL image +is created with this DRM format. + +Another notable difference to gst_egl_image_from_dmabuf() +is that this function creates one EGL image for all planes, not one for +a single plane. + + + a #GstEGLImage wrapping @dmabuf or %NULL on failure + + + + + a #GstGLContext (must be an EGL context) + + + + Array of DMABuf file descriptors + + + + Array of offsets, relative to the DMABuf + + + + the #GstVideoInfo + + + + + + Creates an EGL image that imports the dmabuf FD. The dmabuf data +is passed directly as the format described in @in_info. This is +useful if the hardware is capable of performing color space conversions +internally. The appropriate DRM format is picked, and the EGL image +is created with this DRM format. + +Another notable difference to gst_egl_image_from_dmabuf() +is that this function creates one EGL image for all planes, not one for +a single plane. + + + a #GstEGLImage wrapping @dmabuf or %NULL on failure + + + + + a #GstGLContext (must be an EGL context) + + + + Array of DMABuf file descriptors + + + + Array of offsets, relative to the DMABuf + + + + the #GstVideoInfo + + + + GL texture target this GstEGLImage is intended for + + + + + + Creates an EGL image that imports the dmabuf FD. The dmabuf data is passed +directly as the format described in @in_info. This is useful if the hardware +is capable of performing color space conversions internally. + +Another notable difference to gst_egl_image_from_dmabuf() is that this +function creates one EGL image for all planes, not one for a single plane. + + + a #GstEGLImage wrapping @dmabuf or %NULL on failure + + + + + a #GstGLContext (must be an EGL context) + + + + number of planes (obtained from a #GstVideoMeta) + + + + Array of DMABuf file descriptors + + + + Array of offsets, relative to the DMABuf + + + + the #GstVideoInfoDmaDrm + + + + GL texture target this GstEGLImage is intended for + + + + + + + + a #GstEGLImage wrapping @gl_mem or %NULL on failure + + + + + a #GstGLContext (must be an EGL context) + + + + a #GstGLMemory + + + + additional attributes to add to the `eglCreateImage`() call. + + + + + + + Function to be called when the GstEGLImage is destroyed. It should free +the associated `EGLImage` if necessary + + + + + + + a #GstEGLImage + + + + user data passed to gst_egl_image_new_wrapped() + + + + + + + + + + + + + + + + + + + + the contents of a #GstGLDisplayEGL are private and should only be accessed +through the provided API + + + Create a new #GstGLDisplayEGL using the default EGL_DEFAULT_DISPLAY. + + + a new #GstGLDisplayEGL or %NULL + + + + + Create a new surfaceless #GstGLDisplayEGL using the Mesa3D +EGL_PLATFORM_SURFACELESS_MESA extension. + + + a new #GstGLDisplayEGL or %NULL + + + + + + + + + + + + + + + + Creates a EGL display connection from a native Display. + +This function will return the same value for multiple calls with the same +@display. + + + a new #GstGLDisplayEGL + + + + + an existing #GstGLDisplay + + + + + + Attempts to create a new `EGLDisplay` from @display. If @type is +%GST_GL_DISPLAY_TYPE_ANY or %GST_GL_DISPLAY_TYPE_EGL_SURFACELESS, then +@display must be 0. @type must not be %GST_GL_DISPLAY_TYPE_NONE. + + + A `EGLDisplay` or `EGL_NO_DISPLAY` + + + + + a #GstGLDisplayType + + + + pointer to a display (or 0) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + the contents of a #GstGLDisplayEGLDevice are private and should only be accessed +through the provided API + + + Create a new #GstGLDisplayEGLDevice with an EGLDevice supported device + + + a new #GstGLDisplayEGLDevice or %NULL + + + + + the index of device to use + + + + + + Creates a new #GstGLDisplayEGLDevice with EGLDeviceEXT . +The @device must be created using EGLDevice enumeration. + + + a new #GstGLDisplayEGLDevice + + + + + an existing EGLDeviceEXT + + + + + + + + + + + + + + + + + + Opaque #GstGLDisplayEGLDeviceClass struct + + + + + + + + + + + + #GstGLMemoryEGL is created or wrapped through gst_gl_base_memory_alloc() +with #GstGLVideoAllocationParams. + + + + + + + + + + + + + + + + The EGLDisplay @mem is associated with + + + + + a #GstGLMemoryEGL + + + + + + + + The EGLImage held by @mem + + + + + a #GstGLMemoryEGL + + + + + + Initializes the GL Memory allocator. It is safe to call this function +multiple times. This must be called before any other GstGLMemoryEGL operation. + + + + + + + + Opaque #GstGLMemoryEGLAllocator struct + + + + + + + + + + + + The #GstGLMemoryEGLAllocatorClass only contains private data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The name of the GL Memory EGL allocator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + the short string representation of @err + + + + + an EGL error code + + + + + + Checks if the given @context can emulate @format using a limited subset of +RGB texture formats. Such @format is then suitable for importing using +gst_egl_image_from_dmabuf() even when GL supports the video format as +external-only or not at all. + + + #TRUE if @format can be emulated + + + + + a #GstGLContext (must be an EGL context) + + + + a #GstVideoFormat + + + + + + Creates an EGL image that imports the dmabuf FD. The dmabuf data +is passed as RGBA data. Shaders later take this "RGBA" data and +convert it from its true format (described by in_info) to actual +RGBA output. For example, with I420, three EGL images are created, +one for each @plane, each EGL image with a single-channel R format. +With NV12, two EGL images are created, one with R format, one +with RG format etc. + + + a #GstEGLImage wrapping @dmabuf or %NULL on failure + + + + + a #GstGLContext (must be an EGL context) + + + + the DMA-Buf file descriptor + + + + the #GstVideoInfo in @dmabuf + + + + the plane in @in_info to create and #GstEGLImage for + + + + the byte-offset in the data + + + + + + Creates an EGL image that imports the dmabuf FD. The dmabuf data +is passed directly as the format described in in_info. This is +useful if the hardware is capable of performing color space conversions +internally. The appropriate DRM format is picked, and the EGL image +is created with this DRM format. + +Another notable difference to gst_egl_image_from_dmabuf() +is that this function creates one EGL image for all planes, not one for +a single plane. + + + a #GstEGLImage wrapping @dmabuf or %NULL on failure + + + + + a #GstGLContext (must be an EGL context) + + + + Array of DMABuf file descriptors + + + + Array of offsets, relative to the DMABuf + + + + the #GstVideoInfo + + + + + + Creates an EGL image that imports the dmabuf FD. The dmabuf data +is passed directly as the format described in @in_info. This is +useful if the hardware is capable of performing color space conversions +internally. The appropriate DRM format is picked, and the EGL image +is created with this DRM format. + +Another notable difference to gst_egl_image_from_dmabuf() +is that this function creates one EGL image for all planes, not one for +a single plane. + + + a #GstEGLImage wrapping @dmabuf or %NULL on failure + + + + + a #GstGLContext (must be an EGL context) + + + + Array of DMABuf file descriptors + + + + Array of offsets, relative to the DMABuf + + + + the #GstVideoInfo + + + + GL texture target this GstEGLImage is intended for + + + + + + Creates an EGL image that imports the dmabuf FD. The dmabuf data is passed +directly as the format described in @in_info. This is useful if the hardware +is capable of performing color space conversions internally. + +Another notable difference to gst_egl_image_from_dmabuf() is that this +function creates one EGL image for all planes, not one for a single plane. + + + a #GstEGLImage wrapping @dmabuf or %NULL on failure + + + + + a #GstGLContext (must be an EGL context) + + + + number of planes (obtained from a #GstVideoMeta) + + + + Array of DMABuf file descriptors + + + + Array of offsets, relative to the DMABuf + + + + the #GstVideoInfoDmaDrm + + + + GL texture target this GstEGLImage is intended for + + + + + + + + a #GstEGLImage wrapping @gl_mem or %NULL on failure + + + + + a #GstGLContext (must be an EGL context) + + + + a #GstGLMemory + + + + additional attributes to add to the `eglCreateImage`() call. + + + + + + Initializes the GL Memory allocator. It is safe to call this function +multiple times. This must be called before any other GstGLMemoryEGL operation. + + + + + + + #GstGLDisplayEGL represents a connection to an EGL `EGLDisplay` handle created +internally (gst_gl_display_egl_new() or gst_gl_display_egl_new_surfaceless()) +or wrapped by the application (gst_gl_display_egl_new_with_egl_display()) + + + #GstGLDisplayEGLDevice represents a `EGLDeviceEXT` handle created internally +(gst_gl_display_egl_device_new()) or wrapped by the application +(gst_gl_display_egl_device_new_with_egl_device()) + + + + + whether @mem is a #GstGLMemoryEGL + + + + + a #GstMemory to test + + + + + + diff --git a/girs/GstInsertBin-1.0.gir b/girs/GstInsertBin-1.0.gir index 718ba18ca6a..74dce73b071 100644 --- a/girs/GstInsertBin-1.0.gir +++ b/girs/GstInsertBin-1.0.gir @@ -409,7 +409,7 @@ operation is requested. - + diff --git a/girs/GstMpegts-1.0.gir b/girs/GstMpegts-1.0.gir index 4f4dcbede2d..435b241c6ae 100644 --- a/girs/GstMpegts-1.0.gir +++ b/girs/GstMpegts-1.0.gir @@ -1294,7 +1294,7 @@ and other specifications mentioned in the documentation. - the extended type (if @descriptor_tag is 0x7f) + the extended type (if @tag is 0x7f (for DVB) or 0x3f (for H.222.0)) @@ -1311,6 +1311,20 @@ two bytes are the @tag and @length. + + Copy the given descriptor. + + + A copy of @desc. + + + + + A #GstMpegtsDescriptor: + + + + Frees @desc @@ -2047,6 +2061,24 @@ ISO 639-1 language code from the returned ISO 639-2 one. + + Parses the JPEG-XS descriptor information from @descriptor: + + + TRUE if the information could be parsed, else FALSE. + + + + + A #GstMpegtsDescriptor + + + + A parsed #GstMpegtsJpegXsDescriptor + + + + Extracts the logical channels from @descriptor. @@ -2066,39 +2098,39 @@ ISO 639-1 language code from the returned ISO 639-2 one. - Parses out the metadata descriptor from the @descriptor. + Parses out the metadata descriptor from the @descriptor. See ISO/IEC 13818-1:2018 Section 2.6.60 and 2.6.61 for details. metadata_application_format is provided in Table 2-82. metadata_format is provided in Table 2-85. - %TRUE if the parsing worked correctly, else %FALSE. + %TRUE if the parsing worked correctly, else %FALSE. - a %GST_TYPE_MPEGTS_METADATA_DESCRIPTOR #GstMpegtsDescriptor + a %GST_TYPE_MPEGTS_METADATA_DESCRIPTOR #GstMpegtsDescriptor - #GstMpegtsMetadataDescriptor + #GstMpegtsMetadataDescriptor - Extracts the metadata STD descriptor from @descriptor. + Extracts the metadata STD descriptor from @descriptor. See ISO/IEC 13818-1:2018 Section 2.6.62 and 2.6.63 for details. - %TRUE if parsing succeeded, else %FALSE. + %TRUE if parsing succeeded, else %FALSE. - a %GST_MTS_DESC_METADATA_STD #GstMpegtsDescriptor + a %GST_MTS_DESC_METADATA_STD #GstMpegtsDescriptor @metadata_input_leak_rate (out): the input leak rate in units of 400bits/sec. @metadata_buffer_size (out): the buffer size in units of 1024 bytes @metadata_output_leak_rate (out): the output leak rate in units of 400bits/sec. @@ -2131,7 +2163,7 @@ See ISO/IEC 13818-1:2018 Section 2.6.62 and 2.6.63 for details. The registration ID (in host endiannes) - + The additional information @@ -2310,6 +2342,44 @@ a single language + + Create a new #GstMpegtsDescriptor based on the information in @jpegxs + + + The #GstMpegtsDescriptor + + + + + A #GstMpegtsJpegXsDescriptor + + + + + + + + + + + + + + + + + + + a #GstMpegtsDescriptor from the metadata pointer descriptor. + + + + + a #GstMpegtsMetadataPointerDescriptor + + + + Creates a %GST_MTS_DESC_REGISTRATION #GstMpegtsDescriptor @@ -2473,6 +2543,9 @@ Consult the relevant specifications for more details. + + Extension Descriptor. + a multilingual bouquet name entry @@ -2578,6 +2651,17 @@ Consult the relevant specifications for more details. + + The type of an extended descriptor + +The values correpond to the registered extended descriptor types from the +base ISO 13818 / ITU H.222.0 specifications + +Consult the specification for more details + + + + Extended Event Descriptor (EN 300 468 v.1.13.1) @@ -2761,6 +2845,94 @@ Consult the relevant specifications for more details. + + JPEG-XS descriptor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2784,55 +2956,100 @@ Consult the relevant specifications for more details. + + @GST_MPEGTS_METADATA_APPLICATION_FORMAT_ISAN ISO 15706-1 (ISAN) encoded in its binary form +@GST_MPEGTS_METADATA_APPLICATION_FORMAT_VSAN ISO 15706-2 (V-ISAN) encoded in its binary form +@GST_MPEGTS_METADATA_APPLICATION_FORMAT_IDENTIFIER_FIELD Defined by the metadata_application_format_identifier field + +metadata_application_format valid values. See ISO/IEC 13818-1:2023(E) Table 2-84. + + + + + + + + - The metadata descriptor specifies parameters of a metadata service carried in an MPEG-2 Transport Stream (or Program Stream). The descriptor is included in the PMT in the descriptor loop for the elementary stream that carries the + The metadata descriptor specifies parameters of a metadata service carried in an MPEG-2 Transport Stream (or Program Stream). The descriptor is included in the PMT in the descriptor loop for the elementary stream that carries the metadata service. The descriptor specifies the format of the associated metadata, and contains the value of the metadata_service_id to identify the metadata service to which the metadata descriptor applies. Note that this structure does not include all of the metadata_descriptor items, and will need extension to support DSM-CC and private data. See ISO/IEC 13818-1:2018 Section 2.6.60 and Section 2.6.61 for more information. - + - specifies the application responsible for defining usage, syntax and semantics - + specifies the application responsible for defining usage, syntax and semantics + - indicates the format and coding of the metadata + indicates the format and coding of the metadata - format identifier (equivalent to registration descriptor), for example 0x4B4C4641 ('KLVA') to indicate SMPTE 336 KLV. + format identifier (equivalent to registration descriptor), for example 0x4B4C4641 ('KLVA') to indicate SMPTE 336 KLV. - metadata service to which this metadata descriptor applies, typically 0x00 + metadata service to which this metadata descriptor applies, typically 0x00 - decoder flags, see ISO/IEC 13818-1:2018 Table 2-88. + decoder flags, see ISO/IEC 13818-1:2018 Table 2-88. - true if stream associated with this descriptor is in an ISO/IEC 13818-6 data or object carousel. + true if stream associated with this descriptor is in an ISO/IEC 13818-6 data or object carousel. - metadata_descriptor metadata_format valid values. See ISO/IEC 13818-1:2018(E) Table 2-85. - + metadata_descriptor metadata_format valid values. See ISO/IEC 13818-1:2018(E) Table 2-85. + - ISO/IEC 15938-1 TeM. + ISO/IEC 15938-1 TeM. - ISO/IEC 15938-1 BiM. + ISO/IEC 15938-1 BiM. - Defined by metadata application format. + Defined by metadata application format. - Defined by metadata_format_identifier field. + Defined by metadata_format_identifier field. + + This structure is not complete. The following fields are missing in comparison to the standard (ISO/IEC 13818-1:2023 Section 2.6.58): +* metadata_locator_record_flag: hardcoded to 0. Indicating no metadata_locator_record present in the descriptor. +* MPEG_carriage_flags: hardcoded to 0b00, indicating the metadata is carried in the same transport steam. +* metadata_locator_record_length. +* transport_stream_location. +* transport_stream_id. + +See also: gst_mpegts_descriptor_from_metadata_pointer + + + specifies the application responsible for defining usage, syntax and semantics + + + + indicates the format and coding of the metadata + + + + format identifier (equivalent to registration descriptor), for example 0x4B4C4641 ('KLVA') to indicate SMPTE 336 KLV, or 0x49443320 ('ID3 '). + + + + metadata service to which this metadata descriptor applies, typically 0x00 + + + + Indicates the program in which the metadata is carried. + + + The type of #GstMpegtsDescriptor @@ -2930,29 +3147,29 @@ not yet identified from known specifications. - Extra buffer metadata describing the PES Metadata context. + Extra buffer metadata describing the PES Metadata context. This is based on the Metadata AU cell header in ISO/IEC 13818-1:2018 Section 2.12.4. AU_cell_data_length is not provided, since it matches the length of the buffer - + - parent #GstMeta + parent #GstMeta - metadata service identifier + metadata service identifier - bit flags, see spec for details + bit flags, see spec for details - Gets the global #GstMetaInfo describing the #GstMpegtsPESMetadataMeta meta. - + Gets the global #GstMetaInfo describing the #GstMpegtsPESMetadataMeta meta. + - The #GstMetaInfo + The #GstMetaInfo @@ -4663,6 +4880,12 @@ profiles defined in Annex A for service-compatible stereoscopic 3D servicesRec. ITU-T H.265 | ISO/IEC 23008-2 video stream or an HEVC temporal video sub-bitstream + + JPEG-XS stream type + + + VVC/H.266 video stream type + IPMP stream @@ -4864,15 +5087,15 @@ profiles defined in Annex A for service-compatible stereoscopic 3D services - Creates and adds a #GstMpegtsPESMetadataMeta to a @buffer. - + Creates and adds a #GstMpegtsPESMetadataMeta to a @buffer. + - a newly created #GstMpegtsPESMetadataMeta + a newly created #GstMpegtsPESMetadataMeta - a #GstBuffer + a #GstBuffer @@ -5008,6 +5231,44 @@ a single language + + Create a new #GstMpegtsDescriptor based on the information in @jpegxs + + + The #GstMpegtsDescriptor + + + + + A #GstMpegtsJpegXsDescriptor + + + + + + + + + + + + + + + + + + + a #GstMpegtsDescriptor from the metadata pointer descriptor. + + + + + a #GstMpegtsMetadataPointerDescriptor + + + + Creates a %GST_MTS_DESC_REGISTRATION #GstMpegtsDescriptor @@ -5331,18 +5592,18 @@ and then converted to a PAT section with gst_mpegts_section_from_pat(). - Return the #GType associated with #GstMpegtsPESMetadataMeta - + Return the #GType associated with #GstMpegtsPESMetadataMeta + - a #GType + a #GType - Gets the global #GstMetaInfo describing the #GstMpegtsPESMetadataMeta meta. - + Gets the global #GstMetaInfo describing the #GstMpegtsPESMetadataMeta meta. + - The #GstMetaInfo + The #GstMetaInfo diff --git a/girs/GstMse-1.0.gir b/girs/GstMse-1.0.gir index 4818df5a866..ae152939caf 100644 --- a/girs/GstMse-1.0.gir +++ b/girs/GstMse-1.0.gir @@ -142,7 +142,7 @@ and set an error. - + Gets a #GstSourceBufferList containing all the Source Buffers currently associated with this Media Source that are considered "active." For a Source Buffer to be considered active, either its video track is @@ -163,7 +163,7 @@ well. - + Gets the current duration of @self. [Specification](https://www.w3.org/TR/media-source-2/#dom-mediasource-duration) @@ -197,7 +197,7 @@ the current live seekable range. - + Gets the current playback position of the Media Source. @@ -211,7 +211,7 @@ the current live seekable range. - + Gets the current Ready State of the Media Source. [Specification](https://www.w3.org/TR/media-source-2/#dom-mediasource-readystate) @@ -227,7 +227,7 @@ the current live seekable range. - + Gets a #GstSourceBufferList containing all the Source Buffers currently associated with this Media Source. This object will reflect any future changes to the parent Media Source as well. @@ -268,7 +268,7 @@ changes to the parent Media Source as well. - + Sets the duration of @self. [Specification](https://www.w3.org/TR/media-source-2/#dom-mediasource-duration) @@ -316,30 +316,30 @@ If the ready state is not %GST_MEDIA_SOURCE_READY_STATE_OPEN, or the supplied - + A #GstSourceBufferList of every #GstSourceBuffer in this Media Source that is considered active [Specification](https://www.w3.org/TR/media-source-2/#dom-mediasource-activesourcebuffers) - + The Duration of the Media Source as a #GstClockTime [Specification](https://www.w3.org/TR/media-source-2/#dom-mediasource-duration) - + The position of the player consuming from the Media Source - + The Ready State of the Media Source [Specification](https://www.w3.org/TR/media-source-2/#dom-mediasource-readystate) - + A #GstSourceBufferList of every #GstSourceBuffer in this Media Source [Specification](https://www.w3.org/TR/media-source-2/#dom-mediasource-sourcebuffers) @@ -378,13 +378,13 @@ gst_media_source_end_of_stream(). Reasons for ending a #GstMediaSource using gst_media_source_end_of_stream(). [Specification](https://www.w3.org/TR/media-source-2/#dom-endofstreamerror) - + End the stream successfully - + End the stream due to a networking error - + End the stream due to a decoding error @@ -393,15 +393,15 @@ gst_media_source_end_of_stream(). These values correspond directly to those in the Web IDL specification. [Specification](https://webidl.spec.whatwg.org/#idl-DOMException-error-names) - + - + - + - + - + Any error type that can be reported by the Media Source API. @@ -429,15 +429,15 @@ HTML specification, only representing a single @start and @end time. Describes the possible states of the Media Source. [Specification](https://www.w3.org/TR/media-source-2/#dom-readystate) - + The #GstMediaSource is not connected to any playback element. - + The #GstMediaSource is connected to a playback element and ready to append data to its #GstSourceBuffer (s). - + gst_media_source_end_of_stream() has been called on the current #GstMediaSource @@ -455,7 +455,7 @@ Once added to a Pipeline, this element should be attached to a Media Source using gst_media_source_attach(). - + Gets the duration of @self. [Specification](https://html.spec.whatwg.org/multipage/media.html#dom-media-duration) @@ -471,7 +471,7 @@ using gst_media_source_attach(). - + the number of audio tracks available from this source @@ -484,7 +484,7 @@ using gst_media_source_attach(). - + the number of text tracks available from this source @@ -497,7 +497,7 @@ using gst_media_source_attach(). - + the number of video tracks available from this source @@ -510,7 +510,7 @@ using gst_media_source_attach(). - + Gets the current playback position of @self. [Specification](https://html.spec.whatwg.org/multipage/media.html#current-playback-position) @@ -526,7 +526,7 @@ using gst_media_source_attach(). - + The Ready State of @self, describing to what level it can supply content for the current #GstMseSrc:position. This is a separate concept from #GstMediaSource:ready-state: and corresponds to the HTML Media Element's @@ -545,31 +545,31 @@ Ready State. - + The duration of the stream as a #GstClockTime [Specification](https://html.spec.whatwg.org/multipage/media.html#dom-media-duration) - + The number of audio tracks in the Media Source - + The number of text tracks in the Media Source - + The number of video tracks in the Media Source - + The playback position as a #GstClockTime [Specification](https://html.spec.whatwg.org/multipage/media.html#current-playback-position) - + The Ready State of this element, describing to what level it can supply content for the current #GstMseSrc:position. This is a separate concept from #GstMediaSource:ready-state: and corresponds to the HTML Media @@ -601,23 +601,23 @@ directly to the ready state of a HTML Media Element and is a separate concept from #GstMediaSourceReadyState. [Specification](https://html.spec.whatwg.org/multipage/media.html#ready-states) - + No information is available about the stream - + The duration is available and video dimensions are available if the stream contains video - + The current playback position can be presented but future information is not available - + There is data for the current position and some amount in the future and any text tracks are ready. - + Either there is enough data to play the stream through at the current playback and input rate or the input buffer is full. @@ -707,7 +707,7 @@ to the Source Buffer must be of the supplied @type afterward. - + [Specification](https://www.w3.org/TR/media-source-2/#dom-sourcebuffer-mode) @@ -721,7 +721,7 @@ to the Source Buffer must be of the supplied @type afterward. - + Returns the current append window end time. Any segment processed that starts after this value will be ignored. @@ -738,7 +738,7 @@ after this value will be ignored. - + Returns the current append window start time. Any segment processed that ends earlier than this value will be ignored. @@ -755,7 +755,7 @@ earlier than this value will be ignored. - + Returns a sequence of #GstMediaSourceRange values representing which segments of @self are buffered in memory. @@ -774,7 +774,7 @@ of @self are buffered in memory. - + Returns the current content type of @self. @@ -788,7 +788,7 @@ of @self are buffered in memory. - + [Specification](https://www.w3.org/TR/media-source-2/#dom-sourcebuffer-timestampoffset) @@ -802,7 +802,7 @@ of @self are buffered in memory. - + [Specification](https://www.w3.org/TR/media-source-2/#dom-sourcebuffer-updating) @@ -840,7 +840,7 @@ of @self are buffered in memory. - + Changes the Append Mode of @self. This influences what timestamps will be assigned to media processed by this Source Buffer. In Segment mode, the timestamps in each segment determine the position of each sample after it @@ -903,12 +903,12 @@ ignored. - the append window end + the append window start - + Attempt to set the timestamp offset of @self. Any media processed after this value is set will have this value added to its start time. @@ -929,7 +929,7 @@ value is set will have this value added to its start time. - + Affects how timestamps of processed media segments are interpreted. In %GST_SOURCE_BUFFER_APPEND_MODE_SEGMENTS, the start timestamp of a processed media segment is used directly along with @@ -941,21 +941,21 @@ most recently appended segment. [Specification](https://www.w3.org/TR/media-source-2/#dom-sourcebuffer-mode) - + Any segments processed which have a start time greater than this value will be ignored by this Source Buffer. [Specification](https://www.w3.org/TR/media-source-2/#dom-sourcebuffer-appendwindowend) - + Any segments processed which end before this value will be ignored by this Source Buffer. [Specification](https://www.w3.org/TR/media-source-2/#dom-sourcebuffer-appendwindowstart) - + The set of Time Intervals that have been loaded into the current Source Buffer @@ -964,18 +964,18 @@ Buffer - + The MIME content-type of the data stream - + The next media segment appended to the current Source Buffer will have its start timestamp increased by this amount. [Specification](https://www.w3.org/TR/media-source-2/#dom-sourcebuffer-timestampoffset) - + Whether the current source buffer is still asynchronously processing previously issued commands. @@ -1030,9 +1030,9 @@ gst_source_buffer_append_buffer(). [Specification](https://www.w3.org/TR/media-source-2/#dom-appendmode) - + - + @@ -1061,7 +1061,7 @@ It is used by #GstMediaSource to provide direct access to its child informing clients which of the Source Buffers are active through #GstMediaSource:active-source-buffers. - + [Specification](https://www.w3.org/TR/media-source-2/#dom-sourcebufferlist-length) @@ -1096,7 +1096,7 @@ the highest index in the list, it will return `NULL`. - + The number of #GstSourceBuffer<!-- -->s contained by this structure [Specification](https://www.w3.org/TR/media-source-2/#dom-sourcebufferlist-length) diff --git a/girs/GstNet-1.0.gir b/girs/GstNet-1.0.gir index 6e0605afcdb..068d5ae9e98 100644 --- a/girs/GstNet-1.0.gir +++ b/girs/GstNet-1.0.gir @@ -186,10 +186,10 @@ clock. - + - + @@ -198,16 +198,16 @@ clock. - + - + - + - + @@ -233,7 +233,7 @@ clock. - + @@ -421,19 +421,19 @@ The #GstNetTimeProvider typically wraps the clock used by a #GstPipeline. - + - + - + - + @@ -459,7 +459,7 @@ The #GstNetTimeProvider typically wraps the clock used by a #GstPipeline. - + @@ -602,16 +602,16 @@ gst_clock_is_synced(). - + - + - + @@ -639,7 +639,7 @@ gst_clock_is_synced(). - + diff --git a/girs/GstPbutils-1.0.gir b/girs/GstPbutils-1.0.gir index a8022fa6b99..a8b7dac51f6 100644 --- a/girs/GstPbutils-1.0.gir +++ b/girs/GstPbutils-1.0.gir @@ -109,10 +109,10 @@ new frame. - + - + @@ -185,39 +185,39 @@ new frame. - + Different types of supported background shading functions. - + no shading - + plain fading - + fade and move up - + fade and move down - + fade and move left - + fade and move right - + fade and move horizontally out - + fade and move horizontally in - + fade and move vertically out - + fade and move vertically in @@ -487,7 +487,7 @@ pending URIS (if any). - + The duration (in nanoseconds) after which the discovery of an individual URI will timeout. @@ -495,7 +495,7 @@ If the discovery of a URI times out, the %GST_DISCOVERER_TIMEOUT will be set on the result flags. - + @@ -1115,47 +1115,47 @@ what needs to be serialized. - + Result values for the discovery process. - + The discovery was successful - + the URI is invalid - + an error happened and the GError is set - + the discovery timed-out - + the discoverer was already discovering a file - + Some plugins are missing for full discovery You can use these flags to control what is serialized by gst_discoverer_info_to_variant() - + Serialize only basic information, excluding caps, tags and miscellaneous information - + Serialize the caps for each stream - + Serialize the tags for each stream - + Serialize miscellaneous information for each stream - + Serialize all the available info, including caps, tags and miscellaneous information @@ -1596,7 +1596,7 @@ NULL. See gst_encoding_profile_get_restriction() for more details. - + @@ -1687,7 +1687,7 @@ the list of contained #GstEncodingProfile. - + @@ -1791,7 +1791,7 @@ later during the encoding. - + The properties that are going to be set on the underlying element @@ -2012,7 +2012,7 @@ during the encoding - + This allows setting the muxing/encoding element properties. **Set properties generically** @@ -2226,7 +2226,7 @@ serialization format". - + A #GstStructure defining the properties to be set to the element the profile represents. @@ -2241,7 +2241,7 @@ element-properties,row-mt=true, end-usage=vbr - + @@ -2582,7 +2582,7 @@ constance framerate. - + @@ -2690,7 +2690,7 @@ constance framerate. - + Opaque context structure for the plugin installation. Use the provided API to set details on it. @@ -2874,49 +2874,49 @@ gst_install_plugins_sync(), and also the result code passed to the These codes indicate success or failure of starting an external installer program and to what extent the requested plugins could be installed. - + all of the requested plugins could be installed - + no appropriate installation candidate for any of the requested plugins could be found. Only return this if nothing has been installed. Return #GST_INSTALL_PLUGINS_PARTIAL_SUCCESS if some (but not all) of the requested plugins could be installed. - + an error occurred during the installation. If this happens, the user has already seen an error message and another one should not be displayed - + some of the requested plugins could be installed, but not all - + the user has aborted the installation - + the installer had an unclean exit code (ie. death by signal) - + the helper returned an invalid status code - + returned by gst_install_plugins_async() to indicate that everything went fine so far and the provided callback will be called with the result of the installation later - + some internal failure has occurred when trying to start the installer - + the helper script to call the actual installer is not installed - + a previously-started plugin installation is still in progress, try again later @@ -2950,7 +2950,7 @@ in debugging. - + The micro version of GStreamer's gst-plugins-base libraries at compile time. @@ -2969,33 +2969,33 @@ Actual releases have 0, GIT versions have 1, prerelease versions have 2-... Flags that are returned by gst_pb_utils_get_caps_description_flags() and describe the format of the caps. - + Caps describe a container format. - + Caps describe an audio format, or a container format that can store audio. - + Caps describe an video format, or a container format that can store video. - + Caps describe an image format, or a container format that can store image. - + Caps describe an subtitle format, or a container format that can store subtitles. - + Container format is a tags container. - + Container format can store any kind of stream type. - + Caps describe a metadata format, or a container format that can store metadata. @@ -3166,6 +3166,36 @@ rate. + + Creates the corresponding AV1 Codec Configuration Record + + + The AV1 Codec Configuration Record, or +%NULL if there was an error. + + + + + a video/x-av1 #GstCaps + + + + + + Parses the provided @av1c and returns the corresponding caps + + + The parsed AV1 caps, or %NULL if there +is an error + + + + + a #GstBuffer containing a AV1CodecConfigurationRecord + + + + Transform a seq_level_idx into the level string @@ -3487,6 +3517,110 @@ is expected to have the same format as for gst_codec_utils_h264_get_profile(). + + Sets the level, tier and profile in @caps if it can be determined from +@decoder_configuration. See gst_codec_utils_h266_get_level(), +gst_codec_utils_h266_get_tier() and gst_codec_utils_h266_get_profile() +for more details on the parameters. + + + %TRUE if the level, tier, profile could be set, %FALSE otherwise. + + + + + the #GstCaps to which the level, tier and profile are to be added + + + + Pointer to the VvcDecoderConfigurationRecord struct as defined in ISO/IEC 14496-15 + + + + + + Length of the data available in @decoder_configuration. + + + + + + Converts the level indication (general_level_idc) in the stream's +ptl_record structure into a string. + + + The level as a const string, or %NULL if there is an error. + + + + + Pointer to the VvcPTLRecord structure as defined in ISO/IEC 14496-15. + + + + + + Length of the data available in @ptl_record. + + + + + + Transform a level string from the caps into the level_idc + + + the level_idc or 0 if the level is unknown + + + + + A level string from caps + + + + + + Converts the profile indication (general_profile_idc) in the stream's +ptl_record structure into a string. + + + The profile as a const string, or %NULL if there is an error. + + + + + Pointer to the VvcPTLRecord structure as defined in ISO/IEC 14496-15. + + + + + + Length of the data available in @ptl_record + + + + + + Converts the tier indication (general_tier_flag) in the stream's +ptl_record structure into a string. + + + The tier as a const string, or %NULL if there is an error. + + + + + Pointer to the VvcPTLRecord structure as defined in ISO/IEC 14496-15. + + + + + + Length of the data available in @ptl_record. + + + + Sets the level and profile in @caps if it can be determined from @vis_obj_seq. See gst_codec_utils_mpeg4video_get_level() and @@ -4506,7 +4640,8 @@ installed but no suitable video decoder and no suitable audio decoder). - the function to call when the installer program returns + the function to call when the + installer program returns diff --git a/girs/GstPlay-1.0.gir b/girs/GstPlay-1.0.gir index 0f1dabaf68f..9fabc6df09a 100644 --- a/girs/GstPlay-1.0.gir +++ b/girs/GstPlay-1.0.gir @@ -585,7 +585,7 @@ matching #GstPlayVideoInfo. - + Retrieve the current value of audio-video-offset property @@ -635,7 +635,7 @@ gst_structure_free() after usage or gst_play_set_config(). - + A Function to get current audio #GstPlayAudioInfo instance. @@ -651,7 +651,7 @@ The caller should free it with g_object_unref() - + A Function to get current subtitle #GstPlaySubtitleInfo instance. @@ -667,7 +667,7 @@ The caller should free it with g_object_unref() - + A Function to get current video #GstPlayVideoInfo instance. @@ -698,7 +698,7 @@ The caller should free it with g_object_unref() - + Retrieves the duration of the media stream that self represents. @@ -713,7 +713,7 @@ nanoseconds. - + A Function to get the current media info #GstPlayMediaInfo instance. @@ -782,7 +782,7 @@ fill memory. To avoid that, the bus has to be set "flushing". - + %TRUE if the currently-playing stream is muted. @@ -795,7 +795,7 @@ fill memory. To avoid that, the bus has to be set "flushing". - + The internal playbin instance. @@ -810,7 +810,7 @@ The caller should free it with g_object_unref() - + the absolute position time, in nanoseconds, of the @@ -824,7 +824,7 @@ currently-playing stream. - + current playback rate @@ -852,7 +852,7 @@ currently-playing stream. - + Retrieve the current value of subtitle-video-offset property @@ -866,7 +866,7 @@ currently-playing stream. - + Gets the URI of the currently-playing stream. @@ -908,7 +908,7 @@ Currently supported settings are: - + Returns the current volume level, as a percentage between 0 and 1. @@ -981,7 +981,8 @@ in nanoseconds. - + + Use gst_play_set_audio_track_id() instead. %TRUE or %FALSE @@ -1017,7 +1018,26 @@ Sets the audio track @stream_index. - + + + + %TRUE or %FALSE + +Sets the audio track @stream_id. + + + + + #GstPlay instance + + + + stream id + + + + + Sets audio-video-offset property by value of @offset @@ -1118,7 +1138,7 @@ value. - + %TRUE if the currently-playing stream should be muted. @@ -1135,7 +1155,7 @@ value. - + Playback at specified rate @@ -1152,7 +1172,8 @@ value. - + + Use gst_play_set_subtitle_track_id() instead. %TRUE or %FALSE @@ -1188,6 +1209,25 @@ Sets the subtitle stack @stream_index. + + + + %TRUE or %FALSE + +Sets the subtitle track @stream_id. + + + + + #GstPlay instance + + + + stream id + + + + Sets the external subtitle URI. This should be combined with a call to gst_play_set_subtitle_track_enabled(@play, TRUE) so the subtitles are actually @@ -1207,7 +1247,7 @@ rendered. - + Sets subtitle-video-offset property by value of @offset @@ -1224,7 +1264,35 @@ rendered. - + + + + %TRUE or %FALSE + +Sets the selected track stream ids. Setting %NULL as stream id disables the +corresponding track. + + + + + #GstPlay instance + + + + audio stream id + + + + video stream id + + + + subtitle stream id + + + + + Sets the next URI to play. @@ -1241,7 +1309,8 @@ rendered. - + + Use gst_play_set_video_track_id() instead. %TRUE or %FALSE @@ -1277,6 +1346,25 @@ Sets the video track @stream_index. + + + + %TRUE or %FALSE + +Sets the video track @stream_id. + + + + + #GstPlay instance + + + + stream id + + + + @@ -1313,7 +1401,7 @@ Sets the video track @stream_index. - + Sets the volume level of the stream as a percentage between 0 and 1. @@ -1344,55 +1432,55 @@ in the stream. - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1465,24 +1553,24 @@ in the stream. - + - + - + hue or color balance. - + brightness or black level. - + color saturation or chroma gain. - + contrast or luma gain. @@ -1502,7 +1590,7 @@ gain. - + generic error. @@ -1751,7 +1839,7 @@ matching #GstPlayVideoInfo. - + @@ -1760,43 +1848,43 @@ matching #GstPlayVideoInfo. Types of messages that will be posted on the play API bus. See also #gst_play_get_message_bus() - + Source element was initalized for set URI - + Sink position changed - + Duration of stream changed - + State changed, see #GstPlayState - + Pipeline is in buffering state, message contains the percentage value of the decoding buffer - + Sink has received EOS - + Message contains an error - + Message contains an error - + Video sink received format in different dimensions than before - + A media-info property has changed, message contains current #GstPlayMediaInfo - + The volume of the audio ouput has changed - + Audio muting flag has been toggled - + Any pending seeking operation has been completed @@ -1812,8 +1900,36 @@ See also #gst_play_get_message_bus() - - Parse the given buffering-percent @msg and extract the corresponding value + + Reads the stream ID the play message @msg applies to, if any. + + + The stream ID this message applies to + + + + + A #GstMessage + + + + + + Reads the URI the play message @msg applies to. + + + The URI this message applies to + + + + + A #GstMessage + + + + + + Parse the given buffering @msg and extract the corresponding value @@ -1829,8 +1945,44 @@ See also #gst_play_get_message_bus() - - Parse the given duration @msg and extract the corresponding #GstClockTime + + Parse the given buffering @msg and extract the corresponding value + Use gst_play_message_parse_buffering(). + + + + + + + A #GstMessage + + + + the resulting buffering percent + + + + + + Parse the given duration-changed @msg and extract the corresponding #GstClockTime + + + + + + + A #GstMessage + + + + the resulting duration + + + + + + Parse the given duration-changed @msg and extract the corresponding #GstClockTime + Use gst_play_message_parse_duration_changed(). @@ -1847,7 +1999,11 @@ See also #gst_play_get_message_bus() - Parse the given error @msg and extract the corresponding #GError + Parse the given error @msg and extract the corresponding #GError. + +Since 1.26 the details will always contain the URI this refers to in an +"uri" field of type string, and (if known) the string "stream-id" it is +referring to. @@ -1867,8 +2023,37 @@ See also #gst_play_get_message_bus() + + Parses missing plugin descriptions and installer details from a +GST_PLAY_ERROR_MISSING_PLUGIN error message. + +Both arrays will have the same length, and strings at the same index +correspond to each other. + +The installer details can be passed to gst_install_plugins_sync() or +gst_install_plugins_async(). + + + %TRUE if the message contained a missing-plugin error. + + + + + A #GstMessage + + + + a %NULL-terminated array of descriptions + + + + a %NULL-terminated array of installer details + + + + - Parse the given @msg and extract the corresponding media information + Parse the given media-info-updated @msg and extract the corresponding media information @@ -1885,7 +2070,7 @@ See also #gst_play_get_message_bus() - Parse the given @msg and extract the corresponding audio muted state + Parse the given mute-changed @msg and extract the corresponding audio muted state @@ -1902,7 +2087,24 @@ See also #gst_play_get_message_bus() - Parse the given position @msg and extract the corresponding #GstClockTime + Parse the given position-updated @msg and extract the corresponding #GstClockTime + + + + + + + A #GstMessage + + + + the resulting position + + + + + + Parse the given seek-done @msg and extract the corresponding #GstClockTime @@ -1919,7 +2121,7 @@ See also #gst_play_get_message_bus() - Parse the given state @msg and extract the corresponding #GstPlayState + Parse the given state-changed @msg and extract the corresponding #GstPlayState @@ -1952,8 +2154,25 @@ See also #gst_play_get_message_bus() + + Parse the given uri-loaded @msg and extract the corresponding value + + + + + + + A #GstMessage + + + + the resulting URI + + + + - Parse the given @msg and extract the corresponding video dimensions + Parse the given video-dimensions-changed @msg and extract the corresponding video dimensions @@ -1974,7 +2193,7 @@ See also #gst_play_get_message_bus() - Parse the given @msg and extract the corresponding audio volume + Parse the given volume-changed @msg and extract the corresponding audio volume @@ -1991,7 +2210,11 @@ See also #gst_play_get_message_bus() - Parse the given error @msg and extract the corresponding #GError warning + Parse the given warning @msg and extract the corresponding #GError. + +Since 1.26 the details will always contain the URI this refers to in an +"uri" field of type string, and (if known) the string "stream-id" it is +referring to. @@ -2011,6 +2234,35 @@ See also #gst_play_get_message_bus() + + Parses missing plugin descriptions and installer details from a +GST_PLAY_ERROR_MISSING_PLUGIN warning message. + +Both arrays will have the same length, and strings at the same index +correspond to each other. + +The installer details can be passed to gst_install_plugins_sync() or +gst_install_plugins_async(). + + + %TRUE if the message contained a missing-plugin error. + + + + + A #GstMessage + + + + a %NULL-terminated array of descriptions + + + + a %NULL-terminated array of installer details + + + + @@ -2067,7 +2319,7 @@ it on the created adapter object. - + The #GstPlay owning this signal adapter. @@ -2080,7 +2332,7 @@ it on the created adapter object. - + @@ -2224,7 +2476,7 @@ it on the created adapter object. - + @@ -2246,16 +2498,16 @@ it on the created adapter object. - + the play is stopped. - + the play is buffering. - + the play is paused. - + the play is currently playing a stream. @@ -2307,9 +2559,10 @@ unknown. - + Function to get stream index from #GstPlayStreamInfo instance or -1 if unknown. + Use gst_play_stream_info_get_stream_id(). the stream index of this stream. @@ -2322,6 +2575,20 @@ unknown. + + A string stream id identifying this #GstPlayStreamInfo. + + + stream id string. + + + + + a #GstPlayStreamInfo + + + + Function to return human readable name for the stream type of the given @info (ex: "audio", "video", "subtitle") @@ -2351,7 +2618,7 @@ of the given @info (ex: "audio", "video", "subtitle") - + @@ -2371,7 +2638,7 @@ of the given @info (ex: "audio", "video", "subtitle") - + @@ -2471,7 +2738,7 @@ of the given @info (ex: "audio", "video", "subtitle") - + @@ -2549,7 +2816,7 @@ for details. - + The currently set, platform specific window @@ -2601,7 +2868,7 @@ do not support subwindows. - + Sets the platform specific window handle into which the video should be rendered @@ -2622,11 +2889,11 @@ should be rendered - + - + @@ -2755,8 +3022,54 @@ freed using gst_play_visualization_free(). - - Parse the given buffering-percent @msg and extract the corresponding value + + Reads the stream ID the play message @msg applies to, if any. + + + The stream ID this message applies to + + + + + A #GstMessage + + + + + + Reads the URI the play message @msg applies to. + + + The URI this message applies to + + + + + A #GstMessage + + + + + + Parse the given buffering @msg and extract the corresponding value + + + + + + + A #GstMessage + + + + the resulting buffering percent + + + + + + Parse the given buffering @msg and extract the corresponding value + Use gst_play_message_parse_buffering(). @@ -2772,8 +3085,26 @@ freed using gst_play_visualization_free(). - - Parse the given duration @msg and extract the corresponding #GstClockTime + + Parse the given duration-changed @msg and extract the corresponding #GstClockTime + + + + + + + A #GstMessage + + + + the resulting duration + + + + + + Parse the given duration-changed @msg and extract the corresponding #GstClockTime + Use gst_play_message_parse_duration_changed(). @@ -2790,7 +3121,11 @@ freed using gst_play_visualization_free(). - Parse the given error @msg and extract the corresponding #GError + Parse the given error @msg and extract the corresponding #GError. + +Since 1.26 the details will always contain the URI this refers to in an +"uri" field of type string, and (if known) the string "stream-id" it is +referring to. @@ -2810,8 +3145,37 @@ freed using gst_play_visualization_free(). + + Parses missing plugin descriptions and installer details from a +GST_PLAY_ERROR_MISSING_PLUGIN error message. + +Both arrays will have the same length, and strings at the same index +correspond to each other. + +The installer details can be passed to gst_install_plugins_sync() or +gst_install_plugins_async(). + + + %TRUE if the message contained a missing-plugin error. + + + + + A #GstMessage + + + + a %NULL-terminated array of descriptions + + + + a %NULL-terminated array of installer details + + + + - Parse the given @msg and extract the corresponding media information + Parse the given media-info-updated @msg and extract the corresponding media information @@ -2828,7 +3192,7 @@ freed using gst_play_visualization_free(). - Parse the given @msg and extract the corresponding audio muted state + Parse the given mute-changed @msg and extract the corresponding audio muted state @@ -2845,7 +3209,24 @@ freed using gst_play_visualization_free(). - Parse the given position @msg and extract the corresponding #GstClockTime + Parse the given position-updated @msg and extract the corresponding #GstClockTime + + + + + + + A #GstMessage + + + + the resulting position + + + + + + Parse the given seek-done @msg and extract the corresponding #GstClockTime @@ -2862,7 +3243,7 @@ freed using gst_play_visualization_free(). - Parse the given state @msg and extract the corresponding #GstPlayState + Parse the given state-changed @msg and extract the corresponding #GstPlayState @@ -2895,8 +3276,25 @@ freed using gst_play_visualization_free(). + + Parse the given uri-loaded @msg and extract the corresponding value + + + + + + + A #GstMessage + + + + the resulting URI + + + + - Parse the given @msg and extract the corresponding video dimensions + Parse the given video-dimensions-changed @msg and extract the corresponding video dimensions @@ -2917,7 +3315,7 @@ freed using gst_play_visualization_free(). - Parse the given @msg and extract the corresponding audio volume + Parse the given volume-changed @msg and extract the corresponding audio volume @@ -2934,7 +3332,11 @@ freed using gst_play_visualization_free(). - Parse the given error @msg and extract the corresponding #GError warning + Parse the given warning @msg and extract the corresponding #GError. + +Since 1.26 the details will always contain the URI this refers to in an +"uri" field of type string, and (if known) the string "stream-id" it is +referring to. @@ -2954,6 +3356,35 @@ freed using gst_play_visualization_free(). + + Parses missing plugin descriptions and installer details from a +GST_PLAY_ERROR_MISSING_PLUGIN warning message. + +Both arrays will have the same length, and strings at the same index +correspond to each other. + +The installer details can be passed to gst_install_plugins_sync() or +gst_install_plugins_async(). + + + %TRUE if the message contained a missing-plugin error. + + + + + A #GstMessage + + + + a %NULL-terminated array of descriptions + + + + a %NULL-terminated array of installer details + + + + Gets a string representing the given state. diff --git a/girs/GstPlayer-1.0.gir b/girs/GstPlayer-1.0.gir index 92efe7e7562..d881796ce71 100644 --- a/girs/GstPlayer-1.0.gir +++ b/girs/GstPlayer-1.0.gir @@ -533,7 +533,7 @@ matching #GstPlayerVideoInfo. - + Retrieve the current value of audio-video-offset property @@ -583,7 +583,7 @@ gst_structure_free() after usage or gst_player_set_config(). - + A Function to get current audio #GstPlayerAudioInfo instance. @@ -599,7 +599,7 @@ The caller should free it with g_object_unref() - + A Function to get current subtitle #GstPlayerSubtitleInfo instance. @@ -615,7 +615,7 @@ The caller should free it with g_object_unref() - + A Function to get current video #GstPlayerVideoInfo instance. @@ -646,7 +646,7 @@ The caller should free it with g_object_unref() - + Retrieves the duration of the media stream that self represents. @@ -661,7 +661,7 @@ nanoseconds. - + A Function to get the current media info #GstPlayerMediaInfo instance. @@ -705,7 +705,7 @@ The caller should free it with g_object_unref() - + %TRUE if the currently-playing stream is muted. @@ -718,7 +718,7 @@ The caller should free it with g_object_unref() - + The internal playbin instance. @@ -733,7 +733,7 @@ The caller should free it with g_object_unref() - + the absolute position time, in nanoseconds, of the @@ -747,7 +747,7 @@ currently-playing stream. - + current playback rate @@ -775,7 +775,7 @@ currently-playing stream. - + Retrieve the current value of subtitle-video-offset property @@ -789,7 +789,7 @@ currently-playing stream. - + Gets the URI of the currently-playing stream. @@ -831,7 +831,7 @@ Currently supported settings are: - + Returns the current volume level, as a percentage between 0 and 1. @@ -940,7 +940,7 @@ Sets the audio track @stream_idex. - + Sets audio-video-offset property by value of @offset @@ -1041,7 +1041,7 @@ value. - + %TRUE if the currently-playing stream should be muted. @@ -1058,7 +1058,7 @@ value. - + Playback at specified rate @@ -1130,7 +1130,7 @@ rendered. - + Sets subtitle-video-offset property by value of @offset @@ -1147,7 +1147,7 @@ rendered. - + Sets the next URI to play. @@ -1236,7 +1236,7 @@ Sets the video track @stream_index. - + Sets the volume level of the stream as a percentage between 0 and 1. This volume is a linear factor. For showing the volume in a GUI it @@ -1271,58 +1271,58 @@ in the stream. - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1514,24 +1514,24 @@ unknown. - + - + - + hue or color balance. - + brightness or black level. - + color saturation or chroma gain. - + contrast or luma gain. @@ -1551,7 +1551,7 @@ gain. - + generic error. @@ -1596,7 +1596,7 @@ or the thread default one if %NULL is used. See gst_player_new(). - + @@ -1825,7 +1825,7 @@ matching #GstPlayerVideoInfo. - + @@ -1910,16 +1910,16 @@ matching #GstPlayerVideoInfo. - + the player is stopped. - + the player is buffering. - + the player is paused. - + the player is currently playing a stream. @@ -2014,7 +2014,7 @@ of the given @info (ex: "audio", "video", "subtitle") - + @@ -2034,7 +2034,7 @@ of the given @info (ex: "audio", "video", "subtitle") - + @@ -2136,7 +2136,7 @@ unknown. - + @@ -2214,7 +2214,7 @@ for details. - + The currently set, platform specific window @@ -2266,7 +2266,7 @@ do not support subwindows. - + Sets the platform specific window handle into which the video should be rendered @@ -2287,11 +2287,11 @@ should be rendered - + - + diff --git a/girs/GstRtp-1.0.gir b/girs/GstRtp-1.0.gir index c8d35af735e..6b1f52933a4 100644 --- a/girs/GstRtp-1.0.gir +++ b/girs/GstRtp-1.0.gir @@ -318,47 +318,47 @@ gst_rtcp_buffer_validate_reduced(). Different types of feedback messages. - + Invalid type - + Generic NACK - + Temporary Maximum Media Stream Bit Rate Request - + Temporary Maximum Media Stream Bit Rate Notification - + Request an SR packet for early synchronization - + - + Picture Loss Indication - + Slice Loss Indication - + Reference Picture Selection Indication - + Application layer Feedback - + Full Intra Request Command - + Temporal-Spatial Trade-off Request - + Temporal-Spatial Trade-off Notification - + Video Back Channel Message @@ -1959,113 +1959,113 @@ is set as zero, @lost_packets or @dup_packets will be zero. Different types of SDES content. - + Invalid SDES entry - + End of SDES list - + Canonical name - + User name - + User's electronic mail address - + User's phone number - + Geographic user location - + Name of application or tool - + Notice about the source - + Private extensions - + H.323 callable address - + Application Specific Identifier (RFC6776) - + Reporting Group Identifier (RFC8861) - + RtpStreamId SDES item (RFC8852). - + RepairedRtpStreamId SDES item (RFC8852). - + CLUE CaptId (RFC8849) - + MID SDES item (RFC8843). Different RTCP packet types. - + Invalid type - + Sender report - + Receiver report - + Source description - + Goodbye - + Application defined - + Transport layer feedback. - + Payload-specific feedback. - + Extended report. Types of RTCP Extended Reports, those are defined in RFC 3611 and other RFCs according to the [IANA registry](https://www.iana.org/assignments/rtcp-xr-block-types/rtcp-xr-block-types.xhtml). - + Invalid XR Report Block - + Loss RLE Report Block - + Duplicate RLE Report Block - + Packet Receipt Times Report Block - + Receiver Reference Time Report Block - + Delay since the last Receiver Report - + Statistics Summary Report Block - + VoIP Metrics Report Block @@ -2295,7 +2295,7 @@ audio codec - + @@ -2335,7 +2335,7 @@ audio codec - + @@ -2374,6 +2374,7 @@ Be aware that in case gst_rtp_base_depayload_push_list() is used each buffer will see the same list of RTP header extensions. + custom event handling @@ -2388,6 +2389,7 @@ each buffer will see the same list of RTP header extensions. + signal the depayloader about packet loss @@ -2402,6 +2404,11 @@ each buffer will see the same list of RTP header extensions. + process incoming rtp packets. Subclass must implement either + this method or @process_rtp_packet to process incoming rtp packets. + If the child returns a buffer without a valid timestamp, the timestamp + of the provided buffer will be applied to the result buffer and the + buffer will be pushed. If this function returns %NULL, nothing is pushed. @@ -2416,6 +2423,14 @@ each buffer will see the same list of RTP header extensions. + Same as the process virtual function, but slightly more +efficient, since it is passed the rtp buffer structure that has already +been mapped (with GST_MAP_READ) by the base class and thus does not have +to be mapped again by the subclass. Can be used by the subclass to process +incoming rtp packets. If the subclass returns a buffer without a valid +timestamp, the timestamp of the input buffer will be applied to the result +buffer and the output buffer will be pushed out. If this function returns +%NULL, nothing is pushed out. Since: 1.6. @@ -2430,6 +2445,7 @@ each buffer will see the same list of RTP header extensions. + configure the depayloader @@ -2626,14 +2642,14 @@ the outgoing buffer when it didn't have a timestamp already. - + If enabled, the depayloader will automatically try to enable all the RTP header extensions provided in the sink caps, saving the application the need to handle these extensions manually using the GstRTPBaseDepayload::request-extension: signal. - + A list of already enabled RTP header extensions. This may be useful for finding out which extensions are already enabled (with add-extension signal) and picking a non-conflicting ID for a new extension that needs to be added on top of the existing ones. @@ -2646,14 +2662,14 @@ Dynamic updates of this property can be received by subscribing to its correspon "notify::extensions". - + Max seqnum reorder before the sender is assumed to have restarted. When max-reorder is set to 0 all reordered/duplicate packets are considered coming from a restarted sender. - + Add RTP source information found in RTP header as meta to output buffer. @@ -2748,6 +2764,7 @@ necessary attributes as required by the extension implementation. + configure the depayloader @@ -2764,6 +2781,11 @@ necessary attributes as required by the extension implementation. + process incoming rtp packets. Subclass must implement either + this method or @process_rtp_packet to process incoming rtp packets. + If the child returns a buffer without a valid timestamp, the timestamp + of the provided buffer will be applied to the result buffer and the + buffer will be pushed. If this function returns %NULL, nothing is pushed. @@ -2780,6 +2802,7 @@ necessary attributes as required by the extension implementation. + signal the depayloader about packet loss @@ -2796,6 +2819,7 @@ necessary attributes as required by the extension implementation. + custom event handling @@ -2812,6 +2836,14 @@ necessary attributes as required by the extension implementation. + Same as the process virtual function, but slightly more +efficient, since it is passed the rtp buffer structure that has already +been mapped (with GST_MAP_READ) by the base class and thus does not have +to be mapped again by the subclass. Can be used by the subclass to process +incoming rtp packets. If the subclass returns a buffer without a valid +timestamp, the timestamp of the input buffer will be applied to the result +buffer and the output buffer will be pushed out. If this function returns +%NULL, nothing is pushed out. Since: 1.6. @@ -2833,13 +2865,14 @@ necessary attributes as required by the extension implementation. - + Provides a base class for RTP payloaders + get desired caps @@ -2857,6 +2890,7 @@ necessary attributes as required by the extension implementation. + process data @@ -2871,6 +2905,7 @@ necessary attributes as required by the extension implementation. + custom query handling @@ -2888,6 +2923,7 @@ necessary attributes as required by the extension implementation. + configure the payloader @@ -2902,6 +2938,7 @@ necessary attributes as required by the extension implementation. + custom event handling on the sinkpad @@ -2916,6 +2953,7 @@ necessary attributes as required by the extension implementation. + custom event handling on the srcpad @@ -3152,14 +3190,14 @@ Variable arguments should be in the form field name, field type - + If enabled, the payloader will automatically try to enable all the RTP header extensions provided in the src caps, saving the application the need to handle these extensions manually using the GstRTPBasePayload::request-extension: signal. - + A list of already enabled RTP header extensions. This may be useful for finding out which extensions are already enabled (with add-extension signal) and picking a non-conflicting ID for a new extension that needs to be added on top of the existing ones. @@ -3172,22 +3210,22 @@ Dynamic updates of this property can be received by subscribing to its correspon "notify::extensions". - + - + Minimum duration of the packet data in ns (can't go above MTU) - + - + Make the payloader timestamp packets according to the Rate-Control=no behaviour specified in the ONVIF replay spec. - + Try to use the offset fields to generate perfect RTP timestamps. When this option is disabled, RTP timestamps are generated from GST_BUFFER_PTS of each payloaded buffer. The PTSes of buffers may not necessarily increment @@ -3205,14 +3243,14 @@ buffer. Currently GstRTPBasePayload is limited to handling perfect RTP timestamps for audio streams. - + - + Force buffers to be multiples of this duration in ns (0 disables) - + Make the RTP packets' timestamps be scaled with the segment's rate (corresponding to RTSP speed parameter). Disabling this property means the timestamps will not be affected by the set delivery speed (RTSP speed). @@ -3223,18 +3261,18 @@ video. This is achieved by the client setting RTSP Speed to 2 while the server has this property disabled. - + - + - + Enable writing the CSRC field in allocated RTP header based on RTP source information found in the input buffer's #GstRTPSourceMeta. - + @@ -3254,10 +3292,10 @@ the last processed buffer and current state of the stream being payloaded: * `timestamp-offset` :#G_TYPE_UINT, The current offset added to the timestamp - + - + @@ -3380,6 +3418,7 @@ necessary attributes as required by the extension implementation. + get desired caps @@ -3399,6 +3438,7 @@ necessary attributes as required by the extension implementation. + configure the payloader @@ -3415,6 +3455,7 @@ necessary attributes as required by the extension implementation. + process data @@ -3431,6 +3472,7 @@ necessary attributes as required by the extension implementation. + custom event handling on the sinkpad @@ -3447,6 +3489,7 @@ necessary attributes as required by the extension implementation. + custom event handling on the srcpad @@ -3463,6 +3506,7 @@ necessary attributes as required by the extension implementation. + custom query handling @@ -3487,7 +3531,7 @@ necessary attributes as required by the extension implementation. - + @@ -4553,28 +4597,28 @@ buffers carrying RTP packets. Note that these are only valid for #GstCaps of type: application/x-rtp (x-rtcp). They can conflict with other extended buffer flags. - + The #GstBuffer was once wrapped in a retransmitted packet as specified by RFC 4588. - + The packet represents redundant RTP packet. The flag is used in gstrtpstorage to be able to hold the packetback and use it only for recovery from packet loss. Since: 1.14 - + Offset to define more flags. Additional mapping flags for gst_rtp_buffer_map(). - + Skip mapping and validation of RTP padding and RTP pad count when present. Useful for buffers where the padding may be encrypted. - + Offset to define more flags @@ -4618,6 +4662,7 @@ information given in the input @buffer. + retrieve the supported flags the flags supported by this instance of @ext @@ -4664,6 +4709,8 @@ information given in the input @buffer. + set the necessary attributes that may be signaled e.g. with + an SDP. @@ -5143,6 +5190,7 @@ from gst_rtp_header_extension_get_max_size(). + retrieve the supported flags @@ -5158,6 +5206,13 @@ from gst_rtp_header_extension_get_max_size(). + retrieve the maximum size for this extension based on the + information available from input_meta. Implementations should attempt + to provide as accurate information as possible as the returned value + will be used to control the amount of possible data in the payload. + Implementations must return the maximum as the allocated size for + writing the extension will be at least the size of the returned value. + Return the amount of data read or <0 on failure. @@ -5177,6 +5232,8 @@ from gst_rtp_header_extension_get_max_size(). + write into @data the information for this extension. Various + information is provided to help writing extensions in particular cases. @@ -5215,6 +5272,8 @@ from gst_rtp_header_extension_get_max_size(). + read from a rtp payloaded buffer and extract the extension + information, optionally adding some meta onto the output buffer. @@ -5249,6 +5308,8 @@ from gst_rtp_header_extension_get_max_size(). + read any information from sink caps that the header + extension needs for its function. @@ -5268,6 +5329,8 @@ from gst_rtp_header_extension_get_max_size(). + update depayloader non-RTP (depayloaded) caps with + the information parsed from RTP header. @@ -5287,6 +5350,8 @@ from gst_rtp_header_extension_get_max_size(). + set the necessary attributes that may be signaled e.g. with + an SDP. @@ -5306,6 +5371,8 @@ from gst_rtp_header_extension_get_max_size(). + write the necessary caps field/s for the configured + attributes e.g. as signalled with SDP. @@ -5350,34 +5417,34 @@ from gst_rtp_header_extension_get_max_size(). Direction to which to apply the RTP Header Extension - + Neither send nor receive RTP Header Extensions - + Only send RTP Header Extensions @GST_RTP_HEADER_EXTENSION_DIRECTION_RECVONLY: Only receive RTP Header Extensions - + - + Send and receive RTP Header Extensions ext - + RTP header extension direction is inherited from the stream Flags that apply to a RTP Audio/Video header extension. - + The one byte rtp extension header. 1-16 data bytes per extension with a maximum of 14 extension ids in total. - + The two byte rtp extension header. 256 data bytes per extension with a maximum of 255 (or 256 including appbits) extensions in total. @@ -5396,82 +5463,82 @@ unassigned: 20-23, Video: unassigned: 24, 27, 29, 30, 35-71, 77-95 Reserved for RTCP conflict avoidance: 72-76 - + ITU-T G.711. mu-law audio (RFC 3551) - + RFC 3551 says reserved - + RFC 3551 says reserved - + GSM audio - + ITU G.723.1 audio - + IMA ADPCM wave type (RFC 3551) - + IMA ADPCM wave type (RFC 3551) - + experimental linear predictive encoding - + ITU-T G.711 A-law audio (RFC 3551) - + ITU-T G.722 (RFC 3551) - + stereo PCM - + mono PCM - + EIA & TIA standard IS-733 - + Comfort Noise (RFC 3389) - + Audio MPEG 1-3. - + ITU-T G.728 Speech coder (RFC 3551) - + IMA ADPCM wave type (RFC 3551) - + IMA ADPCM wave type (RFC 3551) - + ITU-T G.729 Speech coder (RFC 3551) - + See RFC 2029 - + ISO Standards 10918-1 and 10918-2 (RFC 2435) - + nv encoding by Ron Frederick - + ITU-T Recommendation H.261 (RFC 2032) - + Video MPEG 1 & 2 (RFC 2250) - + MPEG-2 transport stream (RFC 2250) - + Video H263 (RFC 2190) @@ -5550,19 +5617,19 @@ types specified with @payload_type. The transfer profile to use. - + invalid profile - + the Audio/Visual profile (RFC 3551) - + the secure Audio/Visual profile (RFC 3711) - + the Audio/Visual profile with feedback (RFC 4585) - + the secure Audio/Visual profile with feedback (RFC 5124) diff --git a/girs/GstRtsp-1.0.gir b/girs/GstRtsp-1.0.gir index 9bfcb58f3b6..290f33325d3 100644 --- a/girs/GstRtsp-1.0.gir +++ b/girs/GstRtsp-1.0.gir @@ -34,13 +34,13 @@ and/or use gtk-doc annotations. --> Authentication methods, ordered by strength - + no authentication - + basic authentication - + digest authentication @@ -78,7 +78,7 @@ and/or use gtk-doc annotations. --> - + This object manages the RTSP connection to the server. It provides function to receive and send bytes and messages. @@ -1302,10 +1302,10 @@ read from @socket which should be used before starting to read new data. The possible events for the connection. - + connection is readable - + connection is writable @@ -1817,217 +1817,217 @@ read from @socket which should be used before starting to read new data. The possible network families. - + unknown network family - + internet - + internet V6 Enumeration of rtsp header fields - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + The different transport methods. - + invalid transport flag - + stream data over UDP - + stream data over UDP multicast - + stream data over TCP - + stream data tunneled over HTTP. - + encrypt TCP and HTTP with TLS @@ -2773,46 +2773,46 @@ gst_rtsp_message_init_data() on stack allocated #GstRTSPMessage structures. The different supported RTSP methods. - + invalid method - + the DESCRIBE method - + the ANNOUNCE method - + the GET_PARAMETER method - + the OPTIONS method - + the PAUSE method - + the PLAY method - + the RECORD method - + the REDIRECT method - + the SETUP method - + the SET_PARAMETER method - + the TEARDOWN method - + the GET method (HTTP). - + the POST method (HTTP). @@ -2832,40 +2832,40 @@ gst_rtsp_message_init_data() on stack allocated #GstRTSPMessage structures. The type of a message. - + invalid message type - + RTSP request message - + RTSP response message - + HTTP request message. - + HTTP response message. - + data message The transfer profile to use. - + invalid profile - + the Audio/Visual profile (RFC 3551) - + the secure Audio/Visual profile (RFC 3711) - + the Audio/Visual profile with feedback (RFC 4585) - + the secure Audio/Visual profile with feedback (RFC 5124) @@ -2976,202 +2976,202 @@ UTC times will be converted to nanoseconds since 1900. Different possible time range units. - + SMPTE timecode - + 29.97 frames per second - + 25 frames per second - + Normal play time - + Absolute time expressed as ISO 8601 timestamps Result codes from the RTSP functions. - + no error - + RTSP request is successful, but was redirected. - + some unspecified error occurred - + invalid arguments were provided to a function - + an operation was canceled - + no memory was available for the operation - + a host resolve error occurred - + function not implemented - + a system error occurred, errno contains more details - + a parsing error occurred - + windows networking could not start - + windows networking stack has wrong version - + end-of-file was reached - + a network problem occurred, h_errno contains more details - + the host is not an IP host - + a timeout occurred - + the tunnel GET request has been performed - + the tunnel POST request has been performed - + last error The different RTSP states. - + invalid state - + initializing - + ready for operation - + seeking in progress - + playing - + recording Enumeration of rtsp status codes - + - + - + - + - + - + - + - + - + - + - + - + RTSP request is temporarily redirected - + RTSP request is permanently redirected - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3234,31 +3234,31 @@ UTC times will be converted to nanoseconds since 1900. Possible time types. - + seconds - + now - + end - + frames and subframes - + UTC time The transfer mode to use. - + invalid tansport mode - + transfer RTP data - + transfer RDT (RealMedia) data @@ -3662,16 +3662,16 @@ with gst_rtsp_url_free(). The supported RTSP versions. - + unknown/invalid version - + version 1.0 - + version 1.1. - + version 2.0. @@ -3689,7 +3689,7 @@ with gst_rtsp_url_free(). - + Opaque RTSP watch object that can be used for asynchronous RTSP operations. @@ -4004,6 +4004,7 @@ communication. Free with gst_rtsp_watch_unref () after usage. Callback functions from a #GstRTSPWatch. + callback when a message was received @@ -4023,6 +4024,7 @@ communication. Free with gst_rtsp_watch_unref () after usage. + callback when a message was sent @@ -4042,6 +4044,7 @@ communication. Free with gst_rtsp_watch_unref () after usage. + callback when the connection is closed @@ -4058,6 +4061,7 @@ communication. Free with gst_rtsp_watch_unref () after usage. + callback when an error occurred @@ -4077,6 +4081,8 @@ communication. Free with gst_rtsp_watch_unref () after usage. + a client started a tunneled connection. The tunnelid of the + connection must be saved. @@ -4093,6 +4099,9 @@ communication. Free with gst_rtsp_watch_unref () after usage. + a client finished a tunneled connection. In this callback + you usually pair the tunnelid of this connection with the saved one using + gst_rtsp_connection_do_tunnel(). @@ -4109,6 +4118,8 @@ communication. Free with gst_rtsp_watch_unref () after usage. + callback when an error occurred with more information than + the @error callback. @@ -4134,6 +4145,7 @@ communication. Free with gst_rtsp_watch_unref () after usage. + callback when the post connection of a tunnel is closed. @@ -4150,6 +4162,9 @@ communication. Free with gst_rtsp_watch_unref () after usage. + callback when an HTTP response to the GET request + is about to be sent for a tunneled connection. The response can be + modified in the callback. Since: 1.4. diff --git a/girs/GstRtspServer-1.0.gir b/girs/GstRtspServer-1.0.gir index 78c24ef07da..76f3c35d312 100644 --- a/girs/GstRtspServer-1.0.gir +++ b/girs/GstRtspServer-1.0.gir @@ -545,7 +545,7 @@ after use. - + @@ -632,6 +632,10 @@ g_free() after usage. + check the authentication of a client. The default implementation + checks if the authentication in the header matches one of the basic + authentication tokens. This function should set the authgroup field + in the context. @@ -646,6 +650,10 @@ g_free() after usage. + check if a resource can be accessed. this function should + call authenticate to authenticate the client when needed. The method + should also construct and send an appropriate response message on + error. @@ -1021,6 +1029,10 @@ no one else overrides it. + check the authentication of a client. The default implementation + checks if the authentication in the header matches one of the basic + authentication tokens. This function should set the authgroup field + in the context. @@ -1037,6 +1049,10 @@ no one else overrides it. + check if a resource can be accessed. this function should + call authenticate to authenticate the client when needed. The method + should also construct and send an appropriate response message on + error. @@ -1099,7 +1115,7 @@ no one else overrides it. - + @@ -1137,6 +1153,8 @@ possibility to adjust the error code. + called to give the application the possibility to adjust + the range, seek flags, rate and rate-control. Since 1.18 @@ -1166,6 +1184,9 @@ possibility to adjust the error code. + called to give the implementation the possibility to + adjust the response to a play request, for example if extra headers were + parsed when #GstRTSPClientClass.adjust_play_mode was called. Since 1.18 @@ -1222,6 +1243,9 @@ possibility to adjust the error code. + called when the stream in media needs to be configured. + The default implementation will configure the blocksize on the payloader when + spcified in the request headers. @@ -1242,6 +1266,8 @@ possibility to adjust the error code. + called when the client transport needs to be + configured. @@ -1259,6 +1285,7 @@ possibility to adjust the error code. + called when the SDP needs to be created for media. @@ -1335,6 +1362,7 @@ possibility to adjust the error code. + called to create path from uri. @@ -1377,6 +1405,8 @@ possibility to adjust the error code. + get parameters. This function should also initialize the + RTSP response(ctx->response) via a call to gst_rtsp_message_init_response() @@ -1391,6 +1421,8 @@ possibility to adjust the error code. + set parameters. This function should also initialize the + RTSP response(ctx->response) via a call to gst_rtsp_message_init_response() @@ -1646,6 +1678,8 @@ possibility to adjust the error code. + called when a response to the GET request is about to + be sent for a tunneled connection. The response can be modified. Since: 1.4 @@ -1742,7 +1776,7 @@ The connection object returned remains valid until the client is freed. - + Get the #GstRTSPMountPoints object that @client uses to manage its sessions. @@ -1756,7 +1790,7 @@ The connection object returned remains valid until the client is freed. - + Get the #GstRTSPSessionPool object that @client uses to manage its sessions. @@ -1941,7 +1975,7 @@ limit with response status 413 Request Entity Too Large - + Set @mounts as the mount points for @client which it will use to map urls to media streams. These mount points are usually inherited from the server that created the client but can be overriden later. @@ -2026,7 +2060,7 @@ but not both at the same time. - + Set @pool as the sessionpool for @client which it will use to find or allocate sessions. the sessionpool is usually inherited from the server that created the client but can be overridden later. @@ -2062,16 +2096,16 @@ that created the client but can be overridden later. - + - + - + - + @@ -2394,6 +2428,7 @@ that created the client but can be overridden later. + called when the SDP needs to be created for media. @@ -2410,6 +2445,9 @@ that created the client but can be overridden later. + called when the stream in media needs to be configured. + The default implementation will configure the blocksize on the payloader when + spcified in the request headers. @@ -2432,6 +2470,8 @@ that created the client but can be overridden later. + called when the client transport needs to be + configured. @@ -2451,6 +2491,8 @@ that created the client but can be overridden later. + set parameters. This function should also initialize the + RTSP response(ctx->response) via a call to gst_rtsp_message_init_response() @@ -2467,6 +2509,8 @@ that created the client but can be overridden later. + get parameters. This function should also initialize the + RTSP response(ctx->response) via a call to gst_rtsp_message_init_response() @@ -2483,6 +2527,7 @@ that created the client but can be overridden later. + called to create path from uri. @@ -2499,6 +2544,8 @@ that created the client but can be overridden later. + called to give the application the possibility to adjust + the range, seek flags, rate and rate-control. Since 1.18 @@ -2530,6 +2577,9 @@ that created the client but can be overridden later. + called to give the implementation the possibility to + adjust the response to a play request, for example if extra headers were + parsed when #GstRTSPClientClass.adjust_play_mode was called. Since 1.18 @@ -2719,6 +2769,8 @@ that created the client but can be overridden later. + called when a response to the GET request is about to + be sent for a tunneled connection. The response can be modified. Since: 1.4 @@ -3018,7 +3070,7 @@ that created the client but can be overridden later. - + @@ -3287,6 +3339,7 @@ Ownership is taken of @element. + convert a range to the given unit @@ -3315,6 +3368,7 @@ Ownership is taken of @element. + handle a message @@ -3410,6 +3464,7 @@ such as the duration. + query the current position in the pipeline @@ -3424,6 +3479,7 @@ such as the duration. + query when playback will stop @@ -3697,7 +3753,7 @@ g_object_unref() after usage. - + Get the kernel UDP buffer size. @@ -3711,7 +3767,7 @@ g_object_unref() after usage. - + Get the clock that is used by the pipeline in @media. @media must be prepared before this method returns a valid clock object. @@ -3739,7 +3795,7 @@ g_object_unref() after usage. - + Get the configured DSCP QoS of attached media. @@ -3753,7 +3809,7 @@ g_object_unref() after usage. - + Get the element that was used when constructing @media. @@ -3767,7 +3823,7 @@ g_object_unref() after usage. - + Get ensure-keyunit-on-start flag. @@ -3781,7 +3837,7 @@ g_object_unref() after usage. - + Get ensure-keyunit-on-start-timeout time. @@ -3795,7 +3851,7 @@ g_object_unref() after usage. - + Get the latency that is used for receiving media. @@ -3809,7 +3865,7 @@ g_object_unref() after usage. - + Get the the maximum time-to-live value of outgoing multicast packets. @@ -3852,7 +3908,7 @@ g_free() after usage. - + Get the allowed profiles of @media. @@ -3866,7 +3922,7 @@ g_free() after usage. - + Get the allowed protocols of @media. @@ -4002,7 +4058,7 @@ until @media is prepared or in error. - + Get how @media will be suspended. @@ -4016,7 +4072,7 @@ until @media is prepared or in error. - + Get the #GstNetTimeProvider for the clock used by @media. The time provider will listen on @address and @port for client time requests. @@ -4039,7 +4095,7 @@ will listen on @address and @port for client time requests. - + Check if the pipeline for @media can be used for PLAY or RECORD methods. @@ -4359,7 +4415,7 @@ and > 0 to indicate the longest duration between any two random access points - + Decide whether the multicast socket should be bound to a multicast address or INADDR_ANY. @@ -4377,7 +4433,7 @@ INADDR_ANY. - + Set the kernel UDP buffer size. @@ -4394,7 +4450,7 @@ INADDR_ANY. - + Configure the clock used for the media. @@ -4426,7 +4482,7 @@ INADDR_ANY. - + Configure the dscp qos of attached streams to @dscp_qos. @@ -4443,7 +4499,7 @@ INADDR_ANY. - + Set whether or not a keyunit should be ensured when a client connects. It will also configure the streams to drop delta units to ensure that they start on a keyunit. @@ -4464,7 +4520,7 @@ Note that this will only affect non-shared medias for now. - + Sets the maximum allowed time before the first keyunit is considered expired. @@ -4485,7 +4541,7 @@ enabled. - + Set or unset if an EOS event will be sent to the pipeline for @media before it is unprepared. @@ -4503,7 +4559,7 @@ it is unprepared. - + Configure the latency used for receiving media. @@ -4520,7 +4576,7 @@ it is unprepared. - + Set the maximum time-to-live value of outgoing multicast packets. @@ -4589,7 +4645,7 @@ it is unprepared. - + Configure the allowed lower transport for @media. @@ -4606,7 +4662,7 @@ it is unprepared. - + Configure the allowed lower transport for @media. @@ -4673,7 +4729,7 @@ in the ONVIF replay spec. - + Set or unset if the pipeline for @media can be reused after the pipeline has been unprepared. @@ -4691,7 +4747,7 @@ been unprepared. - + Set or unset if the pipeline for @media can be shared will multiple clients. When @shared is %TRUE, client requests for this media will share the media pipeline. @@ -4737,7 +4793,7 @@ a #GPtrArray of #GstRTSPStreamTransport pointers - + Set or unset if the pipeline for @media should be stopped when a client disconnects without sending TEARDOWN. @@ -4755,7 +4811,7 @@ client disconnects without sending TEARDOWN. - + Control how @ media will be suspended after the SDP has been generated and after a PAUSE request has been performed. @@ -4775,7 +4831,7 @@ Media must be unprepared when setting the suspend mode. - + Sets if the media pipeline can work in PLAY or RECORD mode @@ -4912,22 +4968,22 @@ when the media was not in the suspended state. - + - + - + - + - + - + Whether or not a keyunit should be ensured when a client connects. It will also configure the streams to drop delta units to ensure that they start on a keyunit. @@ -4935,7 +4991,7 @@ on a keyunit. Note that this will only affect non-shared medias for now. - + The maximum allowed time before the first keyunit is considered expired. @@ -4943,37 +4999,37 @@ Note that this will only have an effect when ensure-keyunit-on-start is enabled. - + - + - + - + - + - + - + - + - + - + - + @@ -5058,6 +5114,7 @@ enabled. + handle a message @@ -5074,6 +5131,9 @@ enabled. + the default implementation adds all elements and sets the + pipeline's state to GST_STATE_PAUSED (or GST_STATE_PLAYING + in case of NO_PREROLL elements). @@ -5094,6 +5154,8 @@ enabled. + the default implementation sets the pipeline's state + to GST_STATE_NULL and removes all elements. @@ -5109,6 +5171,9 @@ enabled. + the default implementation sets the pipeline's state to + GST_STATE_NULL GST_STATE_PAUSED depending on the selected + suspend mode. @@ -5124,6 +5189,9 @@ enabled. + the default implementation reverts the suspend operation. + The pipeline will be prerolled again if it's state was + set to GST_STATE_NULL in suspend. @@ -5139,6 +5207,7 @@ enabled. + convert a range to the given unit @@ -5158,6 +5227,7 @@ enabled. + query the current position in the pipeline @@ -5174,6 +5244,7 @@ enabled. + query when playback will stop @@ -5369,6 +5440,8 @@ can contain multiple streams like audio and video. + configure the media created with @construct. The default + implementation will configure the 'shared' property of the media. @@ -5434,6 +5507,8 @@ launch parameter. + create a new pipeline or re-use an existing one and + add the #GstRTSPMedia's element created by @construct to the pipeline. @@ -5448,6 +5523,9 @@ launch parameter. + convert @url to a key for caching shared #GstRTSPMedia objects. + The default implementation of this function will use the complete URL + including the query parameters to return a key. @@ -5462,6 +5540,7 @@ launch parameter. + signal emitted when a media should be configured @@ -5476,6 +5555,7 @@ launch parameter. + signal emitted when a media was constructed @@ -5599,7 +5679,7 @@ usage. - + Get the kernel UDP buffer size. @@ -5613,7 +5693,7 @@ usage. - + Returns the clock that is going to be used by the pipelines of all medias created from this factory. @@ -5640,7 +5720,7 @@ of all medias created from this factory. - + Get the configured media DSCP QoS. @@ -5654,7 +5734,7 @@ of all medias created from this factory. - + Get ensure-keyunit-on-start flag. @@ -5668,7 +5748,7 @@ of all medias created from this factory. - + Get ensure-keyunit-on-start-timeout time. @@ -5682,7 +5762,7 @@ of all medias created from this factory. - + Get the latency that is used for receiving media @@ -5696,7 +5776,7 @@ of all medias created from this factory. - + Get the gst_parse_launch() pipeline description that will be used in the default prepare vmethod. @@ -5712,7 +5792,7 @@ usage. - + Get the the maximum time-to-live value of outgoing multicast packets. @@ -5769,7 +5849,7 @@ usage. - + Get the allowed profiles of @factory. @@ -5783,7 +5863,7 @@ usage. - + Get the allowed protocols of @factory. @@ -5825,7 +5905,7 @@ usage. - + Get how media created from this factory will be suspended. @@ -5839,7 +5919,7 @@ usage. - + Get if media created from this factory can be used for PLAY or RECORD methods. @@ -5939,7 +6019,7 @@ pipeline before shutdown. - + Decide whether the multicast socket should be bound to a multicast address or INADDR_ANY. @@ -5957,7 +6037,7 @@ INADDR_ANY. - + Set the kernel UDP buffer size. @@ -5974,7 +6054,7 @@ INADDR_ANY. - + Configures a specific clock to be used by the pipelines of all medias created from this factory. @@ -6008,7 +6088,7 @@ receiving media - + Configure the media dscp qos to @dscp_qos. @@ -6025,7 +6105,7 @@ receiving media - + Decide whether the created media should send and receive RTCP @@ -6042,7 +6122,7 @@ receiving media - + If media from this factory should ensure a key unit when a client connects. @@ -6059,7 +6139,7 @@ receiving media - + Configures medias from this factory to consider keyunits older than timeout to be expired. Expired keyunits will be discarded. @@ -6077,7 +6157,7 @@ to be expired. Expired keyunits will be discarded. - + Configure if media created from this factory will have an EOS sent to the pipeline before shutdown. @@ -6095,7 +6175,7 @@ pipeline before shutdown. - + Configure the latency used for receiving media @@ -6112,7 +6192,7 @@ pipeline before shutdown. - + The gst_parse_launch() line to use for constructing the pipeline in the default prepare vmethod. @@ -6137,7 +6217,7 @@ etc.. Each of the payloaders will result in a stream. - + Set the maximum time-to-live value of outgoing multicast packets. @@ -6208,7 +6288,7 @@ may of course do something different) - + Configure the allowed profiles for @factory. @@ -6225,7 +6305,7 @@ may of course do something different) - + Configure the allowed lower transport for @factory. @@ -6276,7 +6356,7 @@ may of course do something different) - + Configure if media created from this factory can be shared between clients. @@ -6293,7 +6373,7 @@ may of course do something different) - + Configure if media created from this factory should be stopped when a client disconnects without sending TEARDOWN. @@ -6311,7 +6391,7 @@ when a client disconnects without sending TEARDOWN. - + Configure how media created from this factory will be suspended. @@ -6328,7 +6408,7 @@ when a client disconnects without sending TEARDOWN. - + Configure if this factory creates media for PLAY or RECORD modes. @@ -6345,23 +6425,23 @@ when a client disconnects without sending TEARDOWN. - + - + - + - + - + Whether the created media should send and receive RTCP - + If media from this factory should ensure a key unit when a client connects. This property will ensure that the stream always starts on a key unit @@ -6370,7 +6450,7 @@ instead of a delta unit which the client would not be able to decode. Note that this will only affect non-shared medias for now. - + Timeout in milliseconds used to determine if a keyunit should be discarded when a client connects. @@ -6380,34 +6460,34 @@ the currently blocking keyframe will be used. This options is only relevant when ensure-keyunit-on-start is enabled. - + - + - + - + - + - + - + - + - + - + @@ -6449,6 +6529,9 @@ This options is only relevant when ensure-keyunit-on-start is enabled. + convert @url to a key for caching shared #GstRTSPMedia objects. + The default implementation of this function will use the complete URL + including the query parameters to return a key. @@ -6465,6 +6548,10 @@ This options is only relevant when ensure-keyunit-on-start is enabled. + Construct and return a #GstElement that is a #GstBin containing + the elements to use for streaming the media. The bin should contain + payloaders pay\%d for each stream. The default implementation of this + function returns the bin created from the launch parameter. @@ -6484,6 +6571,10 @@ This options is only relevant when ensure-keyunit-on-start is enabled. + the vmethod that will be called when the factory has to create the + #GstRTSPMedia for @url. The default implementation of this + function calls create_element to retrieve an element and then looks for + pay\%d to create the streams. @@ -6503,6 +6594,8 @@ This options is only relevant when ensure-keyunit-on-start is enabled. + create a new pipeline or re-use an existing one and + add the #GstRTSPMedia's element created by @construct to the pipeline. @@ -6519,6 +6612,8 @@ This options is only relevant when ensure-keyunit-on-start is enabled. + configure the media created with @construct. The default + implementation will configure the 'shared' property of the media. @@ -6535,6 +6630,7 @@ This options is only relevant when ensure-keyunit-on-start is enabled. + signal emitted when a media was constructed @@ -6551,6 +6647,7 @@ This options is only relevant when ensure-keyunit-on-start is enabled. + signal emitted when a media should be configured @@ -6572,7 +6669,7 @@ This options is only relevant when ensure-keyunit-on-start is enabled. - + @@ -6586,7 +6683,7 @@ This options is only relevant when ensure-keyunit-on-start is enabled. - + Get the URI that will provide media for this factory. @@ -6600,7 +6697,7 @@ This options is only relevant when ensure-keyunit-on-start is enabled. - + Set the URI of the resource that will be streamed by this factory. @@ -6617,10 +6714,10 @@ This options is only relevant when ensure-keyunit-on-start is enabled. - + - + @@ -6647,10 +6744,10 @@ This options is only relevant when ensure-keyunit-on-start is enabled. - + - + @@ -6843,6 +6940,7 @@ g_object_unref() after usage. + make a path from the given url. @@ -6867,7 +6965,7 @@ g_object_unref() after usage. - + @@ -7004,6 +7102,33 @@ bits per second. + + Called by the factory from #GstRTSPMediaFactoryClass::construct(). The default implementation +creates the * #GstRTSPStream for the backchannel receiver by calling +gst_rtsp_onvif_media_collect_backchannel (media). Implementations +that want to create the backchannel later should return TRUE here +and call gst_rtsp_onvif_media_collect_backchannel() later, but must +do so before the media finishes preparing. + + + TRUE on success. FALSE on a fatal error. + + + + + a #GstRTSPOnvifMediaFactory + + + + a #GstRTSPOnvifMedia + + + + a #GstRTSPContext + + + + Returns %TRUE if an ONVIF backchannel is supported by the media factory. @@ -7172,16 +7297,39 @@ prepare. + + + + + TRUE on success. FALSE on a fatal error. + + + + + a #GstRTSPOnvifMediaFactory + + + + a #GstRTSPOnvifMedia + + + + a #GstRTSPContext + + + + + - + - + - + @@ -7406,13 +7554,13 @@ remains valid for as long as @permissions is valid. Whether the clock and possibly RTP/clock offset should be published according to RFC7273. - + Publish nothing - + Publish the clock but not the offset - + Publish the clock and offset @@ -7498,6 +7646,7 @@ new connection on @socket or @server. + emitted when a new client connected. @@ -7512,6 +7661,10 @@ new connection on @socket or @server. + Create, configure a new GstRTSPClient + object that handles the new connection on @socket. The default + implementation will create a GstRTSPClient and will configure the + mount-points, auth, session-pool and thread-pool on the client. @@ -7637,7 +7790,7 @@ occurred. Free with g_source_unref () - + Get the address on which the server will accept connections. @@ -7666,7 +7819,7 @@ usage. - + The maximum amount of queued requests for the server. @@ -7680,7 +7833,7 @@ usage. - + Get the port number where the server was bound to. @@ -7694,7 +7847,7 @@ usage. - + Get the Content-Length limit of @server. @@ -7708,7 +7861,7 @@ usage. - + Get the #GstRTSPMountPoints used as the mount points of @server. @@ -7723,7 +7876,7 @@ usage. - + Get the service on which the server will accept connections. @@ -7737,7 +7890,7 @@ usage. - + Get the #GstRTSPSessionPool used as the session pool of @server. @@ -7767,7 +7920,7 @@ usage. - + Configure @server to accept connections on the given address. This function must be called before the server is bound. @@ -7803,7 +7956,7 @@ This function must be called before the server is bound. - + configure the maximum amount of requests that may be queued for the server. @@ -7823,7 +7976,7 @@ This function must be called before the server is bound. - + Define an appropriate request size limit and reject requests exceeding the limit. @@ -7841,7 +7994,7 @@ Configure @server to use the specified Content-Length limit. - + configure @mounts to be used as the mount points of @server. @@ -7858,7 +8011,7 @@ Configure @server to use the specified Content-Length limit. - + Configure @server to accept connections on the given service. @service should be a string containing the service name (see services(5)) or a string containing a port number between 1 and 65535. @@ -7883,7 +8036,7 @@ This function must be called before the server is bound. - + configure @pool to be used as the session pool of @server. @@ -7950,25 +8103,25 @@ that the HTTP server read from the socket while parsing the HTTP header. - + - + - + - + - + - + - + @@ -8000,6 +8153,10 @@ that the HTTP server read from the socket while parsing the HTTP header. + Create, configure a new GstRTSPClient + object that handles the new connection on @socket. The default + implementation will create a GstRTSPClient and will configure the + mount-points, auth, session-pool and thread-pool on the client. @@ -8013,6 +8170,7 @@ that the HTTP server read from the socket while parsing the HTTP header. + emitted when a new client connected. @@ -8066,7 +8224,7 @@ gst_rtsp_server_client_filter(). - + @@ -8203,7 +8361,7 @@ characters of @path. - + Get the sessionid of @session. @@ -8218,7 +8376,7 @@ The value remains valid as long as @session is alive. - + Get the timeout value of @session. @@ -8362,7 +8520,7 @@ Ownership is taken from @media. - + Configure @session for a timeout of @timeout seconds. The session will be cleaned up when there is no activity for @timeout seconds. @@ -8393,16 +8551,16 @@ cleaned up when there is no activity for @timeout seconds. - + - + - + - + @@ -8701,7 +8859,7 @@ matched characters is returned in @matched. - + @@ -8718,6 +8876,7 @@ usage. + make a new session object. @@ -8732,6 +8891,8 @@ usage. + create a new random session id. Subclasses can create + custom session ids and should not check if the session exists. @@ -8743,6 +8904,7 @@ usage. + a session was removed from the pool @@ -8859,7 +9021,7 @@ or %NULL when the session did not exist. g_object_unref() after usage. - + Get the maximum allowed number of sessions in @pool. 0 means an unlimited amount of sessions. @@ -8906,7 +9068,7 @@ amount of sessions. - + Configure the maximum allowed number of sessions in @pool to @max. A value of 0 means an unlimited amount of sessions. @@ -8924,7 +9086,7 @@ A value of 0 means an unlimited amount of sessions. - + @@ -8955,6 +9117,8 @@ A value of 0 means an unlimited amount of sessions. + create a new random session id. Subclasses can create + custom session ids and should not check if the session exists. @@ -8968,6 +9132,7 @@ A value of 0 means an unlimited amount of sessions. + make a new session object. @@ -8984,6 +9149,7 @@ A value of 0 means an unlimited amount of sessions. + a session was removed from the pool @@ -9058,10 +9224,10 @@ more sessions timed out. - + - + @@ -9236,7 +9402,7 @@ use gst_caps_unref() after usage. - + Get the control string to identify this stream. @@ -9382,7 +9548,7 @@ g_free() after usage. - + Get the allowed profiles of @stream. @@ -9396,7 +9562,7 @@ g_free() after usage. - + Get the allowed protocols of @stream. @@ -10250,7 +10416,7 @@ an RTSP connection. - + Set the control string in @stream. @@ -10336,7 +10502,7 @@ an RTSP connection. - + Configure the allowed profiles for @stream. @@ -10353,7 +10519,7 @@ an RTSP connection. - + Configure the allowed lower transport for @stream. @@ -10611,13 +10777,13 @@ be removed from @stream. - + - + - + @@ -10673,7 +10839,7 @@ be removed from @stream. - + @@ -10927,7 +11093,7 @@ to a client. This is usually used when sending RTP/RTCP over TCP. a #GstRTSPStreamTransport - + a callback called when RTP should be sent @@ -10983,7 +11149,7 @@ to a client. This is usually used when sending RTP/RTCP over TCP. a #GstRTSPStreamTransport - + a callback called when RTP should be sent @@ -11159,19 +11325,19 @@ gst_rtsp_stream_transport_filter(). - + The suspend mode of the media pipeline. A media pipeline is suspended right after creating the SDP and when the client performs a PAUSED request. - + Media is not suspended - + Media is PAUSED in suspend - + The media is set to NULL when suspended @@ -11258,6 +11424,8 @@ structures. + configure a thread object. this vmethod is called when + a new thread has been created and should be configured. @@ -11298,6 +11466,7 @@ gst_rtsp_thread_stop() after usage + called from the thread when it is entered @@ -11312,6 +11481,7 @@ gst_rtsp_thread_stop() after usage + called from the thread when it is left @@ -11325,7 +11495,7 @@ gst_rtsp_thread_stop() after usage - + Get the maximum number of threads used for client connections. See gst_rtsp_thread_pool_set_max_threads(). @@ -11363,7 +11533,7 @@ gst_rtsp_thread_stop() after usage - + Set the maximum threads used by the pool to handle client requests. A value of 0 will use the pool mainloop, a value of -1 will use an unlimited number of threads. @@ -11382,7 +11552,7 @@ unlimited number of threads. - + @@ -11408,6 +11578,8 @@ unlimited number of threads. + this function should make or reuse an existing thread that runs + a mainloop. @@ -11432,6 +11604,8 @@ gst_rtsp_thread_stop() after usage + configure a thread object. this vmethod is called when + a new thread has been created and should be configured. @@ -11451,6 +11625,7 @@ gst_rtsp_thread_stop() after usage + called from the thread when it is entered @@ -11467,6 +11642,7 @@ gst_rtsp_thread_stop() after usage + called from the thread when it is left @@ -11488,7 +11664,7 @@ gst_rtsp_thread_stop() after usage - + @@ -11674,10 +11850,10 @@ MT safe. The supported modes of the media. - + Transport supports PLAY mode - + Transport supports RECORD mode diff --git a/girs/GstSdp-1.0.gir b/girs/GstSdp-1.0.gir index f45145681d6..0eaff482ac2 100644 --- a/girs/GstSdp-1.0.gir +++ b/girs/GstSdp-1.0.gir @@ -20,7 +20,7 @@ and/or use gtk-doc annotations. --> to be used for the specific CSB. - + @@ -39,7 +39,7 @@ and/or use gtk-doc annotations. --> AES-GCM using a 128-bit key (Since: 1.16) - + diff --git a/girs/GstTag-1.0.gir b/girs/GstTag-1.0.gir index e0f2e37cd5a..bfa92f46f78 100644 --- a/girs/GstTag-1.0.gir +++ b/girs/GstTag-1.0.gir @@ -151,6 +151,35 @@ The allowed values are: + + Light source used when capturing an image. (string) + +The allowed values are: + "unknown" + "daylight" + "fluorescent" + "tungsten" + "flash" + "fine-weather" + "cloudy-weather" + "shade" + "daylight-fluorescent" + "day-white-fluorescent" + "cool-white-fluorescent" + "white-fluorescent" + "warm-white-fluorescent" + "standard-light-A" + "standard-light-B" + "standard-light-C" + "D55" + "D65" + "D75" + "D50" + "iso-studio-tungsten" + "other" + + + Defines the way a camera determines the exposure. (string) @@ -400,6 +429,9 @@ Subclasses have to do four things: 128 bytes. + identify tag and determine the size required to parse the +tag. Buffer may be larger than the specified minimum size. +Subclassed MUST override this vfunc in their class_init function. @@ -420,6 +452,10 @@ Subclasses have to do four things: + merge start and end tags. Subclasses may want to override this +vfunc to allow prioritising of start or end tag according to user +preference. Note that both start_tags and end_tags may be NULL. By default +start tags are preferred over end tags. @@ -437,6 +473,12 @@ Subclasses have to do four things: + parse the tag. Buffer will be exactly of the size determined by +the identify_tag vfunc before. The parse_tag vfunc may change the size +stored in *tag_size and return GST_TAG_DEMUX_RESULT_AGAIN to request a +larger or smaller buffer. It is also permitted to adjust the tag_size to a +smaller value and then return GST_TAG_DEMUX_RESULT_OK in one go. +Subclassed MUST override the parse_tag vfunc in their class_init function. @@ -493,6 +535,9 @@ Subclasses should set this in their class_init function. + identify tag and determine the size required to parse the +tag. Buffer may be larger than the specified minimum size. +Subclassed MUST override this vfunc in their class_init function. @@ -515,6 +560,12 @@ Subclasses should set this in their class_init function. + parse the tag. Buffer will be exactly of the size determined by +the identify_tag vfunc before. The parse_tag vfunc may change the size +stored in *tag_size and return GST_TAG_DEMUX_RESULT_AGAIN to request a +larger or smaller buffer. It is also permitted to adjust the tag_size to a +smaller value and then return GST_TAG_DEMUX_RESULT_OK in one go. +Subclassed MUST override the parse_tag vfunc in their class_init function. @@ -540,6 +591,10 @@ Subclasses should set this in their class_init function. + merge start and end tags. Subclasses may want to override this +vfunc to allow prioritising of start or end tag according to user +preference. Note that both start_tags and end_tags may be NULL. By default +start tags are preferred over end tags. @@ -564,146 +619,146 @@ Subclasses should set this in their class_init function. - + Result values from the parse_tag virtual function. - + cannot parse tag, just skip it - + call again with less or more data - + parsed tag successfully Type of image contained in an image tag (specified as "image-type" field in the info structure in the image's #GstSample) - + No image type. Can be used to tell functions such as gst_tag_image_data_to_image_sample() that no image type should be set. - + Undefined/other image type - + Cover (front) - + Cover (back) - + Leaflet page - + Medium (e.g. label side of CD) - + Lead artist/lead performer/soloist - + Artist/performer - + Conductor - + Band/orchestra - + Composer - + Lyricist/text writer - + Recording location - + During recording - + During performance - + Movie/video screen capture - + A fish as funny as the ID3v2 spec - + Illustration - + Band/artist logotype - + Publisher/studio logotype See http://creativecommons.org/ns for more information. - + making multiple copies is allowed - + distribution, public display and public performance are allowed - + distribution of derivative works is allowed - + commercial derivatives are allowed, but only non-commercial distribution is allowed - + copyright and license notices must be kept intact - + credit must be given to copyright holder and/or author - + derivative works must be licensed under the same terms or compatible terms as the original work - + source code (the preferred form for making modifications) must be provided when exercising some rights granted by the license - + derivative and combined works must be licensed under specified terms, similar to those of the original work - + derivative works must be licensed under specified terms, with at least the same conditions as the original work; combinations with the work may be licensed under different terms - + exercising rights for commercial purposes is prohibited - + use in a non-developing country is prohibited - + this license was created by the Creative Commons project - + this license was created by the Free Software Foundation (FSF) @@ -726,6 +781,8 @@ Subclasses have to do the following things: + create a tag buffer to add to the end of the + input stream given a tag list, or NULL @@ -740,6 +797,8 @@ Subclasses have to do the following things: + create a tag buffer to add to the beginning of the + input stream given a tag list, or NULL @@ -775,6 +834,8 @@ of the two render vfuncs. + create a tag buffer to add to the beginning of the + input stream given a tag list, or NULL @@ -791,6 +852,8 @@ of the two render vfuncs. + create a tag buffer to add to the end of the + input stream given a tag list, or NULL @@ -812,7 +875,7 @@ of the two render vfuncs. - + diff --git a/girs/GstTranscoder-1.0.gir b/girs/GstTranscoder-1.0.gir index b3848b659f5..3614d025263 100644 --- a/girs/GstTranscoder-1.0.gir +++ b/girs/GstTranscoder-1.0.gir @@ -68,7 +68,7 @@ about the serialization format. - + %TRUE if the transcoder tries to avoid reencoding streams where @@ -82,7 +82,7 @@ reencoding is not strictly needed, %FALSE otherwise. - + Gets the URI of the destination of the transcoded stream. @@ -97,7 +97,7 @@ destination of the transcoded stream. g_free() after usage. - + Retrieves the duration of the media stream that self represents. @@ -137,7 +137,7 @@ fill memory. To avoid that, the bus has to be set "flushing". - + The internal uritranscodebin instance @@ -150,7 +150,7 @@ fill memory. To avoid that, the bus has to be set "flushing". - + the absolute position time, in nanoseconds, of the @@ -164,7 +164,7 @@ transcoding stream. - + current position update interval in milliseconds @@ -265,7 +265,7 @@ notified about any error. - + @@ -302,7 +302,7 @@ should try to use. It takes into account the number of cores available. - + Set interval in milliseconds between two position-updated signals. Pass 0 to stop updating the position. @@ -320,29 +320,29 @@ Pass 0 to stop updating the position. - + See #encodebin:avoid-reencoding - + - + - + - + - + - + @@ -353,7 +353,7 @@ Pass 0 to stop updating the position. - + generic error. @@ -380,22 +380,22 @@ Pass 0 to stop updating the position. Types of messages that will be posted on the transcoder API bus. See also #gst_transcoder_get_message_bus() - + Sink position changed - + Duration of stream changed - + Pipeline state changed - + Transcoding is done - + Message contains an error - + Message contains an error @@ -508,7 +508,7 @@ See also #gst_transcoder_get_message_bus() Transforms #GstTranscoder bus messages to signals from the adapter object. - + The #GstTranscoder @self is tracking @@ -521,7 +521,7 @@ See also #gst_transcoder_get_message_bus() - + The #GstTranscoder tracked by the adapter. @@ -595,13 +595,13 @@ See also #gst_transcoder_get_message_bus() High level representation of the transcoder pipeline state. - + the transcoder is stopped. - + the transcoder is paused. - + the transcoder is currently transcoding a stream. diff --git a/girs/GstVa-1.0.gir b/girs/GstVa-1.0.gir index 454573e7995..73ca3570dfc 100644 --- a/girs/GstVa-1.0.gir +++ b/girs/GstVa-1.0.gir @@ -528,7 +528,7 @@ GstVaDisplay descendants. - + @@ -582,11 +582,11 @@ and operate the device in @path. - + - + @@ -614,7 +614,7 @@ pipeline is not in NULL state. - + @@ -742,13 +742,13 @@ later it populates the @buffer with those DMABufs. - + The feature is disabled. - + The feature is enabled. - + The feature is enabled automatically. @@ -1037,7 +1037,7 @@ to it. - + It imports the array of @mem, representing a single frame, into a VASurfaceID and it's attached into every @mem. @@ -1066,7 +1066,7 @@ VASurfaceID and it's attached into every @mem. array of DMABuf file descriptors. - + diff --git a/girs/GstValidate-1.0.gir b/girs/GstValidate-1.0.gir index c85b1f24f57..4194c01e67b 100644 --- a/girs/GstValidate-1.0.gir +++ b/girs/GstValidate-1.0.gir @@ -94,7 +94,7 @@ Only access it from the default main context. - + @@ -258,7 +258,7 @@ value to a GstClockTime. - + @@ -269,26 +269,26 @@ GST_VALIDATE_EXECUTE_ACTION_ERROR_REPORTED: GST_VALIDATE_EXECUTE_ACTION_IN_PROGRESS: GST_VALIDATE_EXECUTE_ACTION_NONE: GST_VALIDATE_EXECUTE_ACTION_DONE: - + - + - + - + The action will be executed asynchronously without blocking further actions to be executed - + Use #GST_VALIDATE_EXECUTE_ACTION_NON_BLOCKING instead. - + - + - + - + @@ -352,54 +352,54 @@ actions to be executed - + No special flag - + The action is a config - + The action can be executed ASYNC - + The action can be executed asynchronously but without blocking further actions execution. - + Use #GST_VALIDATE_ACTION_TYPE_NON_BLOCKING instead. - + The action will be executed on 'element-added' for a particular element type if no playback-time is specified - + The pipeline will need to be synchronized with the clock for that action type to be used. - + Do not consider the non execution of the action as a fatal error. - + The action can use the 'optional' keyword. Such action instances will have the #GST_VALIDATE_ACTION_TYPE_NO_EXECUTION_NOT_FATAL flag set and won't be considered as fatal if they fail. - + - + The action can be used in config files even if it is not strictly a config action (ie. it needs a scenario to run). - + The action is checking some state from objects in the pipeline. It means that it can be used as 'check' in different action which have a `check` "sub action", such as the 'wait' action type. This implies that the action can be executed from any thread and not only from the scenario thread as other types. - + @@ -443,7 +443,7 @@ under @monitor watch - + @@ -490,19 +490,19 @@ GST_VALIDATE_FATAL_CRITICALS: GST_VALIDATE_PRINT_ISSUES: GST_VALIDATE_PRINT_WARNINGS: GST_VALIDATE_PRINT_CRITICALS: - + - + - + - + - + - + - + @@ -651,14 +651,14 @@ Class that wraps a #GstElement for Validate checks - + The report will be completely ignored. - + The report will be kept by the reporter, but not reported to the runner. - + The report will be kept by the reporter and reported to the runner. @@ -804,13 +804,13 @@ Class that wraps a #GstElement for Validate checks GST_VALIDATE_ISSUE_FLAGS_NONE: No special flags for the issue type GST_VALIDATE_ISSUE_FLAGS_FULL_DETAILS: Always show all occurrences of the issue in full details GST_VALIDATE_ISSUE_FLAGS_NO_BACKTRACE: Do not generate backtrace for the issue type - + - + - + - + Always generate backtrace, even if not a critical issue @@ -1117,10 +1117,10 @@ GST_VALIDATE_ISSUE_FLAGS_NO_BACKTRACE: Do not generate backtrace for the issue t - + - + @@ -1318,16 +1318,16 @@ GST_VALIDATE_ISSUE_FLAGS_NO_BACKTRACE: Do not generate backtrace for the issue t - + - + - + - + - + @@ -1580,7 +1580,7 @@ Class that wraps a #GObject for Validate checks - + The pipeline in which @monitor @@ -1624,7 +1624,7 @@ target is in. - + @@ -1633,7 +1633,7 @@ target is in. - + @@ -1739,11 +1739,11 @@ target is in. - + The property is optional, if it is not found on the object, nothing happens. - + Do not check that after setting the property, the value is the one we set. @@ -2255,7 +2255,7 @@ setting the property, the value is the one we set. - + @@ -2561,7 +2561,7 @@ Class that wraps a #GstPad for Validate checks - + @@ -2676,6 +2676,36 @@ equations in the action structure. + + Reports a new issue in the GstValidate reporting system with @m +as the source of that issue. + + + + The #GstValidateReporter where the issue happened + + + The #GstValidateIssueId of the issue + + + The format of the message describing the issue in a printf + format, followed by the parameters. + + + + + + + + + + + + + + + + @@ -3088,19 +3118,19 @@ You can also use #GST_VALIDATE_REPORT instead. - + - + - + - + - + - + - + @@ -3430,26 +3460,26 @@ and levels. No object category / name sets the global level. Examples: GST_VALIDATE_REPORTING_DETAILS=synthetic,h264parse:all GST_VALIDATE_REPORTING_DETAILS=none,h264parse::sink_0:synthetic - + No reporting level known, reporting will default to the global reporting level. - + No debugging level specified or desired. Used to deactivate debugging output. - + Summary of the issues found, with no details. - + If set as the default level, similar issues can be reported multiple times for different subchains. If set as the level for a particular object (my_object:subchain), validate will report the issues where the object is the first to report an issue for a subchain. - + If set as the default level, all the distinct issues for all the monitors will be reported. If set as the level for a particular object, all the distinct issues for this object @@ -3457,16 +3487,16 @@ will be reported. Note that if the same issue happens twice on the same object, up until this level that issue is only reported once. - + All the issues will be reported, even those that repeat themselves inside the same object. This can be *very* verbose if set globally. - + Sythetic for not fatal issues and detailed for others - + @@ -3581,7 +3611,7 @@ exit code of the application. - + @@ -3624,7 +3654,7 @@ exit code of the application. - + @@ -3765,10 +3795,10 @@ against - + - + @@ -3809,6 +3839,12 @@ against + + Emitted when the 'stop' action is fired + + + + @@ -3821,20 +3857,20 @@ against - + - + - + - + - + - + @@ -3847,17 +3883,17 @@ against Defines the level of verbosity of -validate (ie, printing on stdout). - + - + - + - + - + - + diff --git a/girs/GstVideo-1.0.gir b/girs/GstVideo-1.0.gir index f0ac89363ca..8fcb7dd3146 100644 --- a/girs/GstVideo-1.0.gir +++ b/girs/GstVideo-1.0.gir @@ -70,13 +70,13 @@ and/or use gtk-doc annotations. --> Location of a @GstAncillaryMeta. - + Progressive or no field specified (default) - + Interlaced first field - + Interlaced second field @@ -411,6 +411,7 @@ for modifying the color balance implemented by an element providing the #GstColorBalance interface. For example, Hue or Saturation. + default handler for value changed notification @@ -465,6 +466,7 @@ for modifying the color balance implemented by an element providing the + default handler for value changed notification @@ -494,6 +496,7 @@ for modifying the color balance implemented by an element providing the + list handled channels @@ -514,6 +517,7 @@ for modifying the color balance implemented by an element providing the + set a channel value @@ -536,6 +540,7 @@ for modifying the color balance implemented by an element providing the + get a channel value @@ -555,6 +560,7 @@ for modifying the color balance implemented by an element providing the + implementation type @@ -570,6 +576,7 @@ for modifying the color balance implemented by an element providing the + default handler for value changed notification @@ -602,11 +609,11 @@ for modifying the color balance implemented by an element providing the operations in software or in dedicated hardware. In general, dedicated hardware implementations (such as those provided by xvimagesink) are preferred. - + Color balance is implemented with dedicated hardware. - + Color balance is implemented via software processing. @@ -1967,62 +1974,62 @@ For convenience in handling DVD navigation, the MENU commands are aliased as: GST_NAVIGATION_COMMAND_DVD_AUDIO_MENU = @GST_NAVIGATION_COMMAND_MENU5 GST_NAVIGATION_COMMAND_DVD_ANGLE_MENU = @GST_NAVIGATION_COMMAND_MENU6 GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU = @GST_NAVIGATION_COMMAND_MENU7 - + An invalid command entry - + Execute navigation menu command 1. For DVD, this enters the DVD root menu, or exits back to the title from the menu. - + Execute navigation menu command 2. For DVD, this jumps to the DVD title menu. - + Execute navigation menu command 3. For DVD, this jumps into the DVD root menu. - + Execute navigation menu command 4. For DVD, this jumps to the Subpicture menu. - + Execute navigation menu command 5. For DVD, the jumps to the audio menu. - + Execute navigation menu command 6. For DVD, this jumps to the angles menu. - + Execute navigation menu command 7. For DVD, this jumps to the chapter menu. - + Select the next button to the left in a menu, if such a button exists. - + Select the next button to the right in a menu, if such a button exists. - + Select the button above the current one in a menu, if such a button exists. - + Select the button below the current one in a menu, if such a button exists. - + Activate (click) the currently selected button in a menu, if such a button exists. - + Switch to the previous angle in a multiangle feature. - + Switch to the next angle in a multiangle feature. @@ -2031,65 +2038,65 @@ feature. Enum values for the various events that an element implementing the GstNavigation interface might send up the pipeline. Touch events have been inspired by the libinput API, and have the same meaning here. - + Returned from gst_navigation_event_get_type() when the passed event is not a navigation event. - + A key press event. Use gst_navigation_event_parse_key_event() to extract the details from the event. - + A key release event. Use gst_navigation_event_parse_key_event() to extract the details from the event. - + A mouse button press event. Use gst_navigation_event_parse_mouse_button_event() to extract the details from the event. - + A mouse button release event. Use gst_navigation_event_parse_mouse_button_event() to extract the details from the event. - + A mouse movement event. Use gst_navigation_event_parse_mouse_move_event() to extract the details from the event. - + A navigation command event. Use gst_navigation_event_parse_command() to extract the details from the event. - + A mouse scroll event. Use gst_navigation_event_parse_mouse_scroll_event() to extract the details from the event. - + An event describing a new touch point, which will be assigned an identifier that is unique to it for the duration of its movement on the screen. Use gst_navigation_event_parse_touch_event() to extract the details from the event. - + An event describing the movement of an active touch point across the screen. Use gst_navigation_event_parse_touch_event() to extract the details from the event. - + An event describing a removed touch point. After this event, its identifier may be reused for any new touch points. Use gst_navigation_event_parse_touch_up_event() to extract the details from the event. - + An event signaling the end of a sequence of simultaneous touch events. - + An event cancelling all currently active touch points. - + A mouse button double click event. Use gst_navigation_event_parse_mouse_button_event() to extract the details from the event. @@ -2103,6 +2110,7 @@ from the event. + sending a navigation event @@ -2119,6 +2127,7 @@ from the event. + sending a navigation event (Since: 1.22) @@ -2140,25 +2149,25 @@ from the event. A set of notifications that may be received on the bus when navigation related status changes. - + Returned from gst_navigation_message_get_type() when the passed message is not a navigation message. - + Sent when the mouse moves over or leaves a clickable region of the output, such as a DVD menu button. - + Sent when the set of available commands changes and should re-queried by interested applications. - + Sent when display angles in a multi-angle feature (such as a multiangle DVD) change - either angles have appeared or disappeared. - + Sent when a navigation event was not handled by any element in the pipeline (Since: 1.6) @@ -2169,71 +2178,71 @@ in events. Typical modifier keys are Shift, Control, Meta, Super, Hyper, Alt, Compose, Apple, CapsLock or ShiftLock. - + - + the Shift key. - + - + the Control key. - + the third modifier key - + the fourth modifier key - + the fifth modifier key - + the sixth modifier key - + the seventh modifier key - + the first mouse button (usually the left button). - + the second mouse button (usually the right button). - + the third mouse button (usually the mouse wheel button or middle button). - + the fourth mouse button (typically the "Back" button). - + the fifth mouse button (typically the "forward" button). - + the Super modifier - + the Hyper modifier - + the Meta modifier - + A mask covering all entries in #GdkModifierType. - + the Meta modifier Types of navigation interface queries. - + invalid query - + command query - + viewing angle query @@ -3059,7 +3068,7 @@ Formats are sorted by decreasing "quality", using these criteria by priority: - + Declare all video formats as a string. Formats are sorted by decreasing "quality", using these criteria by priority: @@ -3435,7 +3444,7 @@ Return the width of one tile in pixels, zero if its not an integer. - + Number of video formats in #GstVideoFormat. @@ -4320,13 +4329,13 @@ https://www.etsi.org/deliver/etsi_ts/101100_101199/101154/02.01.01_60/ts_101154v https://www.atsc.org/wp-content/uploads/2015/03/a_53-Part-4-2009.pdf 2) SMPTE ST2016-1: - + AFD value is from DVB/ETSI standard - + AFD value is from ATSC A/53 standard - + @@ -4362,53 +4371,53 @@ of the active image. 2) AFD 0 is reserved for DVB/ETSI 3) values 1, 5, 6, 7, and 12 are reserved for both ATSC and DVB/ETSI 4) values 2 and 3 are not recommended for ATSC, but are valid for DVB/ETSI - + Unavailable (see note 0 below). - + For 4:3 coded frame, letterbox 16:9 image, at top of the coded frame. For 16:9 coded frame, full frame 16:9 image, the same as the coded frame. - + For 4:3 coded frame, letterbox 14:9 image, at top of the coded frame. For 16:9 coded frame, pillarbox 14:9 image, horizontally centered in the coded frame. - + For 4:3 coded frame, letterbox image with an aspect ratio greater than 16:9, vertically centered in the coded frame. For 16:9 coded frame, letterbox image with an aspect ratio greater than 16:9. - + For 4:3 coded frame, full frame 4:3 image, the same as the coded frame. For 16:9 coded frame, full frame 16:9 image, the same as the coded frame. - + For 4:3 coded frame, full frame 4:3 image, the same as the coded frame. For 16:9 coded frame, pillarbox 4:3 image, horizontally centered in the coded frame. - + For 4:3 coded frame, letterbox 16:9 image, vertically centered in the coded frame with all image areas protected. For 16:9 coded frame, full frame 16:9 image, with all image areas protected. - + For 4:3 coded frame, letterbox 14:9 image, vertically centered in the coded frame. For 16:9 coded frame, pillarbox 14:9 image, horizontally centered in the coded frame. - + For 4:3 coded frame, full frame 4:3 image, with alternative 14:9 center. For 16:9 coded frame, pillarbox 4:3 image, with alternative 14:9 center. - + For 4:3 coded frame, letterbox 16:9 image, with alternative 14:9 center. For 16:9 coded frame, full frame 16:9 image, with alternative 14:9 center. - + For 4:3 coded frame, letterbox 16:9 image, with alternative 4:3 center. For 16:9 coded frame, full frame 16:9 image, with alternative 4:3 center. @@ -4488,6 +4497,12 @@ Zorder for each input stream can be configured on the #GstVideoAggregatorPad. + Lets subclasses aggregate frames that are ready. Subclasses + should iterate the GstElement.sinkpads and use the already + mapped #GstVideoFrame from gst_video_aggregator_pad_get_prepared_frame() + or directly use the #GstBuffer from gst_video_aggregator_pad_get_current_buffer() + if it needs to map the buffer in a special way. The result of the + aggregation should land in @outbuffer. @@ -4502,6 +4517,9 @@ Zorder for each input stream can be configured on the + Optional. + Lets subclasses provide a #GstBuffer to be used as @outbuffer of + the #aggregate_frames vmethod. @@ -4536,6 +4554,9 @@ Zorder for each input stream can be configured on the + Optional. + Lets subclasses update the #GstCaps representing + the src pad caps before usage. Return %NULL to indicate failure. @@ -4568,7 +4589,7 @@ Subclasses can add their own operation to perform using the returned - + Causes the element to aggregate on a timeout even when no live source is connected to its sinks. See #GstAggregator:min-upstream-latency for a companion property: in the vast majority of cases where you plan to plug in @@ -4598,6 +4619,9 @@ srcpad caps. + Optional. + Lets subclasses update the #GstCaps representing + the src pad caps before usage. Return %NULL to indicate failure. @@ -4614,6 +4638,12 @@ srcpad caps. + Lets subclasses aggregate frames that are ready. Subclasses + should iterate the GstElement.sinkpads and use the already + mapped #GstVideoFrame from gst_video_aggregator_pad_get_prepared_frame() + or directly use the #GstBuffer from gst_video_aggregator_pad_get_current_buffer() + if it needs to map the buffer in a special way. The result of the + aggregation should land in @outbuffer. @@ -4630,6 +4660,9 @@ srcpad caps. + Optional. + Lets subclasses provide a #GstBuffer to be used as @outbuffer of + the #aggregate_frames vmethod. @@ -4646,6 +4679,8 @@ srcpad caps. + Optional. + Lets subclasses decide of the best common format to use. @@ -4754,12 +4789,13 @@ update for any changes that have happened. - + + clean the frame previously prepared in prepare_frame @@ -4777,6 +4813,9 @@ update for any changes that have happened. + Prepare the frame from the pad buffer and sets it to prepared_frame. + Implementations should always return TRUE. Returning FALSE will cease + iteration over subsequent pads. @@ -4847,6 +4886,8 @@ If overriden, `prepare_frame_finish` must also be overriden. + Called when either the input or output formats + have changed. @@ -4934,13 +4975,13 @@ or from the #GstVideoAggregatorPadClass::prepare_frame virtual method of the agg - + - + - + @@ -4965,6 +5006,8 @@ or from the #GstVideoAggregatorPadClass::prepare_frame virtual method of the agg + Called when either the input or output formats + have changed. @@ -4978,6 +5021,9 @@ or from the #GstVideoAggregatorPadClass::prepare_frame virtual method of the agg + Prepare the frame from the pad buffer and sets it to prepared_frame. + Implementations should always return TRUE. Returning FALSE will cease + iteration over subsequent pads. @@ -5000,6 +5046,7 @@ or from the #GstVideoAggregatorPadClass::prepare_frame virtual method of the agg + clean the frame previously prepared in prepare_frame @@ -5072,7 +5119,7 @@ or from the #GstVideoAggregatorPadClass::prepare_frame virtual method of the agg - + @@ -5095,7 +5142,7 @@ See #GstVideoAggregator for more details. - + @@ -5141,16 +5188,16 @@ structure is usually used to configure the bufferpool if it supports the Different alpha modes. - + When input and output have alpha, it will be copied. When the input has no alpha, alpha will be set to #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE - + set all alpha to #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE - + multiply all alpha with #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE. When the input format has no alpha but the output format has, the @@ -5190,40 +5237,40 @@ the parity check bits). - + - + - + - + - + - + - + - + - + - + - + - + Some know types of Ancillary Data identifiers. - + CEA 708 Ancillary data according to SMPTE 334 - + CEA 608 Ancillary data according to SMPTE 334 - + AFD/Bar Ancillary data according to SMPTE 2016-3 (Since: 1.18) @@ -5280,27 +5327,27 @@ buffers carrying closed caption data, or video data - even encoded data. Note that these are only valid for #GstCaps of type: video/... and caption/... They can conflict with other extended buffer flags. - + If the #GstBuffer is interlaced. In mixed interlace-mode, this flags specifies if the frame is interlaced or progressive. - + If the #GstBuffer is interlaced, then the first field in the video frame is the top field. If unset, the bottom field is first. - + If the #GstBuffer is interlaced, then the first field (as defined by the %GST_VIDEO_BUFFER_FLAG_TFF flag setting) is repeated. - + If the #GstBuffer is interlaced, then only the first field (as defined by the %GST_VIDEO_BUFFER_FLAG_TFF flag setting) is to be displayed (Since: 1.16). - + The #GstBuffer contains one or more specific views, such as left or right eye view. This flags is set on any buffer that contains non-mono content - even for @@ -5308,33 +5355,33 @@ They can conflict with other extended buffer flags. mono / non-mono streams, the absence of the flag marks mono buffers. - + When conveying stereo/multiview content with frame-by-frame methods, this flag marks the first buffer in a bundle of frames that belong together. - + The video frame has the top field only. This is the same as GST_VIDEO_BUFFER_FLAG_TFF | GST_VIDEO_BUFFER_FLAG_ONEFIELD (Since: 1.16). Use GST_VIDEO_BUFFER_IS_TOP_FIELD() to check for this flag. - + If the #GstBuffer is interlaced, then only the first field (as defined by the %GST_VIDEO_BUFFER_FLAG_TFF flag setting) is to be displayed (Since: 1.16). - + The video frame has the bottom field only. This is the same as GST_VIDEO_BUFFER_FLAG_ONEFIELD (GST_VIDEO_BUFFER_FLAG_TFF flag unset) (Since: 1.16). Use GST_VIDEO_BUFFER_IS_BOTTOM_FIELD() to check for this flag. - + The #GstBuffer contains the end of a video field or frame boundary such as the last subframe or packet (Since: 1.18). - + Offset to define more flags @@ -5362,7 +5409,7 @@ supports all the video bufferpool options. - + @@ -5395,10 +5442,10 @@ supports all the video bufferpool options. The various known types of Closed Caption (CC). - + Unknown type of CC - + CEA-608 as byte pairs. Note that this format is not recommended since is does not specify to which field the caption comes from and therefore assumes @@ -5407,7 +5454,7 @@ supports all the video bufferpool options. if you wish to store CEA-608 from two fields and prefix each byte pair with 0xFC for the first field and 0xFD for the second field. - + CEA-608 as byte triplets as defined in SMPTE S334-1 Annex A. The second and third byte of the byte triplet is the raw CEA608 data, the first byte is a bitfield: The top/7th bit is @@ -5417,12 +5464,12 @@ supports all the video bufferpool options. for 525-line field 1, line 272 for 525-line field 2, line 5 for 625-line field 1 and line 318 for 625-line field 2). - + CEA-708 as cc_data byte triplets. They can also contain 608-in-708 and the first byte of each triplet has to be inspected for detecting the type. - + CEA-708 (and optionally CEA-608) in a CDP (Caption Distribution Packet) defined by SMPTE S-334-2. Contains the whole CDP (starting with 0x9669). @@ -5459,40 +5506,40 @@ type, or %GST_VIDEO_CAPTION_TYPE_UNKNOWN. Extra flags that influence the result from gst_video_chroma_resample_new(). - + no flags - + the input is interlaced Different subsampling and upsampling methods - + Duplicates the chroma samples when upsampling and drops when subsampling - + Uses linear interpolation to reconstruct missing chroma and averaging to subsample Different chroma downsampling and upsampling modes - + do full chroma up and down sampling - + only perform chroma upsampling - + only perform chroma downsampling - + disable chroma resampling - + Perform resampling of @width chroma pixels in @lines. @@ -5590,31 +5637,31 @@ performed. Various Chroma sitings. - + unknown cositing - + no cositing - + chroma is horizontally cosited - + chroma is vertically cosited - - choma samples are sited on alternate lines + + chroma samples are sited on alternate lines - + chroma samples cosited with luma samples - + jpeg style cositing, also for mpeg1 and mjpeg - + mpeg2 style cositing - + DV style cositing @@ -5836,19 +5883,19 @@ will be freed. Flags for #GstVideoCodecFrame - + is the frame only meant to be decoded - + is the frame a synchronization point (keyframe) - + should the output frame be made a keyframe - + should the encoder output stream headers - + The buffer data is corrupted. @@ -5929,27 +5976,27 @@ will be freed. The color matrix is used to convert between Y'PbPr and non-linear RGB (R'G'B') - + unknown matrix - + identity matrix. Order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB) - + FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - + ITU-R BT.709 color matrix, also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B - + ITU-R BT.601 color matrix, also SMPTE170M / ITU-R BT1358 525 / ITU-R BT1700 NTSC - + SMPTE 240M color matrix - + ITU-R BT.2020 color matrix. Since: 1.6 @@ -6037,51 +6084,51 @@ and "ITU-T H.273 Table 4". The color primaries define the how to transform linear RGB values to and from the CIE XYZ colorspace. - + unknown color primaries - + BT709 primaries, also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B - + BT470M primaries, also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - + BT470BG primaries, also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM - + SMPTE170M primaries, also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC - + SMPTE240M primaries - + Generic film (colour filters using Illuminant C) - + ITU-R BT2020 primaries. Since: 1.6 - + Adobe RGB primaries. Since: 1.8 - + SMPTE ST 428 primaries (CIE 1931 XYZ). Since: 1.16 - + SMPTE RP 431 primaries (ST 431-2 (2011) / DCI P3). Since: 1.16 - + SMPTE EG 432 primaries (ST 432-1 (2010) / P3 D65). Since: 1.16 - + EBU 3213 primaries (JEDEC P22 phosphors). Since: 1.16 @@ -6197,13 +6244,13 @@ XYZ colorspace. Possible color range values. These constants are defined for 8 bit color values and can be scaled for other bit depths. - + unknown range - + [0..255] for 8 bit components - + [16..235] for 8 bit components. Chroma has [16..240] range. @@ -6499,7 +6546,7 @@ with the parsed values. - + Convert the pixels of @src into @dest using @convert. @@ -6828,6 +6875,9 @@ The bare minimum that a functional subclass needs to implement is: @gst_video_decoder_finish_frame, or call @gst_video_decoder_drop_frame. + Optional. + Called when the element changes to GST_STATE_NULL. + Allows closing external resources. @@ -6839,6 +6889,12 @@ The bare minimum that a functional subclass needs to implement is: + Optional. + Setup the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -6853,6 +6909,11 @@ The bare minimum that a functional subclass needs to implement is: + Optional. + Called to request subclass to decode any data it can at this + point, but that more data may arrive after. (e.g. at segment end). + Sub-classes should be prepared to handle new data afterward, + or seamless segment processing will break. Since: 1.6 @@ -6864,6 +6925,9 @@ The bare minimum that a functional subclass needs to implement is: + Optional. + Called to request subclass to dispatch any pending remaining + data at EOS. Sub-classes can refuse to decode new data after. @@ -6875,6 +6939,9 @@ The bare minimum that a functional subclass needs to implement is: + Optional. + Flush all remaining data from the decoder without + pushing it downstream. Since: 1.2 @@ -6886,6 +6953,11 @@ The bare minimum that a functional subclass needs to implement is: + Optional. + Allows for a custom sink getcaps implementation. + If not implemented, default returns + gst_video_decoder_proxy_getcaps + applied to sink template caps. @@ -6953,6 +7025,9 @@ negotiate fails. + Optional. + Called when the element changes to GST_STATE_READY. + Allows opening external resources. @@ -6964,6 +7039,9 @@ negotiate fails. + Required for non-packetized input. + Allows chopping incoming data into manageable units (frames) + for subsequent decoding. @@ -6984,6 +7062,10 @@ negotiate fails. + Optional. + Propose buffer allocation parameters for upstream elements. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -6998,6 +7080,9 @@ negotiate fails. + Optional. + Allows subclass (decoder) to perform post-seek semantics reset. + Deprecated. @@ -7012,6 +7097,7 @@ negotiate fails. + Notifies subclass of incoming data format (caps). @@ -7026,6 +7112,12 @@ negotiate fails. + Optional. + Event handler on the sink pad. This function should return + TRUE if the event was handled and should be discarded + (i.e. not unref'ed). + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -7040,6 +7132,11 @@ negotiate fails. + Optional. + Query handler on the sink pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.4 @@ -7054,6 +7151,12 @@ negotiate fails. + Optional. + Event handler on the source pad. This function should return + TRUE if the event was handled and should be discarded + (i.e. not unref'ed). + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -7068,6 +7171,11 @@ negotiate fails. + Optional. + Query handler on the source pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.4 @@ -7082,6 +7190,9 @@ negotiate fails. + Optional. + Called when the element starts processing. + Allows opening external resources. @@ -7093,6 +7204,9 @@ negotiate fails. + Optional. + Called when the element stops processing. + Allows closing external resources. @@ -7104,6 +7218,11 @@ negotiate fails. + Optional. Transform the metadata on the input buffer to the + output buffer. By default this method is copies all meta without + tags and meta with only the "video" tag. subclasses can + implement this method and return %TRUE if the metadata is to be + copied. Since: 1.6 @@ -7439,7 +7558,7 @@ and should therefore occur as soon/skippy as possible. - + currently configured decoder tolerated error count. @@ -7831,7 +7950,7 @@ global latency. - + Sets numbers of tolerated decoder errors, where a tolerated one is then only warned about, but more than tolerated will lead to fatal error. You can set -1 for never returning fatal errors. Default is set to @@ -8012,28 +8131,28 @@ handler with %GST_PAD_SET_ACCEPT_INTERSECT and - + GstVideoDecoderRequestSyncPointFlags to use for the automatically requested sync points if `automatic-request-sync-points` is enabled. - + If set to %TRUE the decoder will automatically request sync points when it seems like a good idea, e.g. if the first frames are not key frames or if packet loss was reported by upstream. - + If set to %TRUE the decoder will discard frames that are marked as corrupted instead of outputting them. - + Maximum number of tolerated consecutive decode errors. See gst_video_decoder_set_max_errors() for more details. - + Minimum interval between force-key-unit events sent upstream by the decoder. Setting this to 0 will cause every event to be handled, setting this to %GST_CLOCK_TIME_NONE will cause every event to be ignored. @@ -8042,7 +8161,7 @@ See gst_video_event_new_upstream_force_key_unit() for more details about force-key-unit events. - + If set to %TRUE the decoder will handle QoS events received from downstream elements. This includes dropping output frames which are detected as late @@ -8086,6 +8205,9 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Called when the element changes to GST_STATE_READY. + Allows opening external resources. @@ -8099,6 +8221,9 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Called when the element changes to GST_STATE_NULL. + Allows closing external resources. @@ -8112,6 +8237,9 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Called when the element starts processing. + Allows opening external resources. @@ -8125,6 +8253,9 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Called when the element stops processing. + Allows closing external resources. @@ -8138,6 +8269,9 @@ and likely as well. If non-packetized input is supported or expected, + Required for non-packetized input. + Allows chopping incoming data into manageable units (frames) + for subsequent decoding. @@ -8160,6 +8294,7 @@ and likely as well. If non-packetized input is supported or expected, + Notifies subclass of incoming data format (caps). @@ -8176,6 +8311,9 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Allows subclass (decoder) to perform post-seek semantics reset. + Deprecated. @@ -8192,6 +8330,9 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Called to request subclass to dispatch any pending remaining + data at EOS. Sub-classes can refuse to decode new data after. @@ -8205,6 +8346,9 @@ and likely as well. If non-packetized input is supported or expected, + Provides input data frame to subclass. In subframe mode, the subclass needs + to take ownership of @GstVideoCodecFrame.input_buffer as it will be modified + by the base class on the next subframe buffer receiving. @@ -8223,6 +8367,12 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Event handler on the sink pad. This function should return + TRUE if the event was handled and should be discarded + (i.e. not unref'ed). + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -8239,6 +8389,12 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Event handler on the source pad. This function should return + TRUE if the event was handled and should be discarded + (i.e. not unref'ed). + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -8255,6 +8411,10 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Negotiate with downstream and configure buffer pools, etc. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -8270,6 +8430,12 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Setup the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -8286,6 +8452,10 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Propose buffer allocation parameters for upstream elements. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -8302,6 +8472,9 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Flush all remaining data from the decoder without + pushing it downstream. Since: 1.2 @@ -8315,6 +8488,11 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Query handler on the sink pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.4 @@ -8331,6 +8509,11 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Query handler on the source pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.4 @@ -8347,6 +8530,11 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Allows for a custom sink getcaps implementation. + If not implemented, default returns + gst_video_decoder_proxy_getcaps + applied to sink template caps. @@ -8363,6 +8551,11 @@ and likely as well. If non-packetized input is supported or expected, + Optional. + Called to request subclass to decode any data it can at this + point, but that more data may arrive after. (e.g. at segment end). + Sub-classes should be prepared to handle new data afterward, + or seamless segment processing will break. Since: 1.6 @@ -8376,6 +8569,11 @@ and likely as well. If non-packetized input is supported or expected, + Optional. Transform the metadata on the input buffer to the + output buffer. By default this method is copies all meta without + tags and meta with only the "video" tag. subclasses can + implement this method and return %TRUE if the metadata is to be + copied. Since: 1.6 @@ -8423,17 +8621,17 @@ and likely as well. If non-packetized input is supported or expected, - + Flags to be used in combination with gst_video_decoder_request_sync_point(). See the function documentation for more details. - + discard all following input until the next sync point. - + discard all following output until the next sync point. @@ -8442,7 +8640,7 @@ See the function documentation for more details. The interface allows unified access to control flipping and rotation operations of video-sources or operators. - + @@ -8454,7 +8652,7 @@ operations of video-sources or operators. - + GstVideoDither provides implementations of several dithering algorithms that can be applied to lines of video pixels to quantize and dither them. @@ -8541,31 +8739,31 @@ performance is achieved when @quantizer is a power of 2. Extra flags that influence the result from gst_video_chroma_resample_new(). - + no flags - + the input is interlaced - + quantize values in addition to adding dither. Different dithering methods to use. - + no dithering - + propagate rounding errors downwards - + Dither with floyd-steinberg error diffusion - + Dither with Sierra Lite error diffusion - + ordered dither using a bayer pattern @@ -8631,6 +8829,9 @@ pipeline to catch up. + Optional. + Called when the element changes to GST_STATE_NULL. + Allows closing external resources. @@ -8642,6 +8843,12 @@ pipeline to catch up. + Optional. + Setup the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -8656,6 +8863,9 @@ pipeline to catch up. + Optional. + Called to request subclass to dispatch any pending remaining + data (e.g. at EOS). @@ -8667,6 +8877,9 @@ pipeline to catch up. + Optional. + Flush all remaining data from the encoder without + pushing it downstream. Since: 1.2 @@ -8678,6 +8891,11 @@ pipeline to catch up. + Optional. + Allows for a custom sink getcaps implementation (e.g. + for multichannel input specification). If not implemented, + default returns gst_video_encoder_proxy_getcaps + applied to sink template caps. @@ -8692,6 +8910,7 @@ pipeline to catch up. + Provides input frame to subclass. @@ -8722,6 +8941,9 @@ negotiate fails. + Optional. + Called when the element changes to GST_STATE_READY. + Allows opening external resources. @@ -8733,6 +8955,10 @@ negotiate fails. + Optional. + Allows subclass to push frame downstream in whatever + shape or form it deems appropriate. If not provided, + provided encoded frame data is simply pushed downstream. @@ -8747,6 +8973,10 @@ negotiate fails. + Optional. + Propose buffer allocation parameters for upstream elements. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -8761,6 +8991,9 @@ negotiate fails. + Optional. + Allows subclass (encoder) to perform post-seek semantics reset. + Deprecated. @@ -8775,6 +9008,10 @@ negotiate fails. + Optional. + Notifies subclass of incoming data format. + GstVideoCodecState fields have already been + set according to provided caps. @@ -8789,6 +9026,12 @@ negotiate fails. + Optional. + Event handler on the sink pad. This function should return + TRUE if the event was handled and should be discarded + (i.e. not unref'ed). + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -8803,6 +9046,11 @@ negotiate fails. + Optional. + Query handler on the sink pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.4 @@ -8817,6 +9065,12 @@ negotiate fails. + Optional. + Event handler on the source pad. This function should return + TRUE if the event was handled and should be discarded + (i.e. not unref'ed). + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -8831,6 +9085,11 @@ negotiate fails. + Optional. + Query handler on the source pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.4 @@ -8845,6 +9104,9 @@ negotiate fails. + Optional. + Called when the element starts processing. + Allows opening external resources. @@ -8856,6 +9118,9 @@ negotiate fails. + Optional. + Called when the element stops processing. + Allows closing external resources. @@ -8867,6 +9132,11 @@ negotiate fails. + Optional. Transform the metadata on the input buffer to the + output buffer. By default this method is copies all meta without + tags and meta with only the "video" tag. subclasses can + implement this method and return %TRUE if the metadata is to be + copied. Since: 1.6 @@ -8929,6 +9199,28 @@ keep references to the frame, not the buffer. + + Removes @frame from the list of pending frames, releases it +and posts a QoS message with the frame's details on the bus. +Similar to calling gst_video_encoder_finish_frame() without a buffer +attached to @frame, but this function additionally stores events +from @frame as pending, to be pushed out alongside the next frame +submitted via gst_video_encoder_finish_frame(). + + + + + + + a #GstVideoEncoder + + + + a #GstVideoCodecFrame + + + + @frame must have a valid encoded data buffer, whose metadata fields are then appropriately set according to frame data or no buffer at @@ -8936,6 +9228,10 @@ all if the frame should be dropped. It is subsequently pushed downstream or provided to @pre_push. In any case, the frame is considered finished and released. +If @frame does not have a buffer attached, it will be dropped, and +a QoS message will be posted on the bus. Events from @frame will be +pushed out immediately. + After calling this function the output buffer of the frame is to be considered read-only. This function will also change the metadata of the buffer. @@ -9089,7 +9385,7 @@ If no QoS events have been received from downstream, or if - + Returns the minimum force-keyunit interval, see gst_video_encoder_set_min_force_key_unit_interval() for more details. @@ -9216,6 +9512,26 @@ elements (e.g. muxers). + + Removes @frame from list of pending frames and releases it, similar +to calling gst_video_encoder_finish_frame() without a buffer attached +to the frame, but does not post a QoS message or do any additional +processing. Events from @frame are moved to the pending events list. + + + + + + + a #GstVideoEncoder + + + + a #GstVideoCodecFrame + + + + Set the codec headers to be sent downstream whenever requested. @@ -9258,7 +9574,7 @@ so the pipeline can reconfigure its global latency. - + Sets the minimum interval for requesting keyframes based on force-keyunit events. Setting this to 0 will allow to handle every event, setting this to %GST_CLOCK_TIME_NONE causes force-keyunit events to be ignored. @@ -9353,12 +9669,12 @@ from the next call to #gst_video_encoder_finish_frame(). - + Minimum interval between force-keyunit requests in nanoseconds. See gst_video_encoder_set_min_force_key_unit_interval() for more details. - + @@ -9397,6 +9713,9 @@ and @get_caps are likely needed as well. + Optional. + Called when the element changes to GST_STATE_READY. + Allows opening external resources. @@ -9410,6 +9729,9 @@ and @get_caps are likely needed as well. + Optional. + Called when the element changes to GST_STATE_NULL. + Allows closing external resources. @@ -9423,6 +9745,9 @@ and @get_caps are likely needed as well. + Optional. + Called when the element starts processing. + Allows opening external resources. @@ -9436,6 +9761,9 @@ and @get_caps are likely needed as well. + Optional. + Called when the element stops processing. + Allows closing external resources. @@ -9449,6 +9777,10 @@ and @get_caps are likely needed as well. + Optional. + Notifies subclass of incoming data format. + GstVideoCodecState fields have already been + set according to provided caps. @@ -9465,6 +9797,7 @@ and @get_caps are likely needed as well. + Provides input frame to subclass. @@ -9481,6 +9814,9 @@ and @get_caps are likely needed as well. + Optional. + Allows subclass (encoder) to perform post-seek semantics reset. + Deprecated. @@ -9497,6 +9833,9 @@ and @get_caps are likely needed as well. + Optional. + Called to request subclass to dispatch any pending remaining + data (e.g. at EOS). @@ -9510,6 +9849,10 @@ and @get_caps are likely needed as well. + Optional. + Allows subclass to push frame downstream in whatever + shape or form it deems appropriate. If not provided, + provided encoded frame data is simply pushed downstream. @@ -9526,6 +9869,11 @@ and @get_caps are likely needed as well. + Optional. + Allows for a custom sink getcaps implementation (e.g. + for multichannel input specification). If not implemented, + default returns gst_video_encoder_proxy_getcaps + applied to sink template caps. @@ -9542,6 +9890,12 @@ and @get_caps are likely needed as well. + Optional. + Event handler on the sink pad. This function should return + TRUE if the event was handled and should be discarded + (i.e. not unref'ed). + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -9558,6 +9912,12 @@ and @get_caps are likely needed as well. + Optional. + Event handler on the source pad. This function should return + TRUE if the event was handled and should be discarded + (i.e. not unref'ed). + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -9574,6 +9934,10 @@ and @get_caps are likely needed as well. + Optional. + Negotiate with downstream and configure buffer pools, etc. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -9589,6 +9953,12 @@ and @get_caps are likely needed as well. + Optional. + Setup the allocation parameters for allocating output + buffers. The passed in query contains the result of the + downstream allocation query. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -9605,6 +9975,10 @@ and @get_caps are likely needed as well. + Optional. + Propose buffer allocation parameters for upstream elements. + Subclasses should chain up to the parent implementation to + invoke the default handler. @@ -9621,6 +9995,9 @@ and @get_caps are likely needed as well. + Optional. + Flush all remaining data from the encoder without + pushing it downstream. Since: 1.2 @@ -9634,6 +10011,11 @@ and @get_caps are likely needed as well. + Optional. + Query handler on the sink pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.4 @@ -9650,6 +10032,11 @@ and @get_caps are likely needed as well. + Optional. + Query handler on the source pad. This function should + return TRUE if the query could be performed. Subclasses + should chain up to the parent implementation to invoke the + default handler. Since: 1.4 @@ -9666,6 +10053,11 @@ and @get_caps are likely needed as well. + Optional. Transform the metadata on the input buffer to the + output buffer. By default this method is copies all meta without + tags and meta with only the "video" tag. subclasses can + implement this method and return %TRUE if the metadata is to be + copied. Since: 1.6 @@ -9690,7 +10082,7 @@ and @get_caps are likely needed as well. - + @@ -9698,14 +10090,14 @@ and @get_caps are likely needed as well. interlace-mode=interleaved and not interlace-mode=mixed. In the case of mixed or GST_VIDEO_FIELD_ORDER_UNKOWN, the field order is signalled via buffer flags. - + unknown field order for interlaced content. The actual field order is signalled via buffer flags. - + top field is first - + bottom field is first @@ -9746,6 +10138,7 @@ The videofilter will by default enable QoS on the parent GstBaseTransform to implement frame dropping. + function to be called with the negotiated caps and video infos @@ -9769,6 +10162,7 @@ to implement frame dropping. + transform a video frame @@ -9786,6 +10180,7 @@ to implement frame dropping. + transform a video frame in place @@ -9825,6 +10220,7 @@ to implement frame dropping. + function to be called with the negotiated caps and video infos @@ -9850,6 +10246,7 @@ to implement frame dropping. + transform a video frame @@ -9869,6 +10266,7 @@ to implement frame dropping. + transform a video frame in place @@ -9892,14 +10290,14 @@ to implement frame dropping. Extra video flags - + no flags - + a variable fps is selected, fps_n and fps_d denote the maximum fps of the video - + Each color has been scaled by the alpha value. @@ -9909,438 +10307,441 @@ to implement frame dropping. See the [GStreamer raw video format design document](https://gstreamer.freedesktop.org/documentation/additional/design/mediatype-video-raw.html#formats) for details about the layout and packing of these formats in memory. - + Unknown or unset video format id - + Encoded video format. Only ever use that in caps for special video formats in combination with non-system memory GstCapsFeatures where it does not make sense to specify a real video format. - + planar 4:2:0 YUV - + planar 4:2:0 YVU (like I420 but UV planes swapped) - + packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...) - + packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) - + packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...) - + sparse rgb packed into 32 bit, space last - + sparse reverse rgb packed into 32 bit, space last - + sparse rgb packed into 32 bit, space first - + sparse reverse rgb packed into 32 bit, space first - + rgb with alpha channel last - + reverse rgb with alpha channel last - + rgb with alpha channel first - + reverse rgb with alpha channel first - + RGB packed into 24 bits without padding (`R-G-B-R-G-B`) - + reverse RGB packed into 24 bits without padding (`B-G-R-B-G-R`) - + planar 4:1:1 YUV - + planar 4:2:2 YUV - + packed 4:2:2 YUV (Y0-V0-Y1-U0 Y2-V2-Y3-U2 Y4 ...) - + planar 4:4:4 YUV - + packed 4:2:2 10-bit YUV, complex format - + packed 4:2:2 16-bit YUV, Y0-U0-Y1-V1 order - + planar 4:2:0 YUV with interleaved UV plane - + planar 4:2:0 YUV with interleaved VU plane - + 8-bit grayscale - + 16-bit grayscale, most significant byte first - + 16-bit grayscale, least significant byte first - + packed 4:4:4 YUV (Y-U-V ...) - + rgb 5-6-5 bits per component - + reverse rgb 5-6-5 bits per component - + rgb 5-5-5 bits per component - + reverse rgb 5-5-5 bits per component - + packed 10-bit 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) - + planar 4:4:2:0 AYUV - + 8-bit paletted RGB - + planar 4:1:0 YUV - + planar 4:1:0 YUV (like YUV9 but UV planes swapped) - + packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...) - + rgb with alpha channel first, 16 bits (native endianness) per channel - + packed 4:4:4 YUV with alpha channel, 16 bits (native endianness) per channel (A0-Y0-U0-V0 ...) - + packed 4:4:4 RGB, 10 bits per channel - + planar 4:2:0 YUV, 10 bits per channel - + planar 4:2:0 YUV, 10 bits per channel - + planar 4:2:2 YUV, 10 bits per channel - + planar 4:2:2 YUV, 10 bits per channel - + planar 4:4:4 YUV, 10 bits per channel (Since: 1.2) - + planar 4:4:4 YUV, 10 bits per channel (Since: 1.2) - + planar 4:4:4 RGB, 8 bits per channel (Since: 1.2) - + planar 4:4:4 RGB, 10 bits per channel (Since: 1.2) - + planar 4:4:4 RGB, 10 bits per channel (Since: 1.2) - + planar 4:2:2 YUV with interleaved UV plane (Since: 1.2) - + planar 4:4:4 YUV with interleaved UV plane (Since: 1.2) - + NV12 with 64x32 tiling in zigzag pattern (Since: 1.4) - + planar 4:4:2:0 YUV, 10 bits per channel (Since: 1.6) - + planar 4:4:2:0 YUV, 10 bits per channel (Since: 1.6) - + planar 4:4:2:2 YUV, 10 bits per channel (Since: 1.6) - + planar 4:4:2:2 YUV, 10 bits per channel (Since: 1.6) - + planar 4:4:4:4 YUV, 10 bits per channel (Since: 1.6) - + planar 4:4:4:4 YUV, 10 bits per channel (Since: 1.6) - + planar 4:2:2 YUV with interleaved VU plane (Since: 1.6) - + planar 4:2:0 YUV with interleaved UV plane, 10 bits per channel (Since: 1.10) - + planar 4:2:0 YUV with interleaved UV plane, 10 bits per channel (Since: 1.10) - + packed 4:4:4 YUV (U-Y-V ...) (Since: 1.10) - + packed 4:2:2 YUV (V0-Y0-U0-Y1 V2-Y2-U2-Y3 V4 ...) - + planar 4:4:4:4 ARGB, 8 bits per channel (Since: 1.12) - + planar 4:4:4:4 ARGB, 10 bits per channel (Since: 1.12) - + planar 4:4:4:4 ARGB, 10 bits per channel (Since: 1.12) - + planar 4:4:4 RGB, 12 bits per channel (Since: 1.12) - + planar 4:4:4 RGB, 12 bits per channel (Since: 1.12) - + planar 4:4:4:4 ARGB, 12 bits per channel (Since: 1.12) - + planar 4:4:4:4 ARGB, 12 bits per channel (Since: 1.12) - + planar 4:2:0 YUV, 12 bits per channel (Since: 1.12) - + planar 4:2:0 YUV, 12 bits per channel (Since: 1.12) - + planar 4:2:2 YUV, 12 bits per channel (Since: 1.12) - + planar 4:2:2 YUV, 12 bits per channel (Since: 1.12) - + planar 4:4:4 YUV, 12 bits per channel (Since: 1.12) - + planar 4:4:4 YUV, 12 bits per channel (Since: 1.12) - + 10-bit grayscale, packed into 32bit words (2 bits padding) (Since: 1.14) - + 10-bit variant of @GST_VIDEO_FORMAT_NV12, packed into 32bit words (MSB 2 bits padding) (Since: 1.14) - + 10-bit variant of @GST_VIDEO_FORMAT_NV16, packed into 32bit words (MSB 2 bits padding) (Since: 1.14) - + Fully packed variant of NV12_10LE32 (Since: 1.16) - + packed 4:2:2 YUV, 10 bits per channel (Since: 1.16) - + packed 4:4:4 YUV, 10 bits per channel(A-V-Y-U...) (Since: 1.16) - + packed 4:4:4 YUV with alpha channel (V0-U0-Y0-A0...) (Since: 1.16) - + packed 4:4:4 RGB with alpha channel(B-G-R-A), 10 bits for R/G/B channel and MSB 2 bits for alpha channel (Since: 1.16) - + packed 4:4:4 RGB with alpha channel(R-G-B-A), 10 bits for R/G/B channel and MSB 2 bits for alpha channel (Since: 1.18) - + planar 4:4:4 YUV, 16 bits per channel (Since: 1.18) - + planar 4:4:4 YUV, 16 bits per channel (Since: 1.18) - + planar 4:2:0 YUV with interleaved UV plane, 16 bits per channel (Since: 1.18) - + planar 4:2:0 YUV with interleaved UV plane, 16 bits per channel (Since: 1.18) - + planar 4:2:0 YUV with interleaved UV plane, 12 bits per channel (Since: 1.18) - + planar 4:2:0 YUV with interleaved UV plane, 12 bits per channel (Since: 1.18) - + packed 4:2:2 YUV, 12 bits per channel (Y-U-Y-V) (Since: 1.18) - + packed 4:2:2 YUV, 12 bits per channel (Y-U-Y-V) (Since: 1.18) - + packed 4:4:4:4 YUV, 12 bits per channel(U-Y-V-A...) (Since: 1.18) - + packed 4:4:4:4 YUV, 12 bits per channel(U-Y-V-A...) (Since: 1.18) - + NV12 with 4x4 tiles in linear order. - + NV12 with 32x32 tiles in linear order. - + Planar 4:4:4 RGB, R-G-B order - + Planar 4:4:4 RGB, B-G-R order - + Planar 4:2:0 YUV with interleaved UV plane with alpha as 3rd plane. - + RGB with alpha channel first, 16 bits (little endian) per channel. - + RGB with alpha channel first, 16 bits (big endian) per channel. - + RGB with alpha channel last, 16 bits (little endian) per channel. - + RGB with alpha channel last, 16 bits (big endian) per channel. - + Reverse RGB with alpha channel last, 16 bits (little endian) per channel. - + Reverse RGB with alpha channel last, 16 bits (big endian) per channel. - + Reverse RGB with alpha channel first, 16 bits (little endian) per channel. - + Reverse RGB with alpha channel first, 16 bits (big endian) per channel. - + NV12 with 16x32 Y tiles and 16x16 UV tiles. - + NV12 with 8x128 tiles in linear order. - + NV12 10bit big endian with 8x128 tiles in linear order. - + @GST_VIDEO_FORMAT_NV12_10LE40 with 4x4 pixels tiles (5 bytes per tile row). This format is produced by Verisilicon/Hantro decoders. - + @GST_VIDEO_FORMAT_DMA_DRM represent the DMA DRM special format. It's only used with memory:DMABuf #GstCapsFeatures, where an extra parameter (drm-format) is required to define the image format and its memory layout. - + Mediatek 10bit NV12 little endian with 16x32 tiles in linear order, tile 2 bits. - + Mediatek 10bit NV12 little endian with 16x32 tiles in linear order, raster 2 bits. - + planar 4:4:2:2 YUV, 8 bits per channel - + planar 4:4:4:4 YUV, 8 bits per channel - + planar 4:4:4:4 YUV, 12 bits per channel - + planar 4:4:4:4 YUV, 12 bits per channel - + planar 4:4:2:2 YUV, 12 bits per channel - + planar 4:4:2:2 YUV, 12 bits per channel - + planar 4:4:2:0 YUV, 12 bits per channel - + planar 4:4:2:0 YUV, 12 bits per channel - + planar 4:4:4:4 YUV, 16 bits per channel - + planar 4:4:4:4 YUV, 16 bits per channel - + planar 4:4:2:2 YUV, 16 bits per channel - + planar 4:4:2:2 YUV, 16 bits per channel - + planar 4:4:2:0 YUV, 16 bits per channel - + planar 4:4:2:0 YUV, 16 bits per channel - + planar 4:4:4 RGB, 16 bits per channel - + planar 4:4:4 RGB, 16 bits per channel - + packed RGB with alpha, 8 bits per channel - + packed 4:2:2 YUV, 16 bits per channel (Y-U-Y-V) - + packed 4:2:2 YUV, 16 bits per channel (Y-U-Y-V) - + packed 4:4:4:4 YUV, 16 bits per channel(U-Y-V-A) - + packed 4:4:4:4 YUV, 16 bits per channel(U-Y-V-A) + + 10-bit grayscale, packed into 16bit words (6 bits left padding) + Converts a FOURCC value into the corresponding #GstVideoFormat. If the FOURCC cannot be represented by #GstVideoFormat, @@ -10482,43 +10883,43 @@ versions were printing a critical warning and returned %NULL. The different video flags that a format info can have. - + The video format is YUV, components are numbered 0=Y, 1=U, 2=V. - + The video format is RGB, components are numbered 0=R, 1=G, 2=B. - + The video is gray, there is one gray component with index 0. - + The video format has an alpha components with the number 3. - + The video format has data stored in little endianness. - + The video format has a palette. The palette is stored in the second plane and indexes are stored in the first plane. - + The video format has a complex layout that can't be described with the usual information in the #GstVideoFormatInfo. - + This format can be used in a #GstVideoFormatUnpack and #GstVideoFormatPack function. - + The format is tiled, there is tiling information in the last plane. - + The tile size varies per plane according to the subsampling. @@ -11011,40 +11412,40 @@ All video planes of @buffer will be mapped and the pointers will be set in Extra video frame flags - + no flags - + The video frame is interlaced. In mixed interlace-mode, this flag specifies if the frame is interlaced or progressive. - + The video frame has the top field first - + The video frame has the repeat flag - + The video frame has one field - + The video contains one or more non-mono views - + The video frame is the first in a set of corresponding views provided as sequential frames. - + The video frame has the top field only. This is the same as GST_VIDEO_FRAME_FLAG_TFF | GST_VIDEO_FRAME_FLAG_ONEFIELD (Since: 1.16). - + The video frame has one field - + The video frame has the bottom field only. This is the same as GST_VIDEO_FRAME_FLAG_ONEFIELD (GST_VIDEO_FRAME_FLAG_TFF flag unset) (Since: 1.16). @@ -11052,52 +11453,52 @@ All video planes of @buffer will be mapped and the pointers will be set in Additional mapping flags for gst_video_frame_map(). - + Don't take another reference of the buffer and store it in the GstVideoFrame. This makes sure that the buffer stays writable while the frame is mapped, but requires that the buffer reference stays valid until the frame is unmapped again. - + Offset to define more flags The orientation of the GL texture. - + Top line first in memory, left row first - + Bottom line first in memory, left row first - + Top line first in memory, right row first - + Bottom line first in memory, right row first The GL texture type. - + Luminance texture, GL_LUMINANCE - + Luminance-alpha texture, GL_LUMINANCE_ALPHA - + RGB 565 texture, GL_RGB - + RGB texture, GL_RGB - + RGBA texture, GL_RGBA - + R texture, GL_RED_EXT - + RG texture, GL_RG_EXT @@ -11180,10 +11581,10 @@ to upload something to an OpenGL texture. - + disable gamma handling - + convert between input and output gamma Different gamma conversion modes @@ -11708,18 +12109,18 @@ valid The possible values of the #GstVideoInterlaceMode describing the interlace mode of the stream. - + all frames are progressive - + 2 fields are interleaved in one video frame. Extra buffer flags describe the field order. - + frames contains both interlaced and progressive video, the buffer flags describe the frame and fields. - + 2 fields are stored in one buffer, use the frame ID to get access to the required field. For multiview (the 'views' property > 1) the fields of view N can be found at frame ID @@ -11728,7 +12129,7 @@ mode of the stream. height property. This mode requires multiple GstVideoMeta metadata to describe the fields. - + 1 field is stored in one buffer, @GST_VIDEO_BUFFER_FLAG_TF or @GST_VIDEO_BUFFER_FLAG_BF indicates if the buffer is carrying the top or bottom field, respectively. The top and @@ -11913,18 +12314,18 @@ mode of the stream. Different color matrix conversion modes - + do conversion between color matrices - + use the input color matrix to convert to and from R'G'B - + use the output color matrix to convert to and from R'G'B - + disable color matrix conversion. @@ -11943,8 +12344,12 @@ fields: - padding-bottom (uint): extra pixels on the bottom - padding-left (uint): extra pixels on the left side - padding-right (uint): extra pixels on the right side -The padding fields have the same semantic as #GstVideoMeta.alignment -and so represent the paddings requested on produced video buffers. +- stride-align0 (uint): stride align requirements for plane 0 +- stride-align1 (uint): stride align requirements for plane 1 +- stride-align2 (uint): stride align requirements for plane 2 +- stride-align3 (uint): stride align requirements for plane 3 +The padding and stride-align fields have the same semantic as #GstVideoMeta.alignment +and so represent the paddings and stride-align requested on produced video buffers. Since 1.24 it can be serialized using gst_meta_serialize() and gst_meta_deserialize(). @@ -11996,6 +12401,7 @@ gst_meta_deserialize(). + map the memory of a plane @@ -12024,6 +12430,7 @@ gst_meta_deserialize(). + unmap the memory of a plane @@ -12205,30 +12612,30 @@ defined in @meta and will fail to update if they are not. GstVideoMultiviewFlags are used to indicate extra properties of a stereo/multiview stream beyond the frame layout and buffer mapping that is conveyed in the #GstVideoMultiviewMode. - + No flags - + For stereo streams, the normal arrangement of left and right views is reversed. - + The left view is vertically mirrored. - + The left view is horizontally mirrored. - + The right view is vertically mirrored. - + The right view is horizontally mirrored. - + For frame-packed multiview modes, indicates that the individual views have been encoded with half the true width or height @@ -12239,7 +12646,7 @@ that is conveyed in the #GstVideoMultiviewMode. pixel width will be doubled. For row interleaved and top-bottom encodings, pixel height will be doubled. - + The video stream contains both mono and multiview portions, signalled on each buffer by the absence or presence of the @GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW @@ -12259,42 +12666,42 @@ any markers. This enum is used (for example) on playbin, to re-interpret a played video stream as a stereoscopic video. The individual enum values are equivalent to and have the same value as the matching #GstVideoMultiviewMode. - + A special value indicating no frame packing info. - + All frames are monoscopic. - + All frames represent a left-eye view. - + All frames represent a right-eye view. - + Left and right eye views are provided in the left and right half of the frame respectively. - + Left and right eye views are provided in the left and right half of the frame, but have been sampled using quincunx method, with half-pixel offset between the 2 views. - + Alternating vertical columns of pixels represent the left and right eye view respectively. - + Alternating horizontal rows of pixels represent the left and right eye view respectively. - + The top half of the frame contains the left eye, and the bottom half the right eye. - + Pixels are arranged with alternating pixels representing left and right eye views in a checkerboard fashion. @@ -12304,60 +12711,60 @@ checkerboard fashion. All possible stereoscopic 3D and multiview representations. In conjunction with #GstVideoMultiviewFlags, describes how multiview content is being transported in the stream. - + A special value indicating no multiview information. Used in GstVideoInfo and other places to indicate that no specific multiview handling has been requested or provided. This value is never carried on caps. - + All frames are monoscopic. - + All frames represent a left-eye view. - + All frames represent a right-eye view. - + Left and right eye views are provided in the left and right half of the frame respectively. - + Left and right eye views are provided in the left and right half of the frame, but have been sampled using quincunx method, with half-pixel offset between the 2 views. - + Alternating vertical columns of pixels represent the left and right eye view respectively. - + Alternating horizontal rows of pixels represent the left and right eye view respectively. - + The top half of the frame contains the left eye, and the bottom half the right eye. - + Pixels are arranged with alternating pixels representing left and right eye views in a checkerboard fashion. - + Left and right eye views are provided in separate frames alternately. - + Multiple independent views are provided in separate frames in sequence. This method only applies to raw video buffers at the moment. Specific view identification is via the `GstVideoMultiviewMeta` and #GstVideoMeta(s) on raw video buffers. - + Multiple views are provided as separate #GstMemory framebuffers attached to each #GstBuffer, described by the `GstVideoMultiviewMeta` @@ -12716,6 +13123,7 @@ operation of video-sources or operators. + virtual method to get horizontal flipping state @@ -12735,6 +13143,7 @@ operation of video-sources or operators. + virtual method to get vertical flipping state @@ -12754,6 +13163,7 @@ operation of video-sources or operators. + virtual method to get horizontal centering state @@ -12773,6 +13183,7 @@ operation of video-sources or operators. + virtual method to get vertical centering state @@ -12792,6 +13203,7 @@ operation of video-sources or operators. + virtual method to set horizontal flipping state @@ -12811,6 +13223,7 @@ operation of video-sources or operators. + virtual method to set vertical flipping state @@ -12830,6 +13243,7 @@ operation of video-sources or operators. + virtual method to set horizontal centering state @@ -12849,6 +13263,7 @@ operation of video-sources or operators. + virtual method to set vertical centering state @@ -12870,34 +13285,34 @@ operation of video-sources or operators. The different video orientation methods. - + Identity (no rotation) - + Rotate clockwise 90 degrees - + Rotate 180 degrees - + Rotate counter-clockwise 90 degrees - + Flip horizontally - + Flip vertically - + Rotate counter-clockwise 90 degrees and flip vertically - + Rotate clockwise 90 degrees and flip vertically - + Select flip method based on image-orientation tag - + Current status depends on plugin internal setup @@ -13246,6 +13661,7 @@ from the #GstVideoOverlay. + virtual method to set the render rectangle @@ -13420,7 +13836,7 @@ tell the overlay to stop using that window and create an internal one. - + Functions to create and handle overlay compositions on video buffers. An overlay composition describes one or more overlay rectangles to be @@ -13616,13 +14032,13 @@ contained in the rectangles are not copied. Overlay format flags. - + no flags - + RGB are premultiplied by A/255. - + a global-alpha value != 1 is set. @@ -13634,6 +14050,7 @@ contained in the rectangles are not copied. + virtual method to handle expose events @@ -13648,6 +14065,7 @@ contained in the rectangles are not copied. + virtual method to handle events @@ -13666,6 +14084,7 @@ contained in the rectangles are not copied. + virtual method to set the render rectangle @@ -13691,6 +14110,7 @@ contained in the rectangles are not copied. + virtual method to configure the window handle @@ -13709,7 +14129,7 @@ contained in the rectangles are not copied. - + An opaque video overlay rectangle object. A rectangle contains a single overlay rectangle which can be added to a composition. @@ -14089,17 +14509,17 @@ gst_video_overlay_composition_copy(). The different flags that can be used when packing and unpacking. - + No flag - + When the source has a smaller depth than the target format, set the least significant bits of the target to 0. This is likely slightly faster but less accurate. When this flag is not specified, the most significant bits of the source are duplicated in the least significant bits of the destination. - + The source is interlaced. The unpacked format will be interlaced as well with each line containing information from alternating fields. (Since: 1.2) @@ -14107,14 +14527,14 @@ gst_video_overlay_composition_copy(). Different primaries conversion modes - + disable conversion between primaries - + do conversion between primaries only when it can be merged with color matrix conversion. - + fast conversion between primaries @@ -14325,10 +14745,10 @@ required to perform various kinds of resampling filtering. Different resampler flags. - + no flags - + when no taps are given, half the number of calculated taps. This can be used when making scalers for the different fields of an interlaced picture. Since: 1.10 @@ -14336,21 +14756,21 @@ required to perform various kinds of resampling filtering. Different subsampling and upsampling methods - + Duplicates the samples when upsampling and drops when downsampling - + Uses linear interpolation to reconstruct missing samples and averaging to downsample - + Uses cubic interpolation - + Uses sinc interpolation - + Uses lanczos interpolation @@ -14383,7 +14803,7 @@ required to perform various kinds of resampling filtering. - + #GstVideoScaler is a utility object for rescaling and resampling video frames using various interpolation / sampling methods. @@ -14641,10 +15061,10 @@ on the @method and @in_size/@out_size. Different scale flags. - + no flags - + Set up a scaler for interlaced content @@ -14701,6 +15121,10 @@ observing out-of-sync frames. + render a video frame. Maps to #GstBaseSinkClass.render() and + #GstBaseSinkClass.preroll() vfuncs. Rendering during preroll will be + suppressed if the #GstVideoSink:show-preroll-frame property is set to + %FALSE. @@ -14714,7 +15138,7 @@ observing out-of-sync frames. - + Whether to show video frames during preroll. If set to %FALSE, video frames will only be rendered in PLAYING state. @@ -14748,6 +15172,10 @@ frames will only be rendered in PLAYING state. + render a video frame. Maps to #GstBaseSinkClass.render() and + #GstBaseSinkClass.preroll() vfuncs. Rendering during preroll will be + suppressed if the #GstVideoSink:show-preroll-frame property is set to + %FALSE. @@ -14790,7 +15218,7 @@ frames will only be rendered in PLAYING state. - + @@ -14825,22 +15253,22 @@ when older APIs are being used to expose this format. Enum value describing the available tiling modes. - + Unknown or unset tile mode - + Every four adjacent blocks - two horizontally and two vertically are grouped together and are located in memory in Z or flipped Z order. In case of odd rows, the last row of blocks is arranged in linear order. - + Tiles are in row order. Enum value describing the most common tiling types. - + Tiles are indexed. Use gst_video_tile_get_index () to retrieve the tile at the requested coordinates. @@ -15367,13 +15795,13 @@ The configuration of the time code. Flags related to the time code information. For drop frame, only 30000/1001 and 60000/1001 frame rates are supported. - + No flags - + Whether we have drop frame rate - + Whether we have interlaced video @@ -15530,70 +15958,70 @@ automatically incremented/interpolated. The video transfer function defines the formula for converting between non-linear RGB (R'G'B') and linear RGB - + unknown transfer function - + linear RGB, gamma 1.0 curve - + Gamma 1.8 curve - + Gamma 2.0 curve - + Gamma 2.2 curve - + Gamma 2.2 curve with a linear segment in the lower range, also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM / ITU-R BT1361 - + Gamma 2.2 curve with a linear segment in the lower range - + Gamma 2.4 curve with a linear segment in the lower range. IEC 61966-2-1 (sRGB or sYCC) - + Gamma 2.8 curve, also ITU-R BT470BG - + Logarithmic transfer characteristic 100:1 range - + Logarithmic transfer characteristic 316.22777:1 range (100 * sqrt(10) : 1) - + Gamma 2.2 curve with a linear segment in the lower range. Used for BT.2020 with 12 bits per component. Since: 1.6 - + Gamma 2.19921875. Since: 1.8 - + Rec. ITU-R BT.2020-2 with 10 bits per component. (functionally the same as the values GST_VIDEO_TRANSFER_BT709 and GST_VIDEO_TRANSFER_BT601). Since: 1.18 - + SMPTE ST 2084 for 10, 12, 14, and 16-bit systems. Known as perceptual quantization (PQ) Since: 1.18 - + Association of Radio Industries and Businesses (ARIB) STD-B67 and Rec. ITU-R BT.2100-1 hybrid loggamma (HLG) system Since: 1.18 - + also known as SMPTE170M / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC @@ -15719,7 +16147,7 @@ and "ITU-T H.273 Table 3". - + An encoder for writing ancillary data to the Vertical Blanking Interval lines of component signals. @@ -15823,7 +16251,7 @@ the parity check bits). - + A parser for detecting and extracting @GstVideoAncillary data from Vertical Blanking Interval lines of component signals. @@ -15913,13 +16341,13 @@ data. Return values for #GstVideoVBIParser - + No line were provided, or no more Ancillary data was found. - + A #GstVideoAncillary was found. - + An error occurred @@ -16318,7 +16746,7 @@ parameters. User Data Unregistered UUID - + SEI User Data Unregistered buffer @@ -16597,7 +17025,7 @@ in @align a #GstStructure - + a #GstVideoAlignment @@ -18326,6 +18754,46 @@ performance is achieved when @quantizer is a power of 2. + + Converting the video format into dma drm fourcc/modifier pair. +If no matching fourcc found, then DRM_FORMAT_INVALID is returned +and @modifier will be set to DRM_FORMAT_MOD_INVALID. + + + the DRM_FORMAT_* corresponding to @format. + + + + + a #GstVideoFormat + + + + return location for the modifier + + + + + + Converting a dma drm fourcc and modifier pair into a #GstVideoFormat. If +no matching video format is found, then GST_VIDEO_FORMAT_UNKNOWN is returned. + + + the GST_VIDEO_FORMAT_* corresponding to the @fourcc and @modifier + pair. + + + + + the dma drm fourcc value. + + + + the dma drm modifier. + + + + Converting the video format into dma drm fourcc. If no matching fourcc found, then DRM_FORMAT_INVALID is returned. diff --git a/girs/GstVulkan-1.0.gir b/girs/GstVulkan-1.0.gir index b41a17fdbdd..d1f3e27e0b6 100644 --- a/girs/GstVulkan-1.0.gir +++ b/girs/GstVulkan-1.0.gir @@ -864,7 +864,7 @@ and/or use gtk-doc annotations. --> - + @@ -919,14 +919,14 @@ and/or use gtk-doc annotations. --> - + no barrier type - + - + - + @@ -1013,7 +1013,7 @@ and/or use gtk-doc annotations. --> the VkBufferCreateInfo structure - + memory properties flags for the backing memory @@ -1149,7 +1149,7 @@ multiple times. This must be called before any other #GstVulkanBufferMemory ope - + @@ -1206,7 +1206,7 @@ multiple times. This must be called before any other #GstVulkanBufferMemory ope - + Decreases the refcount of the buffer. If the refcount reaches 0, the buffer will be freed. @@ -1219,7 +1219,7 @@ will be freed. - + @@ -1311,7 +1311,7 @@ need to use this function. - + @@ -1379,7 +1379,7 @@ need to use this function. - + @@ -1485,7 +1485,7 @@ need to use this function. - + @@ -1560,7 +1560,7 @@ need to use this function. - + Decreases the refcount of the buffer. If the refcount reaches 0, the buffer will be freed. @@ -1573,7 +1573,7 @@ will be freed. - + @@ -1732,17 +1732,18 @@ only have an effect before the call to gst_vulkan_device_open(). a #GstVulkanDevice - - a #GstVulkanDeviceForEachQueueFunc to run for each #GstVulkanQueue + + a #GstVulkanDeviceForEachQueueFunc + to run for each #GstVulkanQueue - + user data to pass to each call of @func - + the #GstVulkanInstance used to create this @device @@ -1755,7 +1756,7 @@ only have an effect before the call to gst_vulkan_device_open(). - + The VkPhysicalDevice used to create @device @@ -1874,9 +1875,9 @@ only have an effect before the call to gst_vulkan_device_open(). Select a compatible queue from the @device supporting the @expected_flags. - - a #GstVulkanQueue for @queue matching the - @expected_flags + + a #GstVulkanQueue for @queue matching + the @expected_flags @@ -1890,10 +1891,10 @@ only have an effect before the call to gst_vulkan_device_open(). - + - + @@ -1947,7 +1948,7 @@ only have an effect before the call to gst_vulkan_device_open(). - + @@ -2047,6 +2048,7 @@ surrounding elements of @element. + create a window a new #GstVulkanWindow for @display or @@ -2061,6 +2063,7 @@ surrounding elements of @element. + get the native handle to the display the winsys specific handle of @display @@ -2106,7 +2109,7 @@ second argument is @data. some data to pass to @compare_func - + a comparison function to run @@ -2191,6 +2194,7 @@ second argument is @data. + get the native handle to the display @@ -2206,6 +2210,7 @@ second argument is @data. + create a window @@ -2227,31 +2232,31 @@ second argument is @data. - + - + no display - + XCB display - + wayland display - + cocoa display for macOS - + ios display - + win32 display - + - + any display type @@ -2286,7 +2291,7 @@ second argument is @data. - + undetermined error @@ -2431,19 +2436,19 @@ the error - + is a YUV format - + is a RGB format - + has an alpha channel - + data is stored in little-endiate byte order - + data is stored complex and cannot be read/write only using the information in the #GstVulkanFormatInfo @@ -2531,26 +2536,43 @@ the error + + + + the GStreamer video format + + + + the Vulkan format with a single memory + + + + Vulkan formats for multiple memories + + + + + - + [0, 2^n - 1] -> [0.0, 1.0] - + [-2^(n-1), 2^(n-1) - 1] -> [-1.0, 1.0] - + [0, 2^n - 1] -> [0.0, float(2^n - 1)] - + [-2^(n-1), 2^(n-1) - 1] -> [float(-2^(n-1)), float(2^(n-1) - 1)] - + [0, 2^n - 1] -> [0, 2^n - 1] - + [-2^(n-1), 2^(n-1) - 1] -> [-2^(n-1), 2^(n-1) - 1] - + @GST_VULKAN_FORMAT_SCALING_UNORM but the first three components are gamma corrected for the sRGB colour space. @@ -2664,6 +2686,7 @@ gst_vulkan_full_screen_quad_set_blend_factors(). + a #GstVulkanFullScreenQuad @@ -2975,7 +2998,7 @@ See also: gst_vulkan_full_screen_quad_set_blend_factors(). - + @@ -3171,7 +3194,7 @@ more specific implementations (#GstVulkanCommandBuffer, #GstVulkanCommandPool).< - + Decreases the refcount of the buffer. If the refcount reaches 0, the buffer will be freed. @@ -3184,7 +3207,7 @@ will be freed. - + @@ -3210,7 +3233,7 @@ will be freed. - a #GstVulkanInstance + a #GstVulkanDevice @@ -3268,6 +3291,7 @@ inside @handle. + acquire a handle for usage @@ -3279,6 +3303,7 @@ inside @handle. + allocate a new handle @@ -3290,6 +3315,7 @@ inside @handle. + free a handle @@ -3304,6 +3330,7 @@ inside @handle. + release a handle for possible reuse at the next call to @acquire @@ -3386,6 +3413,7 @@ inside @handle. + allocate a new handle @@ -3399,6 +3427,7 @@ inside @handle. + acquire a handle for usage @@ -3412,6 +3441,7 @@ inside @handle. + release a handle for possible reuse at the next call to @acquire @@ -3428,6 +3458,7 @@ inside @handle. + free a handle @@ -3450,34 +3481,34 @@ inside @handle. - + descripter set layout - + pipeline layout - + pipeline - + render pass - + sampler - + framebuffer - + shader - + video session - + video session parameters - + sampler with YCBCR conversion @@ -3496,8 +3527,42 @@ inside @handle. + + Gets the configuration of the Vulkan image buffer pool. + + + + + + + the #GstStructure with the pool's configuration. + + + + The Vulkan image usage flags. + + + + Vulkan memory property flags. + + + + Initial Vulkan image layout. + + + + Initial Vulkan access flags. + + + + - Sets the @usage and @mem_properties of the images to setup. + Sets the @usage and @mem_properties, @initial_layout and @initial_access of +the images to setup. + +If @initial_access is VK_IMAGE_LAYOUT_UNDEFINED or +VK_IMAGE_LAYOUT_PREINITIALIZED, the image crated by this pool has not been +initialized to a particular layout @@ -3589,7 +3654,7 @@ src or DPB images. - + @@ -3976,7 +4041,7 @@ criteria. - + Decreases the refcount of the trash object. If the refcount reaches 0, the trash will be freed. @@ -3989,7 +4054,7 @@ trash will be freed. - + @@ -4085,6 +4150,23 @@ If a specific version is requested, the @patch level is ignored. + + + + a new #GstVulkanDevice + + + + + a #GstVulkanInstance + + + + the device index to create the new #GstVulkanDevice from + + + + Disable an Vulkan extension by @name. Disabling an extension will only have an effect before the call to gst_vulkan_instance_open(). @@ -4313,10 +4395,10 @@ version with this function. - + - + @@ -4339,13 +4421,19 @@ version with this function. - + Overrides the #GstVulkanDevice creation mechanism. It can be called from any thread. the newly created #GstVulkanDevice. + + + the index of the device + + + @@ -4360,7 +4448,7 @@ It can be called from any thread. - + @@ -4454,7 +4542,7 @@ It can be called from any thread. memory requirements to look for - + memory properties to search for @@ -4577,8 +4665,8 @@ hold the same semaphores but increasing their current value. gst_vulkan_operation_new_extra_image_barriers() and gst_vulkan_operation_update_frame() -Any non-repeated image barrier in @extra is appended to the internal barrier -list. +Any non-repeated image barrier in @extra_barriers is appended to the internal +barrier list. Remember to call gst_vulkan_operation_update_frame() on those frames with images in @extra_barriers. @@ -4592,7 +4680,9 @@ images in @extra_barriers. - a #GArray of extra image memory barriers to handle + a #GArray of extra image memory barriers to handle, either +VkImageMemoryBarrier or VkImageMemoryBarrier2KHR, depending whether +synchronization2 extension is used. @@ -4619,6 +4709,11 @@ gst_vulkan_operation_update_frame(). a Vulkan Image #GstBuffer + + source pipeline stage (VkPipelineStageFlags or + VkPipelineStageFlags2) + + destination pipeline stage (VkPipelineStageFlags or VkPipelineStageFlags2) @@ -4660,8 +4755,10 @@ called internally if something failed. - - Begins a query operation in the current command buffer. + + Begins a query operation with @id in the current command buffer. If video maintenance1 extension +is available the query will be recorded as a video inline query. If NULL is passed to @base, +the query will be recorded as a normal query anyway. whether the begin command was set @@ -4672,7 +4769,12 @@ called internally if something failed. a #GstVulkanOperation + + a VkBaseInStructure base + + + query id @@ -4740,7 +4842,8 @@ gst_vulkan_operation_reset() is called internally if something fails - Ends a query operation in the current command buffer. + Ends a query operation with @id in the current command buffer. A query with +@id has had started with gst_vulkan_operation_begin_query() whether the end command was set @@ -4752,6 +4855,7 @@ gst_vulkan_operation_reset() is called internally if something fails + query id @@ -4791,7 +4895,7 @@ Remember to call gst_vulkan_operation_update_frame() after adding the barrier related with that frame. - A new allocated array of barriers, either + A new allocated #GArray of barriers, either VkImageMemoryBarrier or VkImageMemoryBarrier2KHR, depending whether synchronization2 extension is used. @@ -4845,7 +4949,9 @@ The element type of the array might be, depending on if synchronization2 extension is used, either VkImageMemoryBarrier or VkImageMemoryBarrier2KHR. - Current barriers array. Call g_array_unref() after + Current barriers #GArray, either + VkImageMemoryBarrier or VkImageMemoryBarrier2KHR, depending whether + synchronization2 extension is used. Call g_array_unref() after the operation is using. @@ -4952,7 +5058,7 @@ gst_vulkan_operation_add_frame_barrier(). - + @@ -5024,7 +5130,7 @@ called. - + The #GstVulkanInstance associated with this physical device @@ -5070,13 +5176,13 @@ called. - + - + - + @@ -5137,7 +5243,7 @@ called. - + @@ -5296,12 +5402,12 @@ See gst_vulkan_queue_submit_lock() for details on when this call is needed.video operation supported by queue family - - if queue family supports queries + + query status result support - + @@ -5402,10 +5508,10 @@ See gst_vulkan_queue_submit_lock() for details on when this call is needed. - + - + @@ -5446,7 +5552,7 @@ See gst_vulkan_queue_submit_lock() for details on when this call is needed. - + @@ -5484,11 +5590,11 @@ to call when @fence is signalled. a #GstVulkanFence - + a #GstVulkanTrashNotify - + user data for @notify @@ -5526,7 +5632,7 @@ to call when @fence is signalled. - + Decreases the refcount of the trash object. If the refcount reaches 0, the trash will be freed. @@ -5539,7 +5645,7 @@ trash will be freed. - + A #GstVulkanTrashNotify implementation for unreffing a #GstMiniObject when the associated #GstVulkanFence is signalled @@ -5597,6 +5703,7 @@ associated #GstVulkanFence is signalled + the #GstVulkanTrashListAdd functions whether @trash could be added to @trash_list @@ -5614,6 +5721,7 @@ associated #GstVulkanFence is signalled + the #GstVulkanTrashListGC function @@ -5626,6 +5734,7 @@ associated #GstVulkanFence is signalled + the #GstVulkanTrashListWait function whether all objects were signalled and freed within the @timeout @@ -5818,6 +5927,42 @@ signalled and freed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5920,19 +6065,50 @@ signalled and freed. The type of video operation. - + decode operation - + encode operation - + unknown - + + the generic vulkan video profile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6037,6 +6213,7 @@ provided api. + retrieve whether this window supports presentation whether the given combination of @window, @device and @@ -6059,6 +6236,7 @@ provided api. + retrieve the vulkan surface for this window the VkSurface for displaying into. The caller is responsible for @@ -6073,6 +6251,7 @@ provided api. + retrieve the current size of the window @@ -6114,6 +6293,7 @@ from the @window. + open the connection to the display whether @window could be successfully opened @@ -6127,6 +6307,7 @@ from the @window. + set the external window handle to render into @@ -6153,7 +6334,7 @@ from the @window. - + the #GstVulkanDisplay for @window @@ -6346,7 +6527,7 @@ Currently intended for subclasses to update internal state. - + @@ -6431,6 +6612,7 @@ Currently intended for subclasses to update internal state. + open the connection to the display @@ -6446,6 +6628,7 @@ Currently intended for subclasses to update internal state. + close the connection to the display @@ -6460,6 +6643,7 @@ Currently intended for subclasses to update internal state. + retrieve the vulkan surface for this window @@ -6476,6 +6660,7 @@ Currently intended for subclasses to update internal state. + retrieve whether this window supports presentation @@ -6500,6 +6685,7 @@ Currently intended for subclasses to update internal state. + set the external window handle to render into @@ -6516,6 +6702,7 @@ Currently intended for subclasses to update internal state. + retrieve the current size of the window @@ -6562,13 +6749,13 @@ Currently intended for subclasses to update internal state. - + failed - + old libraries - + resource unavailable @@ -6577,7 +6764,7 @@ Currently intended for subclasses to update internal state. - + @@ -6591,7 +6778,7 @@ Currently intended for subclasses to update internal state. a #GstContext - + resulting #GstVulkanDevice @@ -6608,7 +6795,7 @@ Currently intended for subclasses to update internal state. a #GstContext - + resulting #GstVulkanDisplay @@ -6625,7 +6812,7 @@ Currently intended for subclasses to update internal state. a #GstContext - + resulting #GstVulkanInstance @@ -6642,7 +6829,7 @@ Currently intended for subclasses to update internal state. a #GstContext - + resulting #GstVulkanQueue @@ -6659,7 +6846,7 @@ Currently intended for subclasses to update internal state. a #GstContext - + a #GstVulkanDevice @@ -6676,7 +6863,7 @@ Currently intended for subclasses to update internal state. a #GstContext - + a #GstVulkanDisplay @@ -6693,7 +6880,7 @@ Currently intended for subclasses to update internal state. a #GstContext - + a #GstVulkanInstance @@ -6710,7 +6897,7 @@ Currently intended for subclasses to update internal state. a #GstContext - + a #GstVulkanQueue @@ -6878,7 +7065,7 @@ either be a user visible window (onscreen) or hidden (offscreen). the VkBufferCreateInfo structure - + memory properties flags for the backing memory @@ -7010,6 +7197,37 @@ retrieval is performed. + + Perform the steps necessary for retrieving a #GstVulkanDevice from +the surrounding elements or create a new device according to the device_id. + +If the contents of @device_ptr is not %NULL, then no +#GstContext query is necessary and no #GstVulkanDevice +retrieval is performed. + + + whether a #GstVulkanDevice exists in @device_ptr + + + + + a #GstElement + + + + the #GstVulkanInstance + + + + the resulting #GstVulkanDevice + + + + The device number to use, 0 is default. + + + + @@ -7140,6 +7358,19 @@ properties. + + + + the #GstVulkanFormatMap matching with @format + + + + + the #GstVideoFormat to get + + + + @@ -7182,7 +7413,7 @@ properties. a VkImageViewCreateInfo - + @@ -7229,7 +7460,7 @@ posting a message for the application to respond. - a #GstVulkanInstance + a #GstVulkanDevice @@ -7436,7 +7667,7 @@ other elements in the pipeline memory requirements to look for - + memory properties to search for diff --git a/girs/GstWebRTC-1.0.gir b/girs/GstWebRTC-1.0.gir index 912c01a386f..76a9410d9a9 100644 --- a/girs/GstWebRTC-1.0.gir +++ b/girs/GstWebRTC-1.0.gir @@ -333,71 +333,71 @@ and/or use gtk-doc annotations. --> See https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-24#section-4.1.1 for more information. - + none - + balanced - + max-compat - + max-bundle - + none - + actpass - + sendonly - + recvonly - + - + - + - + - + - + - + new - + closed - + failed - + connecting - + connected @@ -486,37 +486,37 @@ for more information. - + - + - + - + - + - + - + - + - + - + @@ -596,57 +596,57 @@ for more information. - + See <http://w3c.github.io/webrtc-pc/#dom-rtcdatachannelstate> - + connecting - + open - + closing - + closed See <https://www.w3.org/TR/webrtc/#dom-rtcerrordetailtype> for more information. - + data-channel-failure - + dtls-failure - + fingerprint-failure - + sctp-failure - + sdp-syntax-error - + hardware-encoder-not-available - + encoder-error - + invalid-state (part of WebIDL specification) - + GStreamer-specific failure, not matching any other value from the specification - + invalid-modification (part of WebIDL specification) - + type-error (maps to JavaScript TypeError) @@ -656,10 +656,10 @@ for more information. - + none - + ulpfec + red @@ -1436,12 +1436,12 @@ Get HTTP Proxy to be used when connecting to TURN server. - + Maximum port for local rtp port range. min-rtp-port must be <= max-rtp-port - + Minimum port for local rtp port range. min-rtp-port must be <= max-rtp-port @@ -1973,46 +1973,46 @@ Get HTTP Proxy to be used when connecting to TURN server. - + RTP component - + RTCP component See <http://w3c.github.io/webrtc-pc/#dom-rtciceconnectionstate> - + new - + checking - + connected - + completed - + failed - + disconnected - + closed See <http://w3c.github.io/webrtc-pc/#dom-rtcicegatheringstate> - + new - + gathering - + complete @@ -2042,10 +2042,10 @@ Get HTTP Proxy to be used when connecting to TURN server. - + controlled - + controlling @@ -2111,7 +2111,7 @@ Get HTTP Proxy to be used when connecting to TURN server. - + @@ -2233,13 +2233,13 @@ Get HTTP Proxy to be used when connecting to TURN server. - + - + - + @@ -2311,58 +2311,58 @@ Get HTTP Proxy to be used when connecting to TURN server. See https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-24#section-4.1.1 for more information. - + all - + relay https://w3c.github.io/mediacapture-main/#dom-mediastreamtrack-kind - + Kind has not yet been set - + Kind is audio - - Kind is audio + + Kind is video See <http://w3c.github.io/webrtc-pc/#dom-rtcpeerconnectionstate> - + new - + connecting - + connected - + disconnected - + failed - + closed See <http://w3c.github.io/webrtc-pc/#dom-rtcprioritytype> - + very-low - + low - + medium - + high @@ -2376,7 +2376,7 @@ Mostly matches the WebRTC RTCRtpReceiver interface. - + @@ -2384,7 +2384,7 @@ Mostly matches the WebRTC RTCRtpReceiver interface. Mostly matches the WebRTC RTCRtpSender interface. - + Sets the content of the IPv4 Type of Service (ToS), also known as DSCP (Differentiated Services Code Point). This also sets the Traffic Class field of IPv6. @@ -2403,7 +2403,7 @@ This also sets the Traffic Class field of IPv6. - + The priority from which to set the DSCP field on packets @@ -2412,7 +2412,7 @@ This also sets the Traffic Class field of IPv6. - + @@ -2422,22 +2422,22 @@ This also sets the Traffic Class field of IPv6. Caps representing the codec preferences. - + The transceiver's current directionality, or none if the transceiver is stopped or has never participated in an exchange of offers and answers. To change the transceiver's directionality, set the value of the direction property. - + Direction of the transceiver. - + The kind of media this transceiver transports - + The media ID of the m-line associated with this transceiver. This association is established, when possible, whenever either a local or remote description is applied. This field is null if @@ -2446,7 +2446,7 @@ associated m-line is rejected by either a remote offer or any answer. - + @@ -2456,71 +2456,71 @@ answer. - + - + none - + inactive - + sendonly - + recvonly - + sendrecv - + - + - + - + See <http://w3c.github.io/webrtc-pc/#dom-rtcsctptransportstate> - + new - + connecting - + connected - + closed See <http://w3c.github.io/webrtc-pc/#rtcsdptype> - + offer - + pranswer - + answer - + rollback @@ -2596,67 +2596,67 @@ answer. See <http://w3c.github.io/webrtc-pc/#dom-rtcsignalingstate> - + stable - + closed - + have-local-offer - + have-remote-offer - + have-local-pranswer - + have-remote-pranswer See <https://w3c.github.io/webrtc-stats/#dom-rtcstatstype> - + codec - + inbound-rtp - + outbound-rtp - + remote-inbound-rtp - + remote-outbound-rtp - + csrc - + peer-connection - + data-channel - + stream - + transport - + candidate-pair - + local-candidate - + remote-candidate - + certificate diff --git a/gst-env.py b/gst-env.py index 1a5c05bf7c2..6fb4726d011 100755 --- a/gst-env.py +++ b/gst-env.py @@ -283,7 +283,7 @@ def get_subprocess_env(options, gst_version): return get_wine_subprocess_env(options, env) prepend_env_var(env, "PATH", os.path.join(SCRIPTDIR, 'meson'), - options.sysroot) + options.sysroot) env["GST_PLUGIN_SYSTEM_PATH"] = "" env["GST_PLUGIN_SCANNER"] = os.path.normpath( @@ -304,10 +304,10 @@ def get_subprocess_env(options, gst_version): lib_path_envvar = 'LD_LIBRARY_PATH' prepend_env_var(env, "GST_PLUGIN_PATH", os.path.join(SCRIPTDIR, 'subprojects', - 'gst-python', 'plugin'), + 'gst-python', 'plugin'), options.sysroot) prepend_env_var(env, "GST_PLUGIN_PATH", os.path.join(PREFIX_DIR, 'lib', - 'gstreamer-1.0'), + 'gstreamer-1.0'), options.sysroot) prepend_env_var(env, "GST_PLUGIN_PATH", os.path.join(options.builddir, 'subprojects', 'libnice', 'gst'), @@ -322,10 +322,6 @@ def get_subprocess_env(options, gst_version): prepend_env_var(env, "PKG_CONFIG_PATH", os.path.join(PREFIX_DIR, 'lib', 'pkgconfig'), options.sysroot) - # gst-indent - prepend_env_var(env, "PATH", os.path.join(SCRIPTDIR, 'scripts'), - options.sysroot) - # tools: gst-launch-1.0, gst-inspect-1.0 prepend_env_var(env, "PATH", os.path.join(options.builddir, 'subprojects', 'gstreamer', 'tools'), @@ -439,7 +435,7 @@ def get_subprocess_env(options, gst_version): py_package = 'site-packages' elif 'dist-packages' in installpath_parts: py_package = 'dist-packages' - if py_package: + if py_package: install_subpath = os.path.join(*installpath_parts[installpath_parts.index(py_package) + 1:]) if path.endswith(install_subpath): if os.path.commonprefix(["gi/overrides", install_subpath]): @@ -502,7 +498,7 @@ def get_subprocess_env(options, gst_version): def get_windows_shell(): command = ['powershell.exe', '-noprofile', '-executionpolicy', 'bypass', '-file', - os.path.join(SCRIPTDIR, 'data', 'misc', 'cmd_or_ps.ps1')] + os.path.join(SCRIPTDIR, 'data', 'misc', 'cmd_or_ps.ps1')] result = subprocess.check_output(command) return result.decode().strip() @@ -588,7 +584,8 @@ def get_windows_shell(): for p in BASH_COMPLETION_PATHS: if os.path.exists(p): bash_completions_files += os.listdir(path=p) - bc_rc = BC_RC.format(bash_completions=' '.join(bash_completions_files), bash_completions_paths=' '.join(BASH_COMPLETION_PATHS)) + bc_rc = BC_RC.format(bash_completions=' '.join(bash_completions_files), + bash_completions_paths=' '.join(BASH_COMPLETION_PATHS)) tmprc.write(bc_rc) tmprc.flush() args.append("--rcfile") diff --git a/meson.build b/meson.build index f140fb20a39..7f9db7accad 100644 --- a/meson.build +++ b/meson.build @@ -1,15 +1,16 @@ project('gstreamer-full', 'c', - version : '1.25.0.1', - meson_version : '>= 1.1', + version : '1.25.50.1', + meson_version : '>= 1.4', default_options : ['buildtype=debugoptimized', # Needed due to https://github.com/mesonbuild/meson/issues/1889, # but this can cause problems in the future. Remove it # when it's no longer necessary. 'cpp_std=c++14']) -apiversion = '1.0' +api_version = '1.0' gst_version = '>= @0@'.format(meson.project_version()) +host_system = host_machine.system() build_system = build_machine.system() cc = meson.get_compiler('c') @@ -30,15 +31,24 @@ if cmdres.returncode() != 0 error('Do not run `ninja reconfigure` or `meson` for gst-build inside the development environment, you will run into problems') endif -# Install gst-indent pre-commit hook -run_command(python3, '-c', 'import shutil; shutil.copy("scripts/git-hooks/multi-pre-commit.hook", ".git/hooks/pre-commit")', check: false) - +# pre-commit hooks are not interactive so we use gitlint's hook to check commit messages gitlint_req = '>= 0.18' gitlint = find_program('gitlint', version: gitlint_req, required: false) if gitlint.found() - run_command(gitlint, 'install-hook', check: false) + gitlint_status = run_command(gitlint, 'install-hook', check: false) + if gitlint_status.returncode() != 0 + warning(gitlint_status.stderr().strip()) + endif else - message('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') + 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') +endif + +pre_commit_req = '>= 3.6.0' +pre_commit = find_program('pre-commit', version: pre_commit_req, required: false) +if pre_commit.found() + run_command(pre_commit, 'install', '-f', check: true) +else + warning('pre-commit not found or too old, please install it with your package manager or `python3 -m pip install pre-commit`') endif # On macOS, you have to run "Install Certificates.command" otherwise Python @@ -84,7 +94,7 @@ if not meson.is_subproject() and cc.get_id() == 'msvc' language: ['c', 'cpp']) endif -building_full = get_option('default_library') == 'static' +building_full = get_option('default_library') == 'static' and not get_option('gst-full').disabled() building_full_static = false building_full_options = [] if building_full @@ -100,6 +110,18 @@ if get_option('webrtc').enabled() libnice_options += ['gstreamer=enabled'] endif +gtk_options = [ + 'build-demos=false', + 'build-examples=false', + 'build-testsuite=false', + 'build-tests=false', +] +if host_system == 'windows' + gtk_options += ['vulkan=disabled'] +elif host_system == 'darwin' + gtk_options += ['x11-backend=false'] +endif + # Disable gst-python if we've disabled introspection gst_python_option = get_option('python').disable_if(get_option('introspection').disabled()) @@ -121,6 +143,7 @@ subprojects = [ ['pygobject', { 'option': get_option('python'), 'match_gst_version': false, 'sysdep': 'pygobject-3.0', 'sysdep_version': '>= 3.8' }], ['gst-python', { 'option': gst_python_option}], ['gst-examples', { 'option': get_option('gst-examples'), 'match_gst_versions': false}], + ['gtk', {'option': get_option('gtk'), 'match_gst_version': false, 'subproject_options': gtk_options}], ['gst-plugins-rs', { 'option': get_option('rs'), 'build-hotdoc': true, 'match_gst_version': false}], ] @@ -223,7 +246,7 @@ foreach sp : subprojects subprojects_names += [project_name] - if not meson.is_cross_build() and build_infos.get('build-hotdoc', false) + if not meson.is_cross_build() and build_infos.get('build-hotdoc', false) and get_option('doc').allowed() plugins_doc_caches += [subproj.get_variable('gst_plugins_doc_dep', [])] if documented_projects != '' documented_projects += ',' @@ -238,18 +261,22 @@ giomodules = [] glib_dep = dependency('glib-2.0') if glib_dep.type_name() == 'internal' subp = subproject('glib-networking', required : get_option('tls'), - default_options: ['gnutls=auto', 'openssl=auto']) + default_options: ['gnutls=auto', 'openssl=auto', 'libproxy=auto', 'gnome_proxy=auto']) if subp.found() giomodules += subp.get_variable('giomodules', []) endif endif -gst_plugins_doc_dep = custom_target('plugins-doc-cache', - command: [python3, '-c', 'print("Built all doc caches")'], - input: plugins_doc_caches, - output: 'plugins_doc_caches', - capture: true, -) +if get_option('doc').allowed() + gst_plugins_doc_dep = custom_target('plugins-doc-cache', + command: [python3, '-c', 'print("Built all doc caches")'], + input: plugins_doc_caches, + output: 'plugins_doc_caches', + capture: true, + ) +else + message('doc option is disabled, will not generate targets for building plugins doc caches') +endif gir_files = [] gir_targets = [] @@ -353,7 +380,7 @@ configure_file( if building_full cdata = configuration_data() - cdata.set_quoted('GST_API_VERSION', apiversion) + cdata.set_quoted('GST_API_VERSION', api_version) cdata.set_quoted('GETTEXT_PACKAGE', 'gstreamer-full-1.0') cdata.set_quoted('PACKAGE_VERSION', meson.project_version()) cdata.set_quoted('GST_PACKAGE_ORIGIN', get_option('package-origin')) @@ -529,7 +556,7 @@ if building_full # Loop for tools foreach tool, data: all_tools gst_tools += tool - exe_name = '@0@-@1@'.format(tool, apiversion) + exe_name = '@0@-@1@'.format(tool, api_version) deps = [] foreach d : data.get('deps', []) diff --git a/meson_options.txt b/meson_options.txt index 91b1449f183..d73d9cce342 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -12,10 +12,12 @@ 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') +option('python-exe', type: 'string', value: 'python3', description: 'Path or name of the Python interpreter to build for') option('sharp', type : 'feature', value : 'disabled') # External subprojects option('tls', type : 'feature', value : 'auto', description : 'TLS support using glib-networking as a subproject') option('libnice', type : 'feature', value : 'auto', description: 'ICE support using libnice as a subproject') +option('gtk', type: 'feature', value: 'disabled', description: 'Build GTK4 as a subproject') # Build for fuzzing option('oss_fuzz', type : 'feature', value : 'disabled', @@ -23,6 +25,7 @@ option('oss_fuzz', type : 'feature', value : 'disabled', # Other options option('custom_subprojects', type : 'string', value : '', description : 'Comma-separated project names') +option('gst-full', type: 'feature', value: 'auto', description: 'Enable the gstreamer-full library feature') option('gst-full-libraries', type : 'array', value : [], description : '''List of libraries to expose in gstreamer-full's ABI. gstreamer, glib and gobject are always included.''') option('gst-full-version-script', type : 'string', value: 'data/misc/gstreamer-full-default.map', @@ -46,31 +49,44 @@ option('virtme_kernel_image', type: 'string', value: '', description: 'Path to a # License-related feature options option('gpl', type: 'feature', value: 'disabled', description: 'Allow build of plugins that have (A)GPL-licensed dependencies') +option('gstreamer-full-license', type : 'string', value : 'unknown', + description : 'gstreamer-full license (default unknown)') -# Common options, automatically inherited by subprojects -option('tests', type : 'feature', value : 'auto', description : 'Build tests') +# Common options specific to GStreamer, automatically inherited by subprojects. +option('package-origin', type : 'string', value : 'Unknown package origin', yield : true, + description : 'package origin URL to use in plugins') +option('package-name', type : 'string', yield : true, + description : 'package name to use in plugins') +option('extra-checks', type : 'feature', value : 'enabled', description : 'Enable extra runtime checks') +option('benchmarks', type : 'feature', value : 'auto') option('tools', type : 'feature', value : 'auto', yield : true, description : 'Build command line tools') -option('examples', type : 'feature', value : 'auto', description : 'Build examples') -option('introspection', type : 'feature', value : 'auto', description : 'Generate introspection data') -option('nls', type : 'feature', value : 'auto', description : 'Native language support (translations)') option('orc', type : 'feature', value : 'auto', description : 'Optimized Inner Loop Runtime Compiler (SIMD)') -option('doc', type : 'feature', value : 'disabled', description : 'Generate API documentation with hotdoc') -option('gtk_doc', type : 'feature', value : 'disabled', description : 'Generate API documentation with gtk-doc') 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') -option('package-origin', type : 'string', value : 'Unknown package origin', yield : true, - description : 'package origin URL to use in plugins') +# Common options shared by other projects, automatically inherited by subprojects. +option('glib_debug', type : 'feature', value : 'auto', yield : true, description : 'Enable GLib debug infrastructure (see docs/macros.txt)') +option('glib_assert', type : 'boolean', value : true, yield : true, description : 'Enable GLib assertion (see docs/macros.txt)', + deprecated: {'enabled' : 'true', 'disabled' : 'false', 'auto' : 'false'}, +) +option('glib_checks', type : 'boolean', value : true, yield : true, description : 'Enable GLib checks such as API guards (see docs/macros.txt)', + deprecated: {'enabled' : 'true', 'disabled' : 'false', 'auto' : 'false'}, +) +option('tests', type : 'feature', value : 'auto', description : 'Build tests') +option('examples', type : 'feature', value : 'auto', description : 'Build examples') +option('introspection', type : 'feature', value : 'auto', description : 'Generate introspection data') +option('nls', type : 'feature', value : 'auto', description : 'Native language support (translations)') +option('doc', type : 'feature', value : 'disabled', description : 'Generate API documentation with hotdoc') +option('gtk_doc', type : 'feature', value : 'disabled', description : 'Generate API documentation with gtk-doc') +# Deprecated, kept for backward compat option('gobject-cast-checks', type : 'feature', value : 'auto', yield : true, - description: 'Enable run-time GObject cast checks (auto = enabled for development, disabled for stable releases)') + description: 'Enable run-time GObject cast checks (auto = enabled for development, disabled for stable releases)', + deprecated: 'glib_debug') option('glib-asserts', type : 'feature', value : 'enabled', yield : true, - description: 'Enable GLib assertion (auto = enabled for development, disabled for stable releases)') + description: 'Enable GLib assertion (auto = enabled for development, disabled for stable releases)', + deprecated: 'glib_assert') option('glib-checks', type : 'feature', value : 'enabled', yield : true, - description: 'Enable GLib checks such as API guards (auto = enabled for development, disabled for stable releases)') - -option('package-name', type : 'string', yield : true, - description : 'package name to use in plugins') -option('gstreamer-full-license', type : 'string', value : 'unknown', - description : 'gstreamer-full license (default unknown)') + description: 'Enable GLib checks such as API guards (auto = enabled for development, disabled for stable releases)', + deprecated: 'glib_checks') diff --git a/scripts/check-commits.py b/scripts/check-commits.py new file mode 100755 index 00000000000..13e09421277 --- /dev/null +++ b/scripts/check-commits.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 +import subprocess +import sys +import argparse + +def run_pre_commit(start_commit:str): + if start_commit == 'HEAD': + start_commit = 'HEAD~1' + try: + subprocess.run(['git', 'rebase', start_commit, '--exec', f"pre-commit run --from-ref HEAD~1 --to-ref HEAD"]) + except subprocess.CalledProcessError as e: + print(f'pre-commit failed with exit code {e.returncode}.') + sys.exit(1) + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description="Checks a range of commits one by one with pre-commit.") + parser.add_argument('start_commit', nargs='?', default='HEAD~1', type=str, + help='Initial commit (refspec) to start the check.') + args = parser.parse_args() + run_pre_commit(args.start_commit or 'HEAD~1') diff --git a/scripts/check-format-c b/scripts/check-format-c deleted file mode 100755 index 61c2b5c1e0d..00000000000 --- a/scripts/check-format-c +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -set -e - -CUR_DIR="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -indent --version || true - -$CUR_DIR/gst-indent-all - -if git diff --quiet -- ':!subprojects/gst-integration-testsuites/medias' .; then - echo "Code is properly formatted" -else - git diff --color=always -- ':!subprojects/gst-integration-testsuites/medias' . -echo 'style diverges, please run gst-indent first' - exit 1 -fi diff --git a/scripts/git-hooks/multi-pre-commit.hook b/scripts/git-hooks/multi-pre-commit.hook deleted file mode 100755 index bf05bb3e175..00000000000 --- a/scripts/git-hooks/multi-pre-commit.hook +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/sh -# Git pre-commit hook that runs multiple hooks specified in $HOOKS. -# Make sure this script is executable. Bypass hooks with git commit --no-verify. - -# This file is inspired by a set of unofficial pre-commit hooks available -# at github. -# Link: https://github.com/githubbrowser/Pre-commit-hooks -# Contact: David Martin, david.martin.mailbox@googlemail.com - - -########################################################### -# SETTINGS: -# pre-commit hooks to be executed. They should be in the same .git/hooks/ folder -# as this script. Hooks should return 0 if successful and nonzero to cancel the -# commit. They are executed in the order in which they are listed. -########################################################### - -HOOKS="scripts/git-hooks/pre-commit.hook scripts/git-hooks/pre-commit-invoke-python.hook" - -# exit on error -set -e - -if [ "$GST_DISABLE_PRE_COMMIT_HOOKS" = "1" ] -then - echo "Pre-commits hooks disabled by env GST_DISABLE_PRE_COMMIT_HOOKS." - exit 0 -fi - -echo $PWD - -for hook in $HOOKS -do - echo "Running hook: $hook" - # run hook if it exists - # if it returns with nonzero exit with 1 and thus abort the commit - if [ -f "$PWD/$hook" ]; then - "$PWD/$hook" - if [ $? != 0 ]; then - exit 1 - fi - else - echo "Error: file $hook not found." - echo "Aborting commit. Make sure the hook is at $PWD/$hook and executable." - echo "You can disable it by removing it from the list" - echo "You can skip all pre-commit hooks with --no-verify (not recommended)." - exit 1 - fi -done - diff --git a/scripts/git-hooks/pre-commit-invoke-python.hook b/scripts/git-hooks/pre-commit-invoke-python.hook index eeb073173a8..db4e5d1b017 100755 --- a/scripts/git-hooks/pre-commit-invoke-python.hook +++ b/scripts/git-hooks/pre-commit-invoke-python.hook @@ -1,12 +1,3 @@ #!/bin/bash -PYTHON="python3" -if [[ $OS =~ Windows ]]; then - if type -p py &>/dev/null; then - PYTHON="py -3" - elif type -p python &>/dev/null; then - PYTHON="python" - fi -fi - -$PYTHON "`dirname $0`/pre-commit-python.hook" +echo "This hook is deprecated, please run 'meson setup' to update your configuration" diff --git a/scripts/git-hooks/pre-commit-python.hook b/scripts/git-hooks/pre-commit-python.hook index 16a808a7e4f..efe815aedc3 100755 --- a/scripts/git-hooks/pre-commit-python.hook +++ b/scripts/git-hooks/pre-commit-python.hook @@ -3,6 +3,10 @@ import os import subprocess import sys import tempfile +import json +import glob +from pathlib import Path +from typing import Dict, Optional, Set, Tuple NOT_PYCODESTYLE_COMPLIANT_MESSAGE_PRE = \ "Your code is not fully pycodestyle compliant and contains"\ @@ -45,10 +49,158 @@ def copy_files_to_tmp_dir(files): return tempdir +def find_builddir() -> Optional[Path]: + # Explicitly-defined builddir takes precedence + if 'GST_DOC_BUILDDIR' in os.environ: + return Path(os.environ['GST_DOC_BUILDDIR']) + + # Now try the usual suspects + for name in ('build', '_build', 'builddir', 'b'): + if Path(name, 'build.ninja').exists(): + return Path(name) + + # Out of luck, look for the most recent folder with a `build.ninja` file + for d in sorted([p for p in Path('.').iterdir() if p.is_dir()], key=lambda p: p.stat().st_mtime): + if Path(d, 'build.ninja').exists(): + print ('Found', d) + return d + + return None + +def hotdoc_conf_needs_rebuild(conf_path: Path, conf_data: Dict, modified_fpaths): + if not isinstance(conf_data, dict): + return False + + for (key, value) in conf_data.items(): + if key.endswith('c_sources'): + if any(['*' in f for f in value]): + continue + conf_dir = conf_path.parent + for f in value: + fpath = Path(f) + if not fpath.is_absolute(): + fpath = Path(conf_dir, fpath) + + fpath = fpath.resolve() + if fpath in modified_fpaths: + return True + + return False + + +def get_hotdoc_confs_to_rebuild(builddir, modified_files) -> Tuple[Set, Set]: + srcdir = Path(os.getcwd()) + modified_fpaths = set() + for f in modified_files: + modified_fpaths.add(Path(srcdir, f)) + + confs_need_rebuild = set() + caches_need_rebuild = set() + for path in glob.glob('**/docs/*.json', root_dir=builddir, recursive=True): + conf_path = Path(srcdir, builddir, path) + with open(conf_path) as f: + conf_data = json.load(f) + + if hotdoc_conf_needs_rebuild(conf_path, conf_data, modified_fpaths): + confs_need_rebuild.add(conf_path) + caches_need_rebuild.add(conf_data.get('gst_plugin_library')) + + return (confs_need_rebuild, caches_need_rebuild) + +def build(builddir): + subprocess.run(['ninja', '-C', builddir], check=True) + for subproject in ('gstreamer', 'gst-plugins-base', 'gst-plugins-good', 'gst-plugins-bad', 'gst-plugins-ugly', 'gst-rtsp-server', 'gst-libav', 'gst-editing-services'): + subprocess.run(['ninja', '-C', builddir, f'subprojects/{subproject}/docs/hotdoc-configs.json'], check=True) + +def build_cache(builddir, subproject, targets, subdir): + if not targets: + return + + print (f'Rebuilding {subproject} cache with changes from {targets}') + + cmd = [ + os.path.join(builddir, f'subprojects/gstreamer/docs/gst-plugins-doc-cache-generator'), + os.path.join(os.getcwd(), f'subprojects/{subproject}/docs/{subdir}gst_plugins_cache.json'), + os.path.join(builddir, f'subprojects/{subproject}/docs/gst_plugins_cache.json'), + ] + targets + + subprocess.run(cmd) + +class StashManager: + def __enter__(self): + print ('Stashing changes') + # First, save the difference with the current index to a patch file + tree = subprocess.run(['git', 'write-tree'], capture_output=True, check=True).stdout.strip() + result = subprocess.run(['git', 'diff-index', '--ignore-submodules', '--binary', '--no-color', '--no-ext-diff', tree], check=True, capture_output=True) + # Don't delete the temporary file, we want to make sure to prevent data loss + with tempfile.NamedTemporaryFile(delete_on_close=False, delete=False) as f: + f.write(result.stdout) + self.patch_file_name = f.name + + # Print the path to the diff file, useful is something goes wrong + print ("unstaged diff saved to ", self.patch_file_name) + + # Now stash the changes, we do not use git stash --keep-index because it causes spurious rebuilds + subprocess.run(['git', '-c', 'submodule.recurse=0', 'checkout', '--', '.'], check=True) + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + # Now re-apply the non-staged changes + subprocess.run(['git', 'apply', '--allow-empty', self.patch_file_name], check=True) + print ('Unstashed changes') + +def run_doc_checks(modified_files): + builddir = find_builddir() + + if builddir is None: + raise Exception('cannot run doc pre-commit hook without a build directory') + + builddir = builddir.absolute() + + build(builddir) + + # Each subproject holds its own cache file. For each we keep track of the + # dynamic library associated with the hotdoc configuration files that need + # rebuilding, and only update the caches using those libraries. + # This is done in order to minimize spurious diffs as much as possible. + caches = {} + + (confs_need_rebuild, caches_need_rebuild) = get_hotdoc_confs_to_rebuild(builddir, modified_files) + + for libpath in caches_need_rebuild: + cache_project = Path(libpath).relative_to(builddir).parts[1] + if cache_project not in caches: + caches[cache_project] = [libpath] + else: + caches[cache_project].append(libpath) + + for (subproject, libpaths) in caches.items(): + cache_subdir = 'plugins/' if subproject in ['gst-plugins-bad', 'gst-plugins-base', 'gst-rtsp-server', 'gstreamer', 'gst-plugins-rs'] else '' + build_cache(builddir, subproject, libpaths, cache_subdir) + + try: + subprocess.run(['git', 'diff', '--ignore-submodules', '--exit-code'], check=True) + except subprocess.CalledProcessError as e: + print ('You have a diff in the plugin cache, please commit it') + raise e + + print ('No pending diff in plugin caches, checking since tags') + + 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 main(): modified_files = system('git', 'diff-index', '--cached', '--name-only', 'HEAD', '--diff-filter=ACMR').split("\n")[:-1] + + if os.environ.get('GST_ENABLE_DOC_PRE_COMMIT_HOOK', '0') != '0': + with StashManager(): + try: + run_doc_checks(modified_files) + except Exception as e: + print (e) + sys.exit(1) + non_compliant_files = [] output_message = None diff --git a/scripts/git-hooks/pre-commit.hook b/scripts/git-hooks/pre-commit.hook index 6a071d4f28c..0b62f79ef47 100755 --- a/scripts/git-hooks/pre-commit.hook +++ b/scripts/git-hooks/pre-commit.hook @@ -3,121 +3,4 @@ # Check that the code follows a consistant code style # -# Check for existence of indent, and error out if not present. -# On some *bsd systems the binary seems to be called gnunindent, -# so check for that first. - - -version=$(gst-indent-1.0 --version 2>/dev/null) -if test -z "$version"; then - version=$(gnuindent --version 2>/dev/null) - if test -z "$version"; then - version=$(gindent --version 2>/dev/null) - if test -z "$version"; then - version=$(indent --version 2>/dev/null) - if test -z "$version"; then - echo "GStreamer git pre-commit hook:" - echo "Did not find GNU indent, please install it before continuing." - exit 1 - else - INDENT=indent - fi - else - INDENT=gindent - fi - else - INDENT=gnuindent - fi -else - INDENT=gst-indent-1.0 -fi - -case $($INDENT --version) in - GNU*) - ;; - default) - echo "GStreamer git pre-commit hook:" - echo "Did not find GNU indent, please install it before continuing." - echo "(Found $INDENT, but it doesn't seem to be GNU indent)" - exit 1 - ;; -esac - -INDENT_PARAMETERS="--braces-on-if-line \ - --case-brace-indentation0 \ - --case-indentation2 \ - --braces-after-struct-decl-line \ - --line-length80 \ - --no-tabs \ - --cuddle-else \ - --dont-line-up-parentheses \ - --continuation-indentation4 \ - --honour-newlines \ - --tab-size8 \ - --indent-level2 \ - --leave-preprocessor-space" - -echo "--Checking style--" -for file in $(git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "\.c$") ; do - # nf is the temporary checkout. This makes sure we check against the - # revision in the index (and not the checked out version). - nf=$(git checkout-index --temp ${file} | cut -f 1) - newfile=$(mktemp /tmp/${nf}.XXXXXX) || exit 1 - $INDENT ${INDENT_PARAMETERS} \ - $nf -o $newfile 2>> /dev/null - # FIXME: Call indent twice as it tends to do line-breaks - # different for every second call. - $INDENT ${INDENT_PARAMETERS} \ - $newfile 2>> /dev/null - diff -u -p "${nf}" "${newfile}" - r=$? - rm "${newfile}" - rm "${nf}" - if [ $r != 0 ] ; then - ERROR_FILES="$ERROR_FILES $file" -echo "=================================================================================================" -echo " Code style error in: $file " -echo "=================================================================================================" -echo "" - fi -done - -if [ -n "$ERROR_FILES" ];then -echo "=================================================================================================" -echo " Code style error in: " -for file in $ERROR_FILES ; do -echo " $file" -done -echo " " -echo " Please fix before committing. Don't forget to run git add before trying to commit again. " -echo " If the whole file is to be committed, this should work (run from the top-level directory): " -echo " scripts/gst-indent$ERROR_FILES ; git add$ERROR_FILES ; git commit" -echo " " -echo "=================================================================================================" - exit 1 -fi - -csharp_files=$( git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "^subprojects/gstreamer-sharp/.*cs$" ) -if test -n "$csharp_files"; then - version=$(dotnet-format --version 2>/dev/null) - if test -z "$version"; then - echo "GStreamer git pre-commit hook:" - echo "Did not find dotnet-format required to format C# files, please install it before continuing." - exit 1 - fi - scripts/format-csharp --check - r=$? - if [ $r != 0 ] ; then -echo "=================================================================================================" -echo " Code style error: " -echo " " -echo " Please fix before committing, running from the top-level directory: " -echo " scripts/format-chsarp " -echo " " -echo " Don't forget to run git add before trying to commit again. " -echo "=================================================================================================" - exit 1 - fi -fi - -echo "--Checking style pass--" +echo "This hook is deprecated, please run 'meson setup' to update your configuration" diff --git a/scripts/gst-indent b/scripts/gst-indent deleted file mode 100755 index 50ec6181f5f..00000000000 --- a/scripts/gst-indent +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/sh - -for execname in gst-indent-1.0 gnuindent gindent indent; do - version=`$execname --version 2>/dev/null` - if test "x$version" != "x"; then - INDENT=$execname - break - fi -done - -if test -z $INDENT; then - echo "GStreamer git pre-commit hook:" - echo "Did not find GNU indent, please install it before continuing." - exit 1 -fi - -case `$INDENT --version` in - GNU*) - ;; - default) - echo "Did not find GNU indent, please install it before continuing." - echo "(Found $INDENT, but it doesn't seem to be GNU indent)" - exit 1 - ;; -esac - -# Run twice. GNU indent isn't idempotent -# when run once -for i in 1 2; do -$INDENT \ - --braces-on-if-line \ - --case-brace-indentation0 \ - --case-indentation2 \ - --braces-after-struct-decl-line \ - --line-length80 \ - --no-tabs \ - --cuddle-else \ - --dont-line-up-parentheses \ - --continuation-indentation4 \ - --honour-newlines \ - --tab-size8 \ - --indent-level2 \ - --leave-preprocessor-space \ - $* || exit $? -done diff --git a/scripts/gst-indent-all b/scripts/gst-indent-all deleted file mode 100755 index 556dd19eecb..00000000000 --- a/scripts/gst-indent-all +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -BASEDIR=$(dirname $0) - - -filter_cmd=("cat") -if test -f ".indentignore"; then - filter_args=() - while read -r line; do - if test -n "$line"; then - filter_args+=("-e" "$line") - fi - done < ".indentignore" - if [[ ${#filter_args[@]} -gt 0 ]]; then - filter_cmd=("grep" "-v" "${filter_args[@]}") - fi -fi -git ls-files "*.c" | "${filter_cmd[@]}" | xargs -d '\n' $BASEDIR/gst-indent - -if test -f ".indent_cpp_list"; then - filter_args=() - while read -r line; do - if test -n "$line"; then - filter_args+=("-e" "$line") - fi - done < ".indent_cpp_list" - if [[ ${#filter_args[@]} -gt 0 ]]; then - filter_cmd=("grep" "-E" "${filter_args[@]}") - git ls-files "*.cpp" | "${filter_cmd[@]}" | xargs -d '\n' $BASEDIR/gst-indent - fi -fi diff --git a/scripts/gst-indent-all.py b/scripts/gst-indent-all.py new file mode 100755 index 00000000000..a9336085619 --- /dev/null +++ b/scripts/gst-indent-all.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +from itertools import filterfalse +import os +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() + expressions = [re.compile(i) for i in expressions] + return lambda x: any(i.match(x) for i in expressions) + else: + return None + + +def listfiles(single_glob): + if os.environ.get("CI_PROJECT_NAME"): + return subprocess.check_output(['git', 'ls-files', single_glob], + universal_newlines=True).splitlines() + else: + return subprocess.check_output(['git', 'diff-index', '--cached', '--name-only', 'HEAD', '--diff-filter=ACMR', single_glob], + universal_newlines=True).splitlines() + + +if __name__ == '__main__': + basedir = os.path.dirname(__file__) + + filter_in_c = readfile('.indentignore') + listing = listfiles('*.c') + if filter_in_c: + listing = filterfalse(filter_in_c, listing) + + for entry in listing: + indent(entry) + + filter_in_cpp = readfile('.indent_cpp_list') + listing = listfiles('*.cpp') + if filter_in_cpp: + listing = filter(filter_in_cpp, listing) + + for entry in listing: + indent(entry) diff --git a/scripts/gst-indent.py b/scripts/gst-indent.py new file mode 100755 index 00000000000..7ef82e1d23d --- /dev/null +++ b/scripts/gst-indent.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +from sys import argv +from gst_indent_common import indent + + +if __name__ == '__main__': + indent(argv[1:]) diff --git a/scripts/gst_indent_common.py b/scripts/gst_indent_common.py new file mode 100644 index 00000000000..981a0b5cf66 --- /dev/null +++ b/scripts/gst_indent_common.py @@ -0,0 +1,17 @@ +import shutil +import subprocess + + +def indent(*args): + indent = shutil.which('gst-indent-1.0') + + if not indent: + raise RuntimeError('''Did not find gst-indent-1.0, please install it before continuing.''') + + version = subprocess.run([indent, '--version'], capture_output=True, text=True) + + if 'gst-indent' not in version.stdout: + raise RuntimeError(f'''Did not find gst-indent-1.0, please install it before continuing. + (Found {indent}, but it doesn't seem to be gst-indent-1.0)''') + + subprocess.check_call([indent] + list(args)) diff --git a/security-advisories/alert-template.md b/security-advisories/alert-template.md new file mode 100644 index 00000000000..d9d3452f7ac --- /dev/null +++ b/security-advisories/alert-template.md @@ -0,0 +1,41 @@ +# Security Advisory 2024-XXXX + +
+ +| | | +| ----------------- | ----------------------------------------- | +| Summary | Example summary | +| Date | 2024-04-10 10:00 | +| Affected Versions | GStreamer gst-plugins-XYZ | +| IDs | GStreamer-SA-2024-XXXX
CVE-2024-XXXX | + +
+ +## Details + +## Impact + +## Threat mitigation + +## Workarounds + +## Solution + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- [CVE-2024-XXXX](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-XXXX) + +### GStreamer 1.XX.X release + +- [Release Notes](/releases/1.XX/#1.XX.X) +- [GStreamer Plugins XYZ 1.XX.X](/src/gst-plugins-XYZ/gst-plugins-XYZ-1.XX.X.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/XXXX.patch) diff --git a/security-advisories/sa-2016-0001.md b/security-advisories/sa-2016-0001.md new file mode 100644 index 00000000000..81df6346c72 --- /dev/null +++ b/security-advisories/sa-2016-0001.md @@ -0,0 +1,52 @@ +# Security Advisory 2016-0001 (CVE-2016-9445, CVE-2016-9446) + +
+ +| | | +| ----------------- | --- | +| Summary | Multiple Issues in VMNC decoder | +| Date | 2016-11-17 16:00 | +| Affected Versions | GStreamer gst-plugins-bad 1.10 < 1.10.1
GStreamer gst-plugins-bad 1.x <= 1.8.3 | +| IDs | GStreamer-SA-2016-0001
CVE-2016-9445
CVE-2016-9446 | + +
+ +## Details + +The VMNC decoder in gst-plugins-bad contains an integer overflow vulnerability and a failure to initialize output memory. + +## Impact + +If successful, a malicious third party could trigger either a crash in an application decoding a VMNC video stream or an arbitrary code execution with the privileges of the target user. The failure to initialize output memory may result in an information leak. + +## Mitigation + +Exploitation requires the user to access a VMNC stream or file. + +## Workarounds + +The user should refrain from opening files from untrusted third parties or accessing untrusted remote sites, or disable the VMNC decoder plugin by removing the plugin binary file libgstvmnc.so or libgstvmnc.dll. + +## Solution + +The gst-plugins-bad 1.10.1 release addresses the issue. The upcoming gst-plugins-bad 1.8.4 release will also address the issue. People using older branches of GStreamer should apply the patch and recompile, or disable the VMNC plugin. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- [CVE-2016-9445](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-9445) +- [CVE-2016-9446](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-9446) + +### GStreamer Bugzilla Entry + +- [Bug 774533](https://bugzilla.gnome.org/show_bug.cgi?id=774533) + +### GStreamer Patches + +- [Patch](https://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=4cb1bcf1422bbcd79c0f683edb7ee85e3f7a31fe) +- [Patch 2](https://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=807e23118b6b6d99e61b5e2055c4bc82a444b008) diff --git a/security-advisories/sa-2016-0002.md b/security-advisories/sa-2016-0002.md new file mode 100644 index 00000000000..b0d359ec87e --- /dev/null +++ b/security-advisories/sa-2016-0002.md @@ -0,0 +1,58 @@ +# Security Advisory 2016-0002 (CVE-2016-9634, CVE-2016-9635, CVE-2016-9636, CVE-2016-9807) + +
+ +| | | +| ----------------- | --- | +| Summary | Multiple Issues in FLC/FLI/FLX Decoder | +| Date | 2016-11-23 03:00 | +| Affected Versions | GStreamer gst-plugins-bad 1.10 < 1.10.2
GStreamer gst-plugins-bad 1.x <= 1.8.3 | +| IDs | GStreamer-SA-2016-0002
CVE-2016-9634
CVE-2016-9635
CVE-2016-9636
CVE-2016-9807 | + +
+ +## Details + +The decoder for the FLC/FLI/FLX animation video formats in gst-plugins-good contains various out-of-bounds writes and reads and fails to initialize output frame memory. + +## Impact + +If successful, a malicious third party could trigger either a crash in an application decoding a FLC/FLI/FLX video stream or an arbitrary code execution with the privileges of the target user. The failure to initialize output memory may result in an information leak. + +## Threat Mitigation + +Exploitation requires the user to access an FLC/FLI/FLX stream or file. + +## Workarounds + +The user should refrain from opening files from untrusted third parties or accessing untrusted remote sites, or disable the FLC/FLI/FLX decoder plugin by removing the plugin binary file libgstflxdec.so or libgstflxdec.dll. + +## Solution + +The gst-plugins-bad 1.10.2 release addresses the issue. The upcoming gst-plugins-bad 1.8.4 release will also address the issue. People using older branches of GStreamer should apply the patch and recompile or disable the FLC/FLI/FLX plugin. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- [CVE-2016-9634](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-9634) +- [CVE-2016-9635](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-9635) +- [CVE-2016-9636](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-9636) +- [CVE-2016-9807](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-9807) + +### GStreamer Bugzilla Entries + +- [Bug 774834](https://bugzilla.gnome.org/show_bug.cgi?id=774834) +- [Bug 774859](https://bugzilla.gnome.org/show_bug.cgi?id=774859) + +### GStreamer Patches + +- [Patch 1](https://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=bf43f44fcfada5ec4a3ce60cb374340486fe9fac) +- [Patch 2](https://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=fec77de8cbb0c8192b77aff2e563705ba421f2f2) +- [Patch 3](https://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=45dcd0b9ccf33ed85cdafeb871a3781f5be57fd9) +- [Patch 4](https://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=153a8ae752c90d07190ef45803422a4f71ea8bff) +- [Patch 5](https://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=96aaf889afe90b5e02ec756af5c6c7000d2cc424) diff --git a/security-advisories/sa-2019-0001.md b/security-advisories/sa-2019-0001.md new file mode 100644 index 00000000000..c1662cecdac --- /dev/null +++ b/security-advisories/sa-2019-0001.md @@ -0,0 +1,51 @@ +# Security Advisory 2019-0001 (CVE-2019-9928) + +
+ +| | | +| ----------------- | --- | +| Summary | Buffer overflow in RTSP parsing | +| Date | 2019-04-22 00:30 | +| Affected Versions | GStreamer gst-plugins-bad | +| IDs | GStreamer-SA-2019-0001
CVE-2019-9928 | + +
+ +## Details + +GStreamer before 1.16.0 has a heap-based buffer overflow in the RTSP connection parser via a crafted response from a server. + +## Impact + +The potential exists for a malicious server to trigger remote code execution in a connecting client. + +## Threat mitigation + +Exploitation requires the user to access a malicious RTSP server. + +## Workarounds + +The user should refrain from opening RTSP streams from untrusted third parties + +## Solution + +The gst-plugins-base 1.16.0 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-2019-9928](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9928) + +### GStreamer 1.16.0 release + +- [Release Notes](/releases/1.16/) +- [GStreamer Plugins Base 1.16.0](/src/gst-plugins-base/gst-plugins-base-1.16.0.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/merge_requests/157) diff --git a/security-advisories/sa-2021-0001.md b/security-advisories/sa-2021-0001.md new file mode 100644 index 00000000000..8ac3897e2e4 --- /dev/null +++ b/security-advisories/sa-2021-0001.md @@ -0,0 +1,39 @@ +# Security Advisory 2021-0001 (CVE-2021-3522) + +
+ +| | | +| ----------------- | --- | +| Summary | Out-of-bounds read in ID3v2 tag parsing | +| Date | 2021-03-15 16:00 | +| Affected Versions | GStreamer gst-plugins-base 1.x <= 1.18.3, 0.10.36 | +| IDs | GStreamer-SA-2021-0001
CVE-2021-3522 | + +
+ +## Details + +GStreamer before 1.18.4 might do an out-of-bounds read when handling certain ID3v2 tags. + +## Impact + +It might be possible for a malicious third party to trigger a crash in the application. + +## Solution + +The gst-plugins-base 1.18.4 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) + +### GStreamer 1.18.4 release + +- [Release Notes](/releases/1.18/#1.18.4) +- [GStreamer Plugins Base 1.18.4](/src/gst-plugins-base/gst-plugins-base-1.18.4.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/commit/8a88e5c1db05ebadfd4569955f6f47c23cdca3c4?merge_request_iid=1066) diff --git a/security-advisories/sa-2021-0002.md b/security-advisories/sa-2021-0002.md new file mode 100644 index 00000000000..598ac0221e5 --- /dev/null +++ b/security-advisories/sa-2021-0002.md @@ -0,0 +1,43 @@ +# Security Advisory 2021-0002 (CVE-2021-3497) + +
+ +| | | +| ----------------- | --- | +| Summary | Use-after-free in matroska demuxing | +| Date | 2021-03-15 16:00 | +| Affected Versions | GStreamer gst-plugins-good 1.x <= 1.18.3, 0.10.x > 0.10.8 | +| IDs | GStreamer-SA-2021-0002
CVE-2021-3497 | + +
+ +## Details + +GStreamer before 1.18.4 might access already-freed memory in error code paths when demuxing certain malformed Matroska files. + +## Impact + +It might be possible for a malicious third party to trigger a crash in the application, but possibly also an arbitrary code execution with the privileges of the target user. + +## Solution + +The gst-plugins-good 1.18.4 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-2021-3497](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3497) + +### GStreamer 1.18.4 release + +- [Release Notes](/releases/1.18/#1.18.4) +- [GStreamer Plugins Good 1.18.4](/src/gst-plugins-good/gst-plugins-good-1.18.4.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/commit/9181191511f9c0be6a89c98b311f49d66bd46dc3?merge_request_id=903) diff --git a/security-advisories/sa-2021-0003.md b/security-advisories/sa-2021-0003.md new file mode 100644 index 00000000000..713406e65f8 --- /dev/null +++ b/security-advisories/sa-2021-0003.md @@ -0,0 +1,43 @@ +# Security Advisory 2021-0003 (CVE-2021-3498) + +
+ +| | | +| ----------------- | --- | +| Summary | Heap corruption in matroska demuxing | +| Date | 2021-03-15 16:00 | +| Affected Versions | GStreamer gst-plugins-good 1.x <= 1.18.3 | +| IDs | GStreamer-SA-2021-0003
CVE-2021-3498 | + +
+ +## Details + +GStreamer before 1.18.4 might cause heap corruption when parsing certain malformed Matroska files. + +## Impact + +It might be possible for a malicious third party to trigger a crash in the application, but possibly also an arbitrary code execution with the privileges of the target user. + +## Solution + +The gst-plugins-good 1.18.4 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-2021-3498](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3498) + +### GStreamer 1.18.4 release + +- [Release Notes](/releases/1.18/#1.18.4) +- [GStreamer Plugins Good 1.18.4](/src/gst-plugins-good/gst-plugins-good-1.18.4.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/commit/02174790726dd20a5c73ce2002189bf240ad4fe0?merge_request_iid=903) diff --git a/security-advisories/sa-2021-0004.md b/security-advisories/sa-2021-0004.md new file mode 100644 index 00000000000..18a4c72c4af --- /dev/null +++ b/security-advisories/sa-2021-0004.md @@ -0,0 +1,39 @@ +# Security Advisory 2021-0004 + +
+ +| | | +| ----------------- | --- | +| Summary | Out-of-bounds read in realmedia demuxing | +| Date | 2021-03-15 16:00 | +| Affected Versions | GStreamer gst-plugins-ugly 1.x <= 1.18.3 | +| ID | GStreamer-SA-2021-0004 | + +
+ +## Details + +GStreamer before 1.18.4 might do an out-of-bounds read when handling certain RealMedia files or streams. + +## Impact + +It might be possible for a malicious third party to trigger a crash in the application. + +## Solution + +The gst-plugins-ugly 1.18.4 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) + +### GStreamer 1.18.4 release + +- [Release Notes](/releases/1.18/#1.18.4) +- [GStreamer Plugins Ugly 1.18.4](/src/gst-plugins-ugly/gst-plugins-ugly-1.18.4.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/commit/9726aaf78e6643a5955864f444852423de58de29?merge_request_iid=75) diff --git a/security-advisories/sa-2021-0005.md b/security-advisories/sa-2021-0005.md new file mode 100644 index 00000000000..482c155617e --- /dev/null +++ b/security-advisories/sa-2021-0005.md @@ -0,0 +1,39 @@ +# Security Advisory 2021-0005 + +
+ +| | | +| ----------------- | --- | +| Summary | Stack overflow in gst\_ffmpeg\_channel\_layout\_to\_gst() | +| Date | 2021-03-15 16:00 | +| Affected Versions | GStreamer gst-libav 1.x <= 1.18.3 | +| ID | GStreamer-SA-2021-0005 | + +
+ +## Details + +GStreamer before 1.18.4 might cause stack corruptions with streams that have more than 64 audio channels. + +## Impact + +It might be possible for a malicious third party to trigger a crash in the application. + +## Solution + +The gst-libav 1.18.4 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) + +### GStreamer 1.18.4 release + +- [Release Notes](/releases/1.18/#1.18.4) +- [GStreamer plugin for the FFmpeg libav* libraries 1.18.4](/src/gst-libav/gst-libav-1.18.4.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gst-libav/-/commit/a339f8f9641382b92b43e6d146bdc5d87a9704f8?merge_request_iid=121) diff --git a/security-advisories/sa-2022-0001.md b/security-advisories/sa-2022-0001.md new file mode 100644 index 00000000000..a3056e9ae54 --- /dev/null +++ b/security-advisories/sa-2022-0001.md @@ -0,0 +1,43 @@ +# Security Advisory 2022-0001 (CVE-2022-1921) + +
+ +| | | +| ----------------- | --- | +| Summary | Heap overwrite in avi demuxing | +| Date | 2022-06-15 23:00 | +| Affected Versions | GStreamer gst-plugins-good 1.x < 1.20.3, 0.10.x | +| IDs | GStreamer-SA-2022-0001
CVE-2022-1921 | + +
+ +## Details + +Heap-based buffer overflow in the avi demuxer when handling certain AVI files in GStreamer versions before 1.20.3. + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, and possibly also effect code execution through heap manipulation. + +## Solution + +The gst-plugins-good 1.20.3 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-2022-1921](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-1921) + +### GStreamer 1.20.3 release + +- [Release Notes](/releases/1.20/#1.20.3) +- [GStreamer Plugins Good 1.20.3](/src/gst-plugins-good/gst-plugins-good-1.20.3.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/f503caad676971933dc0b52c4b313e5ef0d6dbb0.patch) diff --git a/security-advisories/sa-2022-0002.md b/security-advisories/sa-2022-0002.md new file mode 100644 index 00000000000..899396b38b7 --- /dev/null +++ b/security-advisories/sa-2022-0002.md @@ -0,0 +1,46 @@ +# Security Advisory 2022-0002 (CVE-2022-1922, CVE-2022-1923, CVE-2022-1924, CVE-2022-1925) + +
+ +| | | +| ----------------- | --- | +| Summary | Potential heap overwrite in mkv demuxing using zlib/bz2/lzo decompression | +| Date | 2022-06-15 23:00 | +| Affected Versions | GStreamer gst-plugins-good 1.x < 1.20.3, 0.10.x | +| IDs | GStreamer-SA-2022-0002
CVE-2022-1922
CVE-2022-1923
CVE-2022-1924
CVE-2022-1925 | + +
+ +## Details + +Potential heap overwrite in the mkv demuxer when handling certain Matroska/WebM files in GStreamer versions before 1.20.3. + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, and possibly also overwrite data on the heap. + +## Solution + +The gst-plugins-good 1.20.3 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-2022-1922](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-1922) +- [CVE-2022-1923](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-1923) +- [CVE-2022-1924](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-1924) +- [CVE-2022-1925](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-1925) + +### GStreamer 1.20.3 release + +- [Release Notes](/releases/1.20/#1.20.3) +- [GStreamer Plugins Good 1.20.3](/src/gst-plugins-good/gst-plugins-good-1.20.3.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/ad6012159acf18c6b5c0f4edf037e8c9a2dbc966.patch) diff --git a/security-advisories/sa-2022-0003.md b/security-advisories/sa-2022-0003.md new file mode 100644 index 00000000000..22e7625a799 --- /dev/null +++ b/security-advisories/sa-2022-0003.md @@ -0,0 +1,43 @@ +# Security Advisory 2022-0003 (CVE-2022-2122) + +
+ +| | | +| ----------------- | --- | +| Summary | Potential heap overwrite in mp4 demuxing using zlib decompression | +| Date | 2022-06-15 23:00 | +| Affected Versions | GStreamer gst-plugins-good 1.x < 1.20.3, 0.10.x | +| IDs | GStreamer-SA-2022-0003
CVE-2022-2122 | + +
+ +## Details + +Potential heap overwrite in the qt demuxer when handling certain QuickTime/MP4 files in GStreamer versions before 1.20.3. + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, and possibly also overwrite data on the heap. + +## Solution + +The gst-plugins-good 1.20.3 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-2022-2122](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-2122) + +### GStreamer 1.20.3 release + +- [Release Notes](/releases/1.20/#1.20.3) +- [GStreamer Plugins Good 1.20.3](/src/gst-plugins-good/gst-plugins-good-1.20.3.tar.xz) + +### Patches + +- [Patch 1](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/14d306da6da51a762c4dc701d161bb52ab66d774.patch) diff --git a/security-advisories/sa-2022-0004.md b/security-advisories/sa-2022-0004.md new file mode 100644 index 00000000000..165d25a5468 --- /dev/null +++ b/security-advisories/sa-2022-0004.md @@ -0,0 +1,43 @@ +# Security Advisory 2022-0004 (CVE-2022-1920) + +
+ +| | | +| ----------------- | --- | +| Summary | Potential heap overwrite in gst\_matroska\_demux\_add\_wvpk\_header | +| Date | 2022-06-15 23:00 | +| Affected Versions | GStreamer gst-plugins-good 1.x < 1.20.3, 0.10.x | +| IDs | GStreamer-SA-2022-0004
CVE-2022-1920 | + +
+ +## Details + +Potential heap overwrite in the mkv demuxer when handling certain Matroska files in GStreamer versions before 1.20.3. + +## Impact + +It is possible for a malicious third party to overwrite data on the heap, and possibly even effect code execution. + +## Solution + +The gst-plugins-good 1.20.3 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-2022-1920](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-1920) + +### GStreamer 1.20.3 release + +- [Release Notes](/releases/1.20/#1.20.3) +- [GStreamer Plugins Good 1.20.3](/src/gst-plugins-good/gst-plugins-good-1.20.3.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/cf887f1b8e228bff6e19829e6d03995d70ad739d.patch) diff --git a/security-advisories/sa-2023-0001.md b/security-advisories/sa-2023-0001.md new file mode 100644 index 00000000000..2f2ea2ca0d2 --- /dev/null +++ b/security-advisories/sa-2023-0001.md @@ -0,0 +1,48 @@ +# Security Advisory 2023-0001 (ZDI-CAN-20775, CVE-2023-37327) + +
+ +| | | +| ----------------- | --- | +| Summary | Integer overflow leading to heap overwrite in FLAC image tag handling | +| Date | 2023-06-20 18:00 | +| Affected Versions | GStreamer gst-plugins-good 1.x < 1.22.4, 1.x < 1.20.7, 0.10.x | +| IDs | GStreamer-SA-2023-0001
ZDI-CAN-20775
CVE-2023-37327 | + +
+ +## Details + +Heap-based buffer overflow in the FLAC parser when handling malformed image tags in GStreamer versions before 1.22.4 / 1.20.7. + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, and possibly also effect code execution through heap manipulation. + +## Solution + +The gst-plugins-good 1.22.4 / 1.20.7 releases address 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-2023-37327](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-37327) + +### GStreamer 1.22.4 release + +- [Release Notes](/releases/1.22/#1.22.4) +- [GStreamer Plugins Good 1.22.4](/src/gst-plugins-good/gst-plugins-good-1.22.4.tar.xz) + +### GStreamer 1.20.7 release + +- [Release Notes](/releases/1.20/#1.20.7) +- [GStreamer Plugins Good 1.20.7](/src/gst-plugins-good/gst-plugins-good-1.20.7.tar.xz) + +### Patches + +- [Patches](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4894.patch) diff --git a/security-advisories/sa-2023-0002.md b/security-advisories/sa-2023-0002.md new file mode 100644 index 00000000000..48048da1cde --- /dev/null +++ b/security-advisories/sa-2023-0002.md @@ -0,0 +1,48 @@ +# Security Advisory 2023-0002 (ZDI-CAN-20968, CVE-2023-37328) + +
+ +| | | +| ----------------- | --- | +| Summary | Heap overwrite in subtitle parsing | +| Date | 2023-06-20 18:00 | +| Affected Versions | GStreamer gst-plugins-base 1.x < 1.22.4, 1.x < 1.20.7, 0.10.x | +| IDs | GStreamer-SA-2023-0002
ZDI-CAN-20968
CVE-2023-37328 | + +
+ +## Details + +Heap-based buffer overflow in the subparse subtitle parser when handling certain SRT subtitle files in GStreamer versions before 1.22.4 / 1.20.7. + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, and possibly also effect code execution through heap manipulation. + +## Solution + +The gst-plugins-base 1.22.4 / 1.20.7 releases address 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-2023-37328](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-37328) + +### GStreamer 1.22.4 release + +- [Release Notes](/releases/1.22/#1.22.4) +- [GStreamer Plugins Base 1.22.4](/src/gst-plugins-base/gst-plugins-base-1.22.4.tar.xz) + +### GStreamer 1.20.7 release + +- [Release Notes](/releases/1.20/#1.20.7) +- [GStreamer Plugins Base 1.20.7](/src/gst-plugins-base/gst-plugins-base-1.20.7.tar.xz) + +### Patches + +- [Patches](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4895.patch) diff --git a/security-advisories/sa-2023-0003.md b/security-advisories/sa-2023-0003.md new file mode 100644 index 00000000000..3c31cc582e7 --- /dev/null +++ b/security-advisories/sa-2023-0003.md @@ -0,0 +1,48 @@ +# Security Advisory 2023-0003 (ZDI-CAN-20994, CVE-2023-37329) + +
+ +| | | +| ----------------- | --- | +| Summary | Heap overwrite in PGS subtitle overlay decoder | +| Date | 2023-06-20 18:00 | +| Affected Versions | GStreamer gst-plugins-bad 1.x < 1.22.4, 1.x < 1.20.7, 0.10.x | +| IDs | GStreamer-SA-2023-0003
ZDI-CAN-20994
CVE-2023-37329 | + +
+ +## Details + +Heap-based buffer overflow in the PGS blu-ray subtitle decoder when handling certain files in GStreamer versions before 1.22.4 / 1.20.7. + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, and possibly also effect code execution through heap manipulation. + +## Solution + +The gst-plugins-bad 1.22.4 / 1.20.7 releases address 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-2023-37329](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-37329) + +### GStreamer 1.22.4 release + +- [Release Notes](/releases/1.22/#1.22.4) +- [GStreamer Plugins Bad 1.22.4](/src/gst-plugins-bad/gst-plugins-bad-1.22.4.tar.xz) + +### GStreamer 1.20.7 release + +- [Release Notes](/releases/1.20/#1.20.7) +- [GStreamer Plugins Bad 1.20.7](/src/gst-plugins-bad/gst-plugins-bad-1.20.7.tar.xz) + +### Patches + +- [Patches](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4896.patch) diff --git a/security-advisories/sa-2023-0004.md b/security-advisories/sa-2023-0004.md new file mode 100644 index 00000000000..2b853dd6c8d --- /dev/null +++ b/security-advisories/sa-2023-0004.md @@ -0,0 +1,44 @@ +# Security Advisory 2023-0004 (ZDI-CAN-21443) + +
+ +| | | +| ----------------- | --- | +| Summary | Integer overflow leading to heap overwrite in RealMedia file handling | +| Date | 2023-07-20 14:00 | +| Affected Versions | GStreamer gst-plugins-ugly 1.x < 1.22.5, 1.x < 1.20.7, 0.10.x | +| IDs | GStreamer-SA-2023-0004
ZDI-CAN-21443 | + +
+ +## Details + +Heap-based buffer overflow in the RealMedia file demuxer when handling malformed files in GStreamer versions before 1.22.5 / 1.20.7. + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, and possibly also effect code execution through heap manipulation. + +## Solution + +The gst-plugins-ugly 1.22.5 / 1.20.7 releases address 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) + +### GStreamer 1.22.5 release + +- [Release Notes](/releases/1.22/#1.22.5) +- [GStreamer Plugins Ugly 1.22.5](/src/gst-plugins-ugly/gst-plugins-ugly-1.22.5.tar.xz) + +### GStreamer 1.20.7 release + +- [Release Notes](/releases/1.20/#1.20.7) +- [GStreamer Plugins Ugly 1.20.7](/src/gst-plugins-ugly/gst-plugins-ugly-1.20.7.tar.xz) + +### Patches + +- [Patches](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5072.patch) diff --git a/security-advisories/sa-2023-0005.md b/security-advisories/sa-2023-0005.md new file mode 100644 index 00000000000..fa3ed706725 --- /dev/null +++ b/security-advisories/sa-2023-0005.md @@ -0,0 +1,44 @@ +# Security Advisory 2023-0005 (ZDI-CAN-21444) + +
+ +| | | +| ----------------- | --- | +| Summary | Integer overflow leading to heap overwrite in RealMedia file handling | +| Date | 2023-07-20 14:00 | +| Affected Versions | GStreamer gst-plugins-ugly 1.x < 1.22.5, 1.x < 1.20.7, 0.10.x | +| IDs | GStreamer-SA-2023-0005
ZDI-CAN-21444 | + +
+ +## Details + +Heap-based buffer overflow in the RealMedia file demuxer when handling malformed files in GStreamer versions before 1.22.5 / 1.20.7. + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, and possibly also effect code execution through heap manipulation. + +## Solution + +The gst-plugins-ugly 1.22.5 / 1.20.7 releases address 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) + +### GStreamer 1.22.5 release + +- [Release Notes](/releases/1.22/#1.22.5) +- [GStreamer Plugins Ugly 1.22.5](/src/gst-plugins-ugly/gst-plugins-ugly-1.22.5.tar.xz) + +### GStreamer 1.20.7 release + +- [Release Notes](/releases/1.20/#1.20.7) +- [GStreamer Plugins Ugly 1.20.7](/src/gst-plugins-ugly/gst-plugins-ugly-1.20.7.tar.xz) + +### Patches + +- [Patches](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5072.patch) diff --git a/security-advisories/sa-2023-0006.md b/security-advisories/sa-2023-0006.md new file mode 100644 index 00000000000..97dc44ead2d --- /dev/null +++ b/security-advisories/sa-2023-0006.md @@ -0,0 +1,43 @@ +# Security Advisory 2023-0006 (ZDI-CAN-21660, CVE-2023-40474) + +
+ +| | | +| ----------------- | --- | +| Summary | Integer overflow leading to heap overwrite in MXF file handling with uncompressed video | +| Date | 2023-09-20 20:00 | +| Affected Versions | GStreamer gst-plugins-bad < 1.22.6 | +| IDs | GStreamer-SA-2023-0006
ZDI-CAN-21660
CVE-2023-40474 | + +
+ +## Details + +Heap-based buffer overflow in the MXF file demuxer when handling malformed files with uncompressed video in GStreamer versions before 1.22.6 + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, and possibly also effect code execution through heap manipulation. + +## Solution + +The gst-plugins-bad 1.22.6 releases address 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-2023-40474](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-40474) + +### GStreamer 1.22.6 release + +- [Release Notes](/releases/1.22/#1.22.6) +- [GStreamer Plugins Bad 1.22.6](/src/gst-plugins-bad/gst-plugins-bad-1.22.6.tar.xz) + +### Patches + +- [Patches](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5362.patch) (includes patch for SA-2023-0007 / ZDI-CAN-21661 / CVE-2023-40475) diff --git a/security-advisories/sa-2023-0007.md b/security-advisories/sa-2023-0007.md new file mode 100644 index 00000000000..ec85278d546 --- /dev/null +++ b/security-advisories/sa-2023-0007.md @@ -0,0 +1,43 @@ +# Security Advisory 2023-0007 (ZDI-CAN-21661, CVE-2023-40475) + +
+ +| | | +| ----------------- | --- | +| Summary | Integer overflow leading to heap overwrite in MXF file handling with AES3 audio | +| Date | 2023-09-20 20:00 | +| Affected Versions | GStreamer gst-plugins-bad < 1.22.6 | +| IDs | GStreamer-SA-2023-0007
ZDI-CAN-21661
CVE-2023-40475 | + +
+ +## Details + +Heap-based buffer overflow in the MXF file demuxer when handling malformed files with AES3 audio in GStreamer versions before 1.22.6 + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, and possibly also effect code execution through heap manipulation. + +## Solution + +The gst-plugins-bad 1.22.6 releases address 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-2023-40475](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-40475) + +### GStreamer 1.22.6 release + +- [Release Notes](/releases/1.22/#1.22.6) +- [GStreamer Plugins Bad 1.22.6](/src/gst-plugins-bad/gst-plugins-bad-1.22.6.tar.xz) + +### Patches + +- [Patches](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5362.patch) (includes patch for SA-2023-0006 / ZDI-CAN-21660 / CVE-2023-40474) diff --git a/security-advisories/sa-2023-0008.md b/security-advisories/sa-2023-0008.md new file mode 100644 index 00000000000..d4cddc48e2b --- /dev/null +++ b/security-advisories/sa-2023-0008.md @@ -0,0 +1,43 @@ +# Security Advisory 2023-0008 (ZDI-CAN-21768, CVE-2023-40476) + +
+ +| | | +| ----------------- | --- | +| Summary | Integer overflow in H.265 video parser leading to stack overwrite | +| Date | 2023-09-20 20:00 | +| Affected Versions | GStreamer gst-plugins-bad < 1.22.6 | +| IDs | GStreamer-SA-2023-0008
ZDI-CAN-21768
CVE-2023-40476 | + +
+ +## Details + +Stack-based buffer overflow in the H.265 video parser when handling malformed H.265 video streams in GStreamer versions before 1.22.6 + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, and possibly also effect code execution through stack manipulation. + +## Solution + +The gst-plugins-bad 1.22.6 releases address 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-2023-40476](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-40476) + +### GStreamer 1.22.6 release + +- [Release Notes](/releases/1.22/#1.22.6) +- [GStreamer Plugins Bad 1.22.6](/src/gst-plugins-bad/gst-plugins-bad-1.22.6.tar.xz) + +### Patches + +- [Patches](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5364.patch) diff --git a/security-advisories/sa-2023-0009.md b/security-advisories/sa-2023-0009.md new file mode 100644 index 00000000000..6f65f234f22 --- /dev/null +++ b/security-advisories/sa-2023-0009.md @@ -0,0 +1,43 @@ +# Security Advisory 2023-0009 (ZDI-CAN-22226, CVE-2023-44429) + +
+ +| | | +| ----------------- | --- | +| Summary | AV1 codec parser buffer overflow | +| Date | 2023-11-13 12:00 | +| Affected Versions | GStreamer gst-plugins-bad < 1.22.7 | +| IDs | GStreamer-SA-2023-0009
ZDI-CAN-22226
CVE-2023-44429 | + +
+ +## Details + +Heap-based buffer overflow in the AV1 codec parser when handling certain malformed streams before GStreamer 1.22.7 + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, and possibly also effect code execution through heap manipulation. + +## Solution + +The gst-plugins-bad 1.22.7 releases address 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-2023-44429](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-44429) + +### GStreamer 1.22.7 release + +- [Release Notes](/releases/1.22/#1.22.7) +- [GStreamer Plugins Bad 1.22.7](/src/gst-plugins-bad/gst-plugins-bad-1.22.7.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5634.patch) diff --git a/security-advisories/sa-2023-0010.md b/security-advisories/sa-2023-0010.md new file mode 100644 index 00000000000..efb8956bebc --- /dev/null +++ b/security-advisories/sa-2023-0010.md @@ -0,0 +1,43 @@ +# Security Advisory 2023-0010 (ZDI-CAN-22299, CVE-2023-44446) + +
+ +| | | +| ----------------- | --- | +| Summary | MXF demuxer use-after-free | +| Date | 2023-11-13 12:00 | +| Affected Versions | GStreamer gst-plugins-bad < 1.22.7 | +| IDs | GStreamer-SA-2023-0010
ZDI-CAN-22299
CVE-2023-44446 | + +
+ +## Details + +Use-after-free (read) in the MXF demuxer when handling certain files before GStreamer 1.22.7 + +## Impact + +It is possible for a malicious third party to trigger a crash in the application. + +## Solution + +The gst-plugins-bad 1.22.7 releases address 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-2023-44446](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-44446) + +### GStreamer 1.22.7 release + +- [Release Notes](/releases/1.22/#1.22.7) +- [GStreamer Plugins Bad 1.22.7](/src/gst-plugins-bad/gst-plugins-bad-1.22.7.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5635.patch) diff --git a/security-advisories/sa-2023-0011.md b/security-advisories/sa-2023-0011.md new file mode 100644 index 00000000000..6b550405318 --- /dev/null +++ b/security-advisories/sa-2023-0011.md @@ -0,0 +1,38 @@ +# Security Advisory 2023-0011 (ZDI-CAN-22300) + +
+ +| | | +| ----------------- | --- | +| Summary | AV1 codec parser buffer overflow | +| Date | 2023-12-18 14:00 | +| Affected Versions | GStreamer gst-plugins-bad < 1.22.8 | +| IDs | GStreamer-SA-2023-0011
ZDI-CAN-22300
CVE-2023-50186 | + +
+ +## Details + +Heap-based buffer overflow in the AV1 codec parser when handling certain malformed streams before GStreamer 1.22.8 + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, and possibly also effect code execution through heap manipulation. + +## Solution + +The gst-plugins-bad 1.22.8 releases address 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) + +### GStreamer 1.22.8 release + +- [Release Notes](/releases/1.22/#1.22.8) +- [GStreamer Plugins Bad 1.22.8](/src/gst-plugins-bad/gst-plugins-bad-1.22.8.tar.xz) + +### Patches +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5823.patch) diff --git a/security-advisories/sa-2024-0001.md b/security-advisories/sa-2024-0001.md new file mode 100644 index 00000000000..b376f606e07 --- /dev/null +++ b/security-advisories/sa-2024-0001.md @@ -0,0 +1,45 @@ +# Security Advisory 2024-0001 (ZDI-CAN-22873, CVE-2024-0444) + +
+ +| | | +| ----------------- | --- | +| Summary | AV1 codec parser potential buffer overflow during tile list parsing | +| Date | 2024-01-24 20:00 | +| Affected Versions | GStreamer gst-plugins-bad < 1.22.9 | +| IDs | GStreamer-SA-2024-0001
ZDI-CAN-22873
CVE-2024-0444 | + +
+ +## Details + +Heap-based buffer overflow in the AV1 codec parser when handling certain malformed streams before GStreamer 1.22.9. + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, +and possibly also effect code execution through heap manipulation. + +## Solution + +The gst-plugins-bad 1.22.9 releases address 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-2024-0444](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-0444) + +### GStreamer 1.22.9 release + +- [Release notes](/releases/1.22/#1.22.9) +- [GStreamer Plugins Bad 1.22.9](/src/gst-plugins-bad/gst-plugins-bad-1.22.9.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5970.patch) diff --git a/security-advisories/sa-2024-0002.md b/security-advisories/sa-2024-0002.md new file mode 100644 index 00000000000..ded40e87754 --- /dev/null +++ b/security-advisories/sa-2024-0002.md @@ -0,0 +1,52 @@ +# Security Advisory 2024-0002 (ZDI-CAN-23896, CVE-2024-4453) + +
+ +| | | +| ----------------- | --- | +| Summary | Integer overflow in EXIF metadata parser leading to potential heap overwrite | +| Date | 2024-04-29 20:00 | +| Affected Versions | GStreamer gst-plugins-base < 1.24.3, < 1.22.12 | +| IDs | GStreamer-SA-2024-0002
ZDI-CAN-23896
CVE-2024-4453 | + +
+ +## Details + +Heap-based buffer overflow in the EXIF image tag parser when handling certain malformed streams before GStreamer 1.24.3 or 1.22.12. + +## Impact + +It is possible for a malicious third party to trigger a crash in the application, +and possibly also effect code execution through heap manipulation. + +## Solution + +The gst-plugins-base 1.24.3 and 1.22.12 releases address 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-2024-4453](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-4453) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.3 release notes](/releases/1.24/#1.24.3) +- [GStreamer Plugins Base 1.24.3](/src/gst-plugins-base/gst-plugins-base-1.24.3.tar.xz) + +#### 1.22 (old stable) + +- [GStreamer 1.22.12 release notes](/releases/1.22/#1.22.12) +- [GStreamer Plugins Base 1.22.12](/src/gst-plugins-base/gst-plugins-base-1.22.12.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6766.patch) diff --git a/security-advisories/sa-2024-0003.md b/security-advisories/sa-2024-0003.md new file mode 100644 index 00000000000..bdf04a67298 --- /dev/null +++ b/security-advisories/sa-2024-0003.md @@ -0,0 +1,50 @@ +# Security Advisory 2024-0003 (JVN#02030803, JPCERT#92912620, CVE-2024-40897) + +
+ +| | | +| ----------------- | --- | +| Summary | Orc compiler stack-based buffer overflow | +| Date | 2024-07-19 12:30 | +| Affected Versions | orc < 0.4.39 | +| IDs | GStreamer-SA-2024-0003
JVN#02030803 / JPCERT#92912620
CVE-2024-40897 | + +
+ +## Details + +Stack-based buffer overflow in the Orc compiler when formatting error messages for certain input files. + +## Impact + +It is possible for a malicious third party to trigger a buffer overflow and +effect code execution with the same privileges as the orc compiler is called +with by feeding it with malformed orc source files. + +This only affects developers and CI environments using orcc, not users of liborc. + +## Solution + +The Orc 0.4.39 release address the issue. +People using older branches of Orc should apply the patches and recompile. + +## References + +### The GStreamer project + +- [https://gstreamer.freedesktop.org](https://gstreamer.freedesktop.org) + +### CVE Database Entries + +- [CVE-2024-40897](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-40897) + +### GStreamer Orc releases + +#### 0.4.39 + +- [Orc 0.4.39 release notes](https://discourse.gstreamer.org/t/orc-0-4-39-release/1969) +- [Orc 0.4.39 tarball (.tar.xz)](/src/orc/orc-0.4.39.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/orc/-/merge_requests/191.patch) diff --git a/security-advisories/sa-2024-0004.md b/security-advisories/sa-2024-0004.md new file mode 100644 index 00000000000..4037b4b6cc5 --- /dev/null +++ b/security-advisories/sa-2024-0004.md @@ -0,0 +1,50 @@ +# Security Advisory 2024-0004 (CVE-2024-44331) + +
+ +| | | +| ----------------- | --- | +| Summary | RTSP server: Potential Denial-of-Service (DoS) with specially crafted client requests | +| Date | 2024-10-29 18:00 | +| Affected Versions | GStreamer gst-rtsp-server >= 1.18.0, < 1.24.9 | +| IDs | GStreamer-SA-2024-0004
CVE-2024-44331 | + +
+ +## Details + +A series of specially crafted client requests during streaming setup +(post client authentication, if any) can cause the RTSP server library +to abort, if it has been compiled with assertions enabled. + +## Impact + +It is possible for a malicious RTSP client to potentially trigger a crash/abort +of the RTSP server application, if it has been compiled with assertions enabled. +There is no risk of code execution or memory manipulation. + +## Solution + +The gst-rtsp-server 1.24.9 releases (and git main branch) 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-2024-44331](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-44331) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.9 release notes](/releases/1.24/#1.24.9) +- [GStreamer RTSP Server Library 1.24.9](/src/gst-rtsp-server/gst-rtsp-server-1.24.9.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7731.patch) diff --git a/security-advisories/sa-2024-0005.md b/security-advisories/sa-2024-0005.md new file mode 100644 index 00000000000..73bef4715f2 --- /dev/null +++ b/security-advisories/sa-2024-0005.md @@ -0,0 +1,50 @@ +# Security Advisory 2024-0005 (GHSL-2024-094, GHSL-2024-237, GHSL-2024-241, CVE-2024-47537) + +
+ +| | | +| ----------------- | --- | +| Summary | Integer overflow in MP4/MOV sample table parser leading to out-of-bounds writes | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0005
GHSL-2024-094, GHSL-2024-237, GHSL-2024-241
CVE-2024-47537 | + +
+ +## Details + +Integer overflow in the MP4/MOV demuxer's sample table parser that can lead to +out-of-bounds writes and NULL-pointer dereferences for certain input files. + +## Impact + +It is possible for a malicious third party to trigger an out-of-bounds write or +NULL-pointer dereferences that result in a crash of the application, and, in +case of out-of-bounds writes, possibly also allow code execution through heap +manipulation. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47537](https://www.cve.org/CVERecord?id=CVE-2024-47537) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8059.patch) diff --git a/security-advisories/sa-2024-0006.md b/security-advisories/sa-2024-0006.md new file mode 100644 index 00000000000..6d7349d7747 --- /dev/null +++ b/security-advisories/sa-2024-0006.md @@ -0,0 +1,47 @@ +# Security Advisory 2024-0006 (GHSL-2024-246, CVE-2024-47598) + +
+ +| | | +| ----------------- | --- | +| Summary | MP4/MOV sample table parser out-of-bounds read | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0006
GHSL-2024-246
CVE-2024-47598 | + +
+ +## Details + +Out-of-bounds reads in the MP4/MOV demuxer's sample table parser when handling raw audio tracks +that can lead to crashes for certain input files. + +## Impact + +It is possible for a malicious third party to trigger a out-of-bounds reads that result in a crash of the application. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47598](https://www.cve.org/CVERecord?id=CVE-2024-47598) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8059.patch) diff --git a/security-advisories/sa-2024-0007.md b/security-advisories/sa-2024-0007.md new file mode 100644 index 00000000000..cdaecd3e325 --- /dev/null +++ b/security-advisories/sa-2024-0007.md @@ -0,0 +1,49 @@ +# Security Advisory 2024-0007 (GHSL-2024-195, CVE-2024-47539) + +
+ +| | | +| ----------------- | --- | +| Summary | MP4/MOV Closed Caption handling out-of-bounds write | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0007
GHSL-2024-195
CVE-2024-47539 | + +
+ +## Details + +Out-of-bounds writes in the MP4/MOV demuxer when handling CEA608 Closed Caption +tracks that can lead to crashes for certain input files. + +## Impact + +It is possible for a malicious third party to trigger a out-of-bounds writes +that result in a crash of the application, and possibly also allow code +execution through heap manipulation. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47539](https://www.cve.org/CVERecord?id=CVE-2024-47539) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8059.patch) diff --git a/security-advisories/sa-2024-0008.md b/security-advisories/sa-2024-0008.md new file mode 100644 index 00000000000..c3f6eb7c8f5 --- /dev/null +++ b/security-advisories/sa-2024-0008.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0008 (GHSL-2024-235, CVE-2024-47542) + +
+ +| | | +| ----------------- | --- | +| Summary | ID3v2 parser out-of-bounds read and NULL-pointer dereference | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-base < 1.24.10 | +| IDs | GStreamer-SA-2024-0008
GHSL-2024-235
CVE-2024-47542 | + +
+ +## Details + +Out-of-bounds read and NULL-pointer dereference in ID3v2 parser that can lead +to crashes for certain input files. + +## Impact + +It is possible for a malicious third party to trigger an out-of-bounds read or +NULL-pointer dereference that can result in a crash of the application. + +## Solution + +The gst-plugins-base 1.24.10 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-2024-47542](https://www.cve.org/CVERecord?id=CVE-2024-47542) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Base 1.24.10](/src/gst-plugins-base/gst-plugins-base-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8033.patch) diff --git a/security-advisories/sa-2024-0009.md b/security-advisories/sa-2024-0009.md new file mode 100644 index 00000000000..b1093b6242a --- /dev/null +++ b/security-advisories/sa-2024-0009.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0009 (GHSL-2024-236, CVE-2024-47543) + +
+ +| | | +| ----------------- | --- | +| Summary | MP4/MOV demuxer out-of-bounds read | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0009
GHSL-2024-236
CVE-2024-47543 | + +
+ +## Details + +Out-of-bounds read in the MP4/MOV demuxer that can lead to crashes 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. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47543](https://www.cve.org/CVERecord?id=CVE-2024-47543) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8059.patch) diff --git a/security-advisories/sa-2024-0010.md b/security-advisories/sa-2024-0010.md new file mode 100644 index 00000000000..4de199c0ebd --- /dev/null +++ b/security-advisories/sa-2024-0010.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0010 (GHSL-2024-242, CVE-2024-47545) + +
+ +| | | +| ----------------- | --- | +| Summary | Integer overflow in MP4/MOV demuxer that can result in out-of-bounds read | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0010
GHSL-2024-242
CVE-2024-47545 | + +
+ +## Details + +An integer overflow in the MP4/MOV demuxer that can lead to out-of-bounds +reads that can cause crashes for certain input files. + +## Impact + +It is possible for a malicious third party to trigger an integer overflow that +can result in out-of-bounds reads and a crash of the application. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47545](https://www.cve.org/CVERecord?id=CVE-2024-47545) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8059.patch) diff --git a/security-advisories/sa-2024-0011.md b/security-advisories/sa-2024-0011.md new file mode 100644 index 00000000000..32a5a5bc271 --- /dev/null +++ b/security-advisories/sa-2024-0011.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0011 (GHSL-2024-238, GHSL-2024-239, GHSL-2024-240, CVE-2024-47544) + +
+ +| | | +| ----------------- | --- | +| Summary | NULL-pointer dereferences in MP4/MOV demuxer CENC handling | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0011
GHSL-2024-238, GHSL-2024-239, GHSL-2024-240
CVE-2024-47544 | + +
+ +## Details + +Multiple NULL-pointer dereferences in the MP4/MOV demuxer's CENC handling that +can cause crashes for certain input files. + +## Impact + +It is possible for a malicious third party to trigger a NULL-pointer +dereferences that can result in a crash of the application. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47544](https://www.cve.org/CVERecord?id=CVE-2024-47544) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8059.patch) diff --git a/security-advisories/sa-2024-0012.md b/security-advisories/sa-2024-0012.md new file mode 100644 index 00000000000..d3e1e95634e --- /dev/null +++ b/security-advisories/sa-2024-0012.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0012 (GHSL-2024-245, CVE-2024-47597) + +
+ +| | | +| ----------------- | --- | +| Summary | Out-of-bounds reads in MP4/MOV demuxer sample table parser | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0012
GHSL-2024-245
CVE-2024-47597 | + +
+ +## Details + +Multiple out-of-bounds reads in the MP4/MOV demuxer's sample table parsing and +lack of error checking that can cause crashes for certain input files. + +## Impact + +It is possible for a malicious third party to trigger out-of-bounds reads that +can result in a crash of the application. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47597](https://www.cve.org/CVERecord?id=CVE-2024-47597) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8059.patch) diff --git a/security-advisories/sa-2024-0013.md b/security-advisories/sa-2024-0013.md new file mode 100644 index 00000000000..7baf066c61a --- /dev/null +++ b/security-advisories/sa-2024-0013.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0013 (GHSL-2024-243, CVE-2024-47546) + +
+ +| | | +| ----------------- | --- | +| Summary | Integer underflow in MP4/MOV demuxer that can lead to out-of-bounds reads | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0013
GHSL-2024-243
CVE-2024-47546 | + +
+ +## Details + +Integer underflow in the MP4/MOV demuxer that can lead to out-of-bounds reads +and that can cause crashes for certain input files. + +## Impact + +It is possible for a malicious third party to trigger out-of-bounds reads that +can result in a crash of the application. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47546](https://www.cve.org/CVERecord?id=CVE-2024-47546) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8059.patch) diff --git a/security-advisories/sa-2024-0014.md b/security-advisories/sa-2024-0014.md new file mode 100644 index 00000000000..f4ef483b7ff --- /dev/null +++ b/security-advisories/sa-2024-0014.md @@ -0,0 +1,52 @@ +# Security Advisory 2024-0014 (GHSL-2024-166, CVE-2024-47606) + +
+ +| | | +| ----------------- | --- | +| Summary | Integer overflows in MP4/MOV demuxer and memory allocator that can lead to out-of-bounds writes | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer core < 1.24.10, gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0014
GHSL-2024-166
CVE-2024-47606 | + +
+ +## Details + +Integer overflow in the MP4/MOV demuxer and memory allocator that can lead to +out-of-bounds writes and that can cause crashes for certain input files. + +## Impact + +It is possible for a malicious third party to trigger out-of-bounds writes that +can result in a crash of the application, or potentially possibly also allow +code execution through heap manipulation. + +## Solution + +The GStreamer core and gst-plugins-good 1.24.10 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-2024-47606](https://www.cve.org/CVERecord?id=CVE-2024-47606) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer core 1.24.10](/src/gstreamer/gstreamer-1.24.10.tar.xz) +- [GStreamer plugins good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch (GStreamer core)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/f1cdc6f24340f6cce4cc7020628002f5c70dd6c7.patch) +- [Patch (GStreamer plugins good)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/f8e398c46fc074f266edb3f20479c0ca31b52448.patch) +- [Patch (combined)](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8032.patch) diff --git a/security-advisories/sa-2024-0015.md b/security-advisories/sa-2024-0015.md new file mode 100644 index 00000000000..98229f47ab6 --- /dev/null +++ b/security-advisories/sa-2024-0015.md @@ -0,0 +1,49 @@ +# Security Advisory 2024-0015 (GHSL-2024-244, CVE-2024-47596) + +
+ +| | | +| ----------------- | --- | +| Summary | Integer underflow in MP4/MOV demuxer that can lead to out-of-bounds reads | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0015
GHSL-2024-244
CVE-2024-47596 | + +
+ +## Details + +Integer underflow due to missing size checks in the MP4/MOV demuxer that can +lead to out-of-bounds reads and that can cause crashes for certain input +files. + +## Impact + +It is possible for a malicious third party to trigger out-of-bounds reads that +can result in a crash of the application. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47596](https://www.cve.org/CVERecord?id=CVE-2024-47596) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8059.patch) diff --git a/security-advisories/sa-2024-0016.md b/security-advisories/sa-2024-0016.md new file mode 100644 index 00000000000..be30ab87d5a --- /dev/null +++ b/security-advisories/sa-2024-0016.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0016 (GHSL-2024-247, CVE-2024-47599) + +
+ +| | | +| ----------------- | --- | +| Summary | Insufficient error handling in JPEG decoder that can lead to NULL-pointer dereferences | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0016
GHSL-2024-247
CVE-2024-47599 | + +
+ +## Details + +Insufficient error handling in the JPEG decoder that can lead to NULL-pointer +dereferences, and that can cause crashes for certain input files. + +## Impact + +It is possible for a malicious third party to trigger NULL-pointer +dereferences that can result in a crash of the application. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47599](https://www.cve.org/CVERecord?id=CVE-2024-47599) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8040.patch) diff --git a/security-advisories/sa-2024-0017.md b/security-advisories/sa-2024-0017.md new file mode 100644 index 00000000000..0e06cba5169 --- /dev/null +++ b/security-advisories/sa-2024-0017.md @@ -0,0 +1,49 @@ +# Security Advisory 2024-0017 (GHSL-2024-197, CVE-2024-47540) + +
+ +| | | +| ----------------- | --- | +| Summary | Usage of uninitialized stack memory in Matroska/WebM demuxer | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0017
GHSL-2024-197
CVE-2024-47540 | + +
+ +## Details + +Usage of uninitialized stack memory in Matroska/WebM demuxer that can result +in calls to uninitialized functions pointers and crashes. + +## Impact + +It is possible for a malicious third party to trigger usage of uninitialized +stack memory that can result in a crash of the application, or potentially +possibly also allows code execution through stack manipulation. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47540](https://www.cve.org/CVERecord?id=CVE-2024-47540) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8057.patch) diff --git a/security-advisories/sa-2024-0018.md b/security-advisories/sa-2024-0018.md new file mode 100644 index 00000000000..99eb19e130f --- /dev/null +++ b/security-advisories/sa-2024-0018.md @@ -0,0 +1,51 @@ +# Security Advisory 2024-0018 (GHSL-2024-248, CVE-2024-47600) + +
+ +| | | +| ----------------- | --- | +| Summary | Out-of-bounds read in gst-discoverer-1.0 commandline tool | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-base < 1.24.10 | +| IDs | GStreamer-SA-2024-0018
GHSL-2024-248
CVE-2024-47600 | + +
+ +## Details + +Out-of-bounds reads in the gst-discoverer-1.0 commandline tool that can cause +crashes for certain input files. + +## Impact + +It is possible for a malicious third party to trigger out-of-bounds reads that +can result in a crash of the application. + +This only affects the gst-discoverer-1.0 commandline tool and not any other +applications using GStreamer. + +## Solution + +The gst-plugins-base 1.24.10 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-2024-47600](https://www.cve.org/CVERecord?id=CVE-2024-47600) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Base 1.24.10](/src/gst-plugins-base/gst-plugins-base-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8034.patch) diff --git a/security-advisories/sa-2024-0019.md b/security-advisories/sa-2024-0019.md new file mode 100644 index 00000000000..d5238e3f1c8 --- /dev/null +++ b/security-advisories/sa-2024-0019.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0019 (GHSL-2024-250, CVE-2024-47602) + +
+ +| | | +| ----------------- | --- | +| Summary | NULL-pointer dereferences and out-of-bounds reads in Matroska/WebM demuxer | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0019
GHSL-2024-250
CVE-2024-47602 | + +
+ +## Details + +NULL-pointer dereferences and out-of-bounds reads in the Matroska/WebM demuxer that can cause +crashes for certain input files. + +## Impact + +It is possible for a malicious third party to trigger NULL-pointer dereferences and out-of-bounds +reads that can result in a crash of the application. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47602](https://www.cve.org/CVERecord?id=CVE-2024-47602) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8057.patch) diff --git a/security-advisories/sa-2024-0020.md b/security-advisories/sa-2024-0020.md new file mode 100644 index 00000000000..5c4bd6d33c2 --- /dev/null +++ b/security-advisories/sa-2024-0020.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0020 (GHSL-2024-249, CVE-2024-47601) + +
+ +| | | +| ----------------- | --- | +| Summary | NULL-pointer dereference in Matroska/WebM demuxer | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0020
GHSL-2024-249
CVE-2024-47601 | + +
+ +## Details + +NULL-pointer dereference in the Matroska/WebM demuxer that can cause crashes +for certain input files. + +## Impact + +It is possible for a malicious third party to trigger NULL-pointer +dereferences that can result in a crash of the application. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47601](https://www.cve.org/CVERecord?id=CVE-2024-47601) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8057.patch) diff --git a/security-advisories/sa-2024-0021.md b/security-advisories/sa-2024-0021.md new file mode 100644 index 00000000000..127879a8d25 --- /dev/null +++ b/security-advisories/sa-2024-0021.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0021 (GHSL-2024-251, CVE-2024-47603) + +
+ +| | | +| ----------------- | --- | +| Summary | NULL-pointer dereference in Matroska/WebM demuxer | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0021
GHSL-2024-251
CVE-2024-47603 | + +
+ +## Details + +NULL-pointer dereference in the Matroska/WebM demuxer that can cause crashes +for certain input files. + +## Impact + +It is possible for a malicious third party to trigger NULL-pointer +dereferences that can result in a crash of the application. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47603](https://www.cve.org/CVERecord?id=CVE-2024-47603) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8057.patch) diff --git a/security-advisories/sa-2024-0022.md b/security-advisories/sa-2024-0022.md new file mode 100644 index 00000000000..bd165d098e0 --- /dev/null +++ b/security-advisories/sa-2024-0022.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0022 (GHSL-2024-115, CVE-2024-47538) + +
+ +| | | +| ----------------- | --- | +| Summary | Stack buffer-overflow in Vorbis decoder | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-base < 1.24.10 | +| IDs | GStreamer-SA-2024-0022
GHSL-2024-115
CVE-2024-47538 | + +
+ +## Details + +Stack buffer-overflow in Vorbis decoder that can cause crashes +for certain input files. + +## 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-base 1.24.10 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-2024-47538](https://www.cve.org/CVERecord?id=CVE-2024-47538) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Base 1.24.10](/src/gst-plugins-base/gst-plugins-base-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8035.patch) diff --git a/security-advisories/sa-2024-0023.md b/security-advisories/sa-2024-0023.md new file mode 100644 index 00000000000..96e6a0bb1c1 --- /dev/null +++ b/security-advisories/sa-2024-0023.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0023 (GHSL-2024-228, CVE-2024-47541) + +
+ +| | | +| ----------------- | --- | +| Summary | Out-of-bounds write in SSA subtitle parser | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-base < 1.24.10 | +| IDs | GStreamer-SA-2024-0023
GHSL-2024-228
CVE-2024-47541 | + +
+ +## Details + +Out-of-bounds write in SSA subtitle parser that can cause crashes +for certain input files. + +## Impact + +It is possible for a malicious third party to trigger an out-of-bounds write that +can result in a crash of the application. + +## Solution + +The gst-plugins-base 1.24.10 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-2024-47541](https://www.cve.org/CVERecord?id=CVE-2024-47541) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Base 1.24.10](/src/gst-plugins-base/gst-plugins-base-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8036.patch) diff --git a/security-advisories/sa-2024-0024.md b/security-advisories/sa-2024-0024.md new file mode 100644 index 00000000000..422f41d0fcd --- /dev/null +++ b/security-advisories/sa-2024-0024.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0024 (GHSL-2024-116, CVE-2024-47607) + +
+ +| | | +| ----------------- | --- | +| Summary | Stack buffer-overflow in Opus decoder | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-base < 1.24.10 | +| IDs | GStreamer-SA-2024-0024
GHSL-2024-116
CVE-2024-47607 | + +
+ +## Details + +Stack buffer-overflow in Opus decoder that can cause crashes +for certain input files. + +## 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-base 1.24.10 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-2024-47607](https://www.cve.org/CVERecord?id=CVE-2024-47607) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Base 1.24.10](/src/gst-plugins-base/gst-plugins-base-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8037.patch) diff --git a/security-advisories/sa-2024-0025.md b/security-advisories/sa-2024-0025.md new file mode 100644 index 00000000000..00a2c440551 --- /dev/null +++ b/security-advisories/sa-2024-0025.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0025 (GHSL-2024-118, CVE-2024-47613) + +
+ +| | | +| ----------------- | --- | +| Summary | NULL-pointer dereference in gdk-pixbuf decoder | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0025
GHSL-2024-118
CVE-2024-47613 | + +
+ +## Details + +A NULL-pointer dereference in the gdk-pixbuf decoder 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-good 1.24.10 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-2024-47613](https://www.cve.org/CVERecord?id=CVE-2024-47613) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8041.patch) diff --git a/security-advisories/sa-2024-0026.md b/security-advisories/sa-2024-0026.md new file mode 100644 index 00000000000..4e214a37f32 --- /dev/null +++ b/security-advisories/sa-2024-0026.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0026 (GHSL-2024-117, CVE-2024-47615) + +
+ +| | | +| ----------------- | --- | +| Summary | Out-of-bounds write in Ogg demuxer | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-base < 1.24.10 | +| IDs | GStreamer-SA-2024-0026
GHSL-2024-117
CVE-2024-47615 | + +
+ +## Details + +An out-of-bounds write in the Ogg demuxer that can cause crashes for certain input files. + +## Impact + +It is possible for a malicious third party to trigger out-of-bounds writes that +can result in a crash of the application, or potentially possibly also allow +code execution through heap manipulation. + +## Solution + +The gst-plugins-base 1.24.10 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-2024-47615](https://www.cve.org/CVERecord?id=CVE-2024-47615) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Base 1.24.10](/src/gst-plugins-base/gst-plugins-base-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8038.patch) diff --git a/security-advisories/sa-2024-0027.md b/security-advisories/sa-2024-0027.md new file mode 100644 index 00000000000..64230b4492d --- /dev/null +++ b/security-advisories/sa-2024-0027.md @@ -0,0 +1,51 @@ +# Security Advisory 2024-0027 (GHSL-2024-261, GHSL-2024-260, GHSL-2024-259, GHSL-2024-258, CVE-2024-47778, CVE-2024-47777, CVE-2024-47776, CVE-2024-47775) + +
+ +| | | +| ----------------- | --- | +| Summary | Various out-of-bounds reads in WAV parser | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0027
GHSL-2024-261, GHSL-2024-260, GHSL-2024-259, GHSL-2024-258
CVE-2024-47778, CVE-2024-47777, CVE-2024-47776, CVE-2024-47775 | + +
+ +## Details + +Various out-of-bounds reads in the WAV parser that can cause crashes for +certain input files. + +## Impact + +It is possible for a malicious third party to trigger out-of-bounds reads +that can result in a crash of the application. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47778](https://www.cve.org/CVERecord?id=CVE-2024-47778) +- [CVE-2024-47777](https://www.cve.org/CVERecord?id=CVE-2024-47777) +- [CVE-2024-47776](https://www.cve.org/CVERecord?id=CVE-2024-47776) +- [CVE-2024-47775](https://www.cve.org/CVERecord?id=CVE-2024-47775) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8042.patch) diff --git a/security-advisories/sa-2024-0028.md b/security-advisories/sa-2024-0028.md new file mode 100644 index 00000000000..fa38a47c1ac --- /dev/null +++ b/security-advisories/sa-2024-0028.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0028 (GHSL-2024-262, CVE-2024-47774) + +
+ +| | | +| ----------------- | --- | +| Summary | Integer overflow in AVI subtitle parser that leads to out-of-bounds reads | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0028
GHSL-2024-262
CVE-2024-47774 | + +
+ +## Details + +An integer overflow in the AVI subtitle parser that can lead to out-of-bounds +reads and can cause crashes for certain input files. + +## Impact + +It is possible for a malicious third party to trigger out-of-bounds reads that +can result in a crash of the application. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47774](https://www.cve.org/CVERecord?id=CVE-2024-47774) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8043.patch) diff --git a/security-advisories/sa-2024-0029.md b/security-advisories/sa-2024-0029.md new file mode 100644 index 00000000000..050b470ed9a --- /dev/null +++ b/security-advisories/sa-2024-0029.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0029 (GHSL-2024-263, CVE-2024-47835) + +
+ +| | | +| ----------------- | --- | +| Summary | NULL-pointer dereference in LRC subtitle parser | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-base < 1.24.10 | +| IDs | GStreamer-SA-2024-0029
GHSL-2024-263
CVE-2024-47835 | + +
+ +## Details + +NULL-pointer dereference in LRC subtitle parser that can cause crashes for +certain input files. + +## Impact + +It is possible for a malicious third party to trigger NULL-pointer +dereferences that can result in a crash of the application. + +## Solution + +The gst-plugins-base 1.24.10 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-2024-47835](https://www.cve.org/CVERecord?id=CVE-2024-47835) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Base 1.24.10](/src/gst-plugins-base/gst-plugins-base-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8039.patch) diff --git a/security-advisories/sa-2024-0030.md b/security-advisories/sa-2024-0030.md new file mode 100644 index 00000000000..68c697880d6 --- /dev/null +++ b/security-advisories/sa-2024-0030.md @@ -0,0 +1,48 @@ +# Security Advisory 2024-0030 (GHSL-2024-280, CVE-2024-47834) + +
+ +| | | +| ----------------- | --- | +| Summary | Use-after-free in Matroska demuxer | +| Date | 2024-12-03 20:00 | +| Affected Versions | GStreamer gst-plugins-good < 1.24.10 | +| IDs | GStreamer-SA-2024-0030
GHSL-2024-280
CVE-2024-47834 | + +
+ +## Details + +A use-after-free in the Matroska demuxer that can cause crashes for certain +input files. + +## Impact + +It is possible for a malicious third party to trigger a use-after-free that +can result in a crash of the application. + +## Solution + +The gst-plugins-good 1.24.10 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-2024-47834](https://www.cve.org/CVERecord?id=CVE-2024-47834) + +### GStreamer releases + +#### 1.24 (current stable) + +- [GStreamer 1.24.10 release notes](/releases/1.24/#1.24.10) +- [GStreamer Plugins Good 1.24.10](/src/gst-plugins-good/gst-plugins-good-1.24.10.tar.xz) + +### Patches + +- [Patch](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8057.patch) diff --git a/subprojects/FFmpeg.wrap b/subprojects/FFmpeg.wrap index 90876b44fdf..e112d1c2762 100644 --- a/subprojects/FFmpeg.wrap +++ b/subprojects/FFmpeg.wrap @@ -2,5 +2,5 @@ directory=FFmpeg url=https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg.git push-url=git@gitlab.freedesktop.org:gstreamer/meson-ports/ffmpeg.git -revision=meson-6.1 +revision=meson-7.1 depth=1 diff --git a/subprojects/cairo.wrap b/subprojects/cairo.wrap index aaf108a9e82..bc9cda0db9a 100644 --- a/subprojects/cairo.wrap +++ b/subprojects/cairo.wrap @@ -1,10 +1,11 @@ [wrap-file] -directory = cairo-1.18.0 -source_url = https://www.cairographics.org/releases/cairo-1.18.0.tar.xz -source_filename = cairo-1.18.0.tar.xz -source_hash = 243a0736b978a33dee29f9cca7521733b78a65b5418206fef7bd1c3d4cf10b64 -source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/cairo_1.18.0-1/cairo-1.18.0.tar.xz -wrapdb_version = 1.18.0-1 +directory = cairo-1.18.2 +source_url = https://www.cairographics.org/releases/cairo-1.18.2.tar.xz +source_filename = cairo-1.18.2.tar.xz +source_hash = a62b9bb42425e844cc3d6ddde043ff39dbabedd1542eba57a2eb79f85889d45a +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/cairo_1.18.2-1/cairo-1.18.2.tar.xz +wrapdb_version = 1.18.2-1 +diff_files = cairo-1.18.2/0001-dwrite-Fix-build-with-MinGW-11.patch [provide] dependency_names = cairo, cairo-gobject diff --git a/subprojects/gdk-pixbuf.wrap b/subprojects/gdk-pixbuf.wrap new file mode 100644 index 00000000000..97e90352a40 --- /dev/null +++ b/subprojects/gdk-pixbuf.wrap @@ -0,0 +1,10 @@ +[wrap-file] +directory = gdk-pixbuf-2.42.12 +source_url = https://download.gnome.org/sources/gdk-pixbuf/2.42/gdk-pixbuf-2.42.12.tar.xz +source_filename = gdk-pixbuf-2.42.12.tar.xz +source_hash = b9505b3445b9a7e48ced34760c3bcb73e966df3ac94c95a148cb669ab748e3c7 +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/gdk-pixbuf_2.42.12-1/gdk-pixbuf-2.42.12.tar.xz +wrapdb_version = 2.42.12-1 + +[provide] +gdk-pixbuf-2.0 = gdkpixbuf_dep diff --git a/subprojects/glib.wrap b/subprojects/glib.wrap index dc18b431bd9..3fded541347 100644 --- a/subprojects/glib.wrap +++ b/subprojects/glib.wrap @@ -1,10 +1,10 @@ [wrap-file] -directory = glib-2.78.3 -source_url = https://download.gnome.org/sources/glib/2.78/glib-2.78.3.tar.xz -source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/glib_2.78.3-1/glib-2.78.3.tar.xz -source_filename = glib-2.78.3.tar.xz -source_hash = 609801dd373796e515972bf95fc0b2daa44545481ee2f465c4f204d224b2bc21 -wrapdb_version = 2.78.3-1 +directory = glib-2.82.2 +source_url = https://download.gnome.org/sources/glib/2.82/glib-2.82.2.tar.xz +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/glib_2.82.2-1/glib-2.82.2.tar.xz +source_filename = glib-2.82.2.tar.xz +source_hash = ab45f5a323048b1659ee0fbda5cecd94b099ab3e4b9abf26ae06aeb3e781fd63 +wrapdb_version = 2.82.2-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 diff --git a/subprojects/gobject-introspection.wrap b/subprojects/gobject-introspection.wrap index 96c0f0aa0d1..bd46dd59891 100644 --- a/subprojects/gobject-introspection.wrap +++ b/subprojects/gobject-introspection.wrap @@ -5,7 +5,7 @@ source_fallback_url = https://ftp.acc.umu.se/pub/gnome/sources/gobject-introspec 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 +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 diff --git a/subprojects/gst-devtools/NEWS b/subprojects/gst-devtools/NEWS index 0a7f0b6afeb..ca8baff2ce0 100644 --- a/subprojects/gst-devtools/NEWS +++ b/subprojects/gst-devtools/NEWS @@ -1,722 +1,60 @@ -GStreamer 1.24 Release Notes +GStreamer 1.26 Release Notes -GStreamer 1.24.0 was originally released on 4 March 2024. +GStreamer 1.26.0 has not been released yet. It will be released in early 2025. -See https://gstreamer.freedesktop.org/releases/1.24/ for the latest version of this document. +The latest development release towards the upcoming 1.26 stable series is 1.25.50 and was released on 09 February 2025. -Last updated: Monday 4 March 2024, 23:00 UTC (log) - -Introduction +## Introduction The GStreamer team is proud to announce a new major feature release in the stable 1.x API series of your favourite cross-platform multimedia framework! As always, this release is again packed with many new features, bug fixes and other improvements. -Highlights - -- New Discourse forum and Matrix chat space -- New Analytics and Machine Learning abstractions and elements -- Playbin3 and decodebin3 are now stable and the default in gst-play-1.0, GstPlay/GstPlayer -- The va plugin is now preferred over gst-vaapi and has higher ranks -- GstMeta serialization/deserialization and other GstMeta improvements -- New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data -- New unixfd plugin for efficient 1:N inter-process communication on Linux -- cudaipc source and sink for zero-copy CUDA memory sharing between processes -- New intersink and intersrc elements for 1:N pipeline decoupling within the same process -- Qt5 + Qt6 QML integration improvements including qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink elements -- DRM Modifier Support for dmabufs on Linux -- OpenGL, Vulkan and CUDA integration enhancements -- Vulkan H.264 and H.265 video decoders -- RTP stack improvements including new RFC7273 modes and more correct header extension handling in depayloaders -- WebRTC improvements such as support for ICE consent freshness, and a new webrtcsrc element to complement webrtcsink -- WebRTC signallers and webrtcsink implementations for LiveKit and AWS Kinesis Video Streams -- WHIP server source and client sink, and a WHEP source -- Precision Time Protocol (PTP) clock support for Windows and other additions -- Low-Latency HLS (LL-HLS) support and many other HLS and DASH enhancements -- New W3C Media Source Extensions library -- Countless closed caption handling improvements including new cea608mux and cea608tocea708 elements -- Translation support for awstranscriber -- Bayer 10/12/14/16-bit depth support -- MPEG-TS support for asynchronous KLV demuxing and segment seeking, plus various new muxer features -- Capture source and sink for AJA capture and playout cards -- SVT-AV1 and VA-API AV1 encoders, stateless AV1 video decoder -- New uvcsink element for exporting streams as UVC camera -- DirectWrite text rendering plugin for windows -- Direct3D12-based video decoding, conversion, composition, and rendering -- AMD Advanced Media Framework AV1 + H.265 video encoders with 10-bit and HDR support -- AVX/AVX2 support and NEON support on macOS on Apple ARM64 CPUs via new liborc -- GStreamer C# bindings have been updated -- Rust bindings improvements and many new and improved Rust plugins -- Lots of new plugins, features, performance improvements and bug fixes - -Major new features and changes - -Discourse forum and Matrix chat space - -- The new Discourse forum and Matrix chat space are now our preferred communication channels for support and developer chat. - -- The mailing lists and IRC channel are on their way to being phased out, but Discourse can be used via e-mail as well. - -- For release announcements please subscribe to the News + Announcements category on Discourse, although we will continue to - also send announcements to the mailing list for the time being. - -Playbin3, decodebin3 now stable and default - -- After a year of stability, testing and more improvements, playbin3, and its various components (uridecodebin3, decodebin3 - and urisourcebin), are now the recommended playback components. - -- Some playback components have now switched to defaulting to playbin3: gst-play-1.0 and the GstPlay / GstPlayer libraries. - Application developers are strongly recommended to switch to using those components instead of the legacy playbin and - (uri)decodebin. - -Improvements in this cycle: - -- Better support missing/faulty decoders, attempt to use another one or gracefully un-select the stream. - -- Many fixes for more complex gapless and instant-switching scenarios - -- Lower latency for live pipelines - -- Fix for “chained” streams (ex: Ogg, or PMT update in MPEG-TS) - -- Fixes for hardware-accelerated playback with subtitles (provided the sink can handle offloading composition). This was also - partly due to a historical confusion between subtitle “decoders” (which decode the format to text and “parsers” (which only - do timing detection and optional seeking). - -GstMeta serialization/deserialization and other GstMeta improvements - -- GstMeta serialization/deserialization allows metas to be transmitted or stored. This is used by the unixfd and cudaipc - plugins for inter-process communication (IPC). Implemented so far for GstCustomMeta, GstVideoMeta, GstAudioMeta and - GstReferenceTimestampMeta. - -- Simplified GstCustomMeta registration with gst_meta_register_custom_simple() for the simple case where tags and transform - functions are not needed. - -- GstMetaClearFunction clears the content of the meta. This will be called by buffer pools when a pooled buffer is returned to - the pool. - -- Add gst_meta_info_new() and gst_meta_info_register() to register a GstMeta in two steps for easier extensibility. - -New unixfd plugin for efficient 1:N inter-process communication on Linux - -- unixfdsink and unixfdsrc are elements that, inspired by shmsink andn shmsrc, send UNIX file descriptors (e.g. memfd, dmabuf) - from one sink to multiple source elements in other processes on Linux. - -- The unixfdsink proposes a memfd/shm allocator to upstream elements which allows for example videotestsrc to write directly - into memory that can be transfered to other processes without copying. - -New GstMeta for SMPTE ST-291M HANC/VANC Ancillary Data - -- Previously only various specific GstMeta for ancillary data were provided, such as GstVideoCaptionMeta and GstVideoAFDMeta. - The new GstAncillaryMeta allows passing arbitrary ancillary data between elements, including custom and non-standard - ancillary data. See GstAncillaryMeta for details. - -- Add with gst_buffer_add_ancillary_meta() and retrieve with gst_buffer_get_ancillary_meta() or - gst_buffer_iterate_ancillary_meta(). - -- Supported by the newly added AJA sink and source elements - -DSD audio support - -- DSD audio is a non-PCM raw audio format representation and the GstAudio library gained support for this in form of new - GstDsdInfo and GstDsdFormat API. - -- Support for DSD audio has been implemented in alsasink as well as the GstAudioSink and GstAudioRingBuffer base classes, and - the gst-libav plugin to enable FFmpeg-based DSD elements and functionality. - -Analytics and Machine Learning - -- A new library, GstAnalytics, has been added. It defines a GstAnalyticsRelationMeta that can efficiently hold a large number - of observations from a data analysis process, for example from machine learning. It also contains a matrix of the - relationship between those observations. - -- Three types of metadata are already defined in the library: object detection, classification and tracking. - -- A new objectdetectionoverlay element has been merged that draws the bounding boxes and the classes from the object detection - and classification metadata types. - -- The onnxinference element has been split into two parts. The first part works with the ONNX Runtime library to do the actual - inference, while the second part called ssdobjectdetector interprets the produced tensor. This new element creates - GstAnalyticsRelationMeta. - -- The onnxinference element now accepts video frames without transformation if the module declares that it accepts the “Image” - type and the format is something that GStreamer knows. - -- In the next release, tensor decoders such as ssdobjectdetector will live outside of the ONNX plugin so they can be used with - other machine learning acceleration frameworks. - -Qt5 + Qt6 QML integration improvements - -- The Qt5 qmlglsink, qmlgloverlay, qmlglmixer received support for directly consuming BGRA and YV12 video frames without a - prior glcolorconvert. - -- New qml6glsrc, qml6glmixer, and qml6gloverlay elements as Qt6 counterparts to the existing Qt5 elements, also with support - for directly consuming BGRA and YV12 video frames without a prior glcolorconvert. - -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. - -DRM Modifier Support for dmabufs on Linux - -The Linux dmabuf subsystem provides buffer sharing across different hardware device drivers and subsystems, and is used -extensively by the DRM subsystem to exchange buffers between processes, contexts, and library APIs within the same process, and -also to exchange buffers with other subsystems such as Linux Media. - -In GStreamer, it’s used on the capture side (v4l2src, pipewire), hardware-accelerated video decoders and encoders, OpenGL -integration, Wayland renderers, etc. - -GStreamer has had support for dmabufs for a long time and was able to negotiate “zero-copy” paths between different components, -however it only supported and assumed simple linear formats and was not able to negotiate complex non-linear formats. This meant -that dmabuf support actually had to be disabled in many scenarios to avoid “garbled video”. - -With GStreamer 1.24 there is now full DRM modifier support and complex non-linear formats can be supported and negotiated -between components. - -This is achieved with an extra drm_format field in video/x-raw(memory:DMABuf), format=(string)DMA_DRM caps, e.g. -drm-format=(string)NV12:0x0x0100000000000001. - -See the GStreamer DMA buffers design documentation for more details. - -This is used in the VA-API va plugin, waylandsink, the MSDK plugin, and the OpenGL integration. Video4Linux support is expected -to land in one of the next minor releases. - -New API has been added for easy handling of these new caps: - -- GstVideoInfoDmaDrm plus associated functions, similar to GstVideoInfo, including conversion to and from GstVideoInfo with - gst_video_info_dma_drm_from_video_info() and gst_video_info_dma_drm_to_video_info() - -- GST_VIDEO_DMA_DRM_CAPS_MAKE - -- GST_VIDEO_FORMAT_DMA_DRM - -OpenGL integration enhancements - -- When using EGL, if both OpenGL ES and OpenGL are available, OpenGL ES is preferred over OpenGL. OpenGL ES supports some - necessary features required for dmabuf support. This does not apply if an external library/application chooses an OpenGL API - first. - -- Improved support for dmabuf use cases. The glupload element now supports the new and improved dmabuf negotiation with - explicit modifiers. - -- Base classes for mixing with OpenGL are now public API. GstGLBaseMixer and GstGLMixer are exposed matching the existing - filter-based GstGLBaseFilter and GstGLFilter base classes. The new OpenGL mixer base classes are based on - GstVideoAggregator. - -- Add support for a ‘surfaceless’ EGL context using EGL_MESA_platform_surfaceless. - -- Expose Vivante Framebuffer build-related files (pkg-config, gir) as public API - -- Add support for more video formats: - - - A420 8/10/12/16-bit. - - A422 8/10/12/16-bit. - - A444 8/10/12/16-bit. - - I420 10/12 bit. - - RBGA. - -- Add support for tiled video formats - - - NV12_16L32S (Mediatek format) - - NV12_4L4 (Verisilicon Hantro format) - -- glcolorconvert now has API for retrieving shader strings for: - - - swizzling (reordering components). - - YUV->RGB conversion. - - RGB->YUV conversion. - -- Add more helpers for information about a particular video and/or GL format e.g. number of components, bytes used, or pixel - ordering. - -- glvideomixer has new sink pad properties sizing-policy, xalign, yalign matching compositor. - -- GstGLBufferPool now has a configuration option for allowing a number of buffers to be always outstanding allowing for - reducing the potential synchronisation delay when reusing OpenGL memory backed buffers. - -Vulkan integration enhancements - -- Add support for the Vulkan H.264 and H.265 decoders. - -- Add support for timeline semaphores. - -- Optionally use newer Vulkan functions for format selection. - -- Add support for GPU-assisted validation. - -- Vulkan/Wayland: add support for xdg_wm_base protocol for creating a visible debug window. Required as the previous wl_shell - interface is being removed from compositors. - -CUDA / NVCODEC integration and feature additions - -- New cudaipcsrc and cudaipcsink elements for zero-copy CUDA memory sharing between processes - -- New nvJPEG library based nvjpegenc JPEG encoder element - -- The NVIDIA desktop GPU decoder nvh264sldec, nvh265sldec, nvvp8sldec, and nvvp9sldec elements were renamed to nvh264dec, - nvh265dec, nvvp8dec, and nvvp9dec, respectively. - -- GStreamer NVIDIA H.264 and H.265 encoders except for nvh264enc and nvh265enc gained support for CEA708 Closed Caption - inserting. - -- OpenGL memory support is added to nv{cuda,autogpu}h264enc and nv{cuda,autogpu}h265enc elements - -- CUDA stream integration: As of 1.24, CUDA stream synchronization is an application’s responsibility, and GStreamer will not - execute unnecessary synchronization operations. If an application needs direct access to CUDA memory via GST_MAP_CUDA map - flag, cuStreamSynchronize() or gst_cuda_memory_sync() call is required unless application-side CUDA operation is executed - with the GstCudaMemory’s associated CUDA stream. - -RTP stack improvements - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is useful for relaying an RTP stream as-is through gst-rtsp-server, which expects an RTP payloader with certain - properties at the end of an RTSP media sub-pipeline. - -- New “timeout-inactive-rtp-sources” property on rtpbin, sdpdemux and rtpsession to allow applications to disable automatic - timeout of sources from which no data has been received for a while. - -- rtpvp8pay, rtpvp9pay: expose “picture-id” as a property, and add a “picture-id-offset” property to the VP9 payloader to - bring it in line with the VP8 payloader. - -- rtpjitterbuffer has seen improved media clock handling (clock equality and clock setting/resetting), as well as two new - properties that allow reconstruction of absolute PTP timestamps without actually syncing to the PTP clock, which can be - useful in scenarios where one wants to reconstruct the absolute PTP clock timestamps on a machine that doesn’t have access - to the network of the PTP clock provider. The two new properties are: - - - “rfc7273-use-system-clock”: allows the jitter buffer to assume that the system clock is synced sufficiently close to the - media clock used by an RFC7273 stream. By default the property is disabled and the jitter buffer will create a media - clock and try to sync to it, but this is only required to determine in which wraparound period from the media clock’s - Epoch the current RTP timestamps refer to (and thus to reconstruct absolute time stamps from them). If the property is - enabled the wraparound period and current offset from the Epoch will be determined based on the local system clock, - which means that no direct network connection to the media clock provider is needed to reconstruct absolute timestamps. - There is also no start-up delay, because there’s no clock sync that needs to be established first. - - - “rfc7273-reference-timestamp-meta-only”: If this property is enabled then the jitter buffer will do the normal timestamp - calculations for the output buffers according to the configured mode instead of making use of the RFC7273 media clock - for that. It will still calculate RFC7273 media clock timestamps, but only attach them to the output buffers in form of - a clock reference meta. - -- RTP payloaders and depayloaders now have an “extensions” property for retrieving the list of currently enabled RTP header - extensions. - -- rtpbin and webrtcbin no longer blindly set properties on the jitter buffer assuming it’s a standard rtpjitterbuffer, but - instead check if the property is available first, to better support non-standard jitterbuffers or even an identity element - in lieu of a jitter buffer. - -- RTP header extension handling fixes for depayloaders that aggregate multiple input buffers into a single output buffer. - Before, only the last RTP input buffer was checked for header extensions. Now the depayloader remembers all RTP packets - pushed before an output buffer is produced and checks all RTP input buffers for header extensions. - - - Affected depayloaders: rtph264depay, rtph265depay, rtpvp8depay, rtpvp9depay, rtpxqtdepay, rtpasfdepay, rtpmp4gdepay, - rtpsbcdepay, rtpvorbisdepay, rtpmp4vdepay, rtptheoradepay, rtpsv3vdepay, rtpmp4adepay, rtpklvdepay, rtpjpegdepay, - rtpj2kdepay, rtph263pdepay, rtph263depay, rtph261depay. rtpgstdepay. - -WebRTC improvements - -- Add support for ICE consent freshness (RFC 7675). This requires libnice >= 0.1.22. - -- Advertise the local side of an end-of-candidates with an empty candidate string. - -- Add the number of Data Channels opened and closed to webrtcbin’s statistics. - -- Various improvements and feature additions in the Rust webrtc plugin, which provides webrtcsrc and webrtcsink elements as - well as specific elements for different WebRTC signalling protocols. See the Rust plugins section below for more details. - -Adaptive Streaming improvements and Low-Latency HLS (LL-HLS) support - -- hlsdemux2 now supports Low-Latency HLS (LL-HLS) - -- hlsdemux2 asynchronous playlist download and update improves responsiveness and bandwith usage. - -- hlsdemux2 handles fallback variant URLs. - -- hlsdemux2 is more responsive and accurate when handling seeks. - -- dashdemux2 and hlsdemux2 have a new “start-bitrate” property, improving the decision for which initial stream variant that - will be used. - -- dashdemux2, hlsdemux2, mssdemux2 have received many improvements regarding seeking, along with support for “early-seek” - which allows playback to start immediately from the requested position without any previous download. - -- dashdemux2, hlsdemux2, mssdemux2 better handle errors on or near the live edge. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- No development took place on the legacy demuxers (dashdemux, hlsdemux, mssdemux). Application developers are reminded to use - the new demuxers instead. They are automatically picked up when using urisourcebin, uridecodebin3 or playbin3. - -W3C Media Source Extensions library - -- A new GStreamer library (mse) implementing the W3C Media Source Extensions specification was added. - -- Applications can embed this library along with GStreamer in order to integrate software that uses the Media Source APIs - without relying on a web browser engine. Typically an application consuming this library will wrap the C API with JavaScript - bindings that match the Media Source API so their existing code can integrate with this library. - -Closed Caption handling improvements - -- ccconverter supports converting between the two CEA-608 fields. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- Various improvements and feature additions in the Rust-based closed caption elements. Check out the Rust plugins section - below for more details. - -Precision Time Protocol (PTP) clock improvements - -- Many fixes and compatibility/interoperability improvements. - -- Better support for running on devices with multiple network interfaces. - -- Allow sync to master clock on same host. - -- PTP clock support is now also available on Windows. - -- The standalone ptp-helper binary has been rewritten in Rust for portability and security. This works on Linux, Android, - Windows, macOS, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Solaris and Illumos. Newly supported compared to the C version is - Windows. Compared to the C version various error paths are handled more correctly and a couple of memory leaks are fixed. - Otherwise it should work identically. The minimum required Rust version for compiling this is 1.48, i.e. the version - currently in Debian stable. On Windows, Rust 1.54 is needed at least. - -- New ptp-helper Meson build option so PTP support can be disabled or required. - -- gst_ptp_init_full() allows for a more fine-grained and extensible configuration and initialization of the GStreamer PTP - subsystem, including TTL configuration. - -Bayer 10/12/14/16-bit depth support - -- bayer2rgb and rgb2bayer now support bayer with 10/12/14/16 bit depths - -- v4l2src and videotestsrc now support bayer with 10/12/14/16 bit depths - -- imagefreeze gained bayer support as well - -MPEG-TS improvements - -- mpegtsdemux gained support for - - segment seeking for seamless non-flushing looping, and - - synchronous KLV -- mpegtsmux now - - allows attaching PCR to non-PES streams - - allows setting of the PES stream number for AAC audio and AVC video streams via a new “stream-number” property on the - muxer sink pads. Currently the PES stream number is hard-coded to zero for these stream types. - - allows writing arbitrary Opus channel mapping families and up to 255 channels - - separate handling of DVB and ATSC AC3 descriptors - -New elements and plugins - -- analyticsoverlay visualises object-detection metas on a video stream. - -- autovideoflip and autodeinterlace are two new auto elements. - -- AJA source and sink elements plus device provider for AJA capture and playout cards, including support for HANC/VANC - ancillary data. - -- New cea608mux element for muxing multiple CEA-608 streams together. - -- The codec2json plugin adds av12json, h2642json, h2652json and vp82json elements which convert AV1, H.264, H.265 and VP8 - frame parameters into human readable JSON data, which is useful for debugging and testing purposes. - -- New lc3 plugin with a decoder and encoder for the Bluetooth LC3 audio codec. - -- New onnxinference element to run ONNX inference models on video buffers. - -- New rtppassthroughpay element which just passes RTP packets through unchanged, but appears like an RTP payloader element. - This is mostly useful for medias that simply pass through an existing RTP stream in gst-rtsp-server. - -- Qt6: qml6glsrc, qml6glmixer, qml6gloverlay, and qml6d3d11sink - -- New SVT-AV1 encoder plugin, imported from SVT-AV1 but with many fixes. - -- Many exciting new Rust elements, see Rust section below. - -- New DirectWrite text rendering and Direct3D12 plugins (see Windows section below). - -- New vaav1enc element for encoding video in AV1 (See VA-API section) - -- New uvcsink element for exporting streams as UVC camera - -New element features and additions - -- alphacombine supports I420_10LE now for 10-bit WebM/alpha support. - -- The amfcodec for hardware-accelerated video encoding using the Advanced Media Framework (AMF) SDK for AMD GPUs gained some - new features: - - - 10-bit and HDR support for H.265 / HEVC and AV1 video encoders - - B-frame support in the H.264 encoder - - Initial support of pre-analysis and pre-encoding - - Initial support of Smart Access Video for optimal distribution amongst multiple AMD hardware instances. - -- appsink: new “propose-allocation” signal so applications can provide a buffer pool or allocators to the upstream elements, - as well as “max-time” and “max-buffers” properties to configure the maximum size of the appsink-internal queue in addition - to the existing “max-bytes” property. - -- autovideoconvert exposes colorspace and scaler elements for well know elements - -- avtp: add AVTP Raw Video Format payload and de-payload support. - -- cacasink’s output driver can now be selected via the “driver” property. - -- camerabin: various fixes and stability improvements - -- clocksync: “QoS” property to optionally send QoS events upstream like a synchronising sink would. - -- cutter: can add GstAudioLevelMeta on output buffers, which can be enabled via the new “audio-level-meta” property. - -- dashdemux2 has a new “start-bitrate” property. - -- dashsink can now use the dashmp4mux muxer from the Rust plugins and will also produce better and RFC 6381-compatible codec - strings. The “suggested-presentation-delay” property allows to set the suggested presentation delay in the MPD. - -- deinterlace: Add support for 10/12/16-bit planar YUV formats - -- The dvdspu subpicture overlay now implements GstVideoOverlayComposition support to make it work better with hardware - decoders where the video data should ideally stay on the GPU/VPU and the overlay blitting be delegated to the renderer. - -- encodebin now automatically autoplugs timestamper elements such as h264timestamper or h265timestamper, based on new - “Timestamper” element factory type and rank. - -- New fakevideodec element (see debugging section below). - -- filesink: “file-mode” property to allow the ability to specify rb+ file mode, which overwrites an existing file. This is - useful in combination with splitmuxsink so that files can be pre-allocated which can be useful to reduce disk fragmentation - over time. - -- flvmux: add “enforce-increasing-timestamps” property to allow disabling a hack that was added back in the day because - librtmp as used in rtmpsink would get confused by timestamps going backwards, but this is no longer required with rtmpsink2. - If set to true (still the default, for backwards compatibility), flvmux will modify buffers timestamps to ensure they are - always strictly increasing, inside one stream and also between the audio and video streams. - -- giostreamsink: Add a property to close the stream on stop(). - -- h264parse improved its AU boundary detection. - -- h264parse, h265parse, mpegvideoparse now support multiple unregistered user data SEI messages. - -- insertbin is now a registered element and available via the registry, so can be constructed via parse-launch and not just - via the insertbin API. - -- jack: libjack is now loaded dynamically at runtime instead of linking it at build time. This means the plugin can be shipped - on Windows and macOS and will work if there’s a user-installed JACK server/library setup. - -- jpegparse now has a rank so it will be autoplugged if needed. - -- kmssink: Add auto-detection for NXP i.MX8M Plus LCDIFv3, ST STM32 LTDC, and Texas Instruments TIDSS display controllers. - -- matroskademux and matroskamux gained support for more raw video formats, namely RGBA64_LE, BGRA64_LE, GRAY10_BE32, GRAY16_LE - -- mpg123audiodec’s rank was changed from MARGINAL to PRIMARY so it’s now higher than avdec_mp3, as it works better with - “freeformat” MP3s. - -- msdk: - - - DRM modifier support on Linux - - - only expose codecs and capabilities actually supported by the platform - - - msdkvpp video post-processing: - - - new “hdr-tone-mapping” property to enable HDR-to-SDR tone mapping - - new compute scaling mode - - - Decoders sport D3D11 and VA integration, and the VP9 decoder supports certain resolution changes. - - - Encoders: - - - msdkh264enc, msdkh265enc**: “pic-timing-sei” property to insert pic timing SEI - - msdkh264enc, msdkh265enc**: Add properties to allow different max/min-qp values for I/P/B frames - - msdkh264enc: Added BGRx format DMABuf support - - Advertise special image formats in low power mode - -- mxfdemux gained support for FFV1 demuxing - -- opusenc, opusdec now support decoding and encoding more than 8 channels, and can also handle unknown/unpositioned channel - layouts. - -- The oss plugin gained a device provider for audio device discovery - -- pcapparse learned how to handle the Linux “cooked” capture encapsulation v2 - -- Intel Quick Sync plugin improvements: +## Highlights - - qsvh264enc gained more encoding options - - qsvh265dec now supports GBR decoding and HEVC RExt profiles - -- qtdemux now adds audio clipping meta when playing gapless m4a content, supports CENC sample grouping, as well as the SpeedHQ - video codec. - -- ristsrc gained support for dynamic payloads via the new “caps” and “encoding-name” properties. These can be used to make the - ristsrc receive other payload types than MPEG-TS. - -- rtmp2src: a new “no-eof-is-error” property was added: There is currently no way for applications to know if the stream has - been properly terminated by the server or if the network connection was disconnected, as an EOS is sent in both cases. With - the property set, connection errors will be reported as errors, allowing applications to distinguish between both scenarios. - -- rtspsrc: new “extra-http-request-headers” property for adding custom http request headers when using http tunnelling. - -- sdpdemux now supports SDP source filters as per RFC 4570; audio-only or video-only streaming can be selected via the new - “media” property, and RTCP feedback can be disabled via the “rtcp-mode” property. - -- splitmuxsrc uses natural ordering to sort globbed filenames now, i.e. 0, 1, 2, 10, 11 instead of 0, 1, 10, 11, 2, … - -- srt: Add more fields to the statistics to see how many packets were retransmitted and how many were dropped. - -- switchbin: many improvements, especially for caps handling and passthrough. - -- taginject: a “scope” property was added to allow injection of global tags in addition to the current default which is stream - tags. - -- timeoverlay: add buffer-count and buffer-offset time modes. - -- udpsrc: new “multicast-source” property to support IGMPv3 Source Specific Muliticast (SSM) as per RFC 4604. - -- videoconvertscale, videoconvert: add a “converter-config” property to allow fine-tuning conversion parameters that are not - exposed directly as property. - -- videoflip: many orientation tag handling fixes and improvements - -- videorate: add “drop-out-of-segment” property to force dropping of out-of-segment buffers. - -- volume now supports arbitrarily-large positive gains via a new “volume-full-range” property (it was not possibly to just - allow a bigger maximum value for the existing “volume” property for GstController-related backwards-compatibility reasons). - -- waylandsink, gtkwaylandsink: improved frame scheduling reducing frame drops and improve throughput. - -- webpenc now has support for animated WebP which can be enabled via the new “animated” property. By default it will just - output a stand-alone WebP image for each input buffer, just like before. +- to be filled in +- Lots of new plugins, features, performance improvements and bug fixes -- wpe: added a WebProcess crash handler; gained WPEWebKit 2.0 API support. +## Major new features and changes -- x264enc gained support for 8-bit monochrome video (GRAY8). +- to be filled in -- ximagesrc gained navigation support (mouse and keyboard events). +## New elements and plugins -- y4mdec now parses extended headers to support high bit depth video. +- to be filled in -Plugin and library moves +## New element features and additions -- The AMR-NB and AMR-WB plugins have been moved from -bad to -good. +- to be filled in -Plugin and element removals +## Plugin and library moves -- The entire gst-omx package and plugin has been retired. See the OMX section below for more details. +- to be filled in -- The RealServer RTSP extension, RDT handling and PNM source have been removed from the realmedia plugin. +## Plugin and element removals -- The kate subtitle plugin has been removed. +- to be filled in -Miscellaneous API additions +## Miscellaneous API additions GStreamer Core -- gst_pipeline_get_configured_latency() and gst_pipeline_is_live() convenience functions to query liveness and configured - latency of a pipeline. - -- Plugins can now provide status info messages for plugins that will be displayed in gst-inspect-1.0 and is useful for dynamic - plugins that register features at runtime. They are now able to provide information to the user why features might not be - available. This is now used in the amfcodec, nvcodec, qsv, and va plugins. - -- GST_OBJECT_AUTO_LOCK() and GST_PAD_STREAM_AUTO_LOCK() are g_autoptr(GMutexLocker)-based helpers for GstPad and GstObject - that unlock the mutex automatically when the helper goes out of scope. This is not portable so should not be used in - GStreamer code that needs to be portable to e.g. Windows with MSVC. - -- gst_clear_context(), gst_clear_promise(), gst_clear_sample() - -- gst_util_ceil_log2() and gst_util_simplify_fraction() utility functions - -- New TAG_CONTAINER_SPECIFIC_TRACK_ID tag for container specific track ID as used in an HTML5 context, plus basic support in - matroskademux, qtdemux, dashdemux and dashdemux2 - -- New utility functions to create a stream-id without a pad for elements: - - - gst_element_decorate_stream_id() - - gst_element_decorate_stream_id_printf_valist() - - gst_element_decorate_stream_id_printf() - -- GstQueueArray gained API for sorting and sorted insertion - -- Add strict GstStructure serialisation with gst_structure_serialize_full() in combination with GST_SERIALIZE_FLAG_STRICT - which only succeeds if the result can later be fully deserialised again. - -- GstBaseSrc enhancements: the “automatic-eos” property can be used to do the equivalent to gst_base_src_set_automatic_eos(). - gst_base_src_push_segment() sends a segment event right away which can be useful for subclasses like appsrc which have their - own internal queuing. - -- GstBaseSink gained a new custom GST_BASE_SINK_FLOW_DROPPED flow return which can be used by subclasses from the virtual - ::render method to signal to the base class that a frame is not being rendered. This is used in e.g. waylandsink and ensures - that elements such as fpsdisplaysink will correctly report the rate of frames rendered and dropped. - -GstDiscoverer - -- New “load-serialized-info” signal to retrieve a serialized GstDiscovererInfo - -GstSDP - -- Add gst_sdp_message_remove_media() - -Video Library - -DRM Modifier Support for dmabufs on Linux - -See section above. - -List of Video Formats for Passthrough - -New helper API was added to get a list of all supported video formats, including DMA_DRM formats, and can be used to advertise -all supported formats for passthrough purposes: - -- GST_VIDEO_FORMATS_ANY_STR, GST_VIDEO_FORMATS_ANY -- gst_video_formats_any() which can be used by bindings or for code that prefers GstVideoFormat values instead of strings. - -New Video Formats - -- 12-bit and 16-bit A420 / A422 / A444 (YUV with alpha channel) variants: - - - A444_12BE, A444_12LE - - A422_12BE, A422_12LE - - A420_12BE, A420_12LE - - A444_16BE, A444_16LE - - A422_16BE, A422_16LE - - A420_16BE, A420_16LE - -- 8-bit A422 / A444 (YUV with alpha channel) variant: - - - A422 - - A444 - -- Planar 16-bit 4:4:4 RGB formats: - - - GBR_16BE - - GBR_16LE +- to be filled in -- RBGA, intended to be used by hardware decoders where VUYA is only supported 4:4:4 decoding surface but the stream is encoded - with GBR color space, such as HEVC and VP9 GBR streams for example. +Other libs -- Two tiled Mediatek 10-bit formats: +- to be filled in - - MT2110T - - MT2110R +## Miscellaneous performance, latency and memory optimisations -- Tiled 10-bit NV12 format NV12_10LE40_4L4 (Verisilicon Hantro) - -Miscellaneous performance, latency and memory optimisations - -- liborc 0.4.35 (latest: 0.4.38) adds support for AVX/AVX2 and contains improvements for the SSE backend. - -- liborc 0.4.37 adds support for NEON on macOS on Apple ARM64 CPUs. - -- Most direct use of the GLib GSLice allocator has been removed, as there is little evidence that it actually still provides - much advantage over the standard system allocator on Linux or Windows in 2024. There is strong evidence however that it - causes memory fragmentation for standard GStreamer workloads such as RTSP/RTP/WebRTC streaming. +- to be filled in - As always there have been plenty of performance, latency and memory optimisations all over the place. -Tracing framework and debugging improvements - -- The gst-stats tool can now be passed a custom regular expression +## Tracing framework and debugging improvements -- gst-debug-viewer from the devtools module has seen minor improvements and fixes +- to be filled in New tracers @@ -726,634 +64,183 @@ Debug logging system improvements - Nothing major in this cycle. -Fake video decoder - -- The new fakevideodec element does not decode the input bitstream, it only reads video width, height and framerate from the - caps and then pushes out raw video frames of the expected size in RGB format. - -- It draws a snake moving from left to right in the middle of the frame, which is reasonably light weight and still provides - an idea about how smooth the rendering is. - -Tools - -- gst-launch-1.0 gained a new --prog-name command line option to set the program name, which will be used by GTK and GStreamer - to set the class or app-id. - -- gst-play-1.0 now defaults to using playbin3, but can still be made to use the old playbin by passing the --use-playbin2 - command line argument. - -GStreamer FFmpeg wrapper - -- New avvideocompare element to compare two incoming video buffers using a specified comparison method (e.g. SSIM or PSNR). +## Tools -- Prefer using FFmpeg Musepack decoder/demuxer over musepackdec as they work better with decodebin3 and playbin3 which likes - to have parsers and decoders separate. +- to be filled in -- Added codec mappings for AV1, MxPEG, FFVHuff video +## GStreamer FFmpeg wrapper -- Added raw video format support for P010, VUYA, Y410, P012, Y212 and Y412. +- to be filled in -- Newer, non-deprecated APIs are used by the plugin when built with FFmpeg 6.0 or newer. +## GStreamer RTSP server -- The FFmpeg meson subproject wrap has been updated to v6.1 +- to be filled in -- Note: see Known Issues section below for known issues with FFmpeg 6.0 - -GStreamer RTSP server - -- New “ensure-keyunit-on-start” property: While the suspend modes NONE and PAUSED provided a low startup latency for - connecting clients, it did not ensure that streams started on fresh data. With this new property it is possible to maintain - the low startup latency of those suspend modes while also ensuring that a stream starts on a key unit. Furthermore, by - setting the new “ensure-keyunit-on-start-timeout” property it is also possible to accept a key unit of a certain age, but - discard it if too much time has passed and instead force a new key unit. - -- rtspclientsink: apply “port-range” property for RTCP port selection as well - -GStreamer VA-API support +## GStreamer VA-API support GstVA -- vah264dec, vah265dec, vavp8dec, vavp9dec, vampeg2dec and vaav1dec were promoted to rank PRIMARY+1 on Linux - -- Improved support for dmabuf use cases. All va elements now negotiate the new and improved dmabuf capabilities with explicit - modifiers. This supports both import and export of dmabufs. - -- Added vaav1enc element, available in recent Intel and AMD GPUs - -- Added support for the experimental VA-Win32 backend. It needs at least libva 1.18 - -- Improved handling of multi-GPU systems. Still, sharing buffers among them is not advised. - -- Bumped minimum libva version to 1.12 - -- Enhanced support for RadeonSI Mesa driver for 10bit decoding - -- Register elements only for allowed drivers (Intel and Mesa, for the moment) +- to be filled in GStreamer-VAAPI - The new GstVA elements (see above) should be preferred when possible. -- Ranks of decoders were demoted to NONE so they won’t be used automatically by playbin and similar elements anymore. - -- Clean-ups and minimal fixes. - - gstreamer-vaapi should be considered deprecated and may be discontinued as soon as the va plugin is fully feature equivalent. Users who rely on gstreamer-vaapi are encouraged to migrate and test the va elements at the earliest opportunity. -GStreamer Video4Linux2 support - -- New uvcsink element, based on v4l2sink allow streaming your pipeline as a UVC camera using Linux UVC Gadget driver. - -- v4l2src now supports 10/12/14/16-bit bayer formats. - -- Stateful decoders now pass too large encoded frames over multiple buffers. - -- AV1 Stateless video decoder. - -- Stateless decoders now tested using Virtual driver (visl), making it possible to run the tests in the cloud based CI - -GStreamer OMX - -- The gst-omx module has been removed. The OpenMAX standard is long dead and even the Raspberry Pi OS no longer supports it. - There has not been any development since 1.22 was released. Users of these elements should switch to the Video4Linux-based - video encoders and decoders which have been the standard on embedded Linux for quite some time now. - -- Hardware vendors which still use OpenMAX are known to have non-standard forks and it is recommended that they maintain it - while planning their move to the Video4Linux API. - -GStreamer Editing Services and NLE - -- Implement a gesvideoscale effect which gives user the ability to chooses where a clip has to be scaled in the chain of - effects. By default scaling is done in the compositor. - -- Add support for gessrc as sub-timeline element so third party can implement their own formatters and use their timelines as - sub-timelines. Before that, only timelines serialized as files on the filesystem could be loaded as sub-timelines (using - gesdemux). - -- Implement a new GESDiscovererManager singleton object making management of the discoverers used to discoverer media files - cleaner and allowing to expose the following APIs: - - - load-serialize-info signal so GstDiscovererInfo can be serialized by users the way they like and load them without - requiring discovering the file when reloading a project. - - source-setup signal so user can tweak source elements during discovery - -- Expose GESFrameCompositionMeta in public API so user can implement their own effects targetting GES which take into account - that meta. - -- Expose audioconvert:mix-matrix property in audio sources - -- Port GESPipeline rendering to use encodebin2. This allows rendering timelines directly with a muxing sink (like hlssinkX - etc..) and leverage all new features of that new element. - -ges-launch - -- Fix setting keyframes - -- Add an ignore-eos option - -- Allow overriding container profile so that the user can build encoding profiles following the media format of a specific - media file, for example, but ensuring it is muxed using a specific format - -- Ensure sink elements are inside a GstBin and never in a GstPipeline +## GStreamer Video4Linux2 support -- Move +effect stack effects from source to last effect added, so it feels more natural to user as adding them at the - beginning of the chain while the syntax is +effect felt wrong +- to be filled in -GStreamer validate +## GStreamer Editing Services and NLE -- In action types, add a way to avoid checking property value after setting it, in case elements do it async for example. +- to be filled in -- Add a vmethod to free GstValidateActionParameters to be more binding friendly. +## GStreamer validate -- Allow scenarios to define the pipeline state target in the metadata instead of assuming PLAYING state. +- to be filled in -- Add support to run sub-pipelines/scenarios - - - Added support to forward buffers from appsink to appsrc - -- Add a way to set pipeline base-time, start-time and force using the system clock. - -- Add a ‘fill-mode’ to the appsrc-push action type so we can create some type of streams easily using an appsrc, giving - control when writing scenarios without requiring files with the content. - -- Add a “select-streams” action type to test “stream aware” elements. - -- Add a way to wait for a property to reach a specified value before executing an action. For example it is possible to wait - for a pad to get some specific caps set before executing an action. - -- validate: Add support to replace variables in deeply nested structures in particular for more complex action types where - some of the properties are inside structures. - -- Fixed compatibility with Python 3.12. - -GStreamer Python Bindings +## GStreamer Python Bindings gst-python is an extension of the regular GStreamer Python bindings based on gobject-introspection information and PyGObject, and provides “syntactic sugar” in form of overrides for various GStreamer APIs that makes them easier to use in Python and more pythonic; as well as support for APIs that aren’t available through the regular gobject-introspection based bindings, such as e.g. GStreamer’s fundamental GLib types such as Gst.Fraction, Gst.IntRange etc. -- Added a GstTagList override that makes a tag list act like a dict - -- Fix build and usage in Windows - -- Various fixes for Python >= 3.12 - -- Rework libpython loading to be relocatable - -- Fix libpython dlopen on macOS +- to be filled in -GStreamer C# Bindings +## GStreamer C# Bindings -- The GStreamer C# bindings have been updated to a more recent version of GtkSharp and the bindings have been regenerated with - that version. +- to be filled in - GStreamer API added in recent GStreamer releases is now available -- GstRtspServer bindings have been added, plus an RTSP server example - -GStreamer Rust Bindings and Rust Plugins +## GStreamer Rust Bindings and Rust Plugins The GStreamer Rust bindings and plugins are released separately with a different release cadence that’s tied to the twice-a-year GNOME release cycle. -The latest release of the bindings (0.22) has already been updated for the new GStreamer 1.24 APIs, and works with any GStreamer +The latest release of the bindings (0.23) has already been updated for the new GStreamer 1.26 APIs, and works with any GStreamer version starting at 1.14. gst-plugins-rs, the module containing GStreamer plugins written in Rust, has also seen lots of activity with many new elements -and plugins. The GStreamer 1.24 binaries track the 0.12 release series of gst-plugins-rs, and fixes from newer versions will be -backported as needed to the 0.12 brach for future 1.24.x bugfix releases. +and plugins. The GStreamer 1.26 binaries track the 0.13 release series of gst-plugins-rs, and fixes from newer versions will be +backported as needed to the 0.13 brach for future 1.26.x bugfix releases. Rust plugins can be used from any programming language. To applications they look just like a plugin written in C or C++. -WebRTC - -- New element webrtcsrc that can act as a recvonly WebRTC client. Just like the opposite direction, webrtcsink, this can - support various different WebRTC signalling protocols. Some are included with the plugin and provide their own element - factory for easier usage but it is also possible for applications to provide new signalling protocol implementations. - -- webrtcsink now exposes the signaller as property and allows implementing a custom signaller by connecting signal handlers to - the default signaller. - -- A new signaller and webrtcsink implementation for Janus’ VideoRoom implementation. The corresponding webrtcsrc signaller - implementation is currently in a merge request in GitLab. - -- New whepsrc element that can receive WHEP WebRTC streams. This is currently not based on webrtcsrc but in the future a new - element around webrtcsrc will be added. - -- New whipserversrc element around webrtcsrc for ingesting WHIP WebRTC streams in GStreamer. - -- New whipclientsink element around webrtcsink for publishing WHIP WebRTC streams from GStreamer. This deprecates the old - whipsink element. - -- A new signaller and webrtcsink implementation for LiveKit. The corresponding webrtcsrc signaller implementation was merged - into the git repository recently. - -- A new signaller and webrtcsink implementation for AWS Kinesis Video Streams - -- webrtcsink has a new payloader-setup signal to allow the application more fine grained control over the RTP payloader - configuration, similar to the already existing encoder-setup signal for encoders. - -- webrtcsrc gained support for a custom navigation event protocol over the data channel, which is compatible with the - navigation event protocol supported by webrtcsink. - -- webrtcsink supports encoded streams as input. Using encoded streams will disable webrtcsinks congestion control changing any - encoded stream parameters. - -- webrtcsink and webrtcsrc have a new signal ‘request-encoded-filter’ to allow transformations of the encoded stream. This can - be used, for example, for the same use-cases as the WebRTC Insertable Streams API. - -- gstwebrtc-api: JavaScript API for interacting with the default signalling protocol used by webrtcsink / webrtcsrc. - -… and various other smaller improvements! - -RTSP - -- New rtspsrc2 element. Only a subset of RTSP features are implemented so far: - - RTSP 1.0 support - - TCP, UDP, UDP-Multicast lower transports - - RTCP SR, RTCP RR, RTCP-based A/V sync - - Tested for correctness in multicast cases too - - Lower transport selection and order (NEW!) - - The existing rtspsrc has a hard-coded order list for lower transports - - Many advanced features are not implemented yet, such as non-live support. See the README for the current status. - -GTK4 - -- Support for rendering GL textures on X11/EGL, X11/GLX, Wayland, macOS, and WGL/EGL on Windows. - -- Create a window for testing purposes when running in gst-launch-1.0 or if GST_GTK4_WINDOW=1 is set. - -- New background-color property for setting the color of the background of the frame and the borders, if any. This also allows - setting a fully transparent background. - -- New scale-filter property for defining how to scale the frames. - -- Add Python example application to the repository. - -- Various bugfixes, including support for the new GTK 4.14 GL renderer. The plugin needs to be built with at least the - gtk_v4_10 feature to work with the new GTK 4.14 GL renderer, and will work best if built with the gtk_v4_14 feature. - -Closed Caption - -- Add cea608tocea708 element for upconverting CEA-608 captions to their CEA-708 representation. - -- Add support for translations within transcriberbin. - -- awstranscriber supports translating the transcribed text into different languages, including multiple languages at the same - time. - -- awstranscriber is using the new HTTP/2-based API now instead of the WebSocket-based one. - -Other new elements - -- New awss3putobjectsink that works similar to awss3sink but with a different upload strategy. - -- New hlscmafsink element for writing HLS streams with CMAF/ISOBMFF fragments. - -- New inter plugin with new intersink and intersrc elements that allow to 1:N connect different pipelines in the same process. - This is implemented around the appsrc / appsink-based StreamProducer API that is provided as part of the GStreamer Rust - bindings, and is also used inside webrtcsrc and webrtcsink. - -- New livesync element that allows maintaining a contiguous live stream without gaps from a potentially unstable source. +### WebRTC -- New isomp4mux non-fragmented MP4 muxer element. +- to be filled in -Other improvements +### Other new Rust elements -- audiornnoise - - Attach audio level meta to output buffers. - - Add voice detection threshold property -- fmp4mux - - Add support for CMAF-style chunking, e.g. low-latency / LL HLS and DASH - - Add support for muxing Opus, VP8, VP9 and AV1 streams - - Add ‘offset-to-zero’ property and make media/track timescales configurable -- hlssink3 - - Allow adding EXT-X-PROGRAM-DATE-TIME tag to the manifest. - - Allow generating I-frame-only playlist -- ndi - - Closed Caption support in ndisrc / ndisink - - Zero-copy output support in ndisrc for raw video and audio -- spotifyaudiosrc: Support configurable bitrate +- to be filled in -For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.9 (shipped with GStreamer -1.22) and 0.12 (shipped with GStreamer 1.24). +### Other improvements -Cerbero Rust support +- to be filled in -- As of GStreamer 1.24, the GStreamer Rust plugins are shipped as part of our binary packages on all major platforms. This - includes Android and iOS now in addition to macOS and Windows/MSVC. +For a full list of changes in the Rust plugins see the gst-plugins-rs ChangeLog between versions 0.12 (shipped with GStreamer +1.24) and 0.13 (shipped with GStreamer 1.26). -Build and Dependencies +## Build and Dependencies -- Meson >= 1.1 is now required for all modules +- Meson >= 1.3 is now required for all modules - The GLib requirement has been bumped to >= 2.64 -- liborc >= 0.4.38 is strongly recommended +- liborc >= 0.4.40 is strongly recommended - libnice >= 0.1.22 is strongly recommended, as it is required for WebRTC ICE consent freshness (RFC 7675). -- gst-libav was updated for FFmpeg API deprecations and removals - -- libwebpmux is required for the animated WebP support - -- The wpe plugin gained support for the WPEWebKit 2.0 API version - -- Bumped minimum libva version to 1.12 for the va plugin. - -- zxing: added support for the zxing-c++ 2.0 API - -- The ptp-helper for Precision Time Protocol (PTP) support in GStreamer core has been rewritten in Rust, and the minimum - required Rust version for building this is 1.48, i.e. the version currently in Debian stable. On Windows, at least Rust 1.54 - is needed. There is a new ptp-helper Meson feature option that can be used to make sure everything needed for PTP support is - available (if set to ptp-helper=enabled). cargo is not required for building. - -- gst-plugins-rs requires Rust 1.70 or newer. - -- Link to libsoup at build time in all cases on non-Linux, and only load it dynamically on Linux systems where we might need - to support a mix of applications with dependencies that might be using libsoup2 or libsoup3. A “soup-version” meson build - option was added to prefer a specific version. Distros should make sure that libsoup is still a package dependency, since - it’s still required at runtime for the soup and adaptivedemux2 plugins to function. - -- libjack is now dynamically loaded at runtime by the JACK audio plugin, and no longer a hard build dependency. However, it - still is a runtime dependency, so distros should make sure it remains a package dependency. - Monorepo build (née gst-build) -- There is now a top-level meson build option to enable/require webrtc +- to be filled in -- The FFmpeg subproject wrap was udpated to 6.1 - -- A libvpx wrap was added (for VP8/VP9 software encoding/decoding) +- The FFmpeg subproject wrap was udpated to 7.1 gstreamer-full -- Add full static build support, including on Windows: Allow a project to use gstreamer-full as a static library and link to - create a binary without dependencies. Introduce the meson build option gst-full-target-type to select the build type: - dynamic (default) or static. - -- Registers all full features in a plugin now to offer the possibility to get information at the plugin level and get it from - the registry. All the full features are now registered in a fullstaticfeatures meta plugin instead of having a NULL plugin. +- to be filled in Development environment -- add VSCode IDE integration - -- gst-env.py: Output a setting for the prompt with --only-environment +- to be filled in -Cerbero +### Cerbero Cerbero is a meta build system used to build GStreamer plus dependencies on platforms where dependencies are not readily available, such as Windows, Android, iOS, and macOS. General improvements -- New plugins have been added - - codecalpha dvbsubenc rtponvif switchbin videosignal isac ivfparse inter rtspsrc2 -- JACK plugin is now available all platforms (previously only Linux), and will be loaded if the JACK library is found at - plugin load time -- Several recipes were ported to meson, leading to faster builds and better MSVC support - - ffmpeg, gperf, lame, libvpx, ogg, opencore-amr, sbc, speex, tiff, webrtc-audio-processing - - For more information, please see the tracker issue -- Some recipes are now outdated or unnecessary and have been removed: - - intltool, libkate -- Various recipe updated to their latest versions -- Rust toolchain updated to 1.76.0 (latest as of writing) -- Rust plugins are now stripped and debug info split out correctly, reducing their size -- Fix several spurious build issues, especially with the Rust toolchain -- CMake is picked up from the system if available -- Cerbero will no longer OOM or consume excessive resources on low-end systems -- Python recipes have been moved from setuptools to virtualenv -- Fixed support for Python 3.12+ +- to be filled in macOS -- Minimum macOS version has been increased to 10.13 (High Sierra) - - Released 5½ years ago, >95% marketshare -- Fix macOS app store validation issue caused by absolute RPATHs -- Rosetta is automatically installed if required for universal builds on Apple Silicon -- The official macOS binaries now also include static libs for the GStreamer Rust plugins +- to be filled in iOS -- Minimum iOS version has been increased to 12.0 -- The iOS binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on iOS +- to be filled in Windows -- New features shipped with the official binaries: - - plugins: dwrite d3d12 (MSVC) soundtouch (MSVC) taglib (MSVC) webrtcdsp (MSVC) - - plugin features: d3d11-wgc (Windows Graphics Capture Support) - - libraries: gstdxva-1.0 -- New qml6 plugin can be built on Windows with the qt6 variant enabled - - Similar to qt5, this plugin cannot be included in the official binaries -- GLib process handling helpers for Windows are now shipped -- Windows 11 SDK is now required for builds - - Visual Studio 2019 and newer ship this SDK -- MSYS is now deprecated for building Windows binaries, will be removed in the next release - - MSYS2 is required, and the bootstrap script tools/bootstrap-windows.ps can install it for you -- Windows bootstrap script tools/bootstrap-windows.ps1 is much more interactive and user-friendly now -- Fixed Pango crash on 32-bit Windows -- WiX packaging now works with cross-windows builds from linux +- to be filled in Linux -- Linux packages will now also include static libs for the GStreamer Rust plugins -- Add Python support for multiarch distributions -- Build fixes for various recipes on multiarch distributions -- Use arch-specific libdir correctly on multiarch distributions -- gst-omx was removed from gstreamer, and hence is no longer shipped -- Fixed Gentoo support -- Added support for RHEL 9 -- Added support for Rocky Linux -- Added support for Manjaro Linux +- to be filled in Android -- Android NDK has been updated to r25c - - Only the Clang toolchain is used from the NDK now (both target and host) - - gnustl has been completely removed -- The Android binary packages now include the GStreamer Rust plugins -- tremor and ivorbisdec plugins are no longer shipped on Android -- openh264 plugin no longer enables ASM optimizations on Android x86 due to relocation errors - -Platform-specific changes and improvements - -Android - -- Add NDK implementation of Android MediaCodec. This reduces the amount of Java <-> native calls, which should reduce - overhead. - -- Add support for AV1 to the androidmedia video encoder and decoder. - -Apple macOS and iOS - -- osxaudio: audio clock improvements (interpolate based on system time) - -- Set activation policy in gst_macos_main() and in osxvideosink and glimagesink. Setting the policy to - NSApplicationActivationPolicyAccessory by default makes sure that we can activate windows programmatically or by clicking on - them. Without that, windows would disappear if you clicked outside them and there would be no way to bring them to front - again. This change also allows osxvideosink to receive navigation events correctly. - -Windows - -- New DirectWrite text rendering plugin with dwriteclockoverlay, dwritetimeoverlay, dwritetextoverlay, dwritesubtitlemux, and - dwritesubtitleoverlay elements, including closed caption overlay support in dwritetextoverlay. +- to be filled in -- PTP clock support is now also available on Windows +## Platform-specific changes and improvements -- qml6d3d11sink is a new Direct3D11 Qt6 QML sink for Windows as an alternative to the existing qml6glsink. +### Android -- wasapi2 audio plugin: +- to be filled in - - Added an option to monitor a loopback device’s mute state - - Allows process loopback capture on Windows 10 +### Apple macOS and iOS -- win32ipc supports zero-copy rendering now through a shared bufferpool. +- to be filled in -- Add a Windows-specific plugin loader implementation (gst-plugin-scanner), so plugin loading during registry updates happens - in an external process on Windows as well. +### Windows -- gst_video_convert_sample() which is often used for thumbnailing gained a D3D11 specific conversion path. +- to be filled in -- d3d11 plugin: +## Documentation improvements - - d3d11mpeg2dec element is promoted to PRIMARY + 1 rank - - Added d3d11ipcsrc and d3d11ipcsink elements for zero-copy GPU memory sharing between multiple processes. - - Added HLSL shader pre-compilation (at binary build time) support in MSVC build. - - d3d11videosink and d3d11convert elements support 3D transform, MSAA (MultiSampling Anti-Aliasing) and anisotropic - sampling method. - - Added support for more raw video formats by using compute shader. A list of supported raw video formats can be found in - the d3d11videosink plugin documentation. - - Added d3d11overlay element for applications to be able to draw/blend an overlay image on Direct3D11 texture directly. - -- New Direct3D12 plugin: From a video decoding, conversion, composition, and rendering point of view, this new d3d12 plugin is - feature-wise near equivalent to the d3d11 plugin. Notable differences between d3d12 and d3d11 are: - - The GStreamer Direct3D12 integration layer is not exposed as a GStreamer API yet. Thus, other plugins such as amfcodec, - nvcodec, qsv, and dwrite are not integrated with d3d12 yet. - - H.264 video encoding support via d3d12h264enc element. - - Direct3D12 video encoding API requires Windows 11 or DirectX 12 Agility SDK - - IPC, overlay, and deinterlace elements are not implemented in d3d12 - - Windows Graphics Capture API based screen capturing is not implemented in d3d12 - - In this release, MSVC is the only officially supported toolchain for the d3d12 plugin build. - - All d3d12 elements are zero ranked for now. Users will need to adjust rank of each d3d12 element via GST_PLUGIN_RANK - environment or appropriate plugin feature APIs if they want these elements autoplugged. - -Documentation improvements - -- hotdoc has been updated to the latest version, and the theme has also been updated, which should fix various usability - issues. - -Possibly Breaking Changes - -- gst_plugin_feature_check_version() has been updated to fix unexpected version check behaviour for git versions. It would - return TRUE if the plugin version is for a git development version (e.g. 1.24.0.1) and the check is for the “next” micro - version (1.24.1). Now it no longer does this. This just brings the runtime version check in line with the build time version - checks which have been fixed some time ago. - -- GstAudioAggregator and subclasses such as audiomixer now sync property values to output timestamp, which is what - GstVideoAggregator has been doing already since 2019, and which makes sense, as the properties need to change at every - output frame based on the output time because they may change even though the input frame is not changing. - -- rtpac3depay now outputs audio/x-ac3 instead of audio/ac3 as that is the canonical media format in GStreamer. audio/ac3 is - still sometimes accepted as input format for backwards compatibility (e.g. in rtpac3pay or ac3parse), but shouldn’t be - output. - -- timecodestamper: The “drop-frame” property now defaults to TRUE - -- The NVIDIA desktop GPU decoders nvh264sldec, nvh265sldec, nvvp8sldec and nvvp9sldec were renamed to nvh264dec, nvh265dec, - nvvp8dec and nvvp9dec, respectively. - -Known Issues - -- There are known issues with FFmpeg version 6.0.0 due to opaque passing being broken in that version. This affects at least - avdec_h264, but may affect other decoders as well. Versions before 6.0.0, and 6.0.1 or higher are not affected. - -Statistics - -- 4643 commits - -- 2405 Merge Requests - -- 850 Issues - -- 290+ Contributors - -- ~25% of all commits and Merge Requests were in Rust modules - -- 4747 files changed - -- 469633 lines added - -- 209842 lines deleted - -- 259791 lines added (net) +- to be filled in Contributors -Aaron Boxer, Aaron Huang, Acky Xu, adixonn, Adrian Fiergolski, Adrien De Coninck, Akihiro Sagawa, Albert Sjölund, Alessandro -Bono, Alexande B, Alexander Slobodeniuk, Alicia Boya García, amindfv, Amir Naghdinezhad, anaghdin, Anders Hellerup Madsen, -Andoni Morales Alastruey, Antonio Kevo, Antonio Rojas, Arnaud Rebillout, Arnaud Vrac, Arun Raghavan, badcel, Balló György, Bart -Van Severen, Bastien Nocera, Benjamin Gaignard, Bilal Elmoussaoui, Brad Hards, Camilo Celis Guzman, Carlo Cabrera, Carlos -Falgueras García, Carlos Rafael Giani, Célestin Marot, Chao Guo, Charlie Blevins, Cheah, Vincent Beng Keat, Chris Degawa, Chris -Spencer, Christian Curtis Veng, Christian Meissl, Christopher Degawa, Chris Wiggins, Cidana-Developers, Colin Kinloch, Damian -Hobson-Garcia, Daniel Almeida, Daniel Knobe, Daniel Moberg, Daniel Morin, Daniel Pendse, Daniel Stone, Daniel Ulery, Dan -Searles, Dario Marino Saccavino, Dave Patrick Caberto, David Craven, David Revay, David Rosca, David Svensson Fors, Detlev -Casanova, Diego Nieto, Dominique Leroux, Dongyun Seo, Doug Nazar, Edward Hervey, Ekwang Lee, elenril, Elliot Chen, Enrique Ocaña -González, Erik Fröbrant, Eva Pace, Evgeny Pavlov, Fabian Orccon, Felix Yan, Fernando Jiménez Moreno, Florian Zwoch, François -Laignel, Frank Dana, Georges Basile Stavracas Neto, Guillaume Desmottes, Guillaume Gomez, Gwyn Ciesla, Haihua Hu, Hassene Tmar, -hassount, Heiko Becker, He Junyan, hguermaz, Hiero32, Hosang Lee, Hou Qi, Hugo Svirak, Hugues Fruchet, Hu Qian, Hyung Song, -Ignazio Pillai, Ilie Halip, Itamar Marom, Ivan Molodetskikh, Ivan Tishchenko, JackZhouVCD, Jacob Johnsson, jainl28patel, Jakub -Adam, James Cowgill, James Hilliard, James Oliver, Jan Alexander Steffens (heftig), Jan Beich, Jan Schmidt, Jan Vermaete, Jayson -Reis, Jeff Wilson, Jeongki Kim, Jeri Li, Jimmi Holst Christensen, Jimmy Ohn, Jochen Henneberg, Johan Adam Nilsson, Johan -Sternerup, John King, Jonas Danielsson, Jonas K Danielsson, Jonas Kvinge, Jordan Petridis, Jordan Yelloz, Josef Kolář, Juan -Navarro, Julien Isorce, Jun Zhao, Jurijs Satcs, Kalev Lember, Kamal Mostafa, kelvinhu325, Kevin Song, Khem Raj, Kourosh -Firoozbakht, Leander Schulten, Leif Andersen, L. E. Segovia, Lieven Paulissen, lijing0010, Lily Foster, Link Mauve, Li Yuanheng, -Loïc Le Page, Loïc Molinari, Lukas Geiger, Luke McGartland, Maksym Khomenko, Ma, Mingyang, Manel J, Marcin Kolny, Marc Leeman, -Marc Solsona, Marc Wiblishauser, Marek Vasut, Marijn Suijten, Mark Hymers, Markus Ebner, Martin Nordholts, Martin Robinson, Mart -Raudsepp, Marvin Schmidt, Mathieu Duponchelle, Matt Feury, Matthew Waters, Matthias Fuchs, Matthieu Volat, Maxim P. Dementyev, -medithe, Mengkejiergeli Ba, Michael Bunk, Michael Gruner, Michael Grzeschik, Michael Olbrich, Michael Tretter, Michiel -Westerbeek, Mihail Ivanchev, Ming Qian, Nader Mahdi, naglis, Nick Steel, Nicolas Beland, Nicolas Dufresne, Nirbheek Chauhan, -Olivier Babasse, Olivier Blin, Olivier Crête, Omar Khlif, Onur Demiralay, Patricia Muscalu, Paul Fee, Pawel Stawicki, Peter -Stensson, Philippe Normand, Philipp Zabel, PhoenixWorthVCD, Piotr Brzeziński, Priit Laes, Qian Hu, Rabindra Harlalka, Rafał -Dzięgiel, Rahul T R, rajneeshksoni, Ratchanan Srirattanamet, renjun wang, Rhythm Narula, Robert Ayrapetyan, Robert Mader, Robert -Rosengren, Robin Gustavsson, Roman Lebedev, Rouven Czerwinski, Ruben Gonzalez, Ruslan Khamidullin, Ryan Pavlik, Sanchayan Maity, -Sangchul Lee, Scott Kanowitz, Scott Moreau, SeaDve, Sean DuBois, Sebastian Dröge, Sebastian Szczepaniak, Sergey Radionov, -Seungha Yang, Shengqi Yu, Simon Himmelbauer, Slava Andrejev, Slawomir Pawlowski, soak, Stefan Brüns, Stéphane Cerveau, Stephan -Seitz, Stijn Last, Talha Khan, Taruntej Kanakamalla, Jin Chung Teng, Théo Maillart, Thibault Saunier, Thomas Schneider, -Tim-Philipp Müller, Tobias Rapp, Tong Wu, Tristan van Berkom, ttrigui, U. Artie Eoff, utzcoz, Víctor Manuel Jáquez Leal, Vivia -Nikolaidou, Wang Chuan, William Manley, Wojciech Kapsa, Xabier Rodriguez Calvar, Xavier Claessens, Xuchen Yang, Yatin Maan, -Yinhang Liu, Yorick Smilda, Yuri Fedoseev, Gang Zhao, Jack Zhou, … +- to be filled in … and many others who have contributed bug reports, translations, sent suggestions or helped testing. Thank you all! -Stable 1.24 branch - -After the 1.24.0 release there will be several 1.24.x bug-fix releases which will contain bug fixes which have been deemed -suitable for a stable branch, but no new features or intrusive changes will be added to a bug-fix release usually. The 1.24.x -bug-fix releases will be made from the git 1.24 branch, which will be a stable branch. - -1.24.0 +Stable 1.26 branch -GStreamer 1.24.0 was released on 4 March 2024. +After the 1.26.0 release there will be several 1.26.x bug-fix releases which will contain bug fixes which have been deemed +suitable for a stable branch, but no new features or intrusive changes will be added to a bug-fix release usually. The 1.26.x +bug-fix releases will be made from the git 1.26 branch, which will be a stable branch. -Schedule for 1.26 +Schedule for 1.28 -Our next major feature release will be 1.26, and 1.25 will be the unstable development version leading up to the stable 1.26 -release. The development of 1.25/1.25 will happen in the git main branch of the GStreamer mono repository. +Our next major feature release will be 1.28, and 1.27 will be the unstable development version leading up to the stable 1.28 +release. The development of 1.27/1.28 will happen in the git main branch of the GStreamer mono repository. -The schedule for 1.26 is yet to be decided. +The schedule for 1.28 is yet to be decided. -1.26 will be backwards-compatible to the stable 1.24, 1.22, 1.20, 1.18, 1.16, 1.14, 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 +1.28 will be backwards-compatible to the stable 1.26, 1.24, 1.22, 1.20, 1.18, 1.16, 1.14, 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series. -------------------------------------------------------------------------------------------------------------------------------- -These release notes have been prepared by Tim-Philipp Müller with contributions from Edward Hervey, Matthew Waters, Nicolas -Dufresne, Nirbheek Chauhan, Olivier Crête, Sebastian Dröge, Seungha Yang, Thibault Saunier, and Víctor Manuel Jáquez Leal. +These release notes have been prepared by Tim-Philipp Müller with contributions from …. License: CC BY-SA 4.0 diff --git a/subprojects/gst-devtools/RELEASE b/subprojects/gst-devtools/RELEASE index 8b3560839f8..27329aa973d 100644 --- a/subprojects/gst-devtools/RELEASE +++ b/subprojects/gst-devtools/RELEASE @@ -1,4 +1,4 @@ -This is GStreamer gst-devtools 1.25.0.1. +This is GStreamer gst-devtools 1.25.50. GStreamer 1.25 is the unstable development branch leading up to the next major stable version which will be 1.26. diff --git a/subprojects/gst-devtools/docs/gst-validate-flow.md b/subprojects/gst-devtools/docs/gst-validate-flow.md index 6e67f0ecc74..d2afb76defe 100644 --- a/subprojects/gst-devtools/docs/gst-validate-flow.md +++ b/subprojects/gst-devtools/docs/gst-validate-flow.md @@ -150,9 +150,12 @@ several overrides and listening to different pads with different settings. caps={width, height, framerate}, buffer={pts}"`. Overrides `ignored-event-fields` for specified event types. * `ignored-event-types`: Default: `{ }`. List of event type names to not record -* `logged-event-types`: Default: `NULL`. List of event type names to not record, +* `logged-event-types`: Default: `NULL`. List of (downstream) event type names to not record, if noone provided, all events are logged, except the ones defined in the `ignored-event-types`. +* `logged-upstream-event-types`: Default: `NULL`. List of upstream event type names to record, + for backward compatibility reasons, upstream events are not logged by default, + and you must specify the ones you want to be logged. * `expectations-dir`: Path to the directory where the expectations will be written if they don't exist, relative to the current working directory. By default the current working directory is used, but this setting is usually diff --git a/subprojects/gst-devtools/docs/gst-validate-transcoding.md b/subprojects/gst-devtools/docs/gst-validate-transcoding.md index 419dca18783..bca2f42c8c3 100644 --- a/subprojects/gst-devtools/docs/gst-validate-transcoding.md +++ b/subprojects/gst-devtools/docs/gst-validate-transcoding.md @@ -109,11 +109,11 @@ few options to control how transcoding should be tested. * `--set-scenario`: Let you set a scenario, it can be a full path to a scenario file or the name of the scenario (name of the file without the `.scenario` extension). -* `-l`, `--list-scenarios`: List the avalaible scenarios that can be run. +* `-l`, `--list-scenarios`: List the available scenarios that can be run. * `--scenarios-defs-output-file`: The output file to store scenarios details. Implies `--list-scenario`. -* `-t`, `--inspect-action-type`: Inspect the avalaible action types with which to write scenarios if - no parameter passed, it will list all avalaible action types +* `-t`, `--inspect-action-type`: Inspect the available action types with which to write scenarios if + no parameter passed, it will list all available action types otherwize will print the full description of the wanted types. * `--set-configs`: Let you set a config scenario. The scenario needs to be set as `config`. You can specify a list of scenarios separated by `:`. It diff --git a/subprojects/gst-devtools/docs/gst-validate.md b/subprojects/gst-devtools/docs/gst-validate.md index 665fba67e23..d417c51519a 100644 --- a/subprojects/gst-devtools/docs/gst-validate.md +++ b/subprojects/gst-devtools/docs/gst-validate.md @@ -45,11 +45,11 @@ similar to `gst-launch`, and some extra options. * `--set-scenario`: Let you set a scenario, it can be a full path to a scenario file or the name of the scenario (name of the file without the `.scenario` extension). -* `-l`, `--list-scenarios`: List the avalaible scenarios that can be run. +* `-l`, `--list-scenarios`: List the available scenarios that can be run. * `--scenarios-defs-output-file`: The output file to store scenarios details. Implies `--list-scenario`. -* `-t`, `--inspect-action-type`: Inspect the avalaible action types with which to write scenarios if - no parameter passed, it will list all avalaible action types +* `-t`, `--inspect-action-type`: Inspect the available action types with which to write scenarios if + no parameter passed, it will list all available action types otherwize will print the full description of the wanted types. * `--set-media-info`: Set a media\_info XML file descriptor to share information about the media file that will be reproduced. diff --git a/subprojects/gst-devtools/docs/meson.build b/subprojects/gst-devtools/docs/meson.build index bff332831b6..6ce05562b27 100644 --- a/subprojects/gst-devtools/docs/meson.build +++ b/subprojects/gst-devtools/docs/meson.build @@ -1,5 +1,9 @@ build_hotdoc = false +if get_option('doc').disabled() + subdir_done() +endif + if meson.is_cross_build() if get_option('doc').enabled() error('Documentation enabled but building the doc while cross building is not supported yet.') @@ -27,25 +31,15 @@ if not build_gir subdir_done() endif -hotdoc_p = find_program('hotdoc', required: get_option('doc')) -if not hotdoc_p.found() - message('Hotdoc not found, not building the documentation') - subdir_done() +if gst_dep.type_name() == 'internal' + gst_proj = subproject('gstreamer') + plugins_cache_generator = gst_proj.get_variable('plugins_cache_generator') +else + plugins_cache_generator = find_program('gst-plugins-doc-cache-generator', + dirs: [join_paths(gst_dep.get_variable('libexecdir', default_value: ''), 'gstreamer-' + api_version)], + required: false) endif -required_hotdoc_extensions = ['gi-extension'] -hotdoc = import('hotdoc') -foreach extension: required_hotdoc_extensions - if not hotdoc.has_extensions(extension) - if get_option('doc').enabled() - error('Documentation enabled but @0@ missing'.format(extension)) - endif - - message('@0@ extension not found, not building documentation'.format(extension)) - subdir_done() - endif -endforeach - excludes = ['gettext.h', 'gst-validate-internal.h', 'gst-validate-i18n-lib.c' @@ -58,19 +52,42 @@ foreach f: excludes 'validate', 'gst', 'validate', f)] endforeach -validate_sources = gstvalidate_headers + gstvalidate_sources -hotdoc = import('hotdoc') -plugins_doc = [] -libs_doc = [hotdoc.generate_doc('gst-devtools', - project_version: apiversion, - sitemap: 'sitemap.txt', - index: 'index.md', - gi_c_sources: validate_sources, - gi_c_source_filters: validate_excludes, - gi_index: 'gi-index.md', - gi_smart_index: true, - gi_sources: [validate_gir[0].full_path()], - disable_incremental_build: true, - dependencies : [validate_dep], - depends: validate_gir[0], -)] +cdir = meson.current_source_dir() +doc_sources = [] +foreach s: gstvalidate_headers + gstvalidate_sources + doc_sources += s.full_path() +endforeach + +lib_sources = { + 'validate': pathsep.join(doc_sources) +} + +lib_doc_source_file = configure_file( + output: 'lib_doc_sources.json', + configuration: lib_sources, + output_format: 'json') + +lib_doc_gi_source_file = configure_file( + output: 'lib_doc_gi_sources.json', + configuration: {'validate': validate_gir[0].full_path()}, + output_format: 'json') + +lib_hotdoc_config = custom_target( + 'build-gst-hotdoc-configs', + command: [ + plugins_cache_generator, + 'hotdoc-lib-config', + '--srcdir', cdir, + '--builddir', meson.current_build_dir(), + '--buildroot', meson.global_build_root(), + '--project_version', api_version, + '--gi_source_file', lib_doc_gi_source_file, + '--gi_c_source_file', lib_doc_source_file, + '--gi_c_source_filters', validate_excludes, + '--source_root', cdir, + '--gi_source_root', cdir / '..' / 'validate' / 'gst' / 'validate', + '--output', '@OUTPUT@', + ], + output: 'hotdoc-lib-configs.json', + depends: [validate_gir[0]], +) diff --git a/subprojects/gst-devtools/gst-devtools.doap b/subprojects/gst-devtools/gst-devtools.doap index 5180e43ae48..375f532c9be 100644 --- a/subprojects/gst-devtools/gst-devtools.doap +++ b/subprojects/gst-devtools/gst-devtools.doap @@ -53,6 +53,26 @@ + + + 1.25.50 + main + + 2025-02-09 + + + + + + + 1.25.1 + main + + 2025-01-14 + + + + 1.24.0 diff --git a/subprojects/gst-devtools/meson.build b/subprojects/gst-devtools/meson.build index 4813f41b62e..7c26f311144 100644 --- a/subprojects/gst-devtools/meson.build +++ b/subprojects/gst-devtools/meson.build @@ -1,8 +1,7 @@ project('gst-devtools', 'c', - version : '1.25.0.1', - meson_version : '>= 1.1', + version : '1.25.50.1', + meson_version : '>= 1.4', default_options : [ 'warning_level=1', - 'c_std=gnu99', 'buildtype=debugoptimized' ]) gst_version = meson.project_version() @@ -18,7 +17,7 @@ else TESTSUITE_VERSION = 'master' # FIXME: main? endif -apiversion = '1.0' +api_version = '1.0' soversion = 0 # maintaining compatibility with the previous libtool versioning # current = minor * 100 + micro @@ -79,17 +78,17 @@ if cc.has_argument('-fno-strict-aliasing') add_project_arguments('-fno-strict-aliasing', language: 'c') endif -gst_dep = dependency('gstreamer-' + apiversion, version : gst_req, +gst_dep = dependency('gstreamer-' + api_version, version : gst_req, fallback : ['gstreamer', 'gst_dep']) -gstbase_dep = dependency('gstreamer-base-' + apiversion, version : gst_req, +gstbase_dep = dependency('gstreamer-base-' + api_version, version : gst_req, fallback : ['gstreamer', 'gst_base_dep']) -gstapp_dep = dependency('gstreamer-app-' + apiversion, version : gst_req, +gstapp_dep = dependency('gstreamer-app-' + api_version, version : gst_req, fallback : ['gst-plugins-base', 'app_dep']) -gst_pbutils_dep = dependency('gstreamer-pbutils-' + apiversion, version : gst_req, +gst_pbutils_dep = dependency('gstreamer-pbutils-' + api_version, version : gst_req, fallback : ['gst-plugins-base', 'pbutils_dep']) -gst_video_dep = dependency('gstreamer-video-' + apiversion, version : gst_req, +gst_video_dep = dependency('gstreamer-video-' + api_version, version : gst_req, fallback : ['gst-plugins-base', 'video_dep']) -gst_controller_dep = dependency('gstreamer-controller-' + apiversion, version : gst_req, +gst_controller_dep = dependency('gstreamer-controller-' + api_version, version : gst_req, fallback : ['gstreamer', 'gst_controller_dep']) gst_check_dep = dependency('gstreamer-check-1.0', version : gst_req, required : get_option('validate'), @@ -110,6 +109,7 @@ gir_init_section = [ '--add-init-section=extern void gst_init(gint*,gchar**);' + 'g_setenv("GST_REGISTRY_1.0", "/no/way/this/exists.reg", TRUE);' + \ 'g_setenv("GST_PLUGIN_PATH_1_0", "", TRUE);' + \ 'g_setenv("GST_PLUGIN_SYSTEM_PATH_1_0", "", TRUE);' + \ + 'g_setenv("GST_TRACERS", "", TRUE);' + \ 'gst_init(NULL,NULL);', '--quiet'] gir = find_program('g-ir-scanner', required : get_option('introspection')) build_gir = gir.found() and (not meson.is_cross_build() or get_option('introspection').enabled()) @@ -127,20 +127,27 @@ if gst_debug_disabled and cc.has_argument('-Wno-unused') add_project_arguments('-Wno-unused', language: 'c') endif +# NOTE: Keep entries alphabetically sorted warning_flags = [ - '-Wmissing-declarations', - '-Wmissing-prototypes', - '-Wredundant-decls', - '-Wundef', - '-Wwrite-strings', + '-Waddress', + '-Waggregate-return', '-Wformat', '-Wformat-security', + '-Wimplicit-fallthrough=3', '-Winit-self', + '-Wmissing-declarations', '-Wmissing-include-dirs', - '-Waddress', + '-Wmissing-parameter-type', + '-Wmissing-prototypes', '-Wno-multichar', - '-Wvla', + '-Wold-style-definition', '-Wpointer-arith', + '-Wredundant-decls', + '-Wshift-negative-value', + '-Wtype-limits', + '-Wundef', + '-Wvla', + '-Wwrite-strings', ] foreach extra_arg : warning_flags @@ -160,11 +167,18 @@ pkgconfig_subdirs = ['gstreamer-1.0'] gst_plugins_doc_dep = [] plugins = [] +plugin_sources = {} i18n = import('i18n') static_build = get_option('default_library') == 'static' gst_libraries = [] +if host_machine.system() == 'windows' + pathsep = ';' +else + pathsep = ':' +endif + python_mod = import('python') python3 = python_mod.find_installation() if not get_option('validate').disabled() diff --git a/subprojects/gst-devtools/validate/data/scenarios/meson.build b/subprojects/gst-devtools/validate/data/scenarios/meson.build index bdce07e8ee3..d43de3e0a0f 100644 --- a/subprojects/gst-devtools/validate/data/scenarios/meson.build +++ b/subprojects/gst-devtools/validate/data/scenarios/meson.build @@ -28,15 +28,15 @@ _scenarios = ['simple_seeks.scenario', install_data(sources: _scenarios, install_dir: get_option('datadir') + '/gstreamer-' + - apiversion + '/validate/scenarios') + api_version + '/validate/scenarios') install_subdir('includes', install_dir: get_option('datadir') + '/gstreamer-' + - apiversion + '/validate/scenarios') + api_version + '/validate/scenarios') install_subdir('rtsp_overrides', install_dir: get_option('datadir') + '/gstreamer-' + - apiversion + '/validate/scenarios') + api_version + '/validate/scenarios') env = environment() env.prepend('GST_VALIDATE_SCENARIOS_PATH', meson.current_source_dir()) diff --git a/subprojects/gst-devtools/validate/gst-libs/gst/video/gssim.c b/subprojects/gst-devtools/validate/gst-libs/gst/video/gssim.c index 0e23a2f7acf..5999f6aa367 100644 --- a/subprojects/gst-devtools/validate/gst-libs/gst/video/gssim.c +++ b/subprojects/gst-devtools/validate/gst-libs/gst/video/gssim.c @@ -417,6 +417,7 @@ gssim_finalize (GObject * object) g_free (self->priv->orgmu); g_free (self->priv->windows); + g_free (self->priv->weights); chain_up (object); } diff --git a/subprojects/gst-devtools/validate/gst/validate/doc/meta-features-rank.md b/subprojects/gst-devtools/validate/gst/validate/doc/meta-features-rank.md new file mode 100644 index 00000000000..e1f24a9783e --- /dev/null +++ b/subprojects/gst-devtools/validate/gst/validate/doc/meta-features-rank.md @@ -0,0 +1,16 @@ +The `features-rank` field is an array of structures that defines how to +override `GstPluginFeature::rank` to ensure some features will be used, +or at contrary won't be used. + +For example: + +``` yaml +features-rank = { + [mandatory, glvideomixer=9999], + [optional, someoptionalfeature=0], +}, +``` + +One could also use the `set-feature-rank` scenario action, but that +happens after GStreamer or other components are initialized which might +be a problem in some cases. diff --git a/subprojects/gst-devtools/validate/gst/validate/flow/formatting.c b/subprojects/gst-devtools/validate/gst/validate/flow/formatting.c index e1f5d3a97b6..27967a1cfb5 100644 --- a/subprojects/gst-devtools/validate/gst/validate/flow/formatting.c +++ b/subprojects/gst-devtools/validate/gst/validate/flow/formatting.c @@ -148,9 +148,10 @@ typedef struct } StructureValues; static gboolean -structure_set_fields (GQuark field_id, GValue * value, StructureValues * data) +structure_set_fields (const GstIdStr * fieldname, GValue * value, + StructureValues * data) { - const gchar *field = g_quark_to_string (field_id); + const gchar *field = gst_id_str_as_str (fieldname); if (data->ignored_fields && g_strv_contains ((const gchar **) data->ignored_fields, field)) @@ -176,8 +177,8 @@ validate_flow_structure_cleanup (const GstStructure * structure, .ignored_fields = ignored_fields, }; - gst_structure_foreach (structure, - (GstStructureForeachFunc) structure_set_fields, &d); + gst_structure_foreach_id_str (structure, + (GstStructureForeachIdStrFunc) structure_set_fields, &d); d.fields = g_list_sort (d.fields, (GCompareFunc) g_ascii_strcasecmp); nstructure = gst_structure_new_empty (gst_structure_get_name (structure)); for (GList * tmp = d.fields; tmp; tmp = tmp->next) { @@ -450,7 +451,8 @@ validate_flow_format_event (GstEvent * event, GstStructure * logged_fields_struct, GstStructure * ignored_fields_struct, const gchar * const *ignored_event_types, - const gchar * const *logged_event_types) + const gchar * const *logged_event_types, + const gchar * const *logged_upstream_event_types) { const gchar *event_type; gchar *structure_string; @@ -460,8 +462,18 @@ validate_flow_format_event (GstEvent * event, event_type = gst_event_type_get_name (GST_EVENT_TYPE (event)); - if (logged_event_types && !g_strv_contains (logged_event_types, event_type)) + if (GST_EVENT_IS_UPSTREAM (event) && !GST_EVENT_IS_DOWNSTREAM (event)) { + /* For backward compatibility reason, only logged requested upstream event + * types */ + if (!logged_upstream_event_types) + return NULL; + + if (!g_strv_contains (logged_upstream_event_types, event_type)) + return NULL; + } else if (logged_event_types + && !g_strv_contains (logged_event_types, event_type)) { return NULL; + } if (ignored_event_types && g_strv_contains (ignored_event_types, event_type)) return NULL; diff --git a/subprojects/gst-devtools/validate/gst/validate/flow/formatting.h b/subprojects/gst-devtools/validate/gst/validate/flow/formatting.h index 8fb1183b036..b3c44378228 100644 --- a/subprojects/gst-devtools/validate/gst/validate/flow/formatting.h +++ b/subprojects/gst-devtools/validate/gst/validate/flow/formatting.h @@ -37,6 +37,6 @@ gchar* validate_flow_format_caps (const GstCaps* caps, gchar **wanted_fields, gc gchar* validate_flow_format_buffer(GstBuffer* buffer, gboolean add_checksum, GstStructure* logged_fields_struct, GstStructure* ignored_fields_struct); -gchar* validate_flow_format_event(GstEvent* event, const gchar* const* caps_properties, GstStructure* logged_event_fields, GstStructure* ignored_event_fields, const gchar* const* ignored_event_types, const gchar* const* logged_event_types); +gchar* validate_flow_format_event(GstEvent* event, const gchar* const* caps_properties, GstStructure* logged_event_fields, GstStructure* ignored_event_fields, const gchar* const* ignored_event_types, const gchar* const* logged_event_types, const gchar* const* logged_upstream_event_types); #endif // __GST_VALIDATE_FLOW_FORMATTING_H__ diff --git a/subprojects/gst-devtools/validate/gst/validate/flow/gstvalidateflow.c b/subprojects/gst-devtools/validate/gst/validate/flow/gstvalidateflow.c index 873480a77b4..7b239551743 100644 --- a/subprojects/gst-devtools/validate/gst/validate/flow/gstvalidateflow.c +++ b/subprojects/gst-devtools/validate/gst/validate/flow/gstvalidateflow.c @@ -87,6 +87,7 @@ struct _ValidateFlowOverride GstStructure *logged_fields; gchar **logged_event_types; + gchar **logged_upstream_event_types; gchar **ignored_event_types; gchar *expectations_file_path; @@ -192,7 +193,8 @@ validate_flow_override_event_handler (GstValidateOverride * override, flow->logged_fields, flow->ignored_fields, (const gchar * const *) flow->ignored_event_types, - (const gchar * const *) flow->logged_event_types); + (const gchar * const *) flow->logged_event_types, + (const gchar * const *) flow->logged_upstream_event_types); if (event_string) { validate_flow_override_printf (flow, "event %s\n", event_string); @@ -294,6 +296,8 @@ validate_flow_override_new (GstStructure * config) flow->logged_event_types = gst_validate_utils_get_strv (config, "logged-event-types"); + flow->logged_upstream_event_types = + gst_validate_utils_get_strv (config, "logged-upstream-event-types"); flow->ignored_event_types = gst_validate_utils_get_strv (config, "ignored-event-types"); @@ -525,12 +529,12 @@ show_mismatch_error (ValidateFlowOverride * flow, gchar ** lines_expected, const gchar *line_expected = _line_to_show (lines_expected, line_index); const gchar *line_actual = _line_to_show (lines_actual, line_index); + run_diff (flow->expectations_file_path, flow->actual_results_file_path); GST_VALIDATE_REPORT (flow, VALIDATE_FLOW_MISMATCH, "Mismatch error in pad %s, line %" G_GSIZE_FORMAT ". Expected:\n%s\nActual:\n%s\n", flow->pad_name, line_index + 1, line_expected, line_actual); - run_diff (flow->expectations_file_path, flow->actual_results_file_path); } static void @@ -619,6 +623,7 @@ validate_flow_override_finalize (GObject * object) fclose (flow->output_file); g_strfreev (flow->caps_properties); g_strfreev (flow->logged_event_types); + g_strfreev (flow->logged_upstream_event_types); g_strfreev (flow->ignored_event_types); if (flow->ignored_fields) gst_structure_free (flow->ignored_fields); @@ -648,7 +653,7 @@ _execute_checkpoint (GstValidateScenario * scenario, GstValidateAction * action) } gboolean -gst_validate_flow_init () +gst_validate_flow_init (void) { GList *tmp; gint default_generate = -1; diff --git a/subprojects/gst-devtools/validate/gst/validate/gst-validate-extra-checks.c b/subprojects/gst-devtools/validate/gst/validate/gst-validate-extra-checks.c index 270580bf7e2..045be00b08c 100644 --- a/subprojects/gst-devtools/validate/gst/validate/gst-validate-extra-checks.c +++ b/subprojects/gst-devtools/validate/gst/validate/gst-validate-extra-checks.c @@ -139,7 +139,7 @@ gst_validate_add_num_instances_check (GstStructure * structure) } gboolean -gst_validate_extra_checks_init () +gst_validate_extra_checks_init (void) { GList *config, *tmp; config = gst_validate_get_config ("extrachecks"); diff --git a/subprojects/gst-devtools/validate/gst/validate/gst-validate-internal.h b/subprojects/gst-devtools/validate/gst/validate/gst-validate-internal.h index c6134709c29..f3601f73905 100644 --- a/subprojects/gst-devtools/validate/gst/validate/gst-validate-internal.h +++ b/subprojects/gst-devtools/validate/gst/validate/gst-validate-internal.h @@ -56,6 +56,7 @@ G_GNUC_INTERNAL gchar** gst_validate_scenario_get_include_paths(const gchar* rel G_GNUC_INTERNAL void _priv_validate_override_registry_deinit(void); G_GNUC_INTERNAL GstValidateReportingDetails gst_validate_runner_get_default_reporting_details (GstValidateRunner *runner); +G_GNUC_INTERNAL void gst_validate_runner_set_monitor_all_pipelines (GstValidateRunner *runner, gboolean monitor_all_pipelines); #define GST_VALIDATE_VALIDATE_TEST_SUFFIX ".validatetest" G_GNUC_INTERNAL GstValidateMonitor * gst_validate_get_monitor (GObject *object); @@ -64,6 +65,7 @@ G_GNUC_INTERNAL void gst_validate_deinit_runner (void); G_GNUC_INTERNAL void gst_validate_report_deinit (void); G_GNUC_INTERNAL gboolean gst_validate_send (JsonNode * root); G_GNUC_INTERNAL void gst_validate_set_test_file_globals (GstStructure* meta, const gchar* testfile, gboolean use_fakesinks); +G_GNUC_INTERNAL gboolean gst_validate_structure_file_field_is_metadata (const GstIdStr *field_id); G_GNUC_INTERNAL gboolean gst_validate_get_test_file_scenario (GList** structs, const gchar** scenario_name, gchar** original_name); G_GNUC_INTERNAL GstValidateScenario* gst_validate_scenario_from_structs (GstValidateRunner* runner, GstElement* pipeline, GList* structures, const gchar* origin_file); diff --git a/subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c b/subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c index 0494c36b655..6590ca7d132 100644 --- a/subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c +++ b/subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c @@ -2428,10 +2428,13 @@ gst_validate_pad_monitor_src_event_func (GstPad * pad, GstObject * parent, GstValidatePadMonitor *pad_monitor = _GET_PAD_MONITOR (pad); gboolean ret; + gst_validate_pad_monitor_event_overrides (pad_monitor, event); + GST_VALIDATE_MONITOR_LOCK (pad_monitor); ret = gst_validate_pad_monitor_src_event_check (pad_monitor, parent, event, pad_monitor->event_func); GST_VALIDATE_MONITOR_UNLOCK (pad_monitor); + return ret; } @@ -2996,23 +2999,31 @@ gst_validate_pad_monitor_do_setup (GstValidateMonitor * monitor) pad_monitor->event_func = GST_PAD_EVENTFUNC (pad); pad_monitor->event_full_func = GST_PAD_EVENTFULLFUNC (pad); - pad_monitor->query_func = GST_PAD_QUERYFUNC (pad); - pad_monitor->activatemode_func = GST_PAD_ACTIVATEMODEFUNC (pad); - pad_monitor->get_range_func = GST_PAD_GETRANGEFUNC (pad); - if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK) { + gpointer eventdata = pad->eventdata; + GDestroyNotify eventnotify = pad->eventnotify; + pad->eventdata = NULL; + pad->eventnotify = NULL; + if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK) { pad_monitor->chain_func = GST_PAD_CHAINFUNC (pad); + gpointer chaindata = pad->chaindata; + GDestroyNotify chainnotify = pad->chainnotify; + pad->chaindata = NULL; + pad->chainnotify = NULL; if (pad_monitor->chain_func) - gst_pad_set_chain_function (pad, gst_validate_pad_monitor_chain_func); + gst_pad_set_chain_function_full (pad, gst_validate_pad_monitor_chain_func, + chaindata, chainnotify); if (pad_monitor->event_full_func) - gst_pad_set_event_full_function (pad, - gst_validate_pad_monitor_sink_event_full_func); + gst_pad_set_event_full_function_full (pad, + gst_validate_pad_monitor_sink_event_full_func, + eventdata, eventnotify); else - gst_pad_set_event_function (pad, - gst_validate_pad_monitor_sink_event_func); + gst_pad_set_event_function_full (pad, + gst_validate_pad_monitor_sink_event_func, eventdata, eventnotify); } else { - gst_pad_set_event_function (pad, gst_validate_pad_monitor_src_event_func); + gst_pad_set_event_function_full (pad, + gst_validate_pad_monitor_src_event_func, eventdata, eventnotify); /* add buffer/event probes */ pad_monitor->pad_probe_id = @@ -3022,13 +3033,32 @@ gst_validate_pad_monitor_do_setup (GstValidateMonitor * monitor) (GstPadProbeCallback) gst_validate_pad_monitor_pad_probe, pad_monitor, NULL); } - gst_pad_set_query_function (pad, gst_validate_pad_monitor_query_func); - gst_pad_set_activatemode_function (pad, - gst_validate_pad_monitor_activatemode_func); + + pad_monitor->query_func = GST_PAD_QUERYFUNC (pad); + gpointer querydata = pad->querydata; + GDestroyNotify querynotify = pad->querynotify; + pad->querydata = NULL; + pad->querynotify = NULL; + gst_pad_set_query_function_full (pad, gst_validate_pad_monitor_query_func, + querydata, querynotify); + + pad_monitor->activatemode_func = GST_PAD_ACTIVATEMODEFUNC (pad); + gpointer activatemodedata = pad->activatemodedata; + GDestroyNotify activatemodenotify = pad->activatemodenotify; + pad->activatemodedata = NULL; + pad->activatemodenotify = NULL; + gst_pad_set_activatemode_function_full (pad, + gst_validate_pad_monitor_activatemode_func, + activatemodedata, activatemodenotify); if (GST_PAD_IS_SRC (pad)) { - gst_pad_set_getrange_function (pad, - gst_validate_pad_monitor_get_range_func); + pad_monitor->get_range_func = GST_PAD_GETRANGEFUNC (pad); + gpointer getrangedata = pad->getrangedata; + GDestroyNotify getrangenotify = pad->getrangenotify; + pad->getrangedata = NULL; + pad->getrangenotify = NULL; + gst_pad_set_getrange_function_full (pad, + gst_validate_pad_monitor_get_range_func, getrangedata, getrangenotify); } gst_validate_reporter_set_name (GST_VALIDATE_REPORTER (monitor), diff --git a/subprojects/gst-devtools/validate/gst/validate/gst-validate-pipeline-monitor.c b/subprojects/gst-devtools/validate/gst/validate/gst-validate-pipeline-monitor.c index 54257bcaee1..9d6e8fc8f5f 100644 --- a/subprojects/gst-devtools/validate/gst/validate/gst-validate-pipeline-monitor.c +++ b/subprojects/gst-devtools/validate/gst/validate/gst-validate-pipeline-monitor.c @@ -301,12 +301,12 @@ _incompatible_fields_info_set_found (StructureIncompatibleFieldsInfo * info) } static gboolean -_find_structure_incompatible_fields (GQuark field_id, const GValue * value, - StructureIncompatibleFieldsInfo * info) +_find_structure_incompatible_fields (const GstIdStr * fieldname, + const GValue * value, StructureIncompatibleFieldsInfo * info) { gchar *value_str, *filter_str; - const GValue *filter_value = gst_structure_id_get_value (info->filter, - field_id); + const GValue *filter_value = gst_structure_id_str_get_value (info->filter, + fieldname); if (!filter_value) return TRUE; @@ -319,7 +319,7 @@ _find_structure_incompatible_fields (GQuark field_id, const GValue * value, g_string_append_printf (info->str, "\n -> Field '%s' downstream value from structure %d '(%s)%s' can't intersect with" " filter value from structure number %d '(%s)%s' because of their types.", - g_quark_to_string (field_id), info->caps_struct_num, + gst_id_str_as_str (fieldname), info->caps_struct_num, G_VALUE_TYPE_NAME (value), value_str, info->filter_caps_struct_num, G_VALUE_TYPE_NAME (filter_value), filter_str); @@ -337,7 +337,7 @@ _find_structure_incompatible_fields (GQuark field_id, const GValue * value, g_string_append_printf (info->str, "\n -> Field '%s' downstream value from structure %d '(%s)%s' can't intersect with" " filter value from structure number %d '(%s)%s'", - g_quark_to_string (field_id), info->caps_struct_num, + gst_id_str_as_str (fieldname), info->caps_struct_num, G_VALUE_TYPE_NAME (value), value_str, info->filter_caps_struct_num, G_VALUE_TYPE_NAME (filter_value), filter_str); @@ -411,8 +411,9 @@ _append_query_caps_failure_details (GstValidatePadMonitor * monitor, continue; } - gst_structure_foreach (possible_struct, - (GstStructureForeachFunc) _find_structure_incompatible_fields, &info); + gst_structure_foreach_id_str (possible_struct, + (GstStructureForeachIdStrFunc) _find_structure_incompatible_fields, + &info); if (info.found) found = TRUE; @@ -481,8 +482,9 @@ _append_accept_caps_failure_details (GstValidatePadMonitor * monitor, continue; } - gst_structure_foreach (refused_struct, - (GstStructureForeachFunc) _find_structure_incompatible_fields, &info); + gst_structure_foreach_id_str (refused_struct, + (GstStructureForeachIdStrFunc) _find_structure_incompatible_fields, + &info); } } diff --git a/subprojects/gst-devtools/validate/gst/validate/gst-validate-report.c b/subprojects/gst-devtools/validate/gst/validate/gst-validate-report.c index 6978c100c65..e5a59eb2338 100644 --- a/subprojects/gst-devtools/validate/gst/validate/gst-validate-report.c +++ b/subprojects/gst-devtools/validate/gst/validate/gst-validate-report.c @@ -729,9 +729,9 @@ gst_validate_report_init (void) } #ifndef GST_DISABLE_GST_DEBUG - if (!newline_regex) - newline_regex = - g_regex_new ("\n", G_REGEX_OPTIMIZE | G_REGEX_MULTILINE, 0, NULL); + if (!newline_regex) { + newline_regex = g_regex_new ("\n", G_REGEX_MULTILINE, 0, NULL); + } #endif } @@ -962,10 +962,11 @@ typedef struct } PrintActionFieldData; static gboolean -_append_value (GQuark field_id, const GValue * value, PrintActionFieldData * d) +_append_value (const GstIdStr * field, const GValue * value, + PrintActionFieldData * d) { gchar *val_str = NULL; - const gchar *fieldname = g_quark_to_string (field_id); + const gchar *fieldname = gst_id_str_as_str (field); if (g_str_has_prefix (fieldname, "__") && g_str_has_suffix (fieldname, "__")) return TRUE; @@ -1021,8 +1022,8 @@ gst_validate_print_action (GstValidateAction * action, const gchar * message) GST_VALIDATE_ACTION_N_REPEATS (action)); g_string_append (string, " ( "); - gst_structure_foreach (action->structure, - (GstStructureForeachFunc) _append_value, &d); + gst_structure_foreach_id_str (action->structure, + (GstStructureForeachIdStrFunc) _append_value, &d); if (d.printed) g_string_append_printf (string, "\n%*c)\n", indent, ' '); else @@ -1234,8 +1235,7 @@ gst_validate_printf_valist (gpointer source, const gchar * format, va_list args) g_free (tmp); if (!newline_regex) - newline_regex = - g_regex_new ("\n", G_REGEX_OPTIMIZE | G_REGEX_MULTILINE, 0, NULL); + newline_regex = g_regex_new ("\n", G_REGEX_MULTILINE, 0, NULL); #ifndef GST_DISABLE_GST_DEBUG { @@ -1564,7 +1564,7 @@ gst_validate_abort (const gchar * format, ...) } gboolean -is_tty () +is_tty (void) { return output_is_tty; } diff --git a/subprojects/gst-devtools/validate/gst/validate/gst-validate-reporter.c b/subprojects/gst-devtools/validate/gst/validate/gst-validate-reporter.c index 32d20fdcf1d..dc4899be0f8 100644 --- a/subprojects/gst-devtools/validate/gst/validate/gst-validate-reporter.c +++ b/subprojects/gst-devtools/validate/gst/validate/gst-validate-reporter.c @@ -291,7 +291,6 @@ gst_validate_reporter_g_log_func (const gchar * log_domain, { GstValidateReporter *reporter = g_weak_ref_get (&log_reporter); - g_printerr ("G_LOG: %s\n", message); if (!reporter) { gst_validate_default_log_hanlder (log_domain, log_level, message, NULL); return; diff --git a/subprojects/gst-devtools/validate/gst/validate/gst-validate-runner.c b/subprojects/gst-devtools/validate/gst/validate/gst-validate-runner.c index 7121d526fb9..815b4490378 100644 --- a/subprojects/gst-devtools/validate/gst/validate/gst-validate-runner.c +++ b/subprojects/gst-devtools/validate/gst/validate/gst-validate-runner.c @@ -96,6 +96,8 @@ struct _GstValidateRunnerPrivate gchar **pipeline_names_strv; GList *expected_issues; + + gboolean monitor_all_pipelines; }; /* Describes the reporting level to apply to a name pattern */ @@ -154,6 +156,10 @@ gst_validate_runner_should_monitor (GstValidateRunner * self, return FALSE; } + if (self->priv->monitor_all_pipelines) { + return TRUE; + } + if (self->priv->user_created) return FALSE; @@ -975,6 +981,15 @@ gst_validate_runner_get_default_reporting_details (GstValidateRunner * runner) return runner->priv->default_level; } +void +gst_validate_runner_set_monitor_all_pipelines (GstValidateRunner * runner, + gboolean monitor_all_pipelines) +{ + g_return_if_fail (GST_IS_VALIDATE_RUNNER (runner)); + + runner->priv->monitor_all_pipelines = monitor_all_pipelines; +} + #ifdef __GST_VALIDATE_PLUGIN static gboolean plugin_init (GstPlugin * plugin) diff --git a/subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.c b/subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.c index 74ffc2aef61..23090287138 100644 --- a/subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.c +++ b/subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.c @@ -139,6 +139,7 @@ enum { DONE, ACTION_DONE, + STOPPING, LAST_SIGNAL }; @@ -193,7 +194,6 @@ typedef struct struct _GstValidateScenarioPrivate { GstBus *bus; - GstValidateRunner *runner; gboolean execute_on_idle; GMutex lock; @@ -438,8 +438,8 @@ _action_copy (GstValidateAction * act) if (act->structure) { copy->structure = gst_structure_copy (act->structure); copy->type = gst_structure_get_name (copy->structure); - if (!(act->name = gst_structure_get_string (copy->structure, "name"))) - act->name = ""; + if (!(copy->name = gst_structure_get_string (copy->structure, "name"))) + copy->name = ""; } if (act->priv->main_structure) @@ -453,7 +453,8 @@ _action_copy (GstValidateAction * act) g_strdup (GST_VALIDATE_ACTION_FILENAME (act)); GST_VALIDATE_ACTION_DEBUG (copy) = g_strdup (GST_VALIDATE_ACTION_DEBUG (act)); GST_VALIDATE_ACTION_N_REPEATS (copy) = GST_VALIDATE_ACTION_N_REPEATS (act); - GST_VALIDATE_ACTION_RANGE_NAME (copy) = GST_VALIDATE_ACTION_RANGE_NAME (act); + GST_VALIDATE_ACTION_RANGE_NAME (copy) = + g_strdup (GST_VALIDATE_ACTION_RANGE_NAME (act)); if (act->priv->it_value.g_type != 0) { g_value_init (©->priv->it_value, G_VALUE_TYPE (&act->priv->it_value)); @@ -504,6 +505,7 @@ _action_free (GstValidateAction * action) g_free (GST_VALIDATE_ACTION_FILENAME (action)); g_free (GST_VALIDATE_ACTION_DEBUG (action)); + g_free (action->rangename); g_free (action->priv); g_free (action); } @@ -1263,9 +1265,10 @@ _pause_action_restore_playing (GstValidateScenario * scenario) } static gboolean -_set_const_func (GQuark field_id, const GValue * value, GstStructure * consts) +_set_const_func (const GstIdStr * fieldname, const GValue * value, + GstStructure * consts) { - gst_structure_id_set_value (consts, field_id, value); + gst_structure_id_str_set_value (consts, fieldname, value); return TRUE; } @@ -1274,14 +1277,14 @@ static GstValidateExecuteActionReturn _execute_define_vars (GstValidateScenario * scenario, GstValidateAction * action) { - gst_structure_foreach (action->structure, - (GstStructureForeachFunc) _set_const_func, scenario->priv->vars); + gst_structure_foreach_id_str (action->structure, + (GstStructureForeachIdStrFunc) _set_const_func, scenario->priv->vars); return GST_VALIDATE_EXECUTE_ACTION_OK; } static GstValidateExecuteActionReturn -_set_timed_value (GQuark field_id, const GValue * gvalue, +_set_timed_value (const GstIdStr * fieldname, const GValue * gvalue, GstStructure * structure) { GstValidateExecuteActionReturn res = GST_VALIDATE_EXECUTE_ACTION_OK; @@ -1293,7 +1296,7 @@ _set_timed_value (GQuark field_id, const GValue * gvalue, GstValidateAction *action; GstObject *obj = NULL; GParamSpec *paramspec = NULL; - const gchar *field = g_quark_to_string (field_id); + const gchar *field = gst_id_str_as_str (fieldname); const gchar *unused_fields[] = { "binding-type", "source-type", "interpolation-mode", "timestamp", "__scenario__", "__action__", "__res__", "repeat", @@ -1406,8 +1409,8 @@ _set_timed_value_property (GstValidateScenario * scenario, gst_structure_set (action->structure, "__action__", G_TYPE_POINTER, action, "__scenario__", G_TYPE_POINTER, scenario, NULL); - gst_structure_foreach (action->structure, - (GstStructureForeachFunc) _set_timed_value, action->structure); + gst_structure_foreach_id_str (action->structure, + (GstStructureForeachIdStrFunc) _set_timed_value, action->structure); gst_structure_get_int (action->structure, "__res__", &res); gst_structure_remove_fields (action->structure, "__action__", "__scenario__", "__res__", NULL); @@ -1453,7 +1456,7 @@ _check_property (GstValidateScenario * scenario, GstValidateAction * action, } static GstValidateExecuteActionReturn -_set_or_check_properties (GQuark field_id, const GValue * value, +_set_or_check_properties (const GstIdStr * fieldname, const GValue * value, GstStructure * structure) { GstValidateExecuteActionReturn res = GST_VALIDATE_EXECUTE_ACTION_OK; @@ -1463,7 +1466,7 @@ _set_or_check_properties (GQuark field_id, const GValue * value, GParamSpec *paramspec = NULL; gboolean no_value_check = FALSE; GstValidateObjectSetPropertyFlags flags = 0; - const gchar *field = g_quark_to_string (field_id); + const gchar *field = gst_id_str_as_str (fieldname); const gchar *unused_fields[] = { "__scenario__", "__action__", "__res__", "playback-time", "repeat", "no-value-check", NULL }; @@ -1511,8 +1514,9 @@ _execute_set_or_check_properties (GstValidateScenario * scenario, gst_structure_set (action->structure, "__action__", G_TYPE_POINTER, action, "__scenario__", G_TYPE_POINTER, scenario, NULL); - gst_structure_foreach (action->structure, - (GstStructureForeachFunc) _set_or_check_properties, action->structure); + gst_structure_foreach_id_str (action->structure, + (GstStructureForeachIdStrFunc) _set_or_check_properties, + action->structure); gst_structure_get_int (action->structure, "__res__", &res); gst_structure_remove_fields (action->structure, "__action__", "__scenario__", "__res__", NULL); @@ -2157,17 +2161,32 @@ typedef struct { GstValidateAction *action; GRecMutex m; - gulong sid; + gulong message_sid; + gulong stopping_sid; GList *wanted_streams; + + + gint wanted_n_calls; + gint n_calls; + } SelectStreamData; static SelectStreamData * select_stream_data_new (GstValidateAction * action) { - SelectStreamData *d = g_new0 (SelectStreamData, 1); + SelectStreamData *d = g_atomic_rc_box_new0 (SelectStreamData); + + d->action = gst_validate_action_ref (action); + if (!gst_structure_get_int (action->structure, "n-calls", &d->wanted_n_calls)) { + d->wanted_n_calls = 1; + } - d->action = action; + if (d->wanted_n_calls < -1) { + gst_validate_error_structure (action, + "`n-calls` in %" GST_PTR_FORMAT " can not be < -1, got %d", + action->structure, d->wanted_n_calls); + } return d; } @@ -2177,9 +2196,13 @@ select_stream_data_free (SelectStreamData * d) { gst_validate_action_unref (d->action); g_list_free_full (d->wanted_streams, g_free); - g_free (d); } +static void +select_stream_data_unref (SelectStreamData * d) +{ + g_atomic_rc_box_release_full (d, (GDestroyNotify) select_stream_data_free); +} static void stream_selection_cb (GstBus * bus, GstMessage * message, SelectStreamData * d) @@ -2199,6 +2222,7 @@ stream_selection_cb (GstBus * bus, GstMessage * message, SelectStreamData * d) break; case GST_MESSAGE_STREAMS_SELECTED: g_rec_mutex_lock (&d->m); + scenario = gst_validate_action_get_scenario (d->action); gst_message_parse_streams_selected (message, &selected_streams); g_assert (selected_streams); goto done; @@ -2270,14 +2294,21 @@ stream_selection_cb (GstBus * bus, GstMessage * message, SelectStreamData * d) g_list_free_full (d->wanted_streams, g_free); d->wanted_streams = streams; + d->n_calls += 1; done: - if (selected_streams && d->sid) { + if (selected_streams && d->message_sid && + d->wanted_n_calls >= 1 && d->n_calls == d->wanted_n_calls) { /* Consider action done once we get the STREAM_SELECTED signal */ gst_validate_action_set_done (gst_validate_action_ref (d->action)); gst_bus_disable_sync_message_emission (bus); - g_signal_handler_disconnect (bus, d->sid); - d->sid = 0; + g_signal_handler_disconnect (bus, d->message_sid); + d->message_sid = 0; + + if (d->stopping_sid) { + g_signal_handler_disconnect (scenario, d->stopping_sid); + d->stopping_sid = 0; + } } gst_clear_object (&scenario); @@ -2286,6 +2317,40 @@ stream_selection_cb (GstBus * bus, GstMessage * message, SelectStreamData * d) g_rec_mutex_unlock (&d->m); } +static void +stream_selection_scenario_stopping_cb (GstValidateScenario * scenario, + SelectStreamData * d) +{ + g_rec_mutex_lock (&d->m); + GstElement *pipeline = gst_validate_scenario_get_pipeline (scenario); + GstBus *bus = NULL; + + if (pipeline) { + bus = gst_element_get_bus (pipeline); + } + + if (!((d->wanted_n_calls == 0 && d->n_calls > 0) || d->wanted_n_calls == -1)) { + gst_validate_report_action (GST_VALIDATE_REPORTER (scenario), d->action, + SCENARIO_ACTION_EXECUTION_ERROR, + "Wrong number of calls: wanted %d got: %d", + d->wanted_n_calls, d->n_calls); + } + + gst_validate_action_set_done (gst_validate_action_ref (d->action)); + + if (bus && d->message_sid) { + gst_bus_disable_sync_message_emission (bus); + g_signal_handler_disconnect (bus, d->message_sid); + d->message_sid = 0; + } + + if (d->stopping_sid) { + g_signal_handler_disconnect (scenario, d->stopping_sid); + d->stopping_sid = 0; + } + g_rec_mutex_unlock (&d->m); +} + static GstValidateExecuteActionReturn _execute_select_streams (GstValidateScenario * scenario, GstValidateAction * action) @@ -2298,10 +2363,15 @@ _execute_select_streams (GstValidateScenario * scenario, SelectStreamData *d = select_stream_data_new (action); /* Ensure that the data signal ID is set before the callback is called */ g_rec_mutex_lock (&d->m); - d->sid = g_signal_connect_data (bus, + d->message_sid = g_signal_connect_data (bus, "sync-message", G_CALLBACK (stream_selection_cb), - d, (GClosureNotify) select_stream_data_free, 0); + d, (GClosureNotify) select_stream_data_unref, 0); + d->stopping_sid = g_signal_connect_data (scenario, + "stopping", + G_CALLBACK (stream_selection_scenario_stopping_cb), + g_atomic_rc_box_acquire (d), + (GClosureNotify) select_stream_data_unref, 0); g_rec_mutex_unlock (&d->m); gst_object_unref (bus); @@ -2661,10 +2731,10 @@ gst_validate_parse_next_action_playback_time (GstValidateScenario * self) } static gboolean -_foreach_find_iterator (GQuark field_id, GValue * value, +_foreach_find_iterator (const GstIdStr * fieldname, GValue * value, GstValidateAction * action) { - const gchar *field = g_quark_to_string (field_id); + const gchar *field = gst_id_str_as_str (fieldname); if (!g_strcmp0 (field, "actions")) return TRUE; @@ -2683,7 +2753,7 @@ _foreach_find_iterator (GQuark field_id, GValue * value, return FALSE; } - GST_VALIDATE_ACTION_RANGE_NAME (action) = field; + GST_VALIDATE_ACTION_RANGE_NAME (action) = g_strdup (field); return TRUE; } @@ -2903,6 +2973,7 @@ _fill_action (GstValidateScenario * scenario, GstValidateAction * action, GstValidateExecuteActionReturn res = GST_VALIDATE_EXECUTE_ACTION_NONE; gboolean optional, needs_parsing = FALSE; + structure = gst_structure_copy (structure); action->type = gst_structure_get_name (structure); action_type = _find_action_type (action->type); @@ -2910,6 +2981,7 @@ _fill_action (GstValidateScenario * scenario, GstValidateAction * action, GST_ERROR_OBJECT (scenario, "Action type %s no found", gst_structure_get_name (structure)); + gst_structure_free (structure); return GST_VALIDATE_EXECUTE_ACTION_ERROR; } @@ -2935,7 +3007,7 @@ _fill_action (GstValidateScenario * scenario, GstValidateAction * action, "No timeout time for action %" GST_PTR_FORMAT, structure); } - action->structure = gst_structure_copy (structure); + action->structure = structure; if (!(action->name = gst_structure_get_string (action->structure, "name"))) action->name = ""; @@ -3138,7 +3210,7 @@ execute_next_action_full (GstValidateScenario * scenario, GstMessage * message) priv->execute_actions_source_id = 0; SCENARIO_UNLOCK (scenario); - return G_SOURCE_CONTINUE; + return G_SOURCE_REMOVE; case GST_VALIDATE_EXECUTE_ACTION_IN_PROGRESS: return G_SOURCE_CONTINUE; case GST_VALIDATE_EXECUTE_ACTION_NON_BLOCKING: @@ -3184,14 +3256,22 @@ typedef struct guint sigid; gboolean check_done; gboolean check_property; + + gchar *parent_name; + gchar *object_name; + gchar *property_name; GMutex lock; } WaitingSignalData; static WaitingSignalData * -waiting_signal_data_new (GstElement * target, GstValidateAction * action) +waiting_signal_data_new (GstElement * target, GstValidateAction * action, + gchar * parent_name, gchar * object_name, gchar * property_name) { WaitingSignalData *data = g_new0 (WaitingSignalData, 1); + data->parent_name = parent_name; + data->object_name = object_name; + data->property_name = property_name; data->target = gst_object_ref (target); data->action = gst_validate_action_ref (action); @@ -3206,6 +3286,9 @@ waiting_signal_data_free (WaitingSignalData * data) g_assert (scenario); + g_free (data->object_name); + g_free (data->parent_name); + g_free (data->property_name); gst_object_unref (data->target); gst_validate_action_unref (data->action); g_free (data); @@ -3229,11 +3312,15 @@ waiting_signal_data_disconnect (WaitingSignalData * data, } static void -stop_waiting_signal_cb (WaitingSignalData * data) +stop_waiting_signal_cb (WaitingSignalData * data, GstObject * prop_object, + GParamSpec * prop, GstObject * object) { GstStructure *check = NULL; GstValidateAction *action = gst_validate_action_ref (data->action); GstValidateScenario *scenario = NULL; + const gchar *property_name = NULL; + gboolean check_property = data->check_property; + GstObject *property_check_target = GST_OBJECT_CAST (data->target); g_mutex_lock (&data->lock); if (data->check_done) { @@ -3242,10 +3329,40 @@ stop_waiting_signal_cb (WaitingSignalData * data) goto cleanup; } + + if (data->object_name) { + if (g_strcmp0 (data->object_name, GST_OBJECT_NAME (prop_object)) != 0) { + goto cleanup; + } + + if (g_strcmp0 (data->property_name, prop->name) != 0) { + goto cleanup; + } + + if (data->parent_name) { + GstObject *parent = gst_object_get_parent (prop_object); + + if (parent && g_strcmp0 (data->parent_name, GST_OBJECT_NAME (parent))) { + goto cleanup; + } + + gst_clear_object (&parent); + } + + property_check_target = prop_object; + property_name = data->property_name; + check_property = + gst_structure_has_field (action->structure, "property-value"); + + } else { + property_name = + gst_structure_get_string (action->structure, "property-name"); + } + scenario = gst_validate_action_get_scenario (data->action); - if (data->check_property && - _check_property (scenario, action, data->target, - gst_structure_get_string (action->structure, "property-name"), + if (check_property && + _check_property (scenario, action, property_check_target, + property_name, gst_structure_get_value (action->structure, "property-value"), FALSE) != GST_VALIDATE_EXECUTE_ACTION_OK) { @@ -3253,6 +3370,7 @@ stop_waiting_signal_cb (WaitingSignalData * data) goto cleanup; } + data->check_done = TRUE; waiting_signal_data_disconnect (data, scenario); if (gst_structure_get (action->structure, "check", GST_TYPE_STRUCTURE, @@ -3276,6 +3394,7 @@ stop_waiting_signal_cb (WaitingSignalData * data) cleanup: gst_validate_action_unref (action); gst_clear_object (&scenario); + g_mutex_unlock (&data->lock); } static GstValidateExecuteActionReturn @@ -3345,21 +3464,56 @@ _execute_wait_for_signal (GstValidateScenario * scenario, const GValue *property_value = gst_structure_get_value (action->structure, "property-value"); DECLARE_AND_GET_PIPELINE (scenario, action); - gboolean checking_property = signal_name == NULL; + const gchar *deep_property_path = + gst_structure_get_string (action->structure, "deep-property-path"); + gboolean checking_property = signal_name == NULL + && deep_property_path == NULL; + gchar *parent_name = NULL, *object_name = NULL, *deep_property_name = NULL; + + if (deep_property_path && *deep_property_path) { + gchar **elem_pad_name = g_strsplit (deep_property_path, ".", 2); + gchar **object_prop_name = + g_strsplit (elem_pad_name[1] ? elem_pad_name[1] : elem_pad_name[0], + "::", + -1); + + REPORT_UNLESS (object_prop_name[1], done, + "Property specification %s is missing a `::propename` part", + deep_property_path); + + deep_property_name = g_strdup (object_prop_name[1]); + object_name = g_strdup (object_prop_name[0]); + if (elem_pad_name[1]) { + parent_name = g_strdup (elem_pad_name[0]); + } - REPORT_UNLESS (signal_name || property_name, done, - "No signal-name or property-name given for wait action"); - REPORT_UNLESS (!property_name || (property_name && property_value), done, - "`property-name` specified without a `property-value`"); - targets = _find_elements_defined_in_action (scenario, action); - REPORT_UNLESS ((g_list_length (targets) == 1), done, - "Could not find target element."); + g_strfreev (elem_pad_name); + g_strfreev (object_prop_name); + + target = gst_object_ref (pipeline); + signal_name = g_strdup ("deep-notify"); + + gst_validate_printf (action, "Waiting for 'deep-notify::%s'\n", + deep_property_name); + } else { - gst_validate_printf (action, "Waiting for '%s'\n", - signal_name ? signal_name : property_name); + REPORT_UNLESS (signal_name || property_name, done, + "No signal-name or property-name given for wait action"); + REPORT_UNLESS (!property_name || (property_name && property_value), done, + "`property-name` specified without a `property-value`"); - target = targets->data; - data = waiting_signal_data_new (target, action); + targets = _find_elements_defined_in_action (scenario, action); + REPORT_UNLESS ((g_list_length (targets) == 1), done, + "Could not find target element."); + target = targets->data; + gst_validate_printf (action, "Waiting for '%s'\n", + signal_name ? signal_name : property_name); + } + + + data = + waiting_signal_data_new (target, action, parent_name, object_name, + deep_property_name); if (checking_property) { signal_name = g_strdup_printf ("notify::%s", property_name); @@ -3388,8 +3542,7 @@ _execute_wait_for_signal (GstValidateScenario * scenario, non_blocking ? GST_VALIDATE_EXECUTE_ACTION_NON_BLOCKING : GST_VALIDATE_EXECUTE_ACTION_ASYNC; if (checking_property) { - GST_ERROR ("Checking property value"); - if (_check_property (scenario, action, target, property_name, + if (_check_property (scenario, action, data->target, property_name, property_value, FALSE) == GST_VALIDATE_EXECUTE_ACTION_OK) { data->check_done = TRUE; waiting_signal_data_disconnect (data, scenario); @@ -3419,10 +3572,12 @@ _execute_wait_for_message (GstValidateScenario * scenario, gst_validate_printf (action, "Waiting for '%s' message\n", message_type); + SCENARIO_LOCK (scenario); if (priv->execute_actions_source_id) { g_source_remove (priv->execute_actions_source_id); priv->execute_actions_source_id = 0; } + SCENARIO_UNLOCK (scenario); g_assert (!priv->wait_message_action); priv->wait_message_action = gst_validate_action_ref (action); @@ -3485,6 +3640,8 @@ _execute_wait (GstValidateScenario * scenario, GstValidateAction * action) gst_structure_get_boolean (action->structure, "on-clock", &on_clock); if (gst_structure_has_field (action->structure, "signal-name")) { return _execute_wait_for_signal (scenario, action); + } else if (gst_structure_has_field (action->structure, "deep-property-path")) { + return _execute_wait_for_signal (scenario, action); } else if (gst_structure_has_field (action->structure, "property-name")) { return _execute_wait_for_signal (scenario, action); } else if (gst_structure_has_field (action->structure, "message-type")) { @@ -3716,10 +3873,10 @@ _execute_check_subaction_level (GstValidateScenario * scenario, } static gboolean -set_env_var (GQuark field_id, GValue * value, +set_env_var (const GstIdStr * fieldname, GValue * value, GSubprocessLauncher * subproc_launcher) { - g_subprocess_launcher_setenv (subproc_launcher, g_quark_to_string (field_id), + g_subprocess_launcher_setenv (subproc_launcher, gst_id_str_as_str (fieldname), g_value_get_string (value), TRUE); return TRUE; @@ -3750,8 +3907,8 @@ _run_command (GstValidateScenario * scenario, GstValidateAction * action) "The `env` parameter should be a GstStructure, got %s", G_VALUE_TYPE_NAME (env)); if (env) { - gst_structure_foreach (gst_value_get_structure (env), - (GstStructureForeachFunc) set_env_var, subproc_launcher); + gst_structure_foreach_id_str (gst_value_get_structure (env), + (GstStructureForeachIdStrFunc) set_env_var, subproc_launcher); } REPORT_UNLESS ( @@ -4432,6 +4589,7 @@ _execute_flush (GstValidateScenario * scenario, GstValidateAction * action) { GstElement *target; GstEvent *event; + gboolean ret; gboolean reset_time = TRUE; target = _get_target_element (scenario, action); @@ -4446,19 +4604,28 @@ _execute_flush (GstValidateScenario * scenario, GstValidateAction * action) gst_structure_get_boolean (action->structure, "reset-time", &reset_time); + // FLUSH_START and FLUSH_STOP are "fire-and-forget" events. + // + // In the case of a pipeline where the most downstream element has unlinked srcpads + // (as is the case for many autoplugging elements before preroll), the event will + // "fail" due to "not-linked" but will have still correctly flushed all the existing + // elements and pads. + // + // For this reason, we cannot consider a test failed if a FLUSH_START or FLUSH_STOP + // "fails". However, since those "failures" reflect edge cases, we still want to log + // them as they can become useful during debugging. + // + // Source: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7064#note_2460206 + event = gst_event_new_flush_start (); - if (!gst_element_send_event (target, event)) { - GST_VALIDATE_REPORT_ACTION (scenario, action, - SCENARIO_ACTION_EXECUTION_ERROR, "FLUSH_START event was not handled"); - return GST_VALIDATE_EXECUTE_ACTION_ERROR_REPORTED; - } + ret = gst_element_send_event (target, event); + GST_DEBUG_OBJECT (scenario, "Sending FLUSH_START event returned %s.", + ret ? "TRUE" : "FALSE"); event = gst_event_new_flush_stop (reset_time); - if (!gst_element_send_event (target, event)) { - GST_VALIDATE_REPORT_ACTION (scenario, action, - SCENARIO_ACTION_EXECUTION_ERROR, "FLUSH_STOP event was not handled"); - return GST_VALIDATE_EXECUTE_ACTION_ERROR_REPORTED; - } + ret = gst_element_send_event (target, event); + GST_DEBUG_OBJECT (scenario, "Sending FLUSH_STOP event returned %s.", + ret ? "TRUE" : "FALSE"); return GST_VALIDATE_EXECUTE_ACTION_OK; } @@ -4671,7 +4838,7 @@ gst_validate_create_subaction (GstValidateScenario * scenario, "Unknown action type: '%s'", gst_structure_get_name (nstruct)); subaction = gst_validate_action_new (scenario, action_type, nstruct, FALSE); GST_VALIDATE_ACTION_RANGE_NAME (subaction) = - GST_VALIDATE_ACTION_RANGE_NAME (action); + g_strdup (GST_VALIDATE_ACTION_RANGE_NAME (action)); GST_VALIDATE_ACTION_FILENAME (subaction) = g_strdup (GST_VALIDATE_ACTION_FILENAME (action)); GST_VALIDATE_ACTION_DEBUG (subaction) = @@ -4704,9 +4871,10 @@ gst_validate_foreach_prepare (GstValidateAction * action) _update_well_known_vars (scenario); gst_validate_action_setup_repeat (scenario, action); + g_free (GST_VALIDATE_ACTION_RANGE_NAME (action)); GST_VALIDATE_ACTION_RANGE_NAME (action) = NULL; - gst_structure_foreach (action->structure, - (GstStructureForeachFunc) _foreach_find_iterator, action); + gst_structure_foreach_id_str (action->structure, + (GstStructureForeachIdStrFunc) _foreach_find_iterator, action); /* Allow using the repeat field here too */ if (!GST_VALIDATE_ACTION_RANGE_NAME (action) @@ -4777,10 +4945,10 @@ gst_validate_foreach_prepare (GstValidateAction * action) } static gboolean -_check_structure_has_expected_value (GQuark field_id, const GValue * value, - GstStructure * message_struct) +_check_structure_has_expected_value (const GstIdStr * fieldname, + const GValue * value, GstStructure * message_struct) { - const GValue *v = gst_structure_id_get_value (message_struct, field_id); + const GValue *v = gst_structure_id_str_get_value (message_struct, fieldname); if (!v) { gst_structure_set (message_struct, "__validate_has_expected_values", @@ -4840,8 +5008,8 @@ _check_waiting_for_message (GstValidateScenario * scenario, gst_structure_set (message_struct, "__validate_has_expected_values", G_TYPE_BOOLEAN, FALSE, NULL); - gst_structure_foreach (expected_values, - (GstStructureForeachFunc) _check_structure_has_expected_value, + gst_structure_foreach_id_str (expected_values, + (GstStructureForeachIdStrFunc) _check_structure_has_expected_value, message_struct); if (!gst_structure_get_boolean (message_struct, @@ -5013,7 +5181,7 @@ handle_bus_message (MessageData * d) case GST_MESSAGE_ERROR: is_error = TRUE; - /* Passthrough */ + /* FALLTHROUGH */ case GST_MESSAGE_EOS: { GstValidateAction *stop_action; @@ -5323,6 +5491,18 @@ gst_validate_scenario_load_structures (GstValidateScenario * scenario, &priv->max_latency); gst_structure_get_int (structure, "max-dropped", &priv->max_dropped); + gboolean monitor_all_pipelines = FALSE; + if (gst_structure_get_boolean (structure, "monitor-all-pipelines", + &monitor_all_pipelines) && monitor_all_pipelines) { + GstValidateRunner *runner = + gst_validate_reporter_get_runner (GST_VALIDATE_REPORTER (scenario)); + + g_assert (runner); + gst_validate_runner_set_monitor_all_pipelines (runner, TRUE); + gst_object_unref (runner); + + } + scenario->description = gst_structure_copy (structure); continue; @@ -5663,6 +5843,19 @@ gst_validate_scenario_class_init (GstValidateScenarioClass * klass) g_signal_new ("action-done", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, GST_TYPE_VALIDATE_ACTION); + + /** + * GstValidateScenario::stopping: + * @scenario: The scenario that is being stopped + * + * Emitted when the 'stop' action is fired + * + * Since: 1.26 + */ + scenario_signals[STOPPING] = + g_signal_new ("stopping", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0); + } static void @@ -6063,13 +6256,14 @@ gst_validate_scenario_factory_create (GstValidateRunner * } static gboolean -_add_description (GQuark field_id, const GValue * value, KeyFileGroupName * kfg) +_add_description (const GstIdStr * fieldname, const GValue * value, + KeyFileGroupName * kfg) { gchar *tmp = gst_value_serialize (value); gchar *tmpcompress = g_strcompress (tmp); g_key_file_set_string (kfg->kf, kfg->group_name, - g_quark_to_string (field_id), tmpcompress); + gst_id_str_as_str (fieldname), tmpcompress); g_free (tmpcompress); g_free (tmp); @@ -6139,8 +6333,8 @@ _parse_scenario (GFile * f, GKeyFile * kf) gst_structure_remove_fields (meta, "__lineno__", "__filename__", "__debug__", NULL); - gst_structure_foreach (meta, - (GstStructureForeachFunc) _add_description, &kfg); + gst_structure_foreach_id_str (meta, + (GstStructureForeachIdStrFunc) _add_description, &kfg); gst_structure_free (meta); g_free (kfg.group_name); } else { @@ -6843,6 +7037,9 @@ _execute_stop (GstValidateScenario * scenario, GstValidateAction * action) DECLARE_AND_GET_PIPELINE (scenario, action); bus = gst_element_get_bus (pipeline); + + g_signal_emit (scenario, scenario_signals[STOPPING], 0); + SCENARIO_LOCK (scenario); if (priv->execute_actions_source_id) { g_source_remove (priv->execute_actions_source_id); @@ -6950,6 +7147,7 @@ _action_set_done (GstValidateAction * action) case GST_VALIDATE_EXECUTE_ACTION_ERROR: GST_VALIDATE_REPORT_ACTION (scenario, action, SCENARIO_ACTION_EXECUTION_ERROR, "Action %s failed", action->type); + /* FALLTHROUGH */ case GST_VALIDATE_EXECUTE_ACTION_ASYNC: case GST_VALIDATE_EXECUTE_ACTION_IN_PROGRESS: case GST_VALIDATE_EXECUTE_ACTION_NONE: @@ -7597,6 +7795,9 @@ register_action_types (void) GBytes *meta_expected_issues_doc = g_resource_lookup_data (resource, "/validate/doc/meta-expected-issues.md", G_RESOURCE_LOOKUP_FLAGS_NONE, NULL); + GBytes *meta_features_rank_doc = + g_resource_lookup_data (resource, "/validate/doc/meta-features-rank.md", + G_RESOURCE_LOOKUP_FLAGS_NONE, NULL); /* *INDENT-OFF* */ REGISTER_ACTION_TYPE ("meta", NULL, @@ -7773,12 +7974,31 @@ register_action_types (void) .possible_variables = NULL, .def = "{}" }, + { + .name="features-rank", + .description=g_bytes_get_data (meta_features_rank_doc, NULL), + .mandatory = FALSE, + .types = "bool", + .possible_variables = NULL, + .def = "false" + }, + { + .name="monitor-all-pipelines", + .description="This should only be used in `.validatetest` files, and allows forcing to monitor " + "all pipelines instead of only the one the tools wanted to monitor, for example to " + "use `validateflow` on auxilary pipelines", + .mandatory = FALSE, + .types = "bool", + .possible_variables = NULL, + .def = "false" + }, {NULL} }), "Scenario metadata.\n\nNOTE: it used to be called \"description\"", GST_VALIDATE_ACTION_TYPE_CONFIG); g_bytes_unref (meta_config_doc); g_bytes_unref (meta_expected_issues_doc); + g_bytes_unref (meta_features_rank_doc); REGISTER_ACTION_TYPE ("seek", _execute_seek, ((GstValidateActionParameter []) { @@ -7885,6 +8105,17 @@ register_action_types (void) .types = "[int]", .possible_variables = NULL, }, + { + .name = "n-calls", + .description = "Number of times the `select-stream` event should be sent to the pipeline\n" + " - `0` means 0 or more" + " - `-1` means at least once" + " - Other numbers are exact number of calls", + .mandatory = FALSE, + .types = "int", + .def = "1", + .possible_variables = NULL, + }, {NULL} }), "Select the stream on next `GST_STREAM_COLLECTION` message on the bus.", @@ -8012,6 +8243,19 @@ register_action_types (void) .types = "structure", NULL }, + { + .name = "deep-property-path", + .description = "The property to wait to be set on the object inside the pipeline that matches" + " the path defined as:\n\n" + "```\n" + "element-name.padname::property-name=new-value\n" + "```\n\n" + "> NOTE: `.padname` is not needed if setting a property on an element\n\n", + .mandatory = FALSE, + .types = "string", + NULL + }, + {NULL} }), "Waits for signal 'signal-name', message 'message-type', or during 'duration' seconds", diff --git a/subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.h b/subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.h index 7f18cf2dd4d..4ee4a486e3b 100644 --- a/subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.h +++ b/subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.h @@ -152,7 +152,7 @@ struct _GstValidateAction gchar *filename; gchar *debug; gint n_repeats; - const gchar *rangename; + gchar *rangename; GstValidateActionPrivate *priv; diff --git a/subprojects/gst-devtools/validate/gst/validate/gst-validate-utils.c b/subprojects/gst-devtools/validate/gst/validate/gst-validate-utils.c index 60ae1f906eb..39ae8063e0f 100644 --- a/subprojects/gst-devtools/validate/gst/validate/gst-validate-utils.c +++ b/subprojects/gst-devtools/validate/gst/validate/gst-validate-utils.c @@ -50,10 +50,6 @@ static GRegex *_variables_regex = NULL; static GstStructure *global_vars = NULL; -static GQuark debug_quark = 0; -static GQuark lineno_quark = 0; -static GQuark filename_quark = 0; - typedef struct { const gchar *str; @@ -563,17 +559,6 @@ skip_spaces (gchar * c) return c; } -static void -setup_quarks (void) -{ - if (filename_quark) - return; - - filename_quark = g_quark_from_static_string ("__filename__"); - lineno_quark = g_quark_from_static_string ("__lineno__"); - debug_quark = g_quark_from_static_string ("__debug__"); -} - gboolean gst_validate_has_colored_output (void) { @@ -739,18 +724,31 @@ _file_get_structures (GFile * file, gchar ** err, GList *tmpstructures; gchar **include_dirs = NULL; - if (!get_include_paths_func - && g_str_has_suffix (location, GST_VALIDATE_SCENARIO_SUFFIX)) { + if (get_include_paths_func) + include_dirs = get_include_paths_func (filename); + + if (g_str_has_suffix (location, GST_VALIDATE_SCENARIO_SUFFIX)) { GST_INFO ("Trying to include a scenario, take into account scenario include dir"); - get_include_paths_func = (GstValidateGetIncludePathsFunc) - gst_validate_scenario_get_include_paths; + gchar **extra_includes = + gst_validate_scenario_get_include_paths (filename); + if (extra_includes) { + gint i = 0; + gint existing_len = + include_dirs ? g_strv_length (include_dirs) : 0; + gint extra_len = g_strv_length (extra_includes); + include_dirs = + g_realloc_n (include_dirs, existing_len + extra_len + 1, + sizeof (gchar *)); + for (i = 0; extra_includes[i] != NULL; i++) { + include_dirs[existing_len + i] = extra_includes[i]; + } + include_dirs[existing_len + i] = NULL; + g_free (extra_includes); + } } - if (get_include_paths_func) - include_dirs = get_include_paths_func (filename); - if (!include_dirs) { GFile *dir = g_file_get_parent (file); included = g_file_resolve_relative_path (dir, location); @@ -809,11 +807,10 @@ _file_get_structures (GFile * file, gchar ** err, } gst_structure_free (structure); } else { - setup_quarks (); - gst_structure_id_set (structure, - lineno_quark, G_TYPE_INT, current_lineno, - filename_quark, G_TYPE_STRING, filename, - debug_quark, G_TYPE_STRING, debug_line->str, NULL); + gst_structure_set_static_str (structure, + "__lineno__", G_TYPE_INT, current_lineno, + "__filename__", G_TYPE_STRING, filename, + "__debug__", G_TYPE_STRING, debug_line->str, NULL); structures = g_list_append (structures, structure); } } @@ -1355,11 +1352,25 @@ _resolve_expression (gpointer source, GValue * value) g_clear_pointer (&match_info, g_match_info_free); } +gboolean +gst_validate_structure_file_field_is_metadata (const GstIdStr * fieldname) +{ + static const gchar *skip_fields[] = { + "__filename__", + "__lineno__", + "__debug__", + NULL, + }; + + return fieldname + && g_strv_contains (skip_fields, gst_id_str_as_str (fieldname)); +} + static gboolean -_structure_set_variables (GQuark field_id, GValue * value, ReplaceData * data) +_structure_set_variables (const GstIdStr * fieldname, GValue * value, + ReplaceData * data) { - if (field_id == filename_quark || field_id == debug_quark - || field_id == debug_quark) + if (gst_validate_structure_file_field_is_metadata (fieldname)) return TRUE; if (GST_VALUE_HOLDS_LIST (value)) { @@ -1415,14 +1426,15 @@ gst_validate_structure_resolve_variables (gpointer source, { ReplaceData d = { source ? source : structure, local_variables, flags }; - gst_structure_filter_and_map_in_place (structure, - (GstStructureFilterMapFunc) _structure_set_variables, &d); + gst_structure_filter_and_map_in_place_id_str (structure, + (GstStructureFilterMapIdStrFunc) _structure_set_variables, &d); } static gboolean -_set_vars_func (GQuark field_id, const GValue * value, GstStructure * vars) +_set_vars_func (const GstIdStr * fieldname, const GValue * value, + GstStructure * vars) { - gst_structure_id_set_value (vars, field_id, value); + gst_structure_id_str_set_value (vars, fieldname, value); return TRUE; } @@ -1462,8 +1474,8 @@ gst_validate_set_globals (GstStructure * structure) if (!structure) return; - gst_structure_foreach (structure, - (GstStructureForeachFunc) _set_vars_func, global_vars); + gst_structure_foreach_id_str (structure, + (GstStructureForeachIdStrFunc) _set_vars_func, global_vars); } /** diff --git a/subprojects/gst-devtools/validate/gst/validate/gst-validate-utils.h b/subprojects/gst-devtools/validate/gst/validate/gst-validate-utils.h index 3ae12ba317c..91d3e7879c3 100644 --- a/subprojects/gst-devtools/validate/gst/validate/gst-validate-utils.h +++ b/subprojects/gst-devtools/validate/gst/validate/gst-validate-utils.h @@ -93,6 +93,7 @@ GST_VALIDATE_API void gst_validate_structure_resolve_variables (gpointer source, GstStructure *structure, GstStructure *local_variables, GstValidateStructureResolveVariablesFlags flags); void gst_validate_structure_set_variables_from_struct_file(GstStructure* vars, const gchar* struct_file); +GST_VALIDATE_API void gst_validate_set_globals(GstStructure* structure); GST_VALIDATE_API gboolean gst_validate_fail_on_missing_plugin(void); diff --git a/subprojects/gst-devtools/validate/gst/validate/meson.build b/subprojects/gst-devtools/validate/gst/validate/meson.build index 69544979067..2829f4cc0cf 100644 --- a/subprojects/gst-devtools/validate/gst/validate/meson.build +++ b/subprojects/gst-devtools/validate/gst/validate/meson.build @@ -65,7 +65,7 @@ validate_resources = gnome.compile_resources( validate_deps = [gst_check_dep, gst_dep, gst_controller_dep, gstbase_dep, gstapp_dep, gio_dep, gmodule_dep, gst_pbutils_dep, mathlib, json_dep] -gstvalidate = library('gstvalidate-@0@'.format(apiversion), +gstvalidate = library('gstvalidate-@0@'.format(api_version), sources: gstvalidate_sources + gst_validate_enums + runner_file + validate_resources, version : libversion, soversion : soversion, @@ -90,6 +90,14 @@ else warning('Statically building GstValidate as a tracer is not supported yet.') endif +doc_sources = [] +foreach s: gstvalidate_headers + doc_sources += meson.current_source_dir() / s.full_path() +endforeach + +plugin_sources += { + 'validatetracer': pathsep.join(doc_sources) +} pkg_name = 'gstreamer-validate-1.0' library_def = {'lib': gstvalidate} @@ -114,8 +122,8 @@ if build_gir 'GLib-2.0', 'Gio-2.0', 'GModule-2.0', - 'Gst-' + apiversion, - 'GstPbutils-' + apiversion], + 'Gst-' + api_version, + 'GstPbutils-' + api_version], 'install' : true, 'dependencies' : validate_deps, 'extra_args' : gst_validate_gir_extra_args, diff --git a/subprojects/gst-devtools/validate/gst/validate/validate.c b/subprojects/gst-devtools/validate/gst/validate/validate.c index c808cc4a360..d142ea5b834 100644 --- a/subprojects/gst-devtools/validate/gst/validate/validate.c +++ b/subprojects/gst-devtools/validate/gst/validate/validate.c @@ -26,6 +26,7 @@ * @short_description: Initialize GstValidate */ +#include "gst/gstidstr.h" #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ @@ -138,9 +139,10 @@ gst_structure_validate_name (const gchar * name) } static gboolean -_set_vars_func (GQuark field_id, const GValue * value, GstStructure * vars) +_set_vars_func (const GstIdStr * fieldname, const GValue * value, + GstStructure * vars) { - gst_structure_id_set_value (vars, field_id, value); + gst_structure_id_str_set_value (vars, fieldname, value); return TRUE; } @@ -199,8 +201,8 @@ create_config (const gchar * config) if (gst_structure_has_field (structure, "set-vars")) { gst_structure_remove_field (structure, "set-vars"); - gst_structure_foreach (structure, - (GstStructureForeachFunc) _set_vars_func, local_vars); + gst_structure_foreach_id_str (structure, + (GstStructureForeachIdStrFunc) _set_vars_func, local_vars); gst_structure_free (structure); } else if (!loaded_globals && gst_structure_has_name (structure, "set-globals")) { @@ -264,16 +266,23 @@ get_structures_from_array_in_meta (const gchar * fieldname) if (!meta) return NULL; - res = get_structures_from_array (meta, fieldname); - if (res) - return res; - gst_structure_get (meta, "__lineno__", G_TYPE_INT, ¤t_lineno, "__debug__", G_TYPE_STRING, &debug, "__filename__", G_TYPE_STRING, &filename, NULL); - strs = gst_validate_utils_get_strv (meta, fieldname); + res = get_structures_from_array (meta, fieldname); + if (res) { + for (GList * tmp = res; tmp; tmp = tmp->next) { + gst_structure_set (tmp->data, + "__lineno__", G_TYPE_INT, current_lineno, + "__filename__", G_TYPE_STRING, filename, + "__debug__", G_TYPE_STRING, debug, NULL); + } + goto done; + } + + strs = gst_validate_utils_get_strv (meta, fieldname); if (strs) { gint i; @@ -293,6 +302,7 @@ get_structures_from_array_in_meta (const gchar * fieldname) } } +done: g_free (filename); g_free (debug); g_strfreev (strs); @@ -586,6 +596,71 @@ gst_validate_get_test_file_scenario (GList ** structs, return TRUE; } +static gchar ** +validate_test_include_paths (const gchar * includer_file) +{ + gchar **env_configdir; + gchar *configs_path = g_strdup (g_getenv ("GST_VALIDATE_TEST_CONFIG_PATH")); + + if (includer_file) { + gchar *relative_dir = g_path_get_dirname (includer_file); + gchar *tmp_configs_path = configs_path ? + g_strdup_printf ("%s" G_SEARCHPATH_SEPARATOR_S "%s", configs_path, + relative_dir) : g_strdup (relative_dir); + g_free (relative_dir); + + g_free (configs_path); + configs_path = tmp_configs_path; + } + + env_configdir = + configs_path ? g_strsplit (configs_path, G_SEARCHPATH_SEPARATOR_S, + 0) : NULL; + g_free (configs_path); + + return env_configdir; +} + +static gboolean +_set_feature_rank (const GstIdStr * fieldname, GValue * value, + GstStructure * structure) +{ + GstRegistry *registry = gst_registry_get (); + guint rank = 0; + + if (gst_validate_structure_file_field_is_metadata (fieldname)) + return TRUE; + + if (G_VALUE_TYPE (value) == G_TYPE_UINT) { + rank = (guint) g_value_get_uint (value); + } else if (G_VALUE_TYPE (value) == G_TYPE_INT) { + rank = g_value_get_int (value); + } else { + gst_validate_error_structure (structure, + "Invalid value %s for field '%s' (expecting int) in the 'features-rank' structure", + G_VALUE_TYPE_NAME (value), gst_value_serialize (value)); + + return FALSE; + } + + GstPluginFeature *feature = + gst_registry_lookup_feature (registry, gst_id_str_as_str (fieldname)); + if (!feature) { + if (gst_structure_has_name (structure, "mandatory")) { + gst_validate_error_structure (structure, + "Feature `%s` not found while its ranks has been requested to be set to %d", + gst_id_str_as_str (fieldname), rank); + return FALSE; + } + + return TRUE; + } + + gst_plugin_feature_set_rank (feature, rank); + + return TRUE; +} + /* Only the first monitor pipeline will be used */ GstStructure * gst_validate_setup_test_file (const gchar * testfile, gboolean use_fakesinks) @@ -602,8 +677,8 @@ gst_validate_setup_test_file (const gchar * testfile, gboolean use_fakesinks) gst_validate_set_globals (NULL); gst_validate_structure_set_variables_from_struct_file (NULL, global_testfile); testfile_structs = - gst_validate_utils_structs_parse_from_filename (global_testfile, NULL, - NULL); + gst_validate_utils_structs_parse_from_filename (global_testfile, + validate_test_include_paths, NULL); if (!testfile_structs) gst_validate_abort ("Could not load test file: %s", global_testfile); @@ -627,6 +702,21 @@ gst_validate_setup_test_file (const gchar * testfile, gboolean use_fakesinks) register_action_types (); gst_validate_scenario_check_and_set_needs_clock_sync (testfile_structs, &res); + GList *feature_ranks_def = + get_structures_from_array_in_meta ("features-rank"); + for (GList * tmp = feature_ranks_def; tmp; tmp = tmp->next) { + GstStructure *feature_ranks = tmp->data; + if (!gst_structure_has_name (feature_ranks, "mandatory") + && !gst_structure_has_name (feature_ranks, "optional")) { + gst_validate_error_structure (res, + "Feature rank structures should have either `mandatory` or `optional` as a name, got: %s", + gst_structure_to_string (feature_ranks)); + return NULL; + } + gst_structure_filter_and_map_in_place_id_str (feature_ranks, + (GstStructureFilterMapIdStrFunc) _set_feature_rank, feature_ranks); + } + gst_validate_set_test_file_globals (res, global_testfile, use_fakesinks); gst_validate_structure_resolve_variables (NULL, res, NULL, 0); diff --git a/subprojects/gst-devtools/validate/gst/validate/validate.res b/subprojects/gst-devtools/validate/gst/validate/validate.res index 1568b88d408..987c4b56f81 100644 --- a/subprojects/gst-devtools/validate/gst/validate/validate.res +++ b/subprojects/gst-devtools/validate/gst/validate/validate.res @@ -3,6 +3,7 @@ doc/meta-configs.md doc/meta-expected-issues.md + doc/meta-features-rank.md diff --git a/subprojects/gst-devtools/validate/launcher/baseclasses.py b/subprojects/gst-devtools/validate/launcher/baseclasses.py index f47cfc62177..714ec735531 100644 --- a/subprojects/gst-devtools/validate/launcher/baseclasses.py +++ b/subprojects/gst-devtools/validate/launcher/baseclasses.py @@ -43,6 +43,7 @@ import uuid from itertools import cycle from fractions import Fraction +from pathlib import Path from .utils import GstCaps, which from . import reporters @@ -79,6 +80,63 @@ CI_ARTIFACTS_URL = os.environ.get('CI_ARTIFACTS_URL') +DEBUGGER = None + + +def get_debugger(): + global DEBUGGER + if DEBUGGER is not None: + return DEBUGGER + + gdb = shutil.which('gdb') + if gdb: + DEBUGGER = GDBDebugger(gdb) + else: + lldb = shutil.which('lldb') + DEBUGGER = LLDBDebugger(lldb) + + return DEBUGGER + + +class Debugger: + def __init__(self, executable): + self.executable = executable + + def get_args(self, args, non_stop) -> list: + raise NotImplementedError + + def get_attach_args(self, pid): + raise NotImplementedError + + +class GDBDebugger(Debugger): + def get_args(self, args, non_stop) -> list: + if non_stop: + return [ + self.executable, + "-ex", + "run", + "-ex", + "bt", + "-ex", + "quit", + "--args", + ] + args + else: + return [self.executable, "--args"] + args + + def get_attach_args(self, pid): + return [self.executable, "-p", str(pid)] + + +class LLDBDebugger(Debugger): + def get_args(self, args, non_stop) -> list: + if non_stop: + return [self.executable, "-o", "run", "-o", "bt", "-o", "quit", "--"] + args + return [self.executable, "--"] + args + + def get_attach_args(self, pid): + return [self.executable, "-p", str(pid)] class Test(Loggable): @@ -134,6 +192,14 @@ def __init__(self, application_name, classname, options, self.clean() + def remove_logs(self): + for logfile in set([self.logfile]) | self.extra_logfiles: + try: + os.remove(logfile) + self.info("Removed %s after test passed.", logfile) + except FileNotFoundError: + pass + def _generate_expected_issues(self): return '' @@ -251,14 +317,18 @@ def finalize_logfiles(self): for logfile in self.extra_logfiles: # Only copy over extra logfile content if it's below a certain threshold # Avoid copying gigabytes of data if a lot of debugging is activated - if os.path.getsize(logfile) < 500 * 1024: - self.out.write('\n\n## %s:\n\n```\n%s\n```\n' % ( - os.path.basename(logfile), self.get_extra_log_content(logfile)) - ) - else: - self.out.write('\n\n## %s:\n\n**Log file too big.**\n %s\n\n Check file content directly\n\n' % ( - os.path.basename(logfile), logfile) - ) + try: + if os.path.getsize(logfile) < 500 * 1024: + self.out.write('\n\n## %s:\n\n```\n%s\n```\n' % ( + os.path.basename(logfile), self.get_extra_log_content(logfile)) + ) + else: + self.out.write('\n\n## %s:\n\n**Log file too big.**\n %s\n\n Check file content directly\n\n' % ( + os.path.basename(logfile), logfile) + ) + except FileNotFoundError as e: + self.info(f"Failed to copy logfile {logfile}: {e}") + pass if self.rr_logdir: self.out.write('\n\n## rr trace:\n\n```\nrr replay %s/latest-trace\n```\n' % ( @@ -282,11 +352,8 @@ def finalize_logfiles(self): self.out = None def _get_file_content(self, file_name): - f = open(file_name, 'r+') - value = f.read() - f.close() - - return value + with open(file_name, 'r', encoding='utf-8', errors='replace') as f: + return f.read() def get_log_content(self): return self._get_file_content(self.logfile) @@ -368,6 +435,7 @@ def set_result(self, result, message="", error=""): message, error)) if result is Result.TIMEOUT: + self.add_stack_trace_to_logfile() if self.options.debug is True: if self.options.gdb: printc("Timeout, you should process c to get into gdb", @@ -376,11 +444,21 @@ def set_result(self, result, message="", error=""): self.process.communicate() else: pname = self.command[0] - input("%sTimeout happened on %s you can attach gdb doing:\n $gdb %s %d%s\n" - "Press enter to continue" % (Colors.FAIL, self.classname, - pname, self.process.pid, Colors.ENDC)) - else: - self.add_stack_trace_to_logfile() + while True: + debugger = get_debugger() + if not debugger: + res = input(f"{Colors.FAIL}Timeout happened on {self.classname} no known debugger found but the process PID is {self.process.pid}\n" + f"You can find log file at {self.logfile}\n" + f"Press 'ok(o)' enter to continue\n\n") + else: + res = input(f"{Colors.FAIL}Timeout happened on {self.classname} you can attach the debugger doing:\n" + f" $ {' '.join([shlex.quote(a) for a in debugger.get_attach_args(self.process.pid)])}\n" + f"You can find log file at {self.logfile}\n" + f"**Press ok(o) to continue**{Colors.ENDC}\n\n") + + if res.lower() in ['o', 'ok']: + print("Continuing...\n") + break self.result = result self.message = message @@ -547,10 +625,8 @@ def use_gdb(self, command): self.timeout = sys.maxsize self.hard_timeout = sys.maxsize - args = ["gdb"] - if self.options.gdb_non_stop: - args += ["-ex", "run", "-ex", "backtrace", "-ex", "quit"] - args += ["--args"] + command + assert DEBUGGER is not None + args = DEBUGGER.get_args(command, self.options.gdb_non_stop) return args def use_rr(self, command, subenv): @@ -575,6 +651,7 @@ def use_valgrind(self, command, subenv): for o, v in [('trace-children', 'yes'), ('tool', 'memcheck'), + ('fair-sched', 'try'), ('leak-check', 'full'), ('leak-resolution', 'high'), # TODO: errors-for-leak-kinds should be set to all instead of definite @@ -720,7 +797,11 @@ def copy_logfiles(self, extra_folder="flaky_tests"): self.logfile = shutil.copy(self.logfile, path) extra_logs = [] for logfile in self.extra_logfiles: - extra_logs.append(shutil.copy(logfile, path)) + try: + extra_logs.append(shutil.copy(logfile, path)) + except FileNotFoundError as e: + self.info(f"Failed to copy logfile {logfile}: {e}") + pass self.extra_logfiles = extra_logs def test_end(self, retry_on_failures=False): @@ -862,6 +943,7 @@ def __init__(self, application_name, classname, self.media_descriptor = media_descriptor self.server = None self.criticals = [] + self.dotfilesdir = None override_path = self.get_override_file(media_descriptor) if override_path: @@ -967,6 +1049,12 @@ def get_subproc_env(self): subproc_env['GST_XINITTHREADS'] = '1' self.add_env_variable('GST_XINITTHREADS', '1') + vaildateconfigs_path = os.environ.get('GST_VALIDATE_TEST_CONFIG_PATH', "") + extra_configs = os.path.join(self.options.logsdir, "_validate_test_extra_configs") + vaildateconfigs_path = f"{extra_configs}{os.pathsep}{vaildateconfigs_path}" + subproc_env['GST_VALIDATE_TEST_CONFIG_PATH'] = vaildateconfigs_path + self.add_env_variable('GST_VALIDATE_TEST_CONFIG_PATH', vaildateconfigs_path) + if self.scenario is not None: scenario = self.scenario.get_execution_name() subproc_env["GST_VALIDATE_SCENARIO"] = scenario @@ -979,17 +1067,21 @@ def get_subproc_env(self): pass if not subproc_env.get('GST_DEBUG_DUMP_DOT_DIR'): - dotfilesdir = os.path.join(self.options.logsdir, - self.classname.replace(".", os.sep) + '.pipelines_dot_files') - mkdir(dotfilesdir) - subproc_env['GST_DEBUG_DUMP_DOT_DIR'] = dotfilesdir + self.dotfilesdir = os.path.splitext(self.logfile)[0] + '.pipelines_dot_files' + mkdir(self.dotfilesdir) + subproc_env['GST_DEBUG_DUMP_DOT_DIR'] = self.dotfilesdir if CI_ARTIFACTS_URL: - dotfilesurl = CI_ARTIFACTS_URL + os.path.relpath(dotfilesdir, + dotfilesurl = CI_ARTIFACTS_URL + os.path.relpath(self.dotfilesdir, self.options.logsdir) subproc_env['GST_VALIDATE_DEBUG_DUMP_DOT_URL'] = dotfilesurl return subproc_env + def remove_logs(self): + super().remove_logs() + if self.dotfilesdir: + shutil.rmtree(self.dotfilesdir, ignore_errors=True) + def clean(self): Test.clean(self) self.reports = [] @@ -1624,6 +1716,10 @@ def set_settings(self, options, args, reporter): for patterns in options.blacklisted_tests: self._add_blacklist(patterns) + if options.gdb: + if get_debugger() is None: + raise RuntimeError("No debugger found, can't run tests with --gdb") + def check_blacklists(self): if self.options.check_bugs_status: if not check_bugs_resolution(self.blacklisted_tests): @@ -1955,6 +2051,10 @@ def set_settings(self, options, args): if self.needs_http_server() or options.httponly is True: self.httpsrv = HTTPServer(options) self.httpsrv.start() + configsdir = Path(options.logsdir) / "_validate_test_extra_configs" + os.makedirs(configsdir, exist_ok=True) + with open(configsdir / "http_server_port.var", "w") as f: + f.write(f"set-globals,http_server_port={self.options.http_server_port}") if options.no_display: self.vfb_server = get_virual_frame_buffer_server(options) @@ -2220,6 +2320,10 @@ def _run_tests(self, running_tests=None, all_alone=False, retry_on_failures=Fals total_num_tests=total_num_tests) if to_report: self.reporter.after_test(test) + + if res == Result.PASSED and not self.options.keep_logs: + test.remove_logs() + if self.start_new_job(tests_left): jobs_running += 1 diff --git a/subprojects/gst-devtools/validate/launcher/main.py b/subprojects/gst-devtools/validate/launcher/main.py index 33658210cd7..cec7a455386 100644 --- a/subprojects/gst-devtools/validate/launcher/main.py +++ b/subprojects/gst-devtools/validate/launcher/main.py @@ -221,6 +221,7 @@ def __init__(self): self.num_jobs = max(multiprocessing.cpu_count(), 1) self.dest = None self._using_default_paths = False + self.keep_logs = False # paths passed with --media-path, and not defined by a testsuite self.user_paths = [] self.paths = [] @@ -266,12 +267,9 @@ def cleanup(self): self.logsdir = "stdout" self.debug = True self.num_jobs = 1 - try: - subprocess.check_output("gdb --help", shell=True) - except subprocess.CalledProcessError: - printc("Want to use gdb, but not available on the system", - Colors.FAIL) - return False + + if self.xunit_file: + self.keep_logs = True # other output directories if self.logsdir in ['stdout', 'stderr']: @@ -526,6 +524,9 @@ def create_parser(): help="Disable retrying on failure, event for known to be flaky tests.") parser.add_argument('--html', dest="html", action="store_true", help="Write logs as html") + parser.add_argument("--keep-logs", dest="keep_logs", + action="store_true", + help="Keep the logs in the output directory on success, by default logs are removed unless the test passes") dir_group = parser.add_argument_group( "Directories and files to be used by the launcher") dir_group.add_argument("-M", "--main-dir", dest="main_dir", diff --git a/subprojects/gst-devtools/validate/launcher/reporters.py b/subprojects/gst-devtools/validate/launcher/reporters.py index 0baeb125fd7..42dcaf0ab74 100644 --- a/subprojects/gst-devtools/validate/launcher/reporters.py +++ b/subprojects/gst-devtools/validate/launcher/reporters.py @@ -180,7 +180,7 @@ def report(self): """ self.debug("Writing XML file to: %s", self.options.xunit_file) xml_file = codecs.open(self.options.xunit_file, 'w', - self.encoding, 'replace') + self.encoding, errors = 'replace') self.stats['encoding'] = self.encoding self.stats['total'] = (self.stats['timeout'] + self.stats['failures'] @@ -192,7 +192,7 @@ def report(self): 'skipped="%(skipped)d">' % self.stats) tmp_xml_file = codecs.open(self.tmp_xml_file.name, 'r', - self.encoding, 'replace') + self.encoding, errors = 'replace') for l in tmp_xml_file: xml_file.write(l) @@ -214,7 +214,7 @@ def set_failed(self, test): super().set_failed(test) xml_file = codecs.open(self.tmp_xml_file.name, 'a', - self.encoding, 'replace') + self.encoding, errors = 'replace') xml_file.write(self._forceUnicode( '%(systemout)s' '' @@ -233,7 +233,7 @@ def set_passed(self, test): self.stats['passed'] += 1 xml_file = codecs.open(self.tmp_xml_file.name, 'a', - self.encoding, 'replace') + self.encoding, errors = 'replace') xml_file.write(self._forceUnicode( '%(systemout)s' % @@ -246,5 +246,5 @@ def set_passed(self, test): def _forceUnicode(self, s): if not UNICODE_STRINGS: if isinstance(s, str): - s = s.decode(self.encoding, 'replace') + s = s.decode(self.encoding, errors = 'replace') return s diff --git a/subprojects/gst-devtools/validate/launcher/testsuites/check.py b/subprojects/gst-devtools/validate/launcher/testsuites/check.py index 7506a9c5e5b..340c4c0a447 100644 --- a/subprojects/gst-devtools/validate/launcher/testsuites/check.py +++ b/subprojects/gst-devtools/validate/launcher/testsuites/check.py @@ -123,6 +123,8 @@ (r'check.gst-plugins-good.elements_splitmuxsrc.test_splitmuxsrc_sparse_streams', 'https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/739'), (r'check.gst-plugins-good.elements_udpsrc.test_udpsrc_empty_packet', 'https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/740'), (r'check.gst-plugins-bad.elements_svthevc*', 'https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3011'), + (r'check.gst-plugins-bad.elements_srtp.test_roc', 'https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3939'), + (r'check.gst-plugins-bad.elements_curlhttpsrc.test_range_get', '?'), ] BLACKLIST = [ @@ -154,8 +156,9 @@ (r'check.gst-plugins-bad.elements_curlhttpsrc.test_multiple_http_requests$', 'https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/788'), (r'check.gst-plugins-good.elements_rtpsession.test_multiple_senders_roundrobin_rbs$', 'https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/789'), (r'check.gst-plugins-bad.elements_shm.test_shm_live$', 'https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/790'), + (r'check.gst-plugins-bad.validate.autovideoconvert.renegotiate$', ''), (r'check.gst-plugins-good.elements_splitmux.test_splitmuxsink_async$', '[FIXME -- SHOULD BE FIXED] https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/791'), - (r'check.gst-plugins-bad.elements_netsim.netsim_stress$', 'https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/792'), + (r'check.gst-plugins-bad.elements_netsim.netsim_stress', 'https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/792'), (r'check.gst-editing-services.nle_complex.test_one_expandable_another$', 'https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/793'), (r'check.gst-editing-services.nle_simple.test_simplest$', 'https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/794'), (r'check.gst-editing-services.ges_basic.test_ges_pipeline_change_state$', 'https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/795'), diff --git a/subprojects/gst-devtools/validate/launcher/utils.py b/subprojects/gst-devtools/validate/launcher/utils.py index c8769eb3b29..1c39fcd192a 100644 --- a/subprojects/gst-devtools/validate/launcher/utils.py +++ b/subprojects/gst-devtools/validate/launcher/utils.py @@ -385,6 +385,7 @@ def __init__(self): self.warning(e) self.coredumpctl = None self.gdb = shutil.which('gdb') + self.lldb = shutil.which('lldb') @classmethod def get_default(cls): @@ -404,8 +405,21 @@ def get_trace(self, test): " supported way to get backtraces for now.") return None + def get_trace_on_running_process_with_lldb(self, test): + lldb = ['lldb', '-o', 'bt all', '-o', 'quit', '-p', str(test.process.pid)] + + try: + return subprocess.check_output( + lldb, stderr=subprocess.STDOUT, timeout=30).decode() + except Exception as e: + return "Could not run `lldb` on process (pid: %d):\n%s" % ( + test.process.pid, e) + def get_trace_on_running_process(self, test): if not self.gdb: + if self.lldb: + return self.get_trace_on_running_process_with_lldb(test) + return "Can not generate stack trace as `gdb` is not" \ "installed." diff --git a/subprojects/gst-devtools/validate/meson.build b/subprojects/gst-devtools/validate/meson.build index a7d1f3b8415..a86c3fcbe34 100644 --- a/subprojects/gst-devtools/validate/meson.build +++ b/subprojects/gst-devtools/validate/meson.build @@ -7,7 +7,7 @@ cdata.set('VERSION', '"@0@"'.format(gst_version)) cdata.set('PACKAGE', '"gst-validate"') cdata.set('GST_PACKAGE_NAME', '"GStreamer Validate"') cdata.set('GST_PACKAGE_ORIGIN', '"Unknown package origin"') -cdata.set('GST_API_VERSION', '"@0@"'.format(apiversion)) +cdata.set('GST_API_VERSION', '"@0@"'.format(api_version)) cdata.set('VALIDATEPLUGINDIR', '"@0@/@1@/gstreamer-1.0/validate"'.format(get_option('prefix'),get_option('libdir'))) cdata.set('GST_DATADIR', '"@0@/@1@"'.format(prefix, get_option('datadir'))) cdata.set('PACKAGE_NAME', '"GStreamer Validate"') diff --git a/subprojects/gst-devtools/validate/plugins/gapplication/gstvalidategapplication.c b/subprojects/gst-devtools/validate/plugins/gapplication/gstvalidategapplication.c index da8da5787d8..2d9ff8a1e9d 100644 --- a/subprojects/gst-devtools/validate/plugins/gapplication/gstvalidategapplication.c +++ b/subprojects/gst-devtools/validate/plugins/gapplication/gstvalidategapplication.c @@ -47,7 +47,7 @@ static gboolean gst_validate_gapplication_init (GstPlugin * plugin) { GList *config, *tmp; - const gchar *appname; + const gchar *appname = NULL; config = gst_validate_plugin_get_config (plugin); diff --git a/subprojects/gst-devtools/validate/plugins/ssim/gstvalidatessim.c b/subprojects/gst-devtools/validate/plugins/ssim/gstvalidatessim.c index 37cad8a5130..66f69182556 100644 --- a/subprojects/gst-devtools/validate/plugins/ssim/gstvalidatessim.c +++ b/subprojects/gst-devtools/validate/plugins/ssim/gstvalidatessim.c @@ -173,6 +173,7 @@ runner_stopping (GstValidateRunner * runner, ValidateSsimOverride * self) ref_path = g_build_path (G_DIR_SEPARATOR_S, compared_files_dir, refname, NULL); + g_free (refname); if (!gst_validate_ssim_compare_image_files (ssim, ref_path, frame->path, &mssim, &lowest, &highest, self->priv->result_outdir)) @@ -191,6 +192,8 @@ runner_stopping (GstValidateRunner * runner, ValidateSsimOverride * self) g_free (bname); } + gst_object_unref (ssim); + gst_validate_printf (NULL, "\nAverage similarity: %f, min_avg: %f, min_min: %f\n", total_avg / nfiles, min_avg, min_min); @@ -410,6 +413,8 @@ _finalize (GObject * object) if (priv->config) gst_structure_free (priv->config); + + G_OBJECT_CLASS (validate_ssim_override_parent_class)->finalize (object); } static void @@ -722,10 +727,11 @@ _handle_event (GstValidateOverride * override, } static gboolean -_map_confg (GQuark field_id, GValue * value, GstStructure * structure) +_map_confg (const GstIdStr * fieldname, GValue * value, + GstStructure * structure) { - if (!gst_structure_id_has_field (structure, field_id)) - gst_structure_id_set_value (structure, field_id, value); + if (!gst_structure_id_str_has_field (structure, fieldname)) + gst_structure_id_str_set_value (structure, fieldname, value); return TRUE; } @@ -760,8 +766,8 @@ gst_validate_ssim_init (GstPlugin * plugin) continue; if (config_structure) { - gst_structure_map_in_place (config_structure, - (GstStructureMapFunc) _map_confg, tmp->data); + gst_structure_map_in_place_id_str (config_structure, + (GstStructureMapIdStrFunc) _map_confg, tmp->data); } if ((name || target_element_classification)) { GstValidateOverride *override = diff --git a/subprojects/gst-devtools/validate/tests/launcher_tests/test_validate.py b/subprojects/gst-devtools/validate/tests/launcher_tests/test_validate.py index bad32753445..01fccd2e1e1 100644 --- a/subprojects/gst-devtools/validate/tests/launcher_tests/test_validate.py +++ b/subprojects/gst-devtools/validate/tests/launcher_tests/test_validate.py @@ -36,7 +36,7 @@ def get_pipelines(test_manager): {'level': 'critical', 'summary': 'a NOT NEGOTIATED message has been posted on the bus.', 'details': r'.*Caps negotiation failed at pad.*capsfilter:sink.*as it refused caps:.*'}]}), ("not_negotiated.caps_query_failure", - "\( \( audiotestsrc \) ! input-selector name=i \) ! capsfilter name=capsfilter caps=video/x-raw ! fakesink", + r"\( \( audiotestsrc \) ! input-selector name=i \) ! capsfilter name=capsfilter caps=video/x-raw ! fakesink", {"expected-issues": [ {'returncode': 18}, {'level': 'critical', 'summary': 'a NOT NEGOTIATED message has been posted on the bus.', diff --git a/subprojects/gst-devtools/validate/tests/meson.build b/subprojects/gst-devtools/validate/tests/meson.build index 05fccc8000d..c0b56c69ccc 100644 --- a/subprojects/gst-devtools/validate/tests/meson.build +++ b/subprojects/gst-devtools/validate/tests/meson.build @@ -1,6 +1,6 @@ pluginsdirs = [ ] if gst_dep.type_name() == 'pkgconfig' - pbase = dependency('gstreamer-plugins-base-' + apiversion) + pbase = dependency('gstreamer-plugins-base-' + api_version) pluginsdirs = [gst_dep.get_variable('pluginsdir'), pbase.get_variable('pluginsdir')] diff --git a/subprojects/gst-devtools/validate/tools/gst-validate-images-check.c b/subprojects/gst-devtools/validate/tools/gst-validate-images-check.c index 3e1625ccd0b..2a953ba8fee 100644 --- a/subprojects/gst-devtools/validate/tools/gst-validate-images-check.c +++ b/subprojects/gst-devtools/validate/tools/gst-validate-images-check.c @@ -27,8 +27,8 @@ #include #include /* for LC_ALL */ -int -main (int argc, char **argv) +static int +real_main (int argc, char **argv) { GstValidateSsim *ssim; gint rep_err, ret = 0; @@ -120,3 +120,25 @@ main (int argc, char **argv) return ret; } + +int +main (int argc, char *argv[]) +{ + int ret; + +#ifdef G_OS_WIN32 + argv = g_win32_get_command_line (); +#endif + +#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE + ret = gst_macos_main ((GstMainFunc) real_main, argc, argv, NULL); +#else + ret = real_main (argc, argv); +#endif + +#ifdef G_OS_WIN32 + g_strfreev (argv); +#endif + + return ret; +} diff --git a/subprojects/gst-devtools/validate/tools/gst-validate-rtsp-server.c b/subprojects/gst-devtools/validate/tools/gst-validate-rtsp-server.c index 017b2ad1b18..8b48d3d3547 100644 --- a/subprojects/gst-devtools/validate/tools/gst-validate-rtsp-server.c +++ b/subprojects/gst-devtools/validate/tools/gst-validate-rtsp-server.c @@ -62,8 +62,8 @@ remove_map (GstRTSPServer * server) } #endif -int -main (int argc, gchar * argv[]) +static int +real_main (int argc, gchar * argv[]) { GMainLoop *loop; GstRTSPServer *server; @@ -157,3 +157,25 @@ main (int argc, gchar * argv[]) return -1; } } + +int +main (int argc, char *argv[]) +{ + int ret; + +#ifdef G_OS_WIN32 + argv = g_win32_get_command_line (); +#endif + +#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE + ret = gst_macos_main ((GstMainFunc) real_main, argc, argv, NULL); +#else + ret = real_main (argc, argv); +#endif + +#ifdef G_OS_WIN32 + g_strfreev (argv); +#endif + + return ret; +} diff --git a/subprojects/gst-devtools/validate/tools/gst-validate-transcoding.c b/subprojects/gst-devtools/validate/tools/gst-validate-transcoding.c index ce33a3ca044..5337f7b07d0 100644 --- a/subprojects/gst-devtools/validate/tools/gst-validate-transcoding.c +++ b/subprojects/gst-devtools/validate/tools/gst-validate-transcoding.c @@ -220,8 +220,8 @@ _register_actions (void) /* *INDENT-ON* */ } -int -main (int argc, gchar ** argv) +static int +real_main (int argc, gchar ** argv) { guint i; GOptionContext *ctx; @@ -387,3 +387,25 @@ main (int argc, gchar ** argv) return finish_transcoding (pipeline, ret); } + +int +main (int argc, char *argv[]) +{ + int ret; + +#ifdef G_OS_WIN32 + argv = g_win32_get_command_line (); +#endif + +#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE + ret = gst_macos_main ((GstMainFunc) real_main, argc, argv, NULL); +#else + ret = real_main (argc, argv); +#endif + +#ifdef G_OS_WIN32 + g_strfreev (argv); +#endif + + return ret; +} diff --git a/subprojects/gst-devtools/validate/tools/gst-validate.c b/subprojects/gst-devtools/validate/tools/gst-validate.c index c996eb19eda..7016e64bda0 100644 --- a/subprojects/gst-devtools/validate/tools/gst-validate.c +++ b/subprojects/gst-devtools/validate/tools/gst-validate.c @@ -304,7 +304,7 @@ _register_playbin_actions (void) /* *INDENT-ON* */ } -int main (int argc, gchar ** argv); +static int real_main (int argc, gchar ** argv); static int run_test_from_file (gchar * testfile, gboolean use_fakesinks) @@ -325,7 +325,7 @@ run_test_from_file (gchar * testfile, gboolean use_fakesinks) argv[0] = (gchar *) "gst-validate-" GST_API_VERSION; memcpy (&argv[1], args, sizeof (char *) * (argc)); - ret = main (argc, argv); + ret = real_main (argc, argv); g_strfreev (args); g_free (argv); @@ -333,8 +333,8 @@ run_test_from_file (gchar * testfile, gboolean use_fakesinks) return ret; } -int -main (int argc, gchar ** argv) +static int +real_main (int argc, gchar ** argv) { GError *err = NULL; gchar *scenario = NULL, *configs = NULL, *media_info = NULL, @@ -634,3 +634,25 @@ main (int argc, gchar ** argv) gst_deinit (); return ret; } + +int +main (int argc, char *argv[]) +{ + int ret; + +#ifdef G_OS_WIN32 + argv = g_win32_get_command_line (); +#endif + +#if defined(__APPLE__) && TARGET_OS_MAC && !TARGET_OS_IPHONE + ret = gst_macos_main ((GstMainFunc) real_main, argc, argv, NULL); +#else + ret = real_main (argc, argv); +#endif + +#ifdef G_OS_WIN32 + g_strfreev (argv); +#endif + + return ret; +} diff --git a/subprojects/gst-devtools/validate/tools/meson.build b/subprojects/gst-devtools/validate/tools/meson.build index d70dd9da5d7..72477eb67d1 100644 --- a/subprojects/gst-devtools/validate/tools/meson.build +++ b/subprojects/gst-devtools/validate/tools/meson.build @@ -17,10 +17,10 @@ if validate_video_dep.found() }, } else - message('Can not build gst-validate-images-check' + apiversion) + message('Can not build gst-validate-images-check' + api_version) endif -rtsp_server_dep = dependency('gstreamer-rtsp-server-' + apiversion, +rtsp_server_dep = dependency('gstreamer-rtsp-server-' + api_version, fallback: ['gst-rtsp-server', 'gst_rtsp_server_dep'], version : gst_req, required: false) @@ -32,10 +32,10 @@ if rtsp_server_dep.found() } } else - message('Can not build gst-validate-rtsp-server-' + apiversion) + message('Can not build gst-validate-rtsp-server-' + api_version) endif -gst_transcoder_dep = dependency('gstreamer-transcoder-' + apiversion, version : gst_req, +gst_transcoder_dep = dependency('gstreamer-transcoder-' + api_version, version : gst_req, fallback : ['gst-plugins-bad', 'gst_transcoder_dep'], required: false) if gst_transcoder_dep.found() gst_tools += {'gst-validate-transcoding': { @@ -44,14 +44,14 @@ if gst_transcoder_dep.found() } } else - message('Can not build gst-validate-transcoding-' + apiversion) + message('Can not build gst-validate-transcoding-' + api_version) endif if not get_option('tools').disabled() and not static_build foreach tool, data: gst_tools if not data.has_key('config_data') - exe_name = '@0@-@1@'.format(tool, apiversion) + exe_name = '@0@-@1@'.format(tool, api_version) executable( exe_name, data.get('files'), diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/.gitignore b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/.gitignore index 09614d42306..443f6eb6874 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/.gitignore +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/.gitignore @@ -1,3 +1,4 @@ +.cxx/ .externalNativeBuild/ assets/ gst-android-build/ diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/build.gradle b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/build.gradle index 7eaa85924bc..78434cc7da8 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/build.gradle +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/build.gradle @@ -12,7 +12,7 @@ android { externalNativeBuild { - ndkBuild { + cmake { def gstRoot if (project.hasProperty('gstAndroidRoot')) @@ -23,7 +23,7 @@ android { if (gstRoot == null) throw new GradleException('GSTREAMER_ROOT_ANDROID must be set, or "gstAndroidRoot" must be defined in your gradle.properties in the top level directory of the unpacked universal GStreamer Android binaries') - arguments "NDK_APPLICATION_MK=jni/Application.mk", "GSTREAMER_JAVA_SRC_DIR=src", "GSTREAMER_ROOT_ANDROID=$gstRoot", "GSTREAMER_ASSETS_DIR=src/assets" + arguments "-DCMAKE_BUILD_TYPE=Release", "-DANDROID_STL=c++_shared", "-DGSTREAMER_ROOT_ANDROID=$gstRoot" targets "tutorial-1" @@ -52,8 +52,8 @@ android { } externalNativeBuild { - ndkBuild { - path 'jni/Android.mk' + cmake { + path 'jni/CMakeLists.txt' } } ndkVersion '25.2.9519653' diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/jni/CMakeLists.txt b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/jni/CMakeLists.txt new file mode 100644 index 00000000000..cda2a257536 --- /dev/null +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/jni/CMakeLists.txt @@ -0,0 +1,41 @@ +cmake_minimum_required(VERSION 3.18.1) + +project("android-tutorial-1" LANGUAGES C CXX) + +if(NOT DEFINED GSTREAMER_ROOT_ANDROID) + message(FATAL_ERROR "GSTREAMER_ROOT_ANDROID is not defined!") +endif() + +if(ANDROID_ABI STREQUAL "armeabi") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/arm") +elseif(ANDROID_ABI STREQUAL "armeabi-v7a") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/armv7") +elseif(ANDROID_ABI STREQUAL "arm64-v8a") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/arm64") +elseif(ANDROID_ABI STREQUAL "x86") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/x86") +elseif(ANDROID_ABI STREQUAL "x86_64") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/x86_64") +else() + message(FATAL_ERROR "Target arch ABI not supported: ${ANDROID_ABI}") +endif() + +list(APPEND CMAKE_MODULE_PATH "${GSTREAMER_ROOT}/share/cmake") + +set(GSTREAMER_NDK_BUILD_PATH "${GSTREAMER_ROOT}/share/gst-android/ndk-build/") +set(GSTREAMER_PLUGINS coreelements) +find_library(LOG_LIB log REQUIRED) +find_package(GStreamerMobile COMPONENTS ${GSTREAMER_PLUGINS} fonts REQUIRED) + +add_library(tutorial-1 SHARED tutorial-1.c dummy.cpp) +target_link_libraries(tutorial-1 + PUBLIC + GStreamer::mobile + ${ANDROID_LIB} + ${LOG_LIB} +) +set_target_properties(tutorial-1 + PROPERTIES + C_VISIBILITY_PRESET hidden + CXX_VISIBILITY_PRESET hidden +) diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/jni/tutorial-1.c b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/jni/tutorial-1.c index bc1065911b7..d0fc13adf51 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/jni/tutorial-1.c +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-1/jni/tutorial-1.c @@ -20,7 +20,7 @@ static JNINativeMethod native_methods[] = { (void *) gst_native_get_gstreamer_info} }; -jint +JNIEXPORT jint JNI_OnLoad (JavaVM * vm, void *reserved) { JNIEnv *env = NULL; diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/.gitignore b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/.gitignore index 09614d42306..443f6eb6874 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/.gitignore +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/.gitignore @@ -1,3 +1,4 @@ +.cxx/ .externalNativeBuild/ assets/ gst-android-build/ diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/build.gradle b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/build.gradle index 1d1bd567eca..d30a6d4d2ed 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/build.gradle +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/build.gradle @@ -12,7 +12,7 @@ android { externalNativeBuild { - ndkBuild { + cmake { def gstRoot if (project.hasProperty('gstAndroidRoot')) @@ -23,7 +23,7 @@ android { if (gstRoot == null) throw new GradleException('GSTREAMER_ROOT_ANDROID must be set, or "gstAndroidRoot" must be defined in your gradle.properties in the top level directory of the unpacked universal GStreamer Android binaries') - arguments "NDK_APPLICATION_MK=jni/Application.mk", "GSTREAMER_JAVA_SRC_DIR=src", "GSTREAMER_ROOT_ANDROID=$gstRoot", "GSTREAMER_ASSETS_DIR=src/assets" + arguments "-DCMAKE_BUILD_TYPE=Release", "-DANDROID_STL=c++_shared", "-DGSTREAMER_ROOT_ANDROID=$gstRoot" targets "tutorial-2" @@ -52,11 +52,11 @@ android { } externalNativeBuild { - ndkBuild { - path 'jni/Android.mk' + cmake { + path 'jni/CMakeLists.txt' } } - ndkVersion '25.2.9519653' + ndkVersion '25.2.9519653' } afterEvaluate { diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/jni/CMakeLists.txt b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/jni/CMakeLists.txt new file mode 100644 index 00000000000..eaec45868b7 --- /dev/null +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/jni/CMakeLists.txt @@ -0,0 +1,41 @@ +cmake_minimum_required(VERSION 3.18.1) + +project("android-tutorial-2" LANGUAGES C CXX) + +if(NOT DEFINED GSTREAMER_ROOT_ANDROID) + message(FATAL_ERROR "GSTREAMER_ROOT_ANDROID is not defined!") +endif() + +if(ANDROID_ABI STREQUAL "armeabi") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/arm") +elseif(ANDROID_ABI STREQUAL "armeabi-v7a") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/armv7") +elseif(ANDROID_ABI STREQUAL "arm64-v8a") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/arm64") +elseif(ANDROID_ABI STREQUAL "x86") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/x86") +elseif(ANDROID_ABI STREQUAL "x86_64") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/x86_64") +else() + message(FATAL_ERROR "Target arch ABI not supported: ${ANDROID_ABI}") +endif() + +list(APPEND CMAKE_MODULE_PATH "${GSTREAMER_ROOT}/share/cmake") + +set(GSTREAMER_NDK_BUILD_PATH "${GSTREAMER_ROOT}/share/gst-android/ndk-build/") +include("${GSTREAMER_NDK_BUILD_PATH}/plugins.cmake") +set(GSTREAMER_PLUGINS ${GSTREAMER_PLUGINS_CORE} ${GSTREAMER_PLUGINS_SYS}) +find_library(LOG_LIB log REQUIRED) +find_package(GStreamerMobile COMPONENTS ${GSTREAMER_PLUGINS} fonts REQUIRED) + +add_library(tutorial-2 SHARED tutorial-2.c dummy.cpp) +target_link_libraries(tutorial-2 + PUBLIC + GStreamer::mobile + ${LOG_LIB} +) +set_target_properties(tutorial-2 + PROPERTIES + C_VISIBILITY_PRESET hidden + CXX_VISIBILITY_PRESET hidden +) diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/jni/tutorial-2.c b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/jni/tutorial-2.c index eba72f5f603..c19a2ad59f6 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/jni/tutorial-2.c +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-2/jni/tutorial-2.c @@ -303,7 +303,7 @@ static JNINativeMethod native_methods[] = { }; /* Library initializer */ -jint +JNIEXPORT jint JNI_OnLoad (JavaVM * vm, void *reserved) { JNIEnv *env = NULL; diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/.gitignore b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/.gitignore index 09614d42306..443f6eb6874 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/.gitignore +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/.gitignore @@ -1,3 +1,4 @@ +.cxx/ .externalNativeBuild/ assets/ gst-android-build/ diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/build.gradle b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/build.gradle index ed486e5288e..8b0c6dd6c3d 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/build.gradle +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/build.gradle @@ -12,7 +12,7 @@ android { externalNativeBuild { - ndkBuild { + cmake { def gstRoot if (project.hasProperty('gstAndroidRoot')) @@ -23,7 +23,7 @@ android { if (gstRoot == null) throw new GradleException('GSTREAMER_ROOT_ANDROID must be set, or "gstAndroidRoot" must be defined in your gradle.properties in the top level directory of the unpacked universal GStreamer Android binaries') - arguments "NDK_APPLICATION_MK=jni/Application.mk", "GSTREAMER_JAVA_SRC_DIR=src", "GSTREAMER_ROOT_ANDROID=$gstRoot", "GSTREAMER_ASSETS_DIR=src/assets" + arguments "-DCMAKE_BUILD_TYPE=Release", "-DANDROID_STL=c++_shared", "-DGSTREAMER_ROOT_ANDROID=$gstRoot" targets "tutorial-3" @@ -52,11 +52,11 @@ android { } externalNativeBuild { - ndkBuild { - path 'jni/Android.mk' + cmake { + path 'jni/CMakeLists.txt' } } - ndkVersion '25.2.9519653' + ndkVersion '25.2.9519653' } afterEvaluate { diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/jni/CMakeLists.txt b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/jni/CMakeLists.txt new file mode 100644 index 00000000000..b862a5d25eb --- /dev/null +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/jni/CMakeLists.txt @@ -0,0 +1,44 @@ +cmake_minimum_required(VERSION 3.18.1) + +project("android-tutorial-3" LANGUAGES C CXX) + +if(NOT DEFINED GSTREAMER_ROOT_ANDROID) + message(FATAL_ERROR "GSTREAMER_ROOT_ANDROID is not defined!") +endif() + +if(ANDROID_ABI STREQUAL "armeabi") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/arm") +elseif(ANDROID_ABI STREQUAL "armeabi-v7a") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/armv7") +elseif(ANDROID_ABI STREQUAL "arm64-v8a") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/arm64") +elseif(ANDROID_ABI STREQUAL "x86") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/x86") +elseif(ANDROID_ABI STREQUAL "x86_64") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/x86_64") +else() + message(FATAL_ERROR "Target arch ABI not supported: ${ANDROID_ABI}") +endif() + +list(APPEND CMAKE_MODULE_PATH "${GSTREAMER_ROOT}/share/cmake") + +set(GSTREAMER_NDK_BUILD_PATH "${GSTREAMER_ROOT}/share/gst-android/ndk-build/") +include("${GSTREAMER_NDK_BUILD_PATH}/plugins.cmake") +set(GSTREAMER_PLUGINS ${GSTREAMER_PLUGINS_CORE} ${GSTREAMER_PLUGINS_SYS} ${GSTREAMER_PLUGINS_EFFECTS}) +set(GStreamer_EXTRA_DEPS gstreamer-video-1.0 gobject-2.0) +find_library(ANDROID_LIB android REQUIRED) +find_library(LOG_LIB log REQUIRED) +find_package(GStreamerMobile COMPONENTS ${GSTREAMER_PLUGINS} fonts REQUIRED) + +add_library(tutorial-3 SHARED tutorial-3.c dummy.cpp) +target_link_libraries(tutorial-3 + PUBLIC + GStreamer::mobile + ${ANDROID_LIB} + ${LOG_LIB} +) +set_target_properties(tutorial-3 + PROPERTIES + C_VISIBILITY_PRESET hidden + CXX_VISIBILITY_PRESET hidden +) diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/jni/tutorial-3.c b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/jni/tutorial-3.c index 6d00b123601..f3e670f51ea 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/jni/tutorial-3.c +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-3/jni/tutorial-3.c @@ -379,7 +379,7 @@ static JNINativeMethod native_methods[] = { }; /* Library initializer */ -jint +JNIEXPORT jint JNI_OnLoad (JavaVM * vm, void *reserved) { JNIEnv *env = NULL; diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/.gitignore b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/.gitignore index 10f3722b17b..7e9c31fa112 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/.gitignore +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/.gitignore @@ -1,3 +1,4 @@ +.cxx/ .externalNativeBuild/ assets/ gst-android-build/ diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/build.gradle b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/build.gradle index 31824da07bd..d37fb178792 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/build.gradle +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/build.gradle @@ -12,7 +12,7 @@ android { externalNativeBuild { - ndkBuild { + cmake { def gstRoot if (project.hasProperty('gstAndroidRoot')) @@ -23,7 +23,7 @@ android { if (gstRoot == null) throw new GradleException('GSTREAMER_ROOT_ANDROID must be set, or "gstAndroidRoot" must be defined in your gradle.properties in the top level directory of the unpacked universal GStreamer Android binaries') - arguments "NDK_APPLICATION_MK=jni/Application.mk", "GSTREAMER_JAVA_SRC_DIR=src", "GSTREAMER_ROOT_ANDROID=$gstRoot", "GSTREAMER_ASSETS_DIR=src/assets" + arguments "-DCMAKE_BUILD_TYPE=Release", "-DANDROID_STL=c++_shared", "-DGSTREAMER_ROOT_ANDROID=$gstRoot" targets "tutorial-4" @@ -52,11 +52,11 @@ android { } externalNativeBuild { - ndkBuild { - path 'jni/Android.mk' + cmake { + path 'jni/CMakeLists.txt' } } - ndkVersion '25.2.9519653' + ndkVersion '25.2.9519653' } afterEvaluate { diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/jni/CMakeLists.txt b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/jni/CMakeLists.txt new file mode 100644 index 00000000000..7ad05aae6bd --- /dev/null +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/jni/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 3.18.1) + +project("android-tutorial-4" LANGUAGES C CXX) + +if(NOT DEFINED GSTREAMER_ROOT_ANDROID) + message(FATAL_ERROR "GSTREAMER_ROOT_ANDROID is not defined!") +endif() + +if(ANDROID_ABI STREQUAL "armeabi") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/arm") +elseif(ANDROID_ABI STREQUAL "armeabi-v7a") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/armv7") +elseif(ANDROID_ABI STREQUAL "arm64-v8a") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/arm64") +elseif(ANDROID_ABI STREQUAL "x86") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/x86") +elseif(ANDROID_ABI STREQUAL "x86_64") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/x86_64") +else() + message(FATAL_ERROR "Target arch ABI not supported: ${ANDROID_ABI}") +endif() + +list(APPEND CMAKE_MODULE_PATH "${GSTREAMER_ROOT}/share/cmake") + +set(GSTREAMER_NDK_BUILD_PATH "${GSTREAMER_ROOT}/share/gst-android/ndk-build/") +include("${GSTREAMER_NDK_BUILD_PATH}/plugins.cmake") +set(GSTREAMER_PLUGINS ${GSTREAMER_PLUGINS_CORE} ${GSTREAMER_PLUGINS_PLAYBACK} ${GSTREAMER_PLUGINS_CODECS} ${GSTREAMER_PLUGINS_NET} ${GSTREAMER_PLUGINS_SYS}) +set(GStreamer_EXTRA_DEPS gstreamer-video-1.0) +set(G_IO_MODULES openssl) +find_library(ANDROID_LIB android REQUIRED) +find_library(LOG_LIB log REQUIRED) +find_package(GStreamerMobile COMPONENTS ${GSTREAMER_PLUGINS} fonts ca_certificates REQUIRED) + +add_library(tutorial-4 SHARED tutorial-4.c dummy.cpp) +target_link_libraries(tutorial-4 + PUBLIC + GStreamer::mobile + ${ANDROID_LIB} + ${LOG_LIB} +) +set_target_properties(tutorial-4 + PROPERTIES + C_VISIBILITY_PRESET hidden + CXX_VISIBILITY_PRESET hidden +) diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/jni/tutorial-4.c b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/jni/tutorial-4.c index 525bfb8cd96..3c02696faf3 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/jni/tutorial-4.c +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-4/jni/tutorial-4.c @@ -650,7 +650,7 @@ static JNINativeMethod native_methods[] = { }; /* Library initializer */ -jint +JNIEXPORT jint JNI_OnLoad (JavaVM * vm, void *reserved) { JNIEnv *env = NULL; diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/.gitignore b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/.gitignore index 10f3722b17b..7e9c31fa112 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/.gitignore +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/.gitignore @@ -1,3 +1,4 @@ +.cxx/ .externalNativeBuild/ assets/ gst-android-build/ diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/build.gradle b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/build.gradle index fd44f5836ee..01ed08d83ab 100644 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/build.gradle +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/build.gradle @@ -12,7 +12,7 @@ android { externalNativeBuild { - ndkBuild { + cmake { def gstRoot if (project.hasProperty('gstAndroidRoot')) @@ -23,7 +23,7 @@ android { if (gstRoot == null) throw new GradleException('GSTREAMER_ROOT_ANDROID must be set, or "gstAndroidRoot" must be defined in your gradle.properties in the top level directory of the unpacked universal GStreamer Android binaries') - arguments "NDK_APPLICATION_MK=jni/Application.mk", "GSTREAMER_JAVA_SRC_DIR=src", "GSTREAMER_ROOT_ANDROID=$gstRoot", "GSTREAMER_ASSETS_DIR=src/assets" + arguments "-DCMAKE_BUILD_TYPE=Release", "-DANDROID_STL=c++_shared", "-DGSTREAMER_ROOT_ANDROID=$gstRoot" targets "tutorial-5" @@ -52,11 +52,11 @@ android { } externalNativeBuild { - ndkBuild { - path 'jni/Android.mk' + cmake { + path 'jni/CMakeLists.txt' } } - ndkVersion '25.2.9519653' + ndkVersion '25.2.9519653' } afterEvaluate { diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/jni/CMakeLists.txt b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/jni/CMakeLists.txt new file mode 100644 index 00000000000..c4aeb5c5dba --- /dev/null +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/jni/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 3.18.1) + +project("android-tutorial-5" LANGUAGES C CXX) + +if(NOT DEFINED GSTREAMER_ROOT_ANDROID) + message(FATAL_ERROR "GSTREAMER_ROOT_ANDROID is not defined!") +endif() + +if(ANDROID_ABI STREQUAL "armeabi") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/arm") +elseif(ANDROID_ABI STREQUAL "armeabi-v7a") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/armv7") +elseif(ANDROID_ABI STREQUAL "arm64-v8a") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/arm64") +elseif(ANDROID_ABI STREQUAL "x86") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/x86") +elseif(ANDROID_ABI STREQUAL "x86_64") + set(GSTREAMER_ROOT "${GSTREAMER_ROOT_ANDROID}/x86_64") +else() + message(FATAL_ERROR "Target arch ABI not supported: ${ANDROID_ABI}") +endif() + +list(APPEND CMAKE_MODULE_PATH "${GSTREAMER_ROOT}/share/cmake") + +set(GSTREAMER_NDK_BUILD_PATH "${GSTREAMER_ROOT}/share/gst-android/ndk-build/") +include("${GSTREAMER_NDK_BUILD_PATH}/plugins.cmake") +set(GSTREAMER_PLUGINS ${GSTREAMER_PLUGINS_CORE} ${GSTREAMER_PLUGINS_PLAYBACK} ${GSTREAMER_PLUGINS_CODECS} ${GSTREAMER_PLUGINS_NET} ${GSTREAMER_PLUGINS_SYS}) +set(GStreamer_EXTRA_DEPS gstreamer-video-1.0) +set(G_IO_MODULES openssl) +find_library(ANDROID_LIB android REQUIRED) +find_library(LOG_LIB log REQUIRED) +find_package(GStreamerMobile COMPONENTS ${GSTREAMER_PLUGINS} fonts ca_certificates REQUIRED) + +add_library(tutorial-5 SHARED tutorial-5.c dummy.cpp) +target_link_libraries(tutorial-5 + PUBLIC + GStreamer::mobile + ${ANDROID_LIB} + ${LOG_LIB} +) +set_target_properties(tutorial-5 + PROPERTIES + C_VISIBILITY_PRESET hidden + CXX_VISIBILITY_PRESET hidden +) diff --git a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/jni/tutorial-5.c b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/jni/tutorial-5.c index 2a2a7ec7b9a..0ecfb7c66c3 100755 --- a/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/jni/tutorial-5.c +++ b/subprojects/gst-docs/examples/tutorials/android/android-tutorial-5/jni/tutorial-5.c @@ -660,7 +660,7 @@ static JNINativeMethod native_methods[] = { }; /* Library initializer */ -jint +JNIEXPORT jint JNI_OnLoad (JavaVM * vm, void *reserved) { JNIEnv *env = NULL; diff --git a/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 1/gst_ios_init.m b/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 1/gst_ios_init.m index 2d9441df396..2b5137bc1da 100644 --- a/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 1/gst_ios_init.m +++ b/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 1/gst_ios_init.m @@ -398,9 +398,6 @@ #if defined(GST_IOS_PLUGIN_FREEVERB) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_DECLARE(freeverb); #endif -#if defined(GST_IOS_PLUGIN_FREI0R) || defined(GST_IOS_PLUGINS_EFFECTS) -GST_PLUGIN_STATIC_DECLARE(frei0r); -#endif #if defined(GST_IOS_PLUGIN_GAUDIEFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_DECLARE(gaudieffects); #endif @@ -961,9 +958,6 @@ #if defined(GST_IOS_PLUGIN_FREEVERB) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_REGISTER(freeverb); #endif -#if defined(GST_IOS_PLUGIN_FREI0R) || defined(GST_IOS_PLUGINS_EFFECTS) - GST_PLUGIN_STATIC_REGISTER(frei0r); -#endif #if defined(GST_IOS_PLUGIN_GAUDIEFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_REGISTER(gaudieffects); #endif diff --git a/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 2/gst_ios_init.m b/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 2/gst_ios_init.m index 2d9441df396..2b5137bc1da 100644 --- a/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 2/gst_ios_init.m +++ b/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 2/gst_ios_init.m @@ -398,9 +398,6 @@ #if defined(GST_IOS_PLUGIN_FREEVERB) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_DECLARE(freeverb); #endif -#if defined(GST_IOS_PLUGIN_FREI0R) || defined(GST_IOS_PLUGINS_EFFECTS) -GST_PLUGIN_STATIC_DECLARE(frei0r); -#endif #if defined(GST_IOS_PLUGIN_GAUDIEFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_DECLARE(gaudieffects); #endif @@ -961,9 +958,6 @@ #if defined(GST_IOS_PLUGIN_FREEVERB) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_REGISTER(freeverb); #endif -#if defined(GST_IOS_PLUGIN_FREI0R) || defined(GST_IOS_PLUGINS_EFFECTS) - GST_PLUGIN_STATIC_REGISTER(frei0r); -#endif #if defined(GST_IOS_PLUGIN_GAUDIEFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_REGISTER(gaudieffects); #endif diff --git a/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 3/gst_ios_init.m b/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 3/gst_ios_init.m index 2d9441df396..2b5137bc1da 100644 --- a/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 3/gst_ios_init.m +++ b/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 3/gst_ios_init.m @@ -398,9 +398,6 @@ #if defined(GST_IOS_PLUGIN_FREEVERB) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_DECLARE(freeverb); #endif -#if defined(GST_IOS_PLUGIN_FREI0R) || defined(GST_IOS_PLUGINS_EFFECTS) -GST_PLUGIN_STATIC_DECLARE(frei0r); -#endif #if defined(GST_IOS_PLUGIN_GAUDIEFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_DECLARE(gaudieffects); #endif @@ -961,9 +958,6 @@ #if defined(GST_IOS_PLUGIN_FREEVERB) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_REGISTER(freeverb); #endif -#if defined(GST_IOS_PLUGIN_FREI0R) || defined(GST_IOS_PLUGINS_EFFECTS) - GST_PLUGIN_STATIC_REGISTER(frei0r); -#endif #if defined(GST_IOS_PLUGIN_GAUDIEFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_REGISTER(gaudieffects); #endif diff --git a/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 4/gst_ios_init.m b/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 4/gst_ios_init.m index 2d9441df396..2b5137bc1da 100644 --- a/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 4/gst_ios_init.m +++ b/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 4/gst_ios_init.m @@ -398,9 +398,6 @@ #if defined(GST_IOS_PLUGIN_FREEVERB) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_DECLARE(freeverb); #endif -#if defined(GST_IOS_PLUGIN_FREI0R) || defined(GST_IOS_PLUGINS_EFFECTS) -GST_PLUGIN_STATIC_DECLARE(frei0r); -#endif #if defined(GST_IOS_PLUGIN_GAUDIEFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_DECLARE(gaudieffects); #endif @@ -961,9 +958,6 @@ #if defined(GST_IOS_PLUGIN_FREEVERB) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_REGISTER(freeverb); #endif -#if defined(GST_IOS_PLUGIN_FREI0R) || defined(GST_IOS_PLUGINS_EFFECTS) - GST_PLUGIN_STATIC_REGISTER(frei0r); -#endif #if defined(GST_IOS_PLUGIN_GAUDIEFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_REGISTER(gaudieffects); #endif diff --git a/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 5/gst_ios_init.m b/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 5/gst_ios_init.m index 2d9441df396..2b5137bc1da 100644 --- a/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 5/gst_ios_init.m +++ b/subprojects/gst-docs/examples/tutorials/xcode iOS/Tutorial 5/gst_ios_init.m @@ -398,9 +398,6 @@ #if defined(GST_IOS_PLUGIN_FREEVERB) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_DECLARE(freeverb); #endif -#if defined(GST_IOS_PLUGIN_FREI0R) || defined(GST_IOS_PLUGINS_EFFECTS) -GST_PLUGIN_STATIC_DECLARE(frei0r); -#endif #if defined(GST_IOS_PLUGIN_GAUDIEFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_DECLARE(gaudieffects); #endif @@ -961,9 +958,6 @@ #if defined(GST_IOS_PLUGIN_FREEVERB) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_REGISTER(freeverb); #endif -#if defined(GST_IOS_PLUGIN_FREI0R) || defined(GST_IOS_PLUGINS_EFFECTS) - GST_PLUGIN_STATIC_REGISTER(frei0r); -#endif #if defined(GST_IOS_PLUGIN_GAUDIEFFECTS) || defined(GST_IOS_PLUGINS_EFFECTS) GST_PLUGIN_STATIC_REGISTER(gaudieffects); #endif diff --git a/subprojects/gst-docs/images/diagrams-clocks.svg b/subprojects/gst-docs/images/diagrams-clocks.svg new file mode 100644 index 00000000000..8299c8187ef --- /dev/null +++ b/subprojects/gst-docs/images/diagrams-clocks.svg @@ -0,0 +1,1565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + Clock time + Running time + + + Stream time + + base time + 10 + + + + + + + + + + + + + + + 20 + + 30 + 40 + 50 + 60 + 70 + 80 + 90 + 100 + 110 + 120 + 130 + 140 + 10 + + + + + + + + + + + + + + + 20 + 30 + 40 + 50 + 60 + 70 + 80 + 90 + 100 + 110 + 120 + 130 + 140 + 150 + 160 + 170 + 180 + 190 + 200 + 210 + 220 + + + + + + + + 10 + + + + + + + + + + + + + + + 20 + 30 + 40 + 50 + 60 + 70 + 80 + 90 + 100 + 60 + 70 + 80 + 90 + + + + + + + + + replay + + + + + + + + + + + + + + + 100 ms stream + + + + diff --git a/subprojects/gst-docs/images/diagrams-general.svg b/subprojects/gst-docs/images/diagrams-general.svg new file mode 100644 index 00000000000..98c427eb988 --- /dev/null +++ b/subprojects/gst-docs/images/diagrams-general.svg @@ -0,0 +1,14982 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + gstreamer diagrams + + + Luc Pionchon + + + June 2008 + This diagram uses icons from the Tango Desktop Project. http://tango.freedesktop.org + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <Element name> + + + sink + + + + src + + + <Element name> + + + sink + + + <Element name> + + + sink + + + + + + src_01 + + + + + + src_02 + + + + + + src_03 + + + + + + src_01 + + + + + + src_02 + + + file-source + + src + + ogg-demuxer + + sink + + src_01 + + vorbis-decoder + + sink + + src + + converter + + sink + + src + + audio-output + + sink + + pipeline + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MENU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + file-source + + + + + + + + + + + + + + + + + + + + + + + + + + src + + + + + file-source + + src + + ogg-demuxer + + sink + + src_01 + + vorbis-decoder + + sink + + src + + audio-sink + + sink + + pipeline + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + src_02 + + + theora-decoder + + sink + + src + + video-sink + + sink + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gstreamer pipeline for a basic ogg player + + + + theora-decoder + + sink + + src + + + + + + + + + + + + + Gstreamer "hello world" pipeline diagram + + + + file-source + + + + + + + + + + + + + + + + + Multimedia applications + media player + VoIP & video conferencing + streamingserver + video editor + pipeline architecture + gstreamer tools + 3rd party plugins + + + + + (...) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gst-inspectgst-launchgst-editor... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gstreamer core framework + - file:- http:- rtsp:- ... + - alsa- v4l2- ... + protocols + sources + formats + codecs + filters + + + + + + + + + + + + + + + + + + + media agnosticbase classesmessage busmedia type negotiationplugin systemdata transportsynchronization + + gstreamer plugins + gstreamer includes over 250 plugins + + sinks + - avi- mp4- ogg- ... + - mp3- mpeg4- vorbis- ... + - converters- mixers- effects- ... + - alsa- xvideo- ... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + multimedia applications + media player + VoIP & video conferencing + streamingserver + video editor + pipeline architecture + gstreamer tools + 3rd party plugins + + + + + (...) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gst-inspectgst-launchgst-editor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gstreamer core framework + - file:- http:- rtsp:- ... + - alsa- v4l2- tcp/udp- ... + protocols + sources + formats + codecs + filters + media agnosticbase classesmessage busmedia type negotiationplugin systemdata transportsynchronization + + gstreamer plugins + gstreamer includes over 250 plugins + + sinks + - avi- mp4- ogg- ... + - mp3- mpeg4- vorbis- ... + - converters- mixers- effects- ... + - alsa- xvideo- tcp/udp- ... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + file-source + + src + + ogg-demuxer + + sink + + src_01 + + vorbis-decoder + + sink + + src + sink + + + audio-output + + sink + + + pipeline + + + + bus + + application + buffers + + messages + + queries + + events + + + + + diff --git a/subprojects/gst-docs/images/diagrams-pipelines.svg b/subprojects/gst-docs/images/diagrams-pipelines.svg new file mode 100644 index 00000000000..30696ac8749 --- /dev/null +++ b/subprojects/gst-docs/images/diagrams-pipelines.svg @@ -0,0 +1,12768 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + gstreamer diagrams + + + Luc Pionchon + + + June 2008 + This diagram uses icons from the Tango Desktop Project. http://tango.freedesktop.org + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MENU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + file-source + + src + + ogg-demuxer + + sink + + src_01 + + vorbis-decoder + + sink + + src + + audio-sink + + sink + + pipeline + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + src_02 + + + theora-decoder + + sink + + src + + video-sink + + sink + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gstreamer pipeline for a basic ogg player + + + + + + file-source + + src + + ogg-demuxer + + sink + + src_01 + + vorbis-decoder + + sink + + src + + converter + + sink + + src + + audio-output + + sink + + pipeline + + + + + + + + + + + + + + + + + + + + + source element + + src + + Chapter 5. Elements + + + filter + + sink + + src + + + + demuxer + + sink + + video + + audio + + + + sink element + + sink + + + + + source + + src + + + + filter + + sink + + src + + + + sink + + sink + + + + + Chapter 6. Bins + + + + + Element 1 + + src + + + + Element 2 + + sink + + src + + + + Element 3 + + sink + + + + Bin + + Chapter 8. Ghost pads + + + + + sink + + + Element 2 + + sink + + Bin + + + Element 1 + + sink + + src + + + + + + + Element 2 + + sink + + Bin + + + Element 1 + + sink + + src + + + Chapter 10. Hello world + Chapter 16. Threads + Chapter 17. Media types + + + + file-source + + src + + ogg-demuxer + + sink + + src_01 + + vorbis-decoder + + sink + + src + + converter + + sink + + src + + audio-output + + sink + + pipeline + + + + + (any) + application/ogg + audio/x-vorbis + audio/x-vorbis + audio/x-raw,format=F32LE + audio/x-raw,format=F32LE + audio/x-raw,format=S16LE + audio/x-raw,format=S16LE + + + + + + + + + + + + + + + + source + + src + + demuxer + + sink + + src_01 + + queue + + sink + + src + + + + + src_02 + + + queue + + sink + + src + + thread 1 + + + audio decoder + + sink + + src + + audio sink + + sink + + + + video decoder + + sink + + src + + video sink + + sink + + thread 3 + thread 2 + + + + + + + + + parser + + sink + + src + + + + decoder + + sink + + src + + + + audio sink + + sink + + + + + + networkedsource + + src + + + + + queue2 + + sink + + src + + + thread 1 + thread 2 + + + + + + + diff --git a/subprojects/gst-docs/images/state-diagram.svg b/subprojects/gst-docs/images/state-diagram.svg new file mode 100644 index 00000000000..1be6d42a156 --- /dev/null +++ b/subprojects/gst-docs/images/state-diagram.svg @@ -0,0 +1,233 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NULL + + READY + + PLAYING + + PAUSED + + + diff --git a/subprojects/gst-docs/markdown/additional/design/dmabuf.md b/subprojects/gst-docs/markdown/additional/design/dmabuf.md index e713d7dc720..d89c4748006 100644 --- a/subprojects/gst-docs/markdown/additional/design/dmabuf.md +++ b/subprojects/gst-docs/markdown/additional/design/dmabuf.md @@ -121,10 +121,11 @@ format. For example, `NV12:0x0100000000000002` is a new video format combined by video format NV12 and the modifier `0x0100000000000002`. It's not NV12 and it's not its subset either. -*DRM_FORMAT* can be printed by using -`GST_FOURCC_FORMAT` and `GST_FOURCC_ARGS` macros from the -`DRM_FORMAT_*` constants, it is NOT a `GstVideoFormat`, so it would be -different from the content of the `format` field in a non-dmabuf caps. +The 7 least significant bits of *DRM_FORMAT* is a fourcc. That fourcc is used +to serialize it into a string. The result is different from the serialization of +gstreamer video formats. The 8th bit is used to indicate that tis is a big +endian format. In this case, the serializer will postfix the name with `_BE`. + A modifier must always be present, except if the modifier is linear, then it should not be included, so `NV12:0x0000000000000000` is invalid, it must be `drm-format=NV12`. DRM fourcc are used diff --git a/subprojects/gst-docs/markdown/additional/design/machine-learning-analytics.md b/subprojects/gst-docs/markdown/additional/design/machine-learning-analytics.md new file mode 100644 index 00000000000..950c4dc910f --- /dev/null +++ b/subprojects/gst-docs/markdown/additional/design/machine-learning-analytics.md @@ -0,0 +1,285 @@ +# Machine Learning Based Analytics + +Analytics refer to the process of extracting information from the content of the +media (or medias). The analysis can be spatial only, for example, image analysis, or +temporal only, like sound detection, or even spatio-temporal tracking or action recognition, +multi-modal image+sound to detect a environment or behaviour. There's also +scenarios where the results of the analysis is used as the input, with or without an +additional media. This design aim is to support ML-based analytics and CV +analytics and offer a way to bridge both techniques. + +## Vision + +With this design we aim at allowing GStreamer application developers to develop +analytics pipeline easily while taking full advantage of the acceleration +available on the platform where they deploy. The effort of moving the analytic +pipeline to a different platform should be minimal. + +## Refinement Using Analytics Pipeline + +Similarly to content agnostic media processing (ex. Scaling, color-space change, +serialization, ...), this design promote re-usability and simplicity by allowing +the composition of complex analytics pipelines from simple dedicated analytics +elements that complement each other. + +### Example +Simple hypothetical example of an analytic pipeline. + +``` ++---------+ +----------+ +---------------+ +----------------+ +| v4l2src | | video | | onnxinference | | tensor-decoder | +| | | convert | | | | | +| src-sink scale src-sink1 src1-sink src--- +| | |(pre-proc)| | (analysis) | | (post-proc) | / ++---------+ +----------+ +---------------+ +----------------+ / + / +---------------------------------------------------------------------- +| +-------------+ +------+ +| | Analytic- | | sink | +| | overlay | | | +-sink src-sink | + | (analysis | | | + | -results | +------+ + | -consumer) | + +-------------+ + +``` + +## Supporting Neural Network Inference + +There are multiple frameworks supporting neural network inference. Those can be +described more generally as computing graphs, as they are generally not limited +to NN inference applications. Existing NN inference or computing graph frameworks, +like ONNX-Runtime, are encapsulated into a GstElement/Filter. The inference element loads +a model, describing the computing graph, specified by a property. The model +expects inputs in a specific format and produce outputs in specific +format. Depending on the model format, input/output formats can be extracted +from the model, like with ONNX, but it is not always the case. + +### Inference Element +Inference elements are an encapsulation of an NN Inference framework. Therefore +they are specific to a framework, like ONNX-Runtime or TensorFlow-Lite. +Other inference elements can be added. + +### Inference Input(s) +The input format is defined by the model. Using the model input format the +inference element can constrain its sinkpad(s) capabilities. Note, because tensors +are very generic, the term also encapsulates images/frames, and the term input tensor is +also used to describe inference input. + +### Inference Output(s) +Output(s) of the inference are tensors and their format are also dictated by the +model. Analysis results are generally encoded in the output tensor in a way that +is specific to the model. Even models that target the same type of analysis +encode results in different ways. + +### Models Format Not Describing Inputs/Outputs Tensor Format +With some models, the input/output tensor format are not described. In +this context, it's the responsibility of the analytics pipeline to push input +tensors with the correct format into the inference process. In this context, +the inference element designer is left with two choices: supporting a model manifest +where inputs/outputs are described or leaving the constraining/fixing the +inputs/outputs to analytics pipeline designer who can use caps filters to +constrain inputs/outputs of the model. + +### Tensor Decoders +In order to preserve the generality of the inference element, tensor decoding is +omitted from the inference element and left to specialized elements that have a +specific task of decoding tensor from a specific model. Additionally +tensor decoding does not depend on a specific NN framework or inference element, +this allow reusing the tensor decoders with a same model used with a +different inference element. For example, a YOLOv3 tensor decoder can used to +decode tensor from inference using YOLOv3 model with an element encapsulating +ONNX or TFLite. Note that a tensor decoder can handle multiple tensors that have +similar encoding. + +### Tensor +N-dimensional vector. + +#### Tensor Type Identifier +This is an identifier, string or quark, that uniquely identifies a tensor type. The +tensor type describes the specific format used to encode analysis result in +memory. This identifier is used by tensor-decoders to know if they can handle +the decoding of a tensor. For this reason, from an implementation perspective, +the tensor decoder is the ideal location to store the tensor type identifier as the code +is already model specific. Since the tensor decoder is by design specific to a +model, no generality is lost by storing it the tensor type identifier. + +#### Tensor Datatype +This is the primitive type used to store tensor-data. Like `int8`, +`uint8`, `float16`, `float32`, ... + +#### Tensor Dimension Cardinality + +Number of dimensions in the tensor. + +#### Tensor Dimension + +Tensor shape. + +- [a], 1-dimensional vector +- [a x b], 2-dimensional vector +- [a x b x c], 3-dimensional vector +- [a x b x ... x n], N-dimensional vector + +### Tensor Decoders Need to Recognize Tensor(s) They Can Handle + +As mention before, tensor decoders need to be able to recognize tensor(s) they can +handle. It's important to keep in mind that multiple tensors can be attached to +a buffer, when tensors are transported as a meta. It could be easy to +believe that tensor's (cardinality + dimension + data type) is sufficient to +recognize a specific tensor format but we need to remember that analysis results +are encoded into the tensor and retrieve analysis results require a decoding +process specific to the model. In other words a tensor A:{cardinality:3, +dimension: 100 x 5, datatype:int8) and a tensor B:{cardinality:3, 100 x 5, +datatype:int8) can have completely different meaning. + +A could be: (Object-detection where each candidate is encoded with (top-left) +coordinates, width, height and object location confidence level) + +``` +0 : [ x1, y1, w, h, location confidence] +1 : [ x1, y1, w, h, location confidence] +... +99: [ x1, y1, w, h, location confidence] +``` + +B could be: (Object-detection where each candidate is encoded with (top-left) +coordinates, (bottom-right) coordinate and object class confidence level) +``` +0 : [ x1, y1, x2, y2, class confidence] +1 : [ x1, y1, x2, y2, class confidence] +... +99: [ x1, y1, x2, y2, class confidence] +``` +We can see that even if A and B have same (cardinality, dimension, data type) a +tensor-decoder expecting A and decoding B would wrong. + +In general, for high cardinality tensors, the risk of having two tensors with same +(cardinality + dimension + data type) is low, but if we think of low cardinality +tensors typical of classification (1 x C), we can see that the risk is much +higher. For this reason, we believe it's not sufficient for tensor-decoder to +only rely on (cardinality + dimension + data type) to identify tensor it can +handle. + +#### A Tensor Decoder's Second Job: Non-Maximum Suppression (NMS) + +The main functionality of Tensor-Decoders is to extract analytics-results from tensors, +but in addition to decoding tensors, in general a second phase of post-processing +is handled by tensor-decoder. This post-processing phase is called non-maximum +suppression (NMS). A simplest example of NMS, is with classification. For every +input, the classification model will produce a probability for potential class. +In general, we're mostly interested in the most probable class or few most +probable class, but there's little value in transport all classes +probability. In addition to keeping only most the probable class (or classes), we +often want the probability to be above a certain threshold, otherwise we're +not interested in the result. Because a significant portion of analytics results +from the inference process don't have much value, we want to filter them out +as early as possible. Since analytics results are only available after tensor +decoding, the tensor decoder is tasked with this type filtering (NMS). The same +concept exists for object detection, where NMS generally involves calculating +the intersection-of-union (IoU) in combination with location and class probability. +Because ML-based analytics are probabilistic by nature, they generally need a form of +NMS post-processing. + +#### Handling Multiple Tensors Simultaneously In A Tensor Decoder +Sometimes, it is needed or more efficient to have a tensor decoder handle +multiple tensors simultaneously. In some cases, the tensors are complementary and a +tensor decoder needs to have both tensors to decode analytics result. In other +cases, it's just more efficient to do it simultaneously because of the +tensor-decoder's second job doing NMS. Let's consider YOLOv3, where 3 output tensors are +produced for each input. One tensor represents detection of small objects, a second +tensor medium size objects and a third tensor large size objects. In this context, +it's beneficial to have the tensor decoder decode the 3 tensors simultaneously to +perform the NMS on all the results, otherwise analytics results with low value +would remain in the system for longer. This has implications for the negotiation +of tensor decoders, that will be expanded on in the section dedicated to tensor decoder +negotiation. + +### Why Interpreting (decoding) Tensors +As we described above, tensors contain information and are used to store analytics +results. The analytics results are encoded in a model specific way into the +tensor and unless their consumers, processes making use of analytics-results, are +also model specific, they need to be decoded. Deciding if the analytics pipeline +will have elements producing and consuming tensor directly into their encoded +form, or if a tensor-decoding process will done between tensor production and +consumption, is a design decision that involve compromise between re-usability +and performance. As an example, an object detection overlay element would need to +be model specific to directly consume tensor. Therefore, it would need to be +re-written for any object-detection model using a different encoding scheme, but +if the only goal of the analytics pipeline is to do this overlay, it would +probably be the most efficient implementation. Another aspect in favour of +interpreting tensor is that we can have multiple consumers of the analytics +results, and if the tensor decoding is left to the consumers themselves, it implies +decoding the same tensor multiple times. However, we can think of two models +specifically designed to work together where the output of one model becomes the +input of the downstream model. In this context the downstream model is not +re-usable without the upstream model but they bypass the need for +tensor-decoding and are very efficient. Another variation is that multiple +models are merged into one model removing the need the multi-level inference, +but again, this is a design decision involving compromise on re-usability, +performance and effort. We aim to provide support for all these use cases, +and to allow the analytics pipeline designer to make the best design decisions based +on his specific context. + +#### Analytics Meta +The Analytics Meta (GstAnalyticsRelationMeta) is the foundation of re-usability of +analytics results and its goal is to store analytics results (GstAnalyticsMtd) +in an efficient way, and to allow to define relations between them. GstAnalyticsMtd +is very primitive and is meant to be expanded. GstAnalyticsMtdClassification (storage +for classification result), GstAnalyticsMtdObjectDetection (storage for +object detection result), GstAnalyticsMtdTracking (storage for +object tracking) are specialization and can used as reference to create other +storage, based on GstAnalyticsMtd, for other types of analytics result. + +There are two major use case for the ability to define relation between +analytics results. The first one is define a relation between analytics results +that were generated at different stages. A good example of this could be a first +analysis detected cars from an image and a second level analysis where only +section of image presenting a car is pushed to a second analysis to extract +brand/model of the car in a section of the image. This analytics result is then +appended to the original image with a relation defined with the object-detection +result that have localized this car in the image. + +The other use case for relations is to create composition by re-using existing +GstAnalyticsMtd specialization. The relation between different analytics result is +completely decoupled from the analytics result themselves. + +All relation definitions are stored in +GstAnaltyicsRelationMeta, which is a container of GstAnaltyicsMtd and also contains +an adjacency-matrix storing relations. One of the benefits is the ability of a +consumer of analytics meta to explore the graph and follow relations between +analytics results without having to understand every type of result in the +relation path. Another important aspect is that analytics meta are not +specific to machine learning techniques and can also be used to store analysis +results from computer vision, heuristics or other techniques. It can be used as +a bridge between different techniques. + +### Tensor Transport Mode +Two transport mode are envisioned as Meta or as Media. Both mode have pros and +cons which justify supporting both mode. Currently tensor are only transported +as meta. + +#### Tensor Transport As Meta +In this mode tensor is attached to the buffer (the media) on which the analysis +was performed. The advantage of this mode if the original media is kept in a +direct association with analytics results. Further refinement analysis or +consumption (like overlay) of the analytics result are easier when the media on +which the analysis was performed is available and easily identifiable. Another +advantage is the ability to keep a relation description between tensors in a +refinement context On the other hand this mode of transporting analytics result +make negotiation of tensor-decoder in particular difficult. + +### Inference Sinkpad(s) Capabilities +Sinkpad capability, before been constrained based on model, can be any +media type. + +### Inference Srcpad(s) Capabilities + +Srcpads capabilities, will be identical to sinkpads capabilities. + +# Reference +- [Onnx-Refactor-MR](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4916) +- [Analytics-Meta MR](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4962) + + diff --git a/subprojects/gst-docs/markdown/additional/design/subtitle-overlays.md b/subprojects/gst-docs/markdown/additional/design/subtitle-overlays.md index edcecd8e293..bcc24abefd9 100644 --- a/subprojects/gst-docs/markdown/additional/design/subtitle-overlays.md +++ b/subprojects/gst-docs/markdown/additional/design/subtitle-overlays.md @@ -169,7 +169,7 @@ Multiple possible solutions come to mind: property in the sink when doing screenshots via playbin) always contain all the information needed. -4) create a video/x-raw-\*-delta format and use a backend-specific +4) create a video/x-raw-delta format and use a backend-specific videomixer This possibility was hinted at already in the digression in section diff --git a/subprojects/gst-docs/markdown/application-development/appendix/compiling.md b/subprojects/gst-docs/markdown/application-development/appendix/compiling.md index dcef4c0313d..c077e8188d0 100644 --- a/subprojects/gst-docs/markdown/application-development/appendix/compiling.md +++ b/subprojects/gst-docs/markdown/application-development/appendix/compiling.md @@ -15,19 +15,33 @@ framework. In this section, we will solely discuss how to embed such elements statically in your application. This can be useful for application-specific elements that have no use elsewhere in GStreamer. +Elements do not need to be registered to be used in GStreamer, so one +can simply instantiate the elements with `g_object_new ()` and use them +in pipelines like any other. + +If the statically linked elements should also be available through a +name for functions such as `gst_element_factory_make ()`, these elements +can be registered direclty without a plugin. For that you can use +`gst_element_register ()` with `NULL` as plugin parameter. + +While these two methods are usually sufficient, it is also possible +to register a static plugin. + +### Static plugins + Dynamically loaded plugins contain a structure that's defined using `GST_PLUGIN_DEFINE ()`. This structure is loaded when the plugin is loaded by the GStreamer core. The structure contains an initialization function (usually called `plugin_init`) that will be called right after that. It's purpose is to register the elements provided by the plugin -with the GStreamer framework. If you want to embed elements directly in -your application, the only thing you need to do is to replace -`GST_PLUGIN_DEFINE ()` with a call to `gst_plugin_register_static ()`. -As soon as you call `gst_plugin_register_static ()`, the elements will -from then on be available like any other element, without them having to -be dynamically loadable libraries. In the example below, you would be -able to call `gst_element_factory_make -("my-element-name", "some-name")` to create an instance of the element. +with the GStreamer framework. To register a static plugin, the only +thing you need to do is to replace `GST_PLUGIN_DEFINE ()` with a call +to `gst_plugin_register_static ()`. As soon as you call +`gst_plugin_register_static ()`, the elements will from then on be +available like any other element, without them having to be dynamically +loadable libraries. In the example below, you would be able to call +`gst_element_factory_make("my-element-name", "some-name")` to create +an instance of the element. ``` c diff --git a/subprojects/gst-docs/markdown/contribute/index.md b/subprojects/gst-docs/markdown/contribute/index.md index 5ae75f1e7e5..f90fa668799 100644 --- a/subprojects/gst-docs/markdown/contribute/index.md +++ b/subprojects/gst-docs/markdown/contribute/index.md @@ -426,24 +426,18 @@ In the simplest case, you might be able to get away with just doing a `git pull #### Coding Style -Try to stick to the GStreamer indentation and coding style. There is a script -called [`gst-indent`][gst-indent] which you can run over your `.c` or `.cpp` -files if you want your code auto-indented before making the patch. The script -requires GNU indent to be installed already. Please do _not_ run `gst-indent` on -header files, our header file indentation is free-form. If you build GStreamer -from git, a local commit hook will be installed that checks if your commit -conforms to the required style (also using GNU indent). +Try to stick to the GStreamer indentation and coding style. There is an +application called [`gst-indent-1.0`][gst-indent] that can be installed +with `pip install gst-indent`. You can run it over your `.c` or +`.cpp` files if you want your code auto-indented before making the patch. -Different versions of GNU indent may occasionally yield slightly different -indentations. If that happens, please ignore any indentation changes in -sections of code that your patch does not touch. You can do that by staging -changes selectively via `git add -p`. You can bypass the local indentation -check hook by using `git commit -n`, but it will still be checked again later -when you submit your changes through GitLab for merging. +Please do _not_ run `gst-indent-1.0` on header files, our header file +indentation is free-form. -We are working on making this less hasslesome. - -[gst-indent]: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/scripts/gst-indent-all +If you build GStreamer from git, a local commit hook will be installed that +checks if your commit conforms to the required style. You can bypass that local +indentation check hook by using `git commit -n`, but it will still be checked +again later on the CI when you submit your changes through GitLab for merging. Compiler requirements: - we are targetting the C99 compiler and preprocesser feature subset @@ -461,10 +455,42 @@ Other style guidelines: - declare variables inline (as opposed to only at the beginning of a block) - use advanced/nicer struct initialisers -[gst-indent]: https://gitlab.freedesktop.org/gstreamer/gstreamer/tree/master/tools/gst-indent +[gst-indent]: https://gitlab.freedesktop.org/gstreamer/gst-indent/ [bitreader]: https://gstreamer.freedesktop.org/documentation/base/gstbitreader.html?gi-language=c#GstBitReader [bytereader]: https://gstreamer.freedesktop.org/documentation/base/gstbytereader.html?gi-language=c#GstByteReader +##### Pre-commit + +GStreamer uses [pre-commit](https://pre-commit.com/) to validate coding style automatically when you create a new commit. + +pre-commit can be installed with `pip`: +``` +pip install pre-commit +``` + +The pre-commit hooks are automatically installed the first you run `meson setup`. +They can be also be installed manually using: +``` +pre-commit install +``` + +One installed, pre-commit will run automatically on every `git commit`. +You can also run manually all the pre-commit hooks using: +``` +pre-commit run --all-files --show-diff-on-failure +``` + +When you create a new commit, the pre-commit hooks may apply changes to your files, +automatically fixing the issues found. When this happens, simply add the changes to +your staging environment, and re-run the commit. + +You can bypass the pre-commit hooks using `git commit --no-verify`. The commits will +be validated in the CI's `check` stage, so you will still need to ensure that all +hooks passes correctly. To fix your commits, you can use the helper script located in +`scripts/check-commits.py` that will rebase your work starting from the commit passed +as first argument and it will run pre-commit for each commit, allowing you to fix them +individually rather than using a new commit on top of your branch to fix the issues found. + ### Writing Good Commit Messages Please take the time to write good and concise commit messages. @@ -655,6 +681,91 @@ It's of course fine for another developer to assign a merge request with a `Merge in X` label to Marge immediately if they think it's fine to go in now and don't expect further comments or review being needed by others. +### Fixing Since tags + +Since a few releases, CI runs checks to ensure that all new symbols added +as public API are marked with a Since tag in their docstrings. + +If the documentation job rejects your MR with: + +``` +ERROR: [check-missing-since-markers]: (missing-since-marker): /some/path: Missing since marker for GST_SOME_SYMBOL +``` + +You should be able to get rid of the warning by adding a new gtk-doc comment +in the relevant source or header file with such contents: + +``` +/** + * GST_SOME_SYMBOL: + * + * some description of the symbol purposes + * + * Since: 1.XX + */ +``` + +A common mistake for the docstring is to omit the description paragraph: + +``` +/** + * GST_SOME_SYMBOL: + * + * Since: 1.XX + */ +``` + +This will *not* parse as valid gtk-doc syntax. + + +If your attempt is not enough and you'd rather avoid waiting for CI to try various +docstrings, or you simply want to build your documentation changes *fast* on +your local machine, you can proceed as follows: + +``` +# Make sure you have hotdoc +pipx install hotdoc +# Make sure you have a doc-enabled build +rm -rf build && meson build -Dgpl=enabled -Ddoc=enabled && ninja -C build +# Build the complete documentation once +ninja -C build/ subprojects/gst-docs/GStreamer-doc -v +# Enter the devenv, hotdoc now finds the current devhelp2 files and +# will not emit warnings about incorrect links +ninja -C build devenv +# Go back to the toplevel directory +cd .. +# Build the exact documentation subproject you are interested in, +# this is super fast, adapt command to your case +hotdoc run --conf-file build/subprojects/gst-plugins-bad/docs/mpegts-doc.json --previous-symbol-index subprojects/gst-docs/symbols/symbol_index.json +``` + +Another, less common situation is for the header file the docstring was added in to +be explicitly excluded by the meson build files: some header files are known +to contain gtk-doc like docstrings and to generate a ton of irrelevant warnings, +we ignore those. + +If you have a concern it might be the case you can look at the relevant +hotdoc.json file for your subproject to see exactly what sources are +included / excluded. + +You can enable checks for up-to-date plugin caches and presence of the necessary +since tags at commit time by setting the `GST_ENABLE_DOC_PRE_COMMIT_HOOK` +environment variable to any value other than "0": + +``` shell +GST_ENABLE_DOC_PRE_COMMIT_HOOK=1 git commit +``` + +The pre-commit hook will: + +* Stash unstaged changes (the path to the patch file is printed out) +* Locate the build directory (the location can be specified through the `GST_DOC_BUILDDIR` environment variable) +* Build the version of the code that is to be committed +* Build the relevant plugins caches and error out if there is a diff +* Build the relevant doc subprojects using `hotdoc` and error out in case of since tag errors + +In any case, the stashed changes are then re-applied + ## Backporting to a stable branch Before backporting any changes to a stable branch, they should first be diff --git a/subprojects/gst-docs/markdown/frequently-asked-questions/developing.md b/subprojects/gst-docs/markdown/frequently-asked-questions/developing.md index f441a43568b..47b29d329e0 100644 --- a/subprojects/gst-docs/markdown/frequently-asked-questions/developing.md +++ b/subprojects/gst-docs/markdown/frequently-asked-questions/developing.md @@ -106,46 +106,31 @@ want it to do. ## What is the coding style for GStreamer code? -Basically, the core and almost all plugin modules use K\&R with 2-space -indenting. Just follow what's already there and you'll be fine. We only require -code files to be indented, header may be indented manually for better -readability. Please use spaces for indenting, not tabs, even in header files. +The indentation style for GStreamer C code is similar to K\&R with 2-space +indenting. -Individual plugins in gst-plugins-\* or plugins that you want considered -for addition to these modules should use the same style. It's easier if -everything is consistent. Consistency is, of course, the goal. +Consistent indentaiton is enforced only for C source files, we generally do +not indent header files. -One way to make sure you are following our coding style is to run your code -(remember, only the `*.c` files, not the headers) through GNU Indent using the -following options: +In header files indentation is free-form, but please always use spaces and +not tabs since editor settings with regard to tabs will vary. Please do not +run the indenter on existing header files when making changes. -``` -indent \ - --braces-on-if-line \ - --case-brace-indentation0 \ - --case-indentation2 \ - --braces-after-struct-decl-line \ - --line-length80 \ - --no-tabs \ - --cuddle-else \ - --dont-line-up-parentheses \ - --continuation-indentation4 \ - --honour-newlines \ - --tab-size8 \ - --indent-level2 -``` +Rust source files (.rs files) are indented with the standard `rustfmt`. -There is also a `gst-indent` script in the GStreamer core source tree in the -tools directory which wraps GNU Indent and uses the right options. +One way to make sure you are following our coding style is to run your code +(remember, only the `*.c` files, not the headers) through the `gst-indent-1.0` +tool, which can be installed with `pip install gst-indent`. +Alternatively you can also get the tool from the +[gst-indent repository](https://gitlab.freedesktop.org/gstreamer/gst-indent/) +and build it yourself. The easiest way to get the indenting right is probably to develop against a git checkout. The local git commit hook will ensure correct indentation. -Comments should be in `/* ANSI C comment style */` and code should generally -be compatible with ANSI C89, so please declare all variables at the beginning -of the block, etc. +Merge requests should always be made against git `main` branch and filed +in GitLab. -Merge requests should ideally be made against git master or a recent release. Please don't send patches to the mailing list. They will likely get lost there. See [How to submit patches][submit-patches] for more details. diff --git a/subprojects/gst-docs/markdown/installing/on-linux.md b/subprojects/gst-docs/markdown/installing/on-linux.md index ae6aa03d380..acf497d06b1 100644 --- a/subprojects/gst-docs/markdown/installing/on-linux.md +++ b/subprojects/gst-docs/markdown/installing/on-linux.md @@ -59,6 +59,14 @@ git clone https://gitlab.freedesktop.org/gstreamer/gstreamer #### Building the tutorials +Change directory to find basic-tutorials-1: + +``` +cd gstreamer/subprojects/gst-docs/examples/tutorials/ +``` + +And then compile it with: + ``` gcc basic-tutorial-1.c -o basic-tutorial-1 `pkg-config --cflags --libs gstreamer-1.0` ``` diff --git a/subprojects/gst-docs/markdown/installing/on-windows.md b/subprojects/gst-docs/markdown/installing/on-windows.md index e3af6e66068..4f4bb9195a9 100644 --- a/subprojects/gst-docs/markdown/installing/on-windows.md +++ b/subprojects/gst-docs/markdown/installing/on-windows.md @@ -59,7 +59,7 @@ Windows start icon > Search "environment variables" > Edit the system environmen At runtime, GStreamer will look for its plugins in the following folders: - - `%HOMEDRIVE%%HOMEFOLDER%/.gstreamer-1.0/plugins` + - `%HOMEDRIVE%%HOMEPATH%/.gstreamer-1.0/plugins` - `C:\gstreamer\1.0\x86\lib\gstreamer-1.0` - `\..\lib\gstreamer-1.0` - `%GST_PLUGIN_PATH%` diff --git a/subprojects/gst-docs/markdown/plugin-development/advanced/allocation.md b/subprojects/gst-docs/markdown/plugin-development/advanced/allocation.md index a421b4134f7..8165629e458 100644 --- a/subprojects/gst-docs/markdown/plugin-development/advanced/allocation.md +++ b/subprojects/gst-docs/markdown/plugin-development/advanced/allocation.md @@ -693,6 +693,10 @@ params = gst_structure_new ("video-meta", "padding-bottom", G_TYPE_UINT, align.padding_bottom, "padding-left", G_TYPE_UINT, align.padding_left, "padding-right", G_TYPE_UINT, align.padding_right, + "stride-align0", G_TYPE_UINT, align->stride_align[0], + "stride-align1", G_TYPE_UINT, align->stride_align[1], + "stride-align2", G_TYPE_UINT, align->stride_align[2], + "stride-align3", G_TYPE_UINT, align->stride_align[3], NULL); ``` 3. *v4l2h264enc*: when handling the `ALLOCATION` query (`propose_allocation()`), @@ -722,6 +726,10 @@ if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, &video_idx)) gst_structure_get_uint (s, "padding-bottom", &align.padding_bottom); gst_structure_get_uint (s, "padding-left", &align.padding_left); gst_structure_get_uint (s, "padding-right", &align.padding_right); + gst_structure_get_uint (s, "stride-align0", &align.stride_align[0]); + gst_structure_get_uint (s, "stride-align1", &align.stride_align[1]); + gst_structure_get_uint (s, "stride-align2", &align.stride_align[2]); + gst_structure_get_uint (s, "stride-align3", &align.stride_align[3]); gst_video_info_from_caps (&info, caps); diff --git a/subprojects/gst-docs/markdown/plugin-development/basics/args.md b/subprojects/gst-docs/markdown/plugin-development/basics/args.md index 5221b4c57b4..ea35adf1ce3 100644 --- a/subprojects/gst-docs/markdown/plugin-development/basics/args.md +++ b/subprojects/gst-docs/markdown/plugin-development/basics/args.md @@ -141,13 +141,58 @@ gst_videotestsrc_pattern_get_type (void) static void gst_videotestsrc_class_init (GstvideotestsrcClass *klass) { + + /* define virtual function pointers */ + object_class->set_property = gst_my_filter_set_property; + object_class->get_property = gst_my_filter_get_property; [..] g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PATTERN, g_param_spec_enum ("pattern", "Pattern", "Type of test pattern to generate", GST_TYPE_VIDEOTESTSRC_PATTERN, GST_VIDEOTESTSRC_SMPTE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + + [..] } +[..] + +static void +gst_my_filter_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GstMyFilter *filter = GST_MY_FILTER (object); + + switch (prop_id) { + case PROP_PATTERN: + filter->video_test_pattern = (GstVideotestsrcPattern)g_value_get_enum(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gst_my_filter_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GstMyFilter *filter = GST_MY_FILTER (object); + + switch (prop_id) { + case PROP_PATTERN: + g_value_set_enum (value, filter->video_test_pattern); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + ``` diff --git a/subprojects/gst-docs/markdown/tools/gst-launch.md b/subprojects/gst-docs/markdown/tools/gst-launch.md index e5b29424212..723b8316831 100644 --- a/subprojects/gst-docs/markdown/tools/gst-launch.md +++ b/subprojects/gst-docs/markdown/tools/gst-launch.md @@ -21,15 +21,18 @@ gst-launch-1.0 [OPTIONS] PIPELINE-DESCRIPTION In its simplest form, a PIPELINE-DESCRIPTION is a list of elements separated by exclamation marks (!). Properties may be appended to elements in the -form `property=value`. +form `property=value`. A "preset" can also be set using +the `@preset=` syntax. For a more complete description of possible PIPELINE-DESCRIPTIONS see the -section [Pipeline Description](#pipeline-description) below or consult the GStreamer documentation. +section [Pipeline Description](#pipeline-description) below or consult the +GStreamer documentation. Please note that `gst-launch-1.0` is primarily a debugging tool. You should -not build applications on top of it. For applications, use the -`gst_parse_launch()` function of the GStreamer API as an easy way to construct -pipelines from pipeline descriptions. +not build applications on top of it. For applications, write a little python +script or Rust application (or use whatever other programming language you +prefer) and use the `gst_parse_launch()` function of the GStreamer API as an +easy way to construct pipelines from pipeline descriptions. ## Options @@ -55,24 +58,118 @@ Output messages posted on the pipeline's bus Output tags (also known as metadata) -**-o FILE, --output=FILE** +**-e, --eos-on-shutdown** -Save XML representation of pipeline to FILE and exit +Force an EOS event on sources before shutting the pipeline down. This is +useful to make sure muxers create readable files when a muxing pipeline is +shut down forcefully via Control-C (especially in case of `mp4mux` and `qtmux` +where the created file will be unreadable if the file has not been finalised +properly). **-f, --no\_fault** -Do not install a fault handler +Do not install a segfault handler -**-T, --trace** +**--no-position** + +Do not print the current position of pipeline. + +If this option is unspecified, the position will be printed when stdout is a TTY. +To enable printing position when stdout is not a TTY, +use the "--force-position" option. + +**--force-position** + +Allow printing the current position of pipeline even if stdout is not a TTY. +This option has no effect if the "--no-position" option is specified. -Print memory allocation traces. The feature must be enabled at compile -time to work. ## GStreamer Options `gst-launch-1.0` also accepts the following options that are common to all GStreamer applications: +**--gst-version** + +Prints the version string of the `GStreamer` core library. + +**--gst-fatal-warnings** + +Causes `GStreamer` to abort if a warning message occurs. This is equivalent +to setting the environment variable `G_DEBUG=fatal_warnings` (see the +section `environment variables` below for further information). + +**--gst-debug=STRING** + +A comma separated list of `category_name:level` pairs to specify debugging levels +for each category. Level is in the range 0-9 where 0 will show no messages, and +9 will show all messages. The wildcard `*` can be used to match category names. + +Note that the order of categories and levels is important, wildcards at the +end may override levels set earlier. The log levels are: + +1. ERROR +2. WARNING +3. FIXME +4. INFO +5. DEBUG +6. LOG (this is the highest 'normal' debug level) +7. TRACE +9. MEMDUMP + +Since GStreamer 1.2 one can also use the debug level names, e.g. +`--gst-debug=*sink:LOG`. A full description of the various debug levels +can be found in the GStreamer core library API documentation, in the +"Running GStreamer Applications" section. + +Use `--gst-debug-help` to show category names + +Example: `GST_CAT:LOG,GST_ELEMENT_*:INFO,oggdemux:LOG` + +**--gst-debug-level=LEVEL** + +Sets the threshold for printing debugging messages. A higher level +will print more messages. The useful range is 0-9, with the default +being 0. Level 6 (LOG level) will show all information that is usually +required for debugging purposes. Higher levels are only useful in very +specific cases. See above for the full list of levels. + +**--gst-debug-no-color** + +`GStreamer` normally prints debugging messages so that the +messages are color-coded when printed to a terminal that handles +ANSI escape sequences. Using this option causes GStreamer +to print messages without color. Setting the `GST_DEBUG_NO_COLOR=1` +environment variable will achieve the same thing. + +**--gst-debug-color-mode** + +GStreamer normally prints debugging messages so that the +messages are color-coded when printed to a terminal that handles +ANSI escape sequences (on *nix), or uses W32 console API to color the +messages printed into a console (on W32). Using this option causes +GStreamer to print messages without color ('off' or 'disable'), +print messages with default colors ('on' or 'auto'), or print messages +using ANSI escape sequences for coloring ('unix'). Setting the +`GST_DEBUG_COLOR_MODE` environment variable will achieve the same thing. + +**--gst-debug-disable** + +Disables debugging. + +**--gst-debug-help** + +Prints a list of available debug categories and their default debugging level. + +**--gst-plugin-path=PATH** + +Add directories separated with `:` (`;` on Windows) to the plugin search path. + +**--gst-plugin-load=PLUGINS** + +Preload plugins specified in a comma-separated list. Another way to specify +plugins to preload is to use the environment variable `GST_PLUGIN_PATH`. + ## Pipeline Description A pipeline consists of *elements* and *links*. *Elements* can be put @@ -97,6 +194,16 @@ Sets the property to the specified value. You can use `gst-inspect-1.0` to find out about properties and allowed values of different elements. Enumeration properties can be set by name, nick or value. +### Element Presets + +``` +@preset= ... +``` + +Sets the preset (basically a pre-made collection of property settings for a +specific element) on the element. you can use `gst-inspect-1.0` to +find out what presets are available for a specific element. + ### Bins ``` @@ -114,19 +221,27 @@ pipeline. ### Links ``` -[[SRCELEMENT\].[PAD1,...]] ! [[SINKELEMENT].[PAD1,...]] +[[SRCELEMENT].[PAD1,...]] ! [[SINKELEMENT].[PAD1,...]] +[[SRCELEMENT].[PAD1,...]] ! CAPS ! [[SINKELEMENT].[PAD1,...]] +[[SRCELEMENT].[PAD1,...]] : [[SINKELEMENT].[PAD1,...]] +[[SRCELEMENT].[PAD1,...]] : CAPS : [[SINKELEMENT].[PAD1,...]] ``` -Links the element with name SRCELEMENT to the element with name SINKELEMENT. +Links the element with name SRCELEMENT to the element with name SINKELEMENT, +using the caps specified in CAPS as a filter. + Names can be set on elements using the `name` property. If the name is omitted, the element that was specified directly in front of or after the link is used. This works across bins. If a padname is given, the link is done using that pad. If no pad names are given all possibilities are tried and a compatible pad is used. If multiple padnames are given, both sides must have the same number of -pads specified and multiple links are done in the given order. The simplest link -is a simple exclamation mark. This links the element to the left of it with the -element at its right. +pads specified and multiple links are done in the given order. +The simplest link is a simple exclamation mark. This links the element to the +left of it with the element at its right. + +Linking using the `:` operator attempts to link all possible pads between +the elements The following links the element with name SRCELEMENT to the element with name SINKELEMENT, using the caps specified in CAPS as a filter: @@ -156,73 +271,66 @@ value and the type can have the following case-insensitive values: - `i` or `int` for integer values or ranges; - `f` or `float` for float values or ranges; -- `4` or `fourcc` for FOURCC values; - `b`, `bool`, or `boolean` for boolean values; - `s`, `str`, or `string` for strings; - `fraction` for fractions (framerate, pixel-aspect-ratio); - `l` or `list` for lists. -If no type was given, the following order is -tried: integer, float, boolean, string. Integer values must be parsable by -`strtol()`, floats by `strtod()`. FOURCC values may either be integers or -strings. Boolean values are (case insensitive) `yes`, `no`, `true` or `false` -and may like strings be escaped with `"` or `'`. Ranges are in this format: `[ -VALUE, VALUE]`; lists use this format: `(VALUE [, VALUE ...])`. +If no type was given, the following order is tried: integer, float, boolean, +string. Integer values must be parsable by `strtol()`, floats by `strtod()`. +Boolean values are (case insensitive) `yes`, `no`, `true` or `false` +and may like strings be escaped with `"` or `'`. -## Pipeline Control +Ranges are in this format: `[VALUE, VALUE]`, e.g. `width=[16,1920]` -A pipeline can be controlled by signals. `SIGUSR2` will stop the pipeline -(`GST_STATE_NULL`); `SIGUSR1` will put it back to play (`GST_STATE_PLAYING`). By -default, the pipeline will start in the `PLAYING` state. There are currently no -signals defined to go into the ready or pause (`GST_STATE_READY` and `GST_STATE_PAUSED`) states explicitly. +Lists use this format: `{VALUE [, VALUE ...]}`, e.g. `width={1920,1280,640}` ## Pipeline Examples -The examples below assume that you have the correct plugins available. -In general, `osssink` can be substituted with another audio output -plugin such as `directsoundsink`, `esdsink`, `alsasink`, `osxaudiosink`, or -`artsdsink`. Likewise, `xvimagesink` can be substituted with `d3dvideosink`, -`ximagesink`, `sdlvideosink`, `osxvideosink`, or `aasink`. Keep in mind though -that different sinks might accept different formats and even the same sink might -accept different formats on different machines, so you might need to add -converter elements like `audioconvert` and `audioresample` for audio or -`videoconvert` in front of the sink to make things work. +The examples below assume that you have the correct plug-ins available. +In general, "pulsesink" can be substituted with another audio output +plug-in such as "alsasink", "osxaudiosink", or "wasapisink" + +Likewise, `xvimagesink` can be substituted with `d3dvideosink`, +`ximagesink`, `sdlvideosink`, `osxvideosink`, or `aasink`. + +Keep in mind though that different sinks might accept different formats and +even the same sink might accept different formats on different machines, so +you might need to add converter elements like `audioconvert` and `audioresample` +for audio or `videoconvertscale` in front of the sink to make things work. ### Audio playback -Play the mp3 music file "music.mp3" using a libmad-based plugin and output to -an OSS device: +**Note:** For audio/video playback it's best to use the `playbin3` or +`uridecodebin3` elements, these are just example pipelines. + +Play the mp3 music file "music.mp3" using a libmpg123-based plug-in and +output it to an audio device via PulseAudio (or PipeWire). ``` -gst-launch-1.0 filesrc location=music.mp3 ! mad ! audioconvert ! -audioresample ! osssink +gst-launch-1.0 filesrc location=music.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! audioresample ! pulsesink ``` Play an Ogg Vorbis format file: ``` -gst-launch-1.0 filesrc location=music.ogg ! oggdemux ! vorbisdec ! -audioconvert ! audioresample ! osssink +gst-launch-1.0 filesrc location=music.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! pulsesink ``` -Play an mp3 file using GNOME-VFS: +Play an mp3 file or an http stream using GIO: ``` -gst-launch-1.0 gnomevfssrc location=music.mp3 ! mad ! osssink +gst-launch-1.0 giosrc location=music.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! pulsesink ``` -Play an HTTP stream using GNOME-VFS: - ``` -gst-launch-1.0 gnomevfssrc location= ! mad -! audioconvert ! audioresample ! osssink +gst-launch-1.0 giosrc location=http://domain.com/music.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! audioresample ! pulsesink ``` -Use GNOME-VFS to play an mp3 file located on an SMB server: +Use GIO to play an mp3 file located on an SMB server: ``` -gst-launch-1.0 gnomevfssrc location= ! mad ! -audioconvert ! audioresample ! osssink +gst-launch-1.0 giosrc location=smb://computer/music.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! audioresample ! pulsesink ``` ### Format conversion @@ -230,15 +338,13 @@ audioconvert ! audioresample ! osssink Convert an mp3 music file to an Ogg Vorbis file: ``` -gst-launch-1.0 filesrc location=music.mp3 ! mad ! audioconvert ! vorbisenc ! -oggmux ! filesink location=music.ogg +gst-launch-1.0 filesrc location=music.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! vorbisenc ! oggmux ! filesink location=music.ogg ``` Convert to the FLAC format: ``` -gst-launch-1.0 filesrc location=music.mp3 ! mad ! audioconvert ! flacenc ! -filesink location=test.flac` +gst-launch-1.0 filesrc location=music.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! flacenc ! filesink location=test.flac ``` ### Other @@ -246,34 +352,29 @@ filesink location=test.flac` Play a .WAV file that contains raw audio data (PCM): ``` -gst-launch-1.0 filesrc location=music.wav ! wavparse ! audioconvert ! -audioresample ! osssink +gst-launch-1.0 filesrc location=music.wav ! wavparse ! audioconvert ! audioresample ! pulsesink ``` Convert a .WAV file containing raw audio data into an Ogg Vorbis or mp3 file: ``` -gst-launch-1.0 filesrc location=music.wav ! wavparse ! audioconvert ! -vorbisenc ! oggmux ! filesink location=music.ogg +gst-launch-1.0 filesrc location=music.wav ! wavparse ! audioconvert ! vorbisenc ! oggmux ! filesink location=music.ogg ``` ``` -gst-launch-1.0 filesrc location=music.wav ! wavparse ! audioconvert ! lame ! -filesink location=music.mp3 +gst-launch-1.0 filesrc location=music.wav ! wavparse ! audioconvert ! lamemp3enc ! xingmux ! id3v2mux ! filesink location=music.mp3 ``` Rip all tracks from CD and convert them into a single mp3 file: ``` -gst-launch-1.0 cdparanoiasrc mode=continuous ! audioconvert ! lame ! -id3v2mux ! filesink location=cd.mp3 +gst-launch-1.0 cdparanoiasrc mode=continuous ! audioconvert ! lamemp3enc ! mpegaudioparse ! xingmux ! id3v2mux ! filesink location=cd.mp3 ``` Rip track 5 from the CD and converts it into a single mp3 file: ``` -gst-launch-1.0 cdparanoiasrc track=5 ! audioconvert ! lame ! id3v2mux -! filesink location=track5.mp3 +gst-launch-1.0 cdparanoiasrc track=5 ! audioconvert ! lamemp3enc ! mpegaudioparse ! xingmux ! id3v2mux ! filesink location=track5.mp3 ``` Using `gst-inspect-1.0`, it is possible to discover settings like @@ -283,72 +384,58 @@ will find an element (such as cdparanoia) that supports that protocol for you, e.g.: ``` -gst-launch-1.0 [cdda://5] ! lame vbr=new vbr-quality=6 ! -filesink location=track5.mp3 +gst-launch-1.0 cdda://5 ! lamemp3enc vbr=new vbr-quality=6 ! xingmux ! id3v2mux ! filesink location=track5.mp3 ``` Record sound from your audio input and encode it into an ogg file: ``` -gst-launch-1.0 osssrc ! audioconvert ! vorbisenc ! oggmux ! -filesink location=input.ogg -``` - -Running a pipeline using a specific user-defined latency -(see gst_pipeline_set_latency()): - -``` -gst-launch-1.0 pipeline. \( latency=2000000000 videotestsrc ! jpegenc ! jpegdec ! fakevideosink \) +gst-launch-1.0 pulsesrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=input.ogg ``` ### Video -Display only the video portion of an MPEG-1 video file, outputting to an X +**Note:** For audio/video playback it's best to use the `playbin3` or +`uridecodebin3` elements, these are just example pipelines. + +Display only the video portion of an MPEG-2 video file, outputting to an X display window: ``` -gst-launch-1.0 filesrc location=videofile.mpg ! dvddemux ! mpeg2dec ! -xvimagesink +gst-launch-1.0 filesrc location=JB_FF9_TheGravityOfLove.mpg ! mpegdemux ! mpegvideoparse ! mpeg2dec ! videoconvert ! xvimagesink ``` Display the video portion of a .vob file (used on DVDs), outputting to an SDL window: ``` -gst-launch-1.0 filesrc location=flflfj.vob ! dvddemux ! mpeg2dec ! sdlvideosink +gst-launch-1.0 filesrc location=flflfj.vob ! dvddemux ! mpegvideoparse ! mpeg2dec ! videoconvert ! sdlvideosink ``` Play both video and audio portions of an MPEG movie: ``` -gst-launch-1.0 filesrc location=movie.mpg ! dvddemux name=demuxer -demuxer. ! queue ! mpeg2dec ! sdlvideosink -demuxer. ! queue ! mad ! audioconvert ! audioresample ! osssink +gst-launch-1.0 filesrc location=movie.mpg ! dvddemux name=demuxer \ +\ +demuxer. ! queue ! mpegvideoparse ! mpeg2dec ! videoconvert ! sdlvideosink \ +demuxer. ! queue ! mpegaudioparse ! mpg123audiodec ! audioconvert ! audioresample ! pulsesink ``` Play an AVI movie with an external text subtitle stream: -``` -gst-launch-1.0 filesrc location=movie.mpg ! mpegdemux name=demuxer -demuxer. ! queue ! mpeg2dec ! videoconvert ! sdlvideosink -demuxer. ! queue ! mad ! audioconvert ! audioresample ! osssink -``` - This example shows how to refer to specific pads by name if an element (here: textoverlay) has multiple sink or source pads: ``` -gst-launch-1.0 textoverlay name=overlay ! videoconvert ! videoscale ! -autovideosink -filesrc location=movie.avi ! decodebin2 ! videoconvert ! overlay.video_sink +gst-launch-1.0 textoverlay name=overlay ! videoconvert ! videoscale ! autovideosink \ +filesrc location=movie.avi ! decodebin3 ! videoconvert ! overlay.video_sink \ filesrc location=movie.srt ! subparse ! overlay.text_sink ``` Play an AVI movie with an external text subtitle stream using playbin: ``` -gst-launch-1.0 playbin uri= -suburi= +gst-launch-1.0 playbin3 uri= suburi= ``` ### Network streaming @@ -358,18 +445,13 @@ Stream video using RTP and network elements This command would be run on the transmitter: ``` -gst-launch-1.0 v4l2src ! -video/x-raw-yuv,width=128,height=96,format='(fourcc)'UYVY ! -videoconvert ! ffenc_h263 ! video/x-h263 ! rtph263ppay pt=96 ! -udpsink host=192.168.1.1 port=5000 sync=false +gst-launch-1.0 v4l2src ! queue ! videoconvert ! x264enc tune=zerolatency key-int-max=15 ! video/x-h264,profile=main ! rtph264pay pt=96 config-interval=-1 ! udpsink host=192.168.1.1 port=5000 ``` Use this command on the receiver: ``` -gst-launch-1.0 udpsrc port=5000 ! application/x-rtp, -clock-rate=90000,payload=96 ! rtph263pdepay queue-delay=0 ! ffdec_h263 -! xvimagesink +gst-launch-1.0 udpsrc port=5000 ! application/x-rtp,clock-rate=90000,payload=96 ! rtpjitterbuffer ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! xvimagesink ``` ### Diagnostic @@ -377,7 +459,7 @@ clock-rate=90000,payload=96 ! rtph263pdepay queue-delay=0 ! ffdec_h263 Generate a null stream and ignore it (and print out details): ``` -gst-launch-1.0 -v fakesrc num-buffers=16 ! fakesink +gst-launch-1.0 -v fakesrc num-buffers=16 ! fakesink silent=false ``` Generate a pure sine tone to test the audio output: @@ -392,31 +474,46 @@ Generate a familiar test pattern to test the video output: gst-launch-1.0 videotestsrc ! ximagesink ``` +``` +gst-launch-1.0 videotestsrc ! xvimagesink +``` + ### Automatic linking -You can use the "decodebin" element to automatically select the right +You can use the "decodebin3" element to automatically select the right elements to get a working pipeline. Play any supported audio format: ``` -gst-launch-1.0 filesrc location=musicfile ! decodebin ! audioconvert ! -audioresample ! osssink +gst-launch-1.0 filesrc location=musicfile ! decodebin3 ! audioconvert ! audioresample ! pulsesink ``` Play any supported video format with video and audio output. Threads are used automatically: ``` -gst-launch-1.0 filesrc location=videofile ! decodebin name=decoder -decoder. ! queue ! audioconvert ! audioresample ! osssink -decoder. ! videoconvert ! xvimagesink +gst-launch-1.0 filesrc location=videofile ! decodebin name=decoder decoder. ! queue ! audioconvert ! audioresample ! pulsesink decoder. ! videoconvert ! xvimagesink +``` + +You can also support different inputs by using an URI and uridecodebin3, e.g.: + +``` +gst-launch-1.0 uridecodebin3 uri=file:///path/to/video.mp4 name=decoder decoder. ! queue ! audioconvert ! audioresample ! pulsesink decoder. ! videoconvert ! xvimagesink +``` + +``` +gst-launch-1.0 uridecodebin3 uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm name=decoder decoder. ! queue ! audioconvert ! audioresample ! pulsesink decoder. ! videoconvert ! xvimagesink ``` To make the above even easier, you can use the playbin element: ``` -gst-launch-1.0 playbin uri= +gst-launch-1.0 playbin3 uri=file:///home/joe/foo.avi +``` + +``` +gst-launch-1.0 playbin3 uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm ``` ### Filtered connections @@ -426,18 +523,20 @@ These examples show you how to use filtered caps. Show a test image and use the YUY2 or YV12 video format for this: ``` -gst-launch-1.0 videotestsrc ! -'video/x-raw-yuv,format=(fourcc)YUY2;video/x-raw-yuv,format=(fourcc)YV12' -! xvimagesink +gst-launch-1.0 videotestsrc ! 'video/x-raw,format=YUY2;video/x-raw,format=YV12' ! xvimagesink +``` + +or + +``` +gst-launch-1.0 v4l2src ! image/jpeg ! queue ! decodebin3 ! videoconvert ! autovideosink ``` Record audio and write it to a .wav file. Force usage of signed 16 to 32 bit samples and a sample rate between 32kHz and 64KHz: ``` -gst-launch-1.0 osssrc ! -'audio/x-raw-int,rate=[32000,64000],width=[16,32],depth={16,24,32},signed=(boolean)true' -! wavenc ! filesink location=recording.wav +gst-launch-1.0 pulsesrc ! 'audio/x-raw,rate=[32000,64000],format={S16LE,S24LE,S32LE}' ! wavenc ! filesink location=recording.wav ``` ## Environment Variables @@ -448,16 +547,31 @@ gst-launch-1.0 osssrc ! GST_DEBUG=totem:4,typefind:5 ``` +`*` is allowed as a wildcard as part of debug category names (e.g. +`GST_DEBUG=*sink:6,*audio*:6`). It is also possible to specify the log level +by name (1=ERROR, 2=WARN, 3=FIXME, 4=INFO, 5=DEBUG, 6=LOG, 7=TRACE, 9=MEMDUMP), +e.g. `GST_DEBUG=*audio*:LOG`. + `GST_DEBUG_NO_COLOR`: When this environment variable is set, coloured debug output is disabled. This might come handy when saving the debug output to a file. -`GST_DEBUG_DUMP_DOT_DIR`: When set to a filesystem path, store dot -files of pipeline graphs there. +`GST_DEBUG_DUMP_DOT_DIR`: When set to a filesystem path, store 'dot' files of +pipeline graphs there. + +These can then later be converted into an image using the 'dot' utility from +the graphviz set of tools, like this: `dot foo.dot -Tsvg -o foo.svg` (png or jpg +are also possible as output format). There is also a utility called `xdot` +which allows you to view the .dot file directly without converting it first. + +When the pipeline changes state through NULL to PLAYING and back to NULL, a +dot file is generated on each state change. To write a snapshot of the +pipeline state, send a SIGHUP to the process or use the pipeline_snapshot +tracer from the GStreamer Rust plugins. `GST_REGISTRY`: Path of the plugin registry file. The default is -`~/.gstreamer-1.0/registry-CPU.xml` where CPU is the machine/cpu type -GStreamer was compiled for, e.g. 'i486', 'i686', 'x86-64', 'ppc', etc. +`~/.cache/gstreamer-1.0/registry-CPU.xml` where CPU is the machine/cpu type +GStreamer was compiled for, e.g. 'x86_64', etc. Check the output of `uname -i` and `uname -m` for details. `GST_REGISTRY_UPDATE`: Set to "no" to force GStreamer to assume that no plugins @@ -473,10 +587,15 @@ plugins. These take precedence over the system plugins. default. If not set, this defaults to the system-installed path, and the plugins installed in the user's home directory -`OIL_CPU_FLAGS`: Useful liboil environment variable. Set `OIL_CPU_FLAGS=0` when -valgrind or other debugging tools trip over liboil's CPU detection. Quite a few -important GStreamer plugins like `videotestsrc`, `audioconvert` and -`audioresample` use liboil. +`GST_DEBUG_FILE`: Set this variable to a file path to redirect all GStreamer +debug messages to this file. If left unset, debug messages will be output +to the standard error output. + +`ORC_CODE`: Useful Orc environment variable. Set `ORC_CODE=debug` to enable +debuggers such as gdb to create useful backtraces from Orc-generated code. Set +`ORC_CODE=backup` or `ORC_CODE=emulate` if you suspect Orc's SIMD code +generator is producing incorrect code. (Quite a few important +GStreamer plugins like videotestsrc, audioconvert or audioresample use Orc). `G_DEBUG`: This is a useful GLib environment variable. Set `G_DEBUG=fatal_warnings` to make GStreamer programs abort when a critical diff --git a/subprojects/gst-docs/markdown/tutorials/android/a-running-pipeline.md b/subprojects/gst-docs/markdown/tutorials/android/a-running-pipeline.md index 0f6d6727484..0d3af5e7629 100644 --- a/subprojects/gst-docs/markdown/tutorials/android/a-running-pipeline.md +++ b/subprojects/gst-docs/markdown/tutorials/android/a-running-pipeline.md @@ -356,11 +356,11 @@ GST_DEBUG_CATEGORY_STATIC (debug_category); * a jlong, which is always 64 bits, without warnings. */ #if GLIB_SIZEOF_VOID_P == 8 -## define GET_CUSTOM_DATA(env, thiz, fieldID) (CustomData *)(*env)->GetLongField (env, thiz, fieldID) -## define SET_CUSTOM_DATA(env, thiz, fieldID, data) (*env)->SetLongField (env, thiz, fieldID, (jlong)data) +# define GET_CUSTOM_DATA(env, thiz, fieldID) (CustomData *)(*env)->GetLongField (env, thiz, fieldID) +# define SET_CUSTOM_DATA(env, thiz, fieldID, data) (*env)->SetLongField (env, thiz, fieldID, (jlong)data) #else -## define GET_CUSTOM_DATA(env, thiz, fieldID) (CustomData *)(jint)(*env)->GetLongField (env, thiz, fieldID) -## define SET_CUSTOM_DATA(env, thiz, fieldID, data) (*env)->SetLongField (env, thiz, fieldID, (jlong)(jint)data) +# define GET_CUSTOM_DATA(env, thiz, fieldID) (CustomData *)(jint)(*env)->GetLongField (env, thiz, fieldID) +# define SET_CUSTOM_DATA(env, thiz, fieldID, data) (*env)->SetLongField (env, thiz, fieldID, (jlong)(jint)data) #endif /* Structure to contain all our information, so we can pass it to callbacks */ diff --git a/subprojects/gst-docs/markdown/tutorials/android/media-player.md b/subprojects/gst-docs/markdown/tutorials/android/media-player.md index e295946370c..2d0a0f90801 100644 --- a/subprojects/gst-docs/markdown/tutorials/android/media-player.md +++ b/subprojects/gst-docs/markdown/tutorials/android/media-player.md @@ -502,11 +502,11 @@ GST_DEBUG_CATEGORY_STATIC (debug_category); * a jlong, which is always 64 bits, without warnings. */ #if GLIB_SIZEOF_VOID_P == 8 -## define GET_CUSTOM_DATA(env, thiz, fieldID) (CustomData *)(*env)->GetLongField (env, thiz, fieldID) -## define SET_CUSTOM_DATA(env, thiz, fieldID, data) (*env)->SetLongField (env, thiz, fieldID, (jlong)data) +# define GET_CUSTOM_DATA(env, thiz, fieldID) (CustomData *)(*env)->GetLongField (env, thiz, fieldID) +# define SET_CUSTOM_DATA(env, thiz, fieldID, data) (*env)->SetLongField (env, thiz, fieldID, (jlong)data) #else -## define GET_CUSTOM_DATA(env, thiz, fieldID) (CustomData *)(jint)(*env)->GetLongField (env, thiz, fieldID) -## define SET_CUSTOM_DATA(env, thiz, fieldID, data) (*env)->SetLongField (env, thiz, fieldID, (jlong)(jint)data) +# define GET_CUSTOM_DATA(env, thiz, fieldID) (CustomData *)(jint)(*env)->GetLongField (env, thiz, fieldID) +# define SET_CUSTOM_DATA(env, thiz, fieldID, data) (*env)->SetLongField (env, thiz, fieldID, (jlong)(jint)data) #endif /* Do not allow seeks to be performed closer than this distance. It is visually useless, and will probably diff --git a/subprojects/gst-docs/markdown/tutorials/android/video.md b/subprojects/gst-docs/markdown/tutorials/android/video.md index fa02fa641d0..8c9bad65ed9 100644 --- a/subprojects/gst-docs/markdown/tutorials/android/video.md +++ b/subprojects/gst-docs/markdown/tutorials/android/video.md @@ -262,11 +262,11 @@ GST_DEBUG_CATEGORY_STATIC (debug_category); * a jlong, which is always 64 bits, without warnings. */ #if GLIB_SIZEOF_VOID_P == 8 -## define GET_CUSTOM_DATA(env, thiz, fieldID) (CustomData *)(*env)->GetLongField (env, thiz, fieldID) -## define SET_CUSTOM_DATA(env, thiz, fieldID, data) (*env)->SetLongField (env, thiz, fieldID, (jlong)data) +# define GET_CUSTOM_DATA(env, thiz, fieldID) (CustomData *)(*env)->GetLongField (env, thiz, fieldID) +# define SET_CUSTOM_DATA(env, thiz, fieldID, data) (*env)->SetLongField (env, thiz, fieldID, (jlong)data) #else -## define GET_CUSTOM_DATA(env, thiz, fieldID) (CustomData *)(jint)(*env)->GetLongField (env, thiz, fieldID) -## define SET_CUSTOM_DATA(env, thiz, fieldID, data) (*env)->SetLongField (env, thiz, fieldID, (jlong)(jint)data) +# define GET_CUSTOM_DATA(env, thiz, fieldID) (CustomData *)(jint)(*env)->GetLongField (env, thiz, fieldID) +# define SET_CUSTOM_DATA(env, thiz, fieldID, data) (*env)->SetLongField (env, thiz, fieldID, (jlong)(jint)data) #endif /* Structure to contain all our information, so we can pass it to callbacks */ diff --git a/subprojects/gst-docs/markdown/tutorials/basic/gstreamer-tools.md b/subprojects/gst-docs/markdown/tutorials/basic/gstreamer-tools.md index 72fd7a09b23..831212b60d3 100644 --- a/subprojects/gst-docs/markdown/tutorials/basic/gstreamer-tools.md +++ b/subprojects/gst-docs/markdown/tutorials/basic/gstreamer-tools.md @@ -235,12 +235,16 @@ gst-launch-1.0 souphttpsrc location=https://gstreamer.freedesktop.org/data/media A transcoding pipeline, which opens the webm container and decodes both streams (via uridecodebin), then re-encodes the audio and video branches -with a different codec, and puts them back together in an Ogg container -(just for the sake of -it). +with different codecs (H.264 + AAC), and puts them back together into an +MP4 container (just for the sake of it). Because of the way the x264enc +encoder behaves by default (consuming multiple seconds of video input before +outputtingi anything), we have to increase the size of the queue in the audio +branch to make sure the pipeline can preroll and start up. Another solution +would be to use `x264enc tune=zerolatency` but that results in lower quality +and is more suitable for live streaming scenarios. ``` -gst-launch-1.0 uridecodebin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm name=d ! queue ! theoraenc ! oggmux name=m ! filesink location=sintel.ogg d. ! queue ! audioconvert ! audioresample ! flacenc ! m. +gst-launch-1.0 uridecodebin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm name=d ! queue ! videoconvert ! x264enc ! video/x-h264,profile=high ! mp4mux name=m ! filesink location=sintel.mp4 d. ! queue max-size-time=5000000000 max-size-bytes=0 max-size-buffers=0 ! audioconvert ! audioresample ! voaacenc ! m. ``` A rescaling pipeline. The `videoscale` element performs a rescaling @@ -249,7 +253,7 @@ output caps. The output caps are set by the Caps Filter to 320x200. ``` -gst-launch-1.0 uridecodebin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm ! queue ! videoscale ! video/x-raw-yuv,width=320,height=200 ! videoconvert ! autovideosink +gst-launch-1.0 uridecodebin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm ! queue ! videoscale ! video/x-raw,width=320,height=200 ! videoconvert ! autovideosink ``` This short description of `gst-launch-1.0` should be enough to get you diff --git a/subprojects/gst-docs/markdown/tutorials/basic/short-cutting-the-pipeline.md b/subprojects/gst-docs/markdown/tutorials/basic/short-cutting-the-pipeline.md index fbe3e1060d2..30bfc169339 100644 --- a/subprojects/gst-docs/markdown/tutorials/basic/short-cutting-the-pipeline.md +++ b/subprojects/gst-docs/markdown/tutorials/basic/short-cutting-the-pipeline.md @@ -76,7 +76,7 @@ produces buffers with the “ANY” caps and no time-stamping information. After demuxing (see [](tutorials/basic/dynamic-pipelines.md)) buffers can have some specific caps, for example “video/x-h264”. After decoding, each buffer will contain a single video frame with raw caps -(for example, “video/x-raw-yuv”) and very precise time stamps indicating +(“video/x-raw,format=...”) and very precise time stamps indicating when should that frame be displayed. ### This tutorial diff --git a/subprojects/gst-docs/meson.build b/subprojects/gst-docs/meson.build index 4c15d5ffd66..d340d94d89c 100644 --- a/subprojects/gst-docs/meson.build +++ b/subprojects/gst-docs/meson.build @@ -1,6 +1,6 @@ project('GStreamer manuals and tutorials', 'c', - version: '1.25.0.1', - meson_version : '>= 1.1') + version: '1.25.50.1', + meson_version : '>= 1.4') hotdoc_p = find_program('hotdoc') if not hotdoc_p.found() @@ -17,7 +17,7 @@ endif hotdoc = import('hotdoc') hotdoc_subprojects = [] -apiversion = '1.0' +api_version = '1.0' if host_machine.system() == 'windows' pathsep = ';' else @@ -61,6 +61,8 @@ libs = '' plugins_doc = '' deps = [] plugins_sitemap = '' +plugin_configs = [] +libs_configs = [] if built_subprojects != '' foreach project_name: built_subprojects.split(',') sub = subproject(project_name) @@ -83,12 +85,18 @@ if built_subprojects != '' foreach plugin_doc: sub.get_variable('gst_plugins_doc', []) plugins_doc += plugin_doc + pathsep endforeach + + plugin_configs += sub.get_variable('plugin_hotdoc_configs', []) + + # Handle the GStreamer special case with two custom targets + libs_configs += sub.get_variable('lib_hotdoc_config', []) + libs_configs += sub.get_variable('libs_hotdoc_configs', []) else message('@0@ did not build hotdoc documentation, can\'t build API doc'.format(project_name)) endif endforeach endif -deps += [dependency('gstreamer-' + apiversion, fallback: ['gstreamer', 'gst_dep'])] +deps += [dependency('gstreamer-' + api_version, fallback: ['gstreamer', 'gst_dep'])] if get_option('use_portal_index') index = 'markdown/index.md' @@ -96,15 +104,23 @@ else index = 'markdown/simple-index.md' endif sitemap_gen = find_program('scripts/generate_sitemap.py') -sitemap = configure_file(command: [sitemap_gen, '@INPUT@', '@OUTPUT@', - 'gi-index', libs, plugins_doc], +sitemap = custom_target(command: [ + sitemap_gen, + '--input-sitemap', '@INPUT@', + '--output-sitemap', '@OUTPUT@', + '--markdown-index', 'gi-index', + '--libs', libs, + '--plugins', plugins_doc, + '--plugin-configs', plugin_configs, + '--lib-configs', libs_configs], input: 'sitemap.txt', output: 'sitemap.txt') +deps += [sitemap] html_theme = 'https://github.com/hotdoc/hotdoc_lumen_theme/releases/download/0.16/hotdoc_lumen_theme-0.16.tar.xz?sha256=b7d7dde51285d1c90836c44ae298754e4cfa957e9a6d14ee5844b8a2cac04b5a' gstreamer_doc = hotdoc.generate_doc('GStreamer', - project_version: apiversion, + project_version: api_version, sitemap: sitemap, index: index, gi_index: index, @@ -137,7 +153,7 @@ meson.add_devenv({'XDG_DATA_DIRS': meson.current_build_dir() / 'GStreamer-doc'}, method: 'prepend') cdata = configuration_data() -cdata.set('GST_API_VERSION', apiversion) +cdata.set('GST_API_VERSION', api_version) readme = configure_file(input: 'scripts/RELEASE_README.md', output: 'README.md', configuration : cdata) diff --git a/subprojects/gst-docs/scripts/assets/css/rustdoc-in-hotdoc.css b/subprojects/gst-docs/scripts/assets/css/rustdoc-in-hotdoc.css new file mode 100644 index 00000000000..5021f8e1bef --- /dev/null +++ b/subprojects/gst-docs/scripts/assets/css/rustdoc-in-hotdoc.css @@ -0,0 +1,31 @@ +body.rustdoc { + padding-top: 50px; +} + +/* Revert hotdoc body font size setting */ +:root { + font-size: 16px; +} + +/* Media queries for responsive behavior */ +@media (max-width: 767px) { + .gst-navbar-toggle { + display: block; + } +} + +@media (max-width: 701px) { + .sidebar { + padding-top: 50px; + } +} + +@media (min-width: 700px) { + .sidebar { + position: sticky; + top: 50px; + height: calc(100vh - 50px); + overflow-y: auto; + } +} + diff --git a/subprojects/gst-docs/scripts/assets/js/language-menu.js b/subprojects/gst-docs/scripts/assets/js/language-menu.js new file mode 100644 index 00000000000..1e4d1c0fa39 --- /dev/null +++ b/subprojects/gst-docs/scripts/assets/js/language-menu.js @@ -0,0 +1,100 @@ +// Wait for the language dropdown to be created +const language_observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + mutation.addedNodes.forEach(node => { + if (node.nodeType === Node.ELEMENT_NODE && + node.classList.contains('dropdown')) { + + const dropdownToggle = node.querySelector('a.dropdown-toggle'); + const dropdownMenu = node.querySelector('ul.dropdown-menu'); + + if (dropdownToggle?.textContent.includes('Language') && dropdownMenu) { + let rustLink = Array.from(dropdownMenu.querySelectorAll('a')) + .find(link => link.textContent.trim() === 'rust'); + if (!rustLink) { + const rustItem = document.createElement('li'); + rustLink = document.createElement('a'); + rustLink.textContent = 'rust'; + rustLink.href = 'rust/stable/latest/docs/index.html?gi-language=rust'; + rustItem.appendChild(rustLink); + dropdownMenu.appendChild(rustItem); + language_observer.disconnect(); + } + + const is_rustdoc_page = !!document.getElementById('hotdoc-rust-info'); + if (is_rustdoc_page) { + rustLink.href = window.location.href; + } + } + } + }); + }); +}); + + +function transformVersionMenu(versions) { + if (!versions) { + console.error("hotdoc rustdoc version could not be loaded"); + return; + } + // Find the menu + const menu = document.getElementById('API versions-menu'); + if (!menu) { + console.error("API versions menu not found"); + return; + } + + // Remove the Reset option and divider + const resetItem = menu.querySelector('li:first-child'); + const divider = menu.querySelector('.divider'); + if (resetItem) resetItem.remove(); + if (divider) divider.remove(); + + for (const [key, value] of Object.entries(versions)) { + const link = Array.from(menu.getElementsByTagName('a')) + .find(a => a.textContent.trim() === key); + + assert(link); + link.href = value; + } +} + +// Start observing the navbar for changes +document.addEventListener('DOMContentLoaded', () => { + const navbar = document.querySelector('#navbar-wrapper'); + if (navbar) { + language_observer.observe(navbar, { + childList: true, + subtree: true + }); + } + + let versions = JSON.parse(document.getElementById('hotdoc-rust-info') + .getAttribute("hotdoc-rustdoc-versions") + .replace(/'/g, '"')); + + + createTagsDropdown({ "API versions": Object.keys(versions) }); + + transformVersionMenu(versions); +}); + +function syncSidenavIframeParams() { + const params = new URLSearchParams(window.location.search); + const language = params.get('gi-language'); + const frame = document.getElementById('sitenav-frame'); + + if (frame) { + const frameUrl = new URL(frame.src, window.location.origin); + if (language) { + frameUrl.searchParams.set('gi-language', language); + } else { + frameUrl.searchParams.delete('gi-language'); + } + frame.src = frameUrl.toString(); + } +} + +document.addEventListener('DOMContentLoaded', syncSidenavIframeParams); + + diff --git a/subprojects/gst-docs/scripts/assets/js/sitemap-rs-fixer.js b/subprojects/gst-docs/scripts/assets/js/sitemap-rs-fixer.js new file mode 100644 index 00000000000..dd0ee6a0f81 --- /dev/null +++ b/subprojects/gst-docs/scripts/assets/js/sitemap-rs-fixer.js @@ -0,0 +1,76 @@ +function modifyLibsPanel() { + // Check if we should show Rust API + const params = new URLSearchParams(window.location.search); + var language = params.get('gi-language'); + + if (!language) { + language = utils.getStoredLanguage(); + } + + if (language === 'rust') { + let apiref = document.querySelector('a[data-nav-ref="gi-extension-GStreamer-libs.html"]'); + apiref.innerText = "Rust crates"; + apiref.href = "rust/stable/latest/docs/index.html?gi-language=rust"; + + // Add crates to the panel + const crates = CRATES_LIST; // This will be replaced by Python + const renames = CRATES_RENAMES; // This will be replaced by Python + + const rootDiv = document.querySelector('div[data-nav-ref="gi-extension-GStreamer-libs.html"]'); + if (!rootDiv) { + console.error('Root div not found'); + return; + } + // Now iterate first level panel bodies to make links point to rust + // crates + const firstLevelPanels = rootDiv.querySelectorAll(':scope > div.sidenav-panel-body'); + firstLevelPanels.forEach((panel, index) => { + if (index >= crates.length) { + panel.remove(); + return; + } + + const crate = crates[index]; + const link = panel.querySelector('a'); + + if (link) { + // Update href + link.setAttribute('href', `rust/stable/latest/docs/${crate}/index.html?gi-language=rust`); + + // Update text content + link.textContent = renames[crate] || + crate.replace("gstreamer", "") + .replace(/_/g, " ") + .trim() + .split(" ") + .map(word => word.charAt(0).toUpperCase() + word.slice(1)) + .join(" "); + + // Remove children of the library item + const navRef = link.getAttribute('data-nav-ref'); + if (navRef) { + const siblingDiv = rootDiv.querySelector(`div[data-nav-ref="${navRef}"]`); + if (siblingDiv) { + siblingDiv.remove(); + } + } + + // And now remove the glyphicons (arrows) as we removed the + // children + const linkContainer = link.closest('div'); + if (linkContainer) { + const glyphicons = linkContainer.querySelectorAll('.glyphicon'); + glyphicons.forEach(icon => icon.remove()); + } + + } + }); + } +} + +// Run when page loads and when URL changes +document.addEventListener('DOMContentLoaded', modifyLibsPanel); +window.addEventListener('popstate', modifyLibsPanel); +window.addEventListener('pushstate', modifyLibsPanel); +window.addEventListener('replacestate', modifyLibsPanel); + diff --git a/subprojects/gst-docs/scripts/assets/js/theme-sync.js b/subprojects/gst-docs/scripts/assets/js/theme-sync.js new file mode 100644 index 00000000000..c9fe57ff1ad --- /dev/null +++ b/subprojects/gst-docs/scripts/assets/js/theme-sync.js @@ -0,0 +1,34 @@ +function syncThemeWithHotdoc() { + // Get the current stylesheet + const currentStyle = document.querySelector('link[rel="stylesheet"][href*="frontend"]'); + if (!currentStyle) return; + + // Check if we're using dark theme in hotdoc + const isDark = getActiveStyleSheet() == 'dark'; + + // Use rustdoc's switchTheme function to set the theme + let newThemeName = isDark ? 'dark' : 'light'; + window.switchTheme(newThemeName, true); +} + +// Run on page load +document.addEventListener('DOMContentLoaded', () => { + localStorage.setItem("rustdoc-use-system-theme", false); + syncThemeWithHotdoc(); + + // Watch for theme changes in hotdoc + const theme_observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + if (mutation.type === 'attributes' && mutation.attributeName === 'disabled') { + syncThemeWithHotdoc(); + } + }); + }); + + // Start observing theme changes + const styleLink = document.querySelector('link[rel="stylesheet"][href*="frontend"]'); + if (styleLink) { + theme_observer.observe(styleLink, { attributes: true }); + } +}); + diff --git a/subprojects/gst-docs/scripts/generate_sitemap.py b/subprojects/gst-docs/scripts/generate_sitemap.py index cadf4d8c00d..d4663dbe206 100755 --- a/subprojects/gst-docs/scripts/generate_sitemap.py +++ b/subprojects/gst-docs/scripts/generate_sitemap.py @@ -1,23 +1,56 @@ #!/usr/bin/env python3 import os import sys - +from argparse import ArgumentParser +from pathlib import Path as P +import json if __name__ == "__main__": - in_, out, index_md = sys.argv[1], sys.argv[2], sys.argv[3] - with open(in_) as f: + parser = ArgumentParser() + parser.add_argument('--input-sitemap', type=P) + parser.add_argument('--output-sitemap', type=P) + parser.add_argument('--markdown-index', type=P) + parser.add_argument('--libs', type=str) + parser.add_argument('--plugins', type=str) + parser.add_argument('--plugin-configs', nargs='*', default=[]) + parser.add_argument('--lib-configs', nargs='*', default=[]) + + args = parser.parse_args() + in_ = args.input_sitemap + out = args.output_sitemap + index_md = args.markdown_index + plugins = args.plugins + plugin_configs = args.plugin_configs + lib_configs = args.lib_configs + + with open(in_) as f: index = f.read() - index = '\n'.join(l for l in index.splitlines()) + index = '\n'.join(line for line in index.splitlines()) + + if args.libs is None: + libs = [] + else: + libs = args.libs.split(os.pathsep) + for config in lib_configs: + with open(config) as f: + libs += json.load(f) + plugins = plugins.replace('\n', '').split(os.pathsep) + for config in plugin_configs: + with open(config) as f: + plugins += json.load(f) + plugins = sorted(plugins, key=lambda x: os.path.basename(x)) - if sys.argv[4]: - libs, plugins = sys.argv[4].split(os.pathsep), sorted( - sys.argv[5].replace('\n', '').split(os.pathsep), key=lambda x: os.path.basename(x)) + if libs: index += '\n\tlibs.md' for lib in libs: if not lib: continue - index += "\n\t\t" + lib + '.json' + name = lib + if not name.endswith('.json'): + name += '.json' + index += "\n\t\t" + name + if plugins: index += '\n\tgst-index' for plugin in plugins: if not plugin: diff --git a/subprojects/gst-docs/scripts/rust_doc_unifier.py b/subprojects/gst-docs/scripts/rust_doc_unifier.py new file mode 100755 index 00000000000..abb057ab845 --- /dev/null +++ b/subprojects/gst-docs/scripts/rust_doc_unifier.py @@ -0,0 +1,564 @@ +#!/usr/bin/env python3 + +import os +import sys +import json +import html +import shutil +from collections import OrderedDict +from pathlib import Path +from bs4 import BeautifulSoup +import zipfile +from urllib.request import urlretrieve +from multiprocessing import Pool, cpu_count, Manager +from functools import partial +import traceback +import gitlab + + +def get_documentation_artifact_url(project_name='gstreamer/gstreamer', + job_name='documentation', + branch='main') -> str: + """ + Returns the URL of the latest artifact from GitLab for the specified job. + + Args: + project_name (str): Name of the GitLab project + job_name (str): Name of the job + branch (str): Name of the git branch + """ + gl = gitlab.Gitlab("https://gitlab.freedesktop.org/") + project = gl.projects.get(project_name) + pipelines = project.pipelines.list(iterator=True) + for pipeline in pipelines: + if pipeline.ref != branch: + continue + + job, = [j for j in pipeline.jobs.list(iterator=True) + if j.name == job_name] + if job.status != "success": + continue + + return f"https://gitlab.freedesktop.org/{project_name}/-/jobs/{job.id}/artifacts/download" + + raise Exception("Could not find documentation artifact") + + +def get_relative_prefix(file_path, docs_root): + """ + Returns the relative path prefix for a given HTML file. + + Args: + file_path (Path): Path to the HTML file + docs_root (Path): Root directory of the documentation + """ + rel_path = os.path.relpath(docs_root, file_path.parent) + if rel_path == '.': + return './' + return '../' + '../' * rel_path.count(os.sep) + + +def fix_relative_urls(element, prefix): + """ + Fixes relative URLs in a hotdoc component to include the correct prefix. + + Args: + element: BeautifulSoup element containing hotdoc navigation or resources + prefix: Prefix to add to relative URLs + """ + # Fix href attributes + for tag in element.find_all(True, {'href': True}): + url = tag['href'] + if url.startswith(('http://', 'https://', 'mailto:', '#', 'javascript:')): + continue + + if url.endswith('/') or '.' not in url.split('/')[-1]: + if not url.endswith('index.html'): + url = url.rstrip('/') + '/index.html' + + if ".html" in url and '?gi-language=' not in url: + url += '?gi-language=rust' + + tag['href'] = prefix + url + + # Fix src attributes + for tag in element.find_all(True, {'src': True}): + url = tag['src'] + if not url.startswith(('http://', 'https://', 'data:', 'javascript:')): + if '?gi-language=' not in url: + url += '?gi-language=rust' + tag['src'] = prefix + url + + +def extract_hotdoc_resources(index_html_soup, prefix): + """ + Extracts required CSS and JS resources from the main hotdoc page. + Returns tuple of (css_links, js_scripts) + """ + head = index_html_soup.find('head') + + # Extract CSS links + css_links = [link for link in head.find_all('link') if 'enable_search.css' + not in link['href']] + + # Extract JS scripts + js_scripts = [] + for script in head.find_all('script'): + src = script.get('src', '') + if [unwanted for unwanted in ["trie_index.js", "prism-console-min.js", 'trie.js', 'language-menu.js'] if unwanted in src]: + continue + + if 'language_switching.js' in script['src']: + js_scripts.append(BeautifulSoup(' +''', 'html.parser')) + + js_scripts.append(script) + + return css_links, js_scripts + + +def extract_hotdoc_nav(index_html_soup): + """ + Extracts the navigation bar from the main GStreamer page. + Returns the navigation HTML. + """ + nav = index_html_soup.find('nav', class_='navbar') + + for tag in nav.find_all(True, {'href': True}): + url = tag['href'] + if "gstreamer/gi-index.html" in url: + tag['href'] = "rust/stable/latest/docs/gstreamer/index.html" + elif "libs.html" in url: + tag['href'] = "rust/stable/latest/docs/index.html" + + return nav + + +def get_hotdoc_components(docs_root, prefix): + """ + Reads the main GStreamer page and extracts required components. + + Returns tuple of (resources_html, nav_html) + """ + index_path = docs_root / "index.html" + with open(index_path, 'r', encoding='utf-8') as f: + content = f.read() + + soup = BeautifulSoup(content, 'html.parser') + + # Extract resources and navigation first + css_links, js_scripts = extract_hotdoc_resources(soup, prefix) + nav = extract_hotdoc_nav(soup) + if not css_links: + raise Exception("Failed to extract CSS links") + if not js_scripts: + raise Exception("Failed to extract JS scripts") + if not nav: + raise Exception("Failed to extract navigation") + + resources_soup = BeautifulSoup("
", 'html.parser') + assert resources_soup.div + for component in css_links + js_scripts: + resources_soup.div.append(component) + + # Fix URLs in the extracted components + fix_relative_urls(resources_soup, prefix) + fix_relative_urls(nav, prefix) + + # Build final HTML + resources_html = "\n".join(str(tag) for tag in resources_soup.div.contents) + resources_html += f'\n