forked from mirrors/gstreamer-rs
Compare commits
91 commits
Author | SHA1 | Date | |
---|---|---|---|
|
c1b6e1535d | ||
|
56f6b9e727 | ||
|
4ef15e5499 | ||
|
30a323e24c | ||
|
f459d0d5f1 | ||
|
6ab1632741 | ||
|
caadaab184 | ||
|
cebc7456ce | ||
|
4655fecbe9 | ||
|
fdd21b9a2a | ||
|
50cffb0f7a | ||
|
fb412d0cfb | ||
|
bad30dbbda | ||
|
57650dd0a2 | ||
|
abc39b8f08 | ||
|
d914967ce4 | ||
|
002958f0b4 | ||
|
ae51a2f49c | ||
|
26bfd5b98c | ||
|
4157bb6c16 | ||
|
409608a7fb | ||
|
18af63beac | ||
|
87dc92ff4a | ||
|
b7bfcb2094 | ||
|
b55d01bdc5 | ||
|
9cd670277b | ||
|
7fcccf6821 | ||
|
aa79e8603f | ||
|
6d30078c89 | ||
|
3e8ecf4806 | ||
|
7d8f95971c | ||
|
3bf946ed11 | ||
|
8c4ebdec1e | ||
|
5f63ee9912 | ||
|
ef3cd6fc37 | ||
|
249918b189 | ||
|
8bb3db2209 | ||
|
59dbed69ad | ||
|
fac1234351 | ||
|
629579c04d | ||
|
e6a0063165 | ||
|
787954eab9 | ||
|
5a28412fef | ||
|
b687b60144 | ||
|
dde1941722 | ||
|
6e2ad23e26 | ||
|
b32fc568da | ||
|
b7b29ee55a | ||
|
f5752546fd | ||
|
80cd448340 | ||
|
2b87e5f51d | ||
|
b4e8ace192 | ||
|
5d80372dd3 | ||
|
f65efb41e8 | ||
|
12c3a90661 | ||
|
68c2b19680 | ||
|
6b6fae51cd | ||
|
61e9f208f4 | ||
|
c754a95810 | ||
|
326167470a | ||
|
080f6a3906 | ||
|
09792ce90a | ||
|
730500b09f | ||
|
4cc6c0d19e | ||
|
3fef3a607f | ||
|
c68b68f37f | ||
|
a6253a1f77 | ||
|
fc21a2d9a3 | ||
|
c93ade0920 | ||
|
272022bdac | ||
|
c613697e8b | ||
|
a0887f197f | ||
|
2624e2a6d1 | ||
|
62fe400582 | ||
|
afc4581ff8 | ||
|
512f5b52fc | ||
|
cc34b34455 | ||
|
f69a2226be | ||
|
4e57412fa3 | ||
|
3f58306e3b | ||
|
4afd47a8a8 | ||
|
04c29d3b08 | ||
|
4e9ee99c88 | ||
|
7517a50834 | ||
|
af15dafc14 | ||
|
f95ca85a27 | ||
|
3643f3ea80 | ||
|
7e7d74af1e | ||
|
f266e6cefc | ||
|
9511b19c0a | ||
|
2f69fe81f2 |
176 changed files with 8690 additions and 1487 deletions
|
@ -285,7 +285,7 @@ clippy:
|
||||||
done
|
done
|
||||||
# And also run over all the examples/tutorials
|
# And also run over all the examples/tutorials
|
||||||
- |
|
- |
|
||||||
cargo clippy --color=always --manifest-path examples/Cargo.toml --all-targets --all-features -- -A clippy::redundant_pattern_matching -A clippy::single_match -A clippy::cast_lossless -A clippy::missing_safety_doc -D warnings
|
cargo clippy --color=always --manifest-path examples/Cargo.toml --all-targets --all-features -- -A clippy::redundant_pattern_matching -A clippy::single_match -A clippy::cast_lossless -A clippy::missing_safety_doc -D warnings -A unused-imports
|
||||||
cargo clippy --color=always --manifest-path tutorials/Cargo.toml --all-targets --all-features -- -A clippy::redundant_pattern_matching -A clippy::single_match -A clippy::cast_lossless -A clippy::missing_safety_doc -D warnings
|
cargo clippy --color=always --manifest-path tutorials/Cargo.toml --all-targets --all-features -- -A clippy::redundant_pattern_matching -A clippy::single_match -A clippy::cast_lossless -A clippy::missing_safety_doc -D warnings
|
||||||
|
|
||||||
deny:
|
deny:
|
||||||
|
@ -300,8 +300,8 @@ gir-checks:
|
||||||
extends: .img-stable
|
extends: .img-stable
|
||||||
stage: 'extras'
|
stage: 'extras'
|
||||||
script:
|
script:
|
||||||
- git clone --depth 1 https://github.com/gtk-rs/checker
|
- git clone https://github.com/gtk-rs/checker
|
||||||
- cd checker && echo '[workspace]' >> Cargo.toml
|
- cd checker && git reset --hard df3ac62ae7f9876dc34a62b71f3a5427e4a4956d && echo '[workspace]' >> Cargo.toml
|
||||||
- cargo build --release
|
- cargo build --release
|
||||||
- |
|
- |
|
||||||
cargo run --release -- \
|
cargo run --release -- \
|
||||||
|
@ -337,18 +337,22 @@ outdated:
|
||||||
script:
|
script:
|
||||||
- cargo outdated --root-deps-only --exit-code 1 -v
|
- cargo outdated --root-deps-only --exit-code 1 -v
|
||||||
|
|
||||||
pages:
|
docs:
|
||||||
extends: .img-stable
|
extends: .img-nightly
|
||||||
stage: 'deploy'
|
stage: 'deploy'
|
||||||
script:
|
script:
|
||||||
|
- curl --proto '=https' --tlsv1.2 -sSf -o gir-rustdoc.py
|
||||||
|
https://gitlab.gnome.org/World/Rust/gir-rustdoc/-/raw/main/gir-rustdoc.py
|
||||||
|
- chmod +x gir-rustdoc.py
|
||||||
- |
|
- |
|
||||||
|
eval $(./gir-rustdoc.py pre-docs)
|
||||||
for crate in gstreamer*; do
|
for crate in gstreamer*; do
|
||||||
cd $crate
|
cd $crate
|
||||||
cargo doc --features --features=dox,embed-lgpl-docs
|
cargo doc --features --features=dox,embed-lgpl-docs --no-deps
|
||||||
cd ..
|
cd ..
|
||||||
done
|
done
|
||||||
- mv target/doc public/
|
- rm -rf docs/
|
||||||
when: 'manual'
|
- mv target/doc docs/
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- 'public'
|
- 'docs'
|
||||||
|
|
|
@ -18,6 +18,9 @@ external_libraries = [
|
||||||
]
|
]
|
||||||
|
|
||||||
generate = [
|
generate = [
|
||||||
|
"GstAudio.AudioDitherMethod",
|
||||||
|
"GstAudio.AudioNoiseShapingMethod",
|
||||||
|
"GstAudio.AudioResamplerMethod",
|
||||||
"GstAudio.AudioFormatFlags",
|
"GstAudio.AudioFormatFlags",
|
||||||
"GstAudio.AudioLayout",
|
"GstAudio.AudioLayout",
|
||||||
"GstAudio.AudioChannelPosition",
|
"GstAudio.AudioChannelPosition",
|
||||||
|
|
|
@ -170,6 +170,11 @@ manual_traits = ["BaseSrcExtManual"]
|
||||||
# Use Result
|
# Use Result
|
||||||
ignore = true
|
ignore = true
|
||||||
|
|
||||||
|
[[object.function]]
|
||||||
|
name = "new_segment"
|
||||||
|
# Segment parameter
|
||||||
|
ignore = true
|
||||||
|
|
||||||
[[object]]
|
[[object]]
|
||||||
name = "GstBase.BaseTransform"
|
name = "GstBase.BaseTransform"
|
||||||
status = "generate"
|
status = "generate"
|
||||||
|
@ -191,6 +196,16 @@ manual_traits = ["AggregatorExtManual"]
|
||||||
# Takes ownership
|
# Takes ownership
|
||||||
ignore = true
|
ignore = true
|
||||||
|
|
||||||
|
[[object.function]]
|
||||||
|
name = "finish_buffer_list"
|
||||||
|
# Takes ownership
|
||||||
|
ignore = true
|
||||||
|
|
||||||
|
[[object.function]]
|
||||||
|
name = "selected_samples"
|
||||||
|
# Info parameter
|
||||||
|
ignore = true
|
||||||
|
|
||||||
[[object.property]]
|
[[object.property]]
|
||||||
name = "latency"
|
name = "latency"
|
||||||
version = "1.14"
|
version = "1.14"
|
||||||
|
|
|
@ -45,6 +45,10 @@ generate = [
|
||||||
"GES.Group",
|
"GES.Group",
|
||||||
"GES.UriClipAsset",
|
"GES.UriClipAsset",
|
||||||
"GES.UriSourceAsset",
|
"GES.UriSourceAsset",
|
||||||
|
"GES.OperationClip",
|
||||||
|
"GES.TransitionClip",
|
||||||
|
"GES.BaseTransitionClip",
|
||||||
|
"GES.VideoStandardTransitionType",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[object]]
|
[[object]]
|
||||||
|
|
|
@ -20,7 +20,6 @@ external_libraries = [
|
||||||
generate = [
|
generate = [
|
||||||
"GstVideo.VideoCodecFrameFlags",
|
"GstVideo.VideoCodecFrameFlags",
|
||||||
"GstVideo.VideoFormatFlags",
|
"GstVideo.VideoFormatFlags",
|
||||||
"GstVideo.VideoTileMode",
|
|
||||||
"GstVideo.VideoColorMatrix",
|
"GstVideo.VideoColorMatrix",
|
||||||
"GstVideo.VideoMultiviewMode",
|
"GstVideo.VideoMultiviewMode",
|
||||||
"GstVideo.VideoFieldOrder",
|
"GstVideo.VideoFieldOrder",
|
||||||
|
@ -383,6 +382,14 @@ status = "generate"
|
||||||
name = "y412_le"
|
name = "y412_le"
|
||||||
version = "1.18"
|
version = "1.18"
|
||||||
|
|
||||||
|
[[object.member]]
|
||||||
|
name = "nv12_4l4"
|
||||||
|
version = "1.18"
|
||||||
|
|
||||||
|
[[object.member]]
|
||||||
|
name = "nv12_32l32"
|
||||||
|
version = "1.18"
|
||||||
|
|
||||||
[[object]]
|
[[object]]
|
||||||
name = "GstVideo.VideoSink"
|
name = "GstVideo.VideoSink"
|
||||||
status = "generate"
|
status = "generate"
|
||||||
|
@ -492,6 +499,9 @@ status = "generate"
|
||||||
[[object.member]]
|
[[object.member]]
|
||||||
name = "arib_std_b67"
|
name = "arib_std_b67"
|
||||||
version = "1.18"
|
version = "1.18"
|
||||||
|
[[object.member]]
|
||||||
|
name = "bt601"
|
||||||
|
version = "1.18"
|
||||||
|
|
||||||
[[object]]
|
[[object]]
|
||||||
name = "GstVideo.VideoColorPrimaries"
|
name = "GstVideo.VideoColorPrimaries"
|
||||||
|
@ -508,3 +518,10 @@ status = "generate"
|
||||||
[[object.member]]
|
[[object.member]]
|
||||||
name = "ebu3213"
|
name = "ebu3213"
|
||||||
version = "1.16"
|
version = "1.16"
|
||||||
|
|
||||||
|
[[object]]
|
||||||
|
name = "GstVideo.VideoTileMode"
|
||||||
|
status = "generate"
|
||||||
|
[[object.member]]
|
||||||
|
name = "linear"
|
||||||
|
version = "1.18"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# gstreamer-rs [![crates.io](https://img.shields.io/crates/v/gstreamer.svg)](https://crates.io/crates/gstreamer) [![pipeline status](https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/badges/master/pipeline.svg)](https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/commits/master)
|
# gstreamer-rs [![crates.io](https://img.shields.io/crates/v/gstreamer.svg)](https://crates.io/crates/gstreamer) [![pipeline status](https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/badges/master/pipeline.svg)](https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/commits/master)
|
||||||
|
|
||||||
[GStreamer](https://gstreamer.freedesktop.org/) bindings for Rust.
|
[GStreamer](https://gstreamer.freedesktop.org/) bindings for Rust.
|
||||||
Documentation can be found [here](https://slomo.pages.freedesktop.org/rustdocs/gstreamer/gstreamer/).
|
Documentation can be found [here](https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer/index.html).
|
||||||
|
|
||||||
These bindings are providing a safe API that can be used to interface with
|
These bindings are providing a safe API that can be used to interface with
|
||||||
GStreamer, e.g. for writing GStreamer-based applications and GStreamer plugins.
|
GStreamer, e.g. for writing GStreamer-based applications and GStreamer plugins.
|
||||||
|
@ -140,7 +140,7 @@ $ export PKG_CONFIG_PATH="c:\\gstreamer\\1.0\\x86_64\\lib\\pkgconfig${PKG_CONFIG
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
The API reference can be found
|
The API reference can be found
|
||||||
[here](https://slomo.pages.freedesktop.org/rustdocs/gstreamer/gstreamer/), however it is
|
[here](https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer/index.html), however it is
|
||||||
only the Rust API reference and does not explain any of the concepts.
|
only the Rust API reference and does not explain any of the concepts.
|
||||||
|
|
||||||
For getting started with GStreamer development, the best would be to follow
|
For getting started with GStreamer development, the best would be to follow
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
variables:
|
variables:
|
||||||
GST_RS_IMG_TAG: '2020-07-05.0'
|
GST_RS_IMG_TAG: '2020-09-08.0-0.16'
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
pip3 install meson==0.54.3
|
set -e
|
||||||
|
|
||||||
|
pip3 install meson==0.55.1
|
||||||
|
|
||||||
git clone --depth 1 https://gitlab.freedesktop.org/gstreamer/gst-build.git --branch master
|
git clone --depth 1 https://gitlab.freedesktop.org/gstreamer/gst-build.git --branch master
|
||||||
cd gst-build
|
cd gst-build
|
||||||
|
|
|
@ -1,10 +1,16 @@
|
||||||
source ./ci/env.sh
|
source ./ci/env.sh
|
||||||
|
|
||||||
|
set -e
|
||||||
export CARGO_HOME='/usr/local/cargo'
|
export CARGO_HOME='/usr/local/cargo'
|
||||||
|
|
||||||
RUSTUP_VERSION=1.21.1
|
RUSTUP_VERSION=1.21.1
|
||||||
RUST_VERSION=$1
|
RUST_VERSION=$1
|
||||||
RUST_ARCH="x86_64-unknown-linux-gnu"
|
RUST_ARCH="x86_64-unknown-linux-gnu"
|
||||||
|
|
||||||
|
if [ "$RUST_VERSION" = "stable" ]; then
|
||||||
|
RUST_VERSION="1.44.1"
|
||||||
|
fi
|
||||||
|
|
||||||
RUSTUP_URL=https://static.rust-lang.org/rustup/archive/$RUSTUP_VERSION/$RUST_ARCH/rustup-init
|
RUSTUP_URL=https://static.rust-lang.org/rustup/archive/$RUSTUP_VERSION/$RUST_ARCH/rustup-init
|
||||||
wget $RUSTUP_URL
|
wget $RUSTUP_URL
|
||||||
|
|
||||||
|
@ -17,9 +23,9 @@ rustup --version
|
||||||
cargo --version
|
cargo --version
|
||||||
rustc --version
|
rustc --version
|
||||||
|
|
||||||
if [ "$RUST_VERSION" = "stable" ]; then
|
if [ "$RUST_VERSION" = "1.44.1" ]; then
|
||||||
rustup component add clippy-preview
|
rustup component add clippy-preview --toolchain $RUST_VERSION
|
||||||
rustup component add rustfmt
|
rustup component add rustfmt --toolchain $RUST_VERSION
|
||||||
cargo install --force cargo-deny
|
cargo install --force cargo-deny
|
||||||
cargo install --force --git https://github.com/kbknapp/cargo-outdated
|
cargo install --force cargo-outdated
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "gstreamer-rs-lgpl-docs"
|
name = "gstreamer-rs-lgpl-docs"
|
||||||
version = "0.16.0"
|
version = "0.16.1"
|
||||||
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
||||||
license = "LGPL-2.0"
|
license = "LGPL-2.0"
|
||||||
description = "LGPL-licensed docs for gstreamer-rs crates"
|
description = "LGPL-licensed docs for gstreamer-rs crates"
|
||||||
|
|
|
@ -619,6 +619,18 @@ handler with `GST_PAD_SET_ACCEPT_INTERSECT` and
|
||||||
`GST_PAD_SET_ACCEPT_TEMPLATE`
|
`GST_PAD_SET_ACCEPT_TEMPLATE`
|
||||||
## `use_`
|
## `use_`
|
||||||
if the default pad accept-caps query handling should be used
|
if the default pad accept-caps query handling should be used
|
||||||
|
<!-- trait AudioDecoderExt::fn get_property_max_errors -->
|
||||||
|
Maximum number of tolerated consecutive decode errors. See
|
||||||
|
`AudioDecoderExt::set_max_errors` for more details.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
|
<!-- trait AudioDecoderExt::fn set_property_max_errors -->
|
||||||
|
Maximum number of tolerated consecutive decode errors. See
|
||||||
|
`AudioDecoderExt::set_max_errors` for more details.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
<!-- struct AudioEncoder -->
|
<!-- struct AudioEncoder -->
|
||||||
This base class is for audio encoders turning raw audio samples into
|
This base class is for audio encoders turning raw audio samples into
|
||||||
encoded audio data.
|
encoded audio data.
|
||||||
|
@ -969,6 +981,13 @@ Configures encoder audio jitter tolerance threshold.
|
||||||
MT safe.
|
MT safe.
|
||||||
## `tolerance`
|
## `tolerance`
|
||||||
new tolerance
|
new tolerance
|
||||||
|
<!-- struct AudioFlags -->
|
||||||
|
Extra audio flags
|
||||||
|
<!-- struct AudioFlags::const NONE -->
|
||||||
|
no valid flag
|
||||||
|
<!-- struct AudioFlags::const UNPOSITIONED -->
|
||||||
|
the position array explicitly
|
||||||
|
contains unpositioned channels.
|
||||||
<!-- enum AudioFormat -->
|
<!-- enum AudioFormat -->
|
||||||
Enum value describing the most common audio formats.
|
Enum value describing the most common audio formats.
|
||||||
<!-- enum AudioFormat::variant Unknown -->
|
<!-- enum AudioFormat::variant Unknown -->
|
||||||
|
@ -1063,6 +1082,19 @@ encoded audio format
|
||||||
32-bit floating point samples, native endianness
|
32-bit floating point samples, native endianness
|
||||||
<!-- enum AudioFormat::variant F64 -->
|
<!-- enum AudioFormat::variant F64 -->
|
||||||
64-bit floating point samples, native endianness
|
64-bit floating point samples, native endianness
|
||||||
|
<!-- struct AudioFormatFlags -->
|
||||||
|
The different audio flags that a format info can have.
|
||||||
|
<!-- struct AudioFormatFlags::const INTEGER -->
|
||||||
|
integer samples
|
||||||
|
<!-- struct AudioFormatFlags::const FLOAT -->
|
||||||
|
float samples
|
||||||
|
<!-- struct AudioFormatFlags::const SIGNED -->
|
||||||
|
signed samples
|
||||||
|
<!-- struct AudioFormatFlags::const COMPLEX -->
|
||||||
|
complex layout
|
||||||
|
<!-- struct AudioFormatFlags::const UNPACK -->
|
||||||
|
the format can be used in
|
||||||
|
`GstAudioFormatUnpack` and `GstAudioFormatPack` functions
|
||||||
<!-- struct AudioInfo -->
|
<!-- struct AudioInfo -->
|
||||||
Information describing audio properties. This information can be filled
|
Information describing audio properties. This information can be filled
|
||||||
in from GstCaps with `AudioInfo::from_caps`.
|
in from GstCaps with `AudioInfo::from_caps`.
|
||||||
|
@ -1144,6 +1176,16 @@ Layout of the audio samples for the different channels.
|
||||||
interleaved audio
|
interleaved audio
|
||||||
<!-- enum AudioLayout::variant NonInterleaved -->
|
<!-- enum AudioLayout::variant NonInterleaved -->
|
||||||
non-interleaved audio
|
non-interleaved audio
|
||||||
|
<!-- struct AudioPackFlags -->
|
||||||
|
The different flags that can be used when packing and unpacking.
|
||||||
|
<!-- struct AudioPackFlags::const NONE -->
|
||||||
|
No flag
|
||||||
|
<!-- struct AudioPackFlags::const TRUNCATE_RANGE -->
|
||||||
|
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.
|
||||||
<!-- enum AudioRingBufferFormatType -->
|
<!-- enum AudioRingBufferFormatType -->
|
||||||
The format of the samples in the ringbuffer.
|
The format of the samples in the ringbuffer.
|
||||||
<!-- enum AudioRingBufferFormatType::variant Raw -->
|
<!-- enum AudioRingBufferFormatType::variant Raw -->
|
||||||
|
|
|
@ -156,6 +156,20 @@ the number of bytes to copy
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
A new `glib::Bytes` structure containing the copied data.
|
A new `glib::Bytes` structure containing the copied data.
|
||||||
|
<!-- impl Adapter::fn distance_from_discont -->
|
||||||
|
Get the distance in bytes since the last buffer with the
|
||||||
|
`gst::BufferFlags::Discont` flag.
|
||||||
|
|
||||||
|
The distance will be reset to 0 for all buffers with
|
||||||
|
`gst::BufferFlags::Discont` on them, and then calculated for all other
|
||||||
|
following buffers based on their size.
|
||||||
|
|
||||||
|
Feature: `v1_10`
|
||||||
|
|
||||||
|
|
||||||
|
# Returns
|
||||||
|
|
||||||
|
The offset. Can be `GST_BUFFER_OFFSET_NONE`.
|
||||||
<!-- impl Adapter::fn dts_at_discont -->
|
<!-- impl Adapter::fn dts_at_discont -->
|
||||||
Get the DTS that was on the last buffer with the GST_BUFFER_FLAG_DISCONT
|
Get the DTS that was on the last buffer with the GST_BUFFER_FLAG_DISCONT
|
||||||
flag, or GST_CLOCK_TIME_NONE.
|
flag, or GST_CLOCK_TIME_NONE.
|
||||||
|
@ -790,6 +804,18 @@ Enables the emission of signals such as `AggregatorPad::buffer-consumed`
|
||||||
|
|
||||||
Feature: `v1_16`
|
Feature: `v1_16`
|
||||||
|
|
||||||
|
<!-- enum AggregatorStartTimeSelection -->
|
||||||
|
<!-- enum AggregatorStartTimeSelection::variant Zero -->
|
||||||
|
Start at running time 0.
|
||||||
|
<!-- enum AggregatorStartTimeSelection::variant First -->
|
||||||
|
Start at the running time of
|
||||||
|
the first buffer that is received.
|
||||||
|
<!-- enum AggregatorStartTimeSelection::variant Set -->
|
||||||
|
Start at the running time
|
||||||
|
selected by the `start-time` property.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
<!-- struct BaseParse -->
|
<!-- struct BaseParse -->
|
||||||
This base class is for parser elements that process data and splits it
|
This base class is for parser elements that process data and splits it
|
||||||
into separate audio/video/whatever frames.
|
into separate audio/video/whatever frames.
|
||||||
|
@ -1157,6 +1183,9 @@ a newly-allocated `BaseParseFrame`. Free with
|
||||||
<!-- impl BaseParseFrame::fn copy -->
|
<!-- impl BaseParseFrame::fn copy -->
|
||||||
Copies a `BaseParseFrame`.
|
Copies a `BaseParseFrame`.
|
||||||
|
|
||||||
|
Feature: `v1_12_1`
|
||||||
|
|
||||||
|
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
A copy of `self`
|
A copy of `self`
|
||||||
|
@ -1168,6 +1197,30 @@ all public fields are zero-ed and a private flag is set to make
|
||||||
sure `BaseParseFrame::free` only frees the contents but not
|
sure `BaseParseFrame::free` only frees the contents but not
|
||||||
the actual frame. Use this function to initialise a `BaseParseFrame`
|
the actual frame. Use this function to initialise a `BaseParseFrame`
|
||||||
allocated on the stack.
|
allocated on the stack.
|
||||||
|
<!-- struct BaseParseFrameFlags -->
|
||||||
|
Flags to be used in a `BaseParseFrame`.
|
||||||
|
<!-- struct BaseParseFrameFlags::const NONE -->
|
||||||
|
no flag
|
||||||
|
<!-- struct BaseParseFrameFlags::const NEW_FRAME -->
|
||||||
|
set by baseclass if current frame
|
||||||
|
is passed for processing to the subclass for the first time
|
||||||
|
(and not set on subsequent calls with same data).
|
||||||
|
<!-- struct BaseParseFrameFlags::const NO_FRAME -->
|
||||||
|
set to indicate this buffer should not be
|
||||||
|
counted as frame, e.g. if this frame is dependent on a previous one.
|
||||||
|
As it is not counted as a frame, bitrate increases but frame to time
|
||||||
|
conversions are maintained.
|
||||||
|
<!-- struct BaseParseFrameFlags::const CLIP -->
|
||||||
|
`pre_push_frame` can set this to indicate
|
||||||
|
that regular segment clipping can still be performed (as opposed to
|
||||||
|
any custom one having been done).
|
||||||
|
<!-- struct BaseParseFrameFlags::const DROP -->
|
||||||
|
indicates to `finish_frame` that the
|
||||||
|
the frame should be dropped (and might be handled internally by subclass)
|
||||||
|
<!-- struct BaseParseFrameFlags::const QUEUE -->
|
||||||
|
indicates to `finish_frame` that the
|
||||||
|
the frame should be queued for now and processed fully later
|
||||||
|
when the first non-queued frame is finished
|
||||||
<!-- struct BaseSink -->
|
<!-- struct BaseSink -->
|
||||||
`BaseSink` is the base class for sink elements in GStreamer, such as
|
`BaseSink` is the base class for sink elements in GStreamer, such as
|
||||||
xvimagesink or filesink. It is a layer on top of `gst::Element` that provides a
|
xvimagesink or filesink. It is a layer on top of `gst::Element` that provides a
|
||||||
|
|
|
@ -187,8 +187,7 @@ call `glib::MainContext::push_thread_default` in a new thread before
|
||||||
calling `ges_init`.
|
calling `ges_init`.
|
||||||
|
|
||||||
Example of an asynchronous asset request:
|
Example of an asynchronous asset request:
|
||||||
|
``` c
|
||||||
```text
|
|
||||||
// The request callback
|
// The request callback
|
||||||
static void
|
static void
|
||||||
asset_loaded_cb (GESAsset * source, GAsyncResult * res, gpointer user_data)
|
asset_loaded_cb (GESAsset * source, GAsyncResult * res, gpointer user_data)
|
||||||
|
@ -198,14 +197,14 @@ asset_loaded_cb (GESAsset * source, GAsyncResult * res, gpointer user_data)
|
||||||
|
|
||||||
asset = ges_asset_request_finish (res, &error);
|
asset = ges_asset_request_finish (res, &error);
|
||||||
if (asset) {
|
if (asset) {
|
||||||
g_print ("The file: %s is usable as a FileSource",
|
g_print ("The file: %s is usable as a GESUriClip",
|
||||||
ges_asset_get_id (asset));
|
ges_asset_get_id (asset));
|
||||||
} else {
|
} else {
|
||||||
g_print ("The file: %s is *not* usable as a FileSource because: %s",
|
g_print ("The file: %s is *not* usable as a GESUriClip because: %s",
|
||||||
ges_asset_get_id (source), error->message);
|
ges_asset_get_id (source), error->message);
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_object_unref (mfs);
|
gst_object_unref (asset);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The request:
|
// The request:
|
||||||
|
@ -504,6 +503,12 @@ Method to call to destroy
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
`true` if the translation functions were set.
|
`true` if the translation functions were set.
|
||||||
|
<!-- struct BaseTransitionClip -->
|
||||||
|
|
||||||
|
|
||||||
|
# Implements
|
||||||
|
|
||||||
|
[`OperationClipExt`](trait.OperationClipExt.html), [`ClipExt`](trait.ClipExt.html), [`GESContainerExt`](trait.GESContainerExt.html), [`TimelineElementExt`](trait.TimelineElementExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html), [`TimelineElementExtManual`](prelude/trait.TimelineElementExtManual.html)
|
||||||
<!-- struct Clip -->
|
<!-- struct Clip -->
|
||||||
`Clip`-s are the core objects of a `Layer`. Each clip may exist in
|
`Clip`-s are the core objects of a `Layer`. Each clip may exist in
|
||||||
a single layer but may control several `TrackElement`-s that span
|
a single layer but may control several `TrackElement`-s that span
|
||||||
|
@ -691,7 +696,7 @@ Trait containing all `Clip` methods.
|
||||||
|
|
||||||
# Implementors
|
# Implementors
|
||||||
|
|
||||||
[`Clip`](struct.Clip.html)
|
[`Clip`](struct.Clip.html), [`OperationClip`](struct.OperationClip.html)
|
||||||
<!-- trait ClipExt::fn add_asset -->
|
<!-- trait ClipExt::fn add_asset -->
|
||||||
Extracts a `TrackElement` from an asset and adds it to the clip.
|
Extracts a `TrackElement` from an asset and adds it to the clip.
|
||||||
This can be used to add effects that derive from the asset to the
|
This can be used to add effects that derive from the asset to the
|
||||||
|
@ -728,6 +733,9 @@ This method can also fail if the adding the track element to the track
|
||||||
would break a configuration rule of the corresponding `Timeline`,
|
would break a configuration rule of the corresponding `Timeline`,
|
||||||
such as causing three sources to overlap at a single time, or causing
|
such as causing three sources to overlap at a single time, or causing
|
||||||
a source to completely overlap another in the same track.
|
a source to completely overlap another in the same track.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
## `child`
|
## `child`
|
||||||
A child of `self`
|
A child of `self`
|
||||||
## `track`
|
## `track`
|
||||||
|
@ -935,6 +943,9 @@ using this position to trim the end of a clip.
|
||||||
See `ClipExt::get_internal_time_from_timeline_time`, which performs the
|
See `ClipExt::get_internal_time_from_timeline_time`, which performs the
|
||||||
reverse, or `ClipExt::get_timeline_time_from_source_frame` which does
|
reverse, or `ClipExt::get_timeline_time_from_source_frame` which does
|
||||||
the same conversion, but using frame numbers.
|
the same conversion, but using frame numbers.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
## `child`
|
## `child`
|
||||||
An `TrackElement:active` child of `self` with a
|
An `TrackElement:active` child of `self` with a
|
||||||
`TrackElement:track`
|
`TrackElement:track`
|
||||||
|
@ -1122,6 +1133,9 @@ If the duration-limit would ever go below the current
|
||||||
`TimelineElement:duration` of the clip due to a change in the above
|
`TimelineElement:duration` of the clip due to a change in the above
|
||||||
variables, its `TimelineElement:duration` will be set to the new
|
variables, its `TimelineElement:duration` will be set to the new
|
||||||
limit.
|
limit.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
<!-- trait ClipExt::fn get_property_layer -->
|
<!-- trait ClipExt::fn get_property_layer -->
|
||||||
The layer this clip lies in.
|
The layer this clip lies in.
|
||||||
|
|
||||||
|
@ -1437,9 +1451,14 @@ The element is edited in slide mode (not yet
|
||||||
(`Edge::Start` and `Edge::End`) is not defined. The element can
|
(`Edge::Start` and `Edge::End`) is not defined. The element can
|
||||||
not shift layers under this mode.
|
not shift layers under this mode.
|
||||||
<!-- struct Effect -->
|
<!-- struct Effect -->
|
||||||
Currently we only support effects with 1 sinkpad and 1 sourcepad
|
Currently we only support effects with N sinkpads and one single srcpad.
|
||||||
with the exception of `gesaudiomixer` and `gescompositor` which
|
Apart from `gesaudiomixer` and `gescompositor` which can be used as effects
|
||||||
can be used as effects.
|
and where sinkpads will be requested as needed based on the timeline topology
|
||||||
|
GES will always request at most one sinkpad per effect (when required).
|
||||||
|
|
||||||
|
> Note: GES always adds converters (`audioconvert ! audioresample !
|
||||||
|
> audioconvert` for audio effects and `videoconvert` for video effects) to
|
||||||
|
> make it simpler for end users.
|
||||||
|
|
||||||
# Implements
|
# Implements
|
||||||
|
|
||||||
|
@ -1500,7 +1519,7 @@ Trait containing all `Extractable` methods.
|
||||||
|
|
||||||
# Implementors
|
# Implementors
|
||||||
|
|
||||||
[`BaseEffect`](struct.BaseEffect.html), [`Clip`](struct.Clip.html), [`Container`](struct.Container.html), [`Effect`](struct.Effect.html), [`Extractable`](struct.Extractable.html), [`Group`](struct.Group.html), [`Layer`](struct.Layer.html), [`TimelineElement`](struct.TimelineElement.html), [`Timeline`](struct.Timeline.html), [`TrackElement`](struct.TrackElement.html), [`UriClip`](struct.UriClip.html)
|
[`BaseEffect`](struct.BaseEffect.html), [`BaseTransitionClip`](struct.BaseTransitionClip.html), [`Clip`](struct.Clip.html), [`Container`](struct.Container.html), [`Effect`](struct.Effect.html), [`Extractable`](struct.Extractable.html), [`Group`](struct.Group.html), [`Layer`](struct.Layer.html), [`OperationClip`](struct.OperationClip.html), [`TimelineElement`](struct.TimelineElement.html), [`Timeline`](struct.Timeline.html), [`TrackElement`](struct.TrackElement.html), [`TransitionClip`](struct.TransitionClip.html), [`UriClip`](struct.UriClip.html)
|
||||||
<!-- trait ExtractableExt::fn get_asset -->
|
<!-- trait ExtractableExt::fn get_asset -->
|
||||||
Get the asset that has been set on the extractable object.
|
Get the asset that has been set on the extractable object.
|
||||||
|
|
||||||
|
@ -1742,6 +1761,9 @@ if `self` refused to add `clip`.
|
||||||
<!-- trait LayerExt::fn get_active_for_track -->
|
<!-- trait LayerExt::fn get_active_for_track -->
|
||||||
Gets whether the layer is active for the given track. See
|
Gets whether the layer is active for the given track. See
|
||||||
`LayerExt::set_active_for_tracks`.
|
`LayerExt::set_active_for_tracks`.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
## `track`
|
## `track`
|
||||||
The `Track` to check if `self` is currently active for
|
The `Track` to check if `self` is currently active for
|
||||||
|
|
||||||
|
@ -1823,6 +1845,9 @@ active in the track, regardless of their individual
|
||||||
|
|
||||||
Note that by default a layer will be active for all of its
|
Note that by default a layer will be active for all of its
|
||||||
timeline's tracks.
|
timeline's tracks.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
## `active`
|
## `active`
|
||||||
Whether elements in `tracks` should be active or not
|
Whether elements in `tracks` should be active or not
|
||||||
## `tracks`
|
## `tracks`
|
||||||
|
@ -1856,6 +1881,9 @@ The priority to set
|
||||||
<!-- trait LayerExt::fn connect_active_changed -->
|
<!-- trait LayerExt::fn connect_active_changed -->
|
||||||
Will be emitted whenever the layer is activated or deactivated
|
Will be emitted whenever the layer is activated or deactivated
|
||||||
for some `Track`. See `LayerExt::set_active_for_tracks`.
|
for some `Track`. See `LayerExt::set_active_for_tracks`.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
## `active`
|
## `active`
|
||||||
Whether `layer` has been made active or de-active in the `tracks`
|
Whether `layer` has been made active or de-active in the `tracks`
|
||||||
## `tracks`
|
## `tracks`
|
||||||
|
@ -1913,6 +1941,12 @@ for the change to be taken into account.
|
||||||
use `TimelineExt::move_layer` instead. This deprecation means
|
use `TimelineExt::move_layer` instead. This deprecation means
|
||||||
that you will not need to handle layer priorities at all yourself, GES
|
that you will not need to handle layer priorities at all yourself, GES
|
||||||
will make sure there is never 'gaps' between layer priorities.
|
will make sure there is never 'gaps' between layer priorities.
|
||||||
|
<!-- struct OperationClip -->
|
||||||
|
Operations are any kind of object that both outputs AND consumes data.
|
||||||
|
|
||||||
|
# Implements
|
||||||
|
|
||||||
|
[`ClipExt`](trait.ClipExt.html), [`GESContainerExt`](trait.GESContainerExt.html), [`TimelineElementExt`](trait.TimelineElementExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html), [`TimelineElementExtManual`](prelude/trait.TimelineElementExtManual.html)
|
||||||
<!-- struct Pipeline -->
|
<!-- struct Pipeline -->
|
||||||
A `Pipeline` can take an audio-video `Timeline` and conveniently
|
A `Pipeline` can take an audio-video `Timeline` and conveniently
|
||||||
link its `Track`-s to an internal `playsink` element, for
|
link its `Track`-s to an internal `playsink` element, for
|
||||||
|
@ -2022,9 +2056,14 @@ to `location` using the given `format`, `height` and `width`.
|
||||||
<!-- trait GESPipelineExt::fn set_mode -->
|
<!-- trait GESPipelineExt::fn set_mode -->
|
||||||
Sets the `Pipeline:mode` of the pipeline.
|
Sets the `Pipeline:mode` of the pipeline.
|
||||||
|
|
||||||
Note that the pipeline will be set to `gst::State::Null` during this call
|
Note that the pipeline will be set to `gst::State::Null` during this call to
|
||||||
to perform the necessary changes. You will need to set the state again
|
perform the necessary changes. You will need to set the state again yourself
|
||||||
yourself after calling this.
|
after calling this.
|
||||||
|
|
||||||
|
> **NOTE**: [Rendering settings](ges_pipeline_set_render_settings) need to be
|
||||||
|
> set before setting `mode` to `PipelineFlags::Render` or
|
||||||
|
> `PipelineFlags::SmartRender`, the call to this method will fail
|
||||||
|
> otherwise.
|
||||||
## `mode`
|
## `mode`
|
||||||
The mode to set for `self`
|
The mode to set for `self`
|
||||||
|
|
||||||
|
@ -2032,7 +2071,7 @@ The mode to set for `self`
|
||||||
|
|
||||||
`true` if the mode of `self` was successfully set to `mode`.
|
`true` if the mode of `self` was successfully set to `mode`.
|
||||||
<!-- trait GESPipelineExt::fn set_render_settings -->
|
<!-- trait GESPipelineExt::fn set_render_settings -->
|
||||||
Specifies the encoding to be used by the pipeline to render its
|
Specifies encoding setting to be used by the pipeline to render its
|
||||||
`Pipeline:timeline`, and where the result should be written to.
|
`Pipeline:timeline`, and where the result should be written to.
|
||||||
|
|
||||||
This method **must** be called before setting the pipeline mode to
|
This method **must** be called before setting the pipeline mode to
|
||||||
|
@ -2109,6 +2148,27 @@ The video sink used for preview. This exposes the
|
||||||
<!-- trait GESPipelineExt::fn set_property_video_sink -->
|
<!-- trait GESPipelineExt::fn set_property_video_sink -->
|
||||||
The video sink used for preview. This exposes the
|
The video sink used for preview. This exposes the
|
||||||
`playsink:video-sink` property of the internal `playsink`.
|
`playsink:video-sink` property of the internal `playsink`.
|
||||||
|
<!-- struct PipelineFlags -->
|
||||||
|
The various modes a `Pipeline` can be configured to.
|
||||||
|
<!-- struct PipelineFlags::const AUDIO_PREVIEW -->
|
||||||
|
Output the `Pipeline:timeline`'s
|
||||||
|
audio to the soundcard
|
||||||
|
<!-- struct PipelineFlags::const VIDEO_PREVIEW -->
|
||||||
|
Output the `Pipeline:timeline`'s
|
||||||
|
video to the screen
|
||||||
|
<!-- struct PipelineFlags::const FULL_PREVIEW -->
|
||||||
|
Output both the `Pipeline:timeline`'s
|
||||||
|
audio and video to the soundcard and screen (default)
|
||||||
|
<!-- struct PipelineFlags::const RENDER -->
|
||||||
|
Render the `Pipeline:timeline` with
|
||||||
|
forced decoding (the underlying `encodebin` has its
|
||||||
|
`encodebin:avoid-reencoding` property set to `false`)
|
||||||
|
<!-- struct PipelineFlags::const SMART_RENDER -->
|
||||||
|
Render the `Pipeline:timeline`,
|
||||||
|
avoiding decoding/reencoding (the underlying `encodebin` has its
|
||||||
|
`encodebin:avoid-reencoding` property set to `true`).
|
||||||
|
> NOTE: Smart rendering can not work in tracks where `Track:mixing`
|
||||||
|
> is enabled.
|
||||||
<!-- struct Project -->
|
<!-- struct Project -->
|
||||||
The `Project` is used to control a set of `Asset` and is a
|
The `Project` is used to control a set of `Asset` and is a
|
||||||
`Asset` with `GES_TYPE_TIMELINE` as `extractable_type` itself. That
|
`Asset` with `GES_TYPE_TIMELINE` as `extractable_type` itself. That
|
||||||
|
@ -2613,6 +2673,9 @@ with the given `name`, or `None` if it was not found.
|
||||||
<!-- trait TimelineExt::fn get_frame_at -->
|
<!-- trait TimelineExt::fn get_frame_at -->
|
||||||
This method allows you to convert a timeline `gst::ClockTime` into its
|
This method allows you to convert a timeline `gst::ClockTime` into its
|
||||||
corresponding `FrameNumber` in the timeline's output.
|
corresponding `FrameNumber` in the timeline's output.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
## `timestamp`
|
## `timestamp`
|
||||||
The timestamp to get the corresponding frame number of
|
The timestamp to get the corresponding frame number of
|
||||||
|
|
||||||
|
@ -2624,6 +2687,9 @@ This method allows you to convert a timeline output frame number into a
|
||||||
timeline `gst::ClockTime`. For example, this time could be used to seek to a
|
timeline `gst::ClockTime`. For example, this time could be used to seek to a
|
||||||
particular frame in the timeline's output, or as the edit position for
|
particular frame in the timeline's output, or as the edit position for
|
||||||
an element within the timeline.
|
an element within the timeline.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
## `frame_number`
|
## `frame_number`
|
||||||
The frame number to get the corresponding timestamp of in the
|
The frame number to get the corresponding timestamp of in the
|
||||||
timeline coordinates
|
timeline coordinates
|
||||||
|
@ -2832,6 +2898,21 @@ The layer that was added to `timeline`
|
||||||
Will be emitted after the layer is removed from the timeline.
|
Will be emitted after the layer is removed from the timeline.
|
||||||
## `layer`
|
## `layer`
|
||||||
The layer that was removed from `timeline`
|
The layer that was removed from `timeline`
|
||||||
|
<!-- trait TimelineExt::fn connect_select_element_track -->
|
||||||
|
Simplified version of `Timeline::select-tracks-for-object` which only
|
||||||
|
allows `track_element` to be added to a single `Track`.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
|
## `clip`
|
||||||
|
The clip that `track_element` is being added to
|
||||||
|
## `track_element`
|
||||||
|
The element being added
|
||||||
|
|
||||||
|
# Returns
|
||||||
|
|
||||||
|
A track to put `track_element` into, or `None` if
|
||||||
|
it should be discarded.
|
||||||
<!-- trait TimelineExt::fn connect_select_tracks_for_object -->
|
<!-- trait TimelineExt::fn connect_select_tracks_for_object -->
|
||||||
This will be emitted whenever the timeline needs to determine which
|
This will be emitted whenever the timeline needs to determine which
|
||||||
tracks a clip's children should be added to. The track element will
|
tracks a clip's children should be added to. The track element will
|
||||||
|
@ -3624,6 +3705,9 @@ Emitted when the element has a new child property registered. See
|
||||||
Note that some GES elements will be automatically created with
|
Note that some GES elements will be automatically created with
|
||||||
pre-registered children properties. You can use
|
pre-registered children properties. You can use
|
||||||
`TimelineElementExt::list_children_properties` to list these.
|
`TimelineElementExt::list_children_properties` to list these.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
## `prop_object`
|
## `prop_object`
|
||||||
The child whose property has been registered
|
The child whose property has been registered
|
||||||
## `prop`
|
## `prop`
|
||||||
|
@ -3631,6 +3715,9 @@ The specification for the property that has been registered
|
||||||
<!-- trait TimelineElementExt::fn connect_child_property_removed -->
|
<!-- trait TimelineElementExt::fn connect_child_property_removed -->
|
||||||
Emitted when the element has a child property unregistered. See
|
Emitted when the element has a child property unregistered. See
|
||||||
`TimelineElementExt::remove_child_property`.
|
`TimelineElementExt::remove_child_property`.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
## `prop_object`
|
## `prop_object`
|
||||||
The child whose property has been unregistered
|
The child whose property has been unregistered
|
||||||
## `prop`
|
## `prop`
|
||||||
|
@ -3935,6 +4022,9 @@ Sets the `Track:mixing` for the track.
|
||||||
Whether `self` should be mixing
|
Whether `self` should be mixing
|
||||||
<!-- trait GESTrackExt::fn set_restriction_caps -->
|
<!-- trait GESTrackExt::fn set_restriction_caps -->
|
||||||
Sets the `Track:restriction-caps` for the track.
|
Sets the `Track:restriction-caps` for the track.
|
||||||
|
|
||||||
|
> **NOTE**: Restriction caps are **not** taken into account when
|
||||||
|
> using `Pipeline:mode`=`PipelineFlags::SmartRender`.
|
||||||
## `caps`
|
## `caps`
|
||||||
The new restriction-caps for `self`
|
The new restriction-caps for `self`
|
||||||
<!-- trait GESTrackExt::fn set_timeline -->
|
<!-- trait GESTrackExt::fn set_timeline -->
|
||||||
|
@ -3979,7 +4069,7 @@ The element that was removed
|
||||||
The capabilities used to choose the output of the `Track`'s
|
The capabilities used to choose the output of the `Track`'s
|
||||||
elements. Internally, this is used to select output streams when
|
elements. Internally, this is used to select output streams when
|
||||||
several may be available, by determining whether its `gst::Pad` is
|
several may be available, by determining whether its `gst::Pad` is
|
||||||
compatible (see `nlecomposition:caps` for `nlecomposition`). As such,
|
compatible (see `NleObject:caps` for `nlecomposition`). As such,
|
||||||
this is used as a weaker indication of the desired output type of the
|
this is used as a weaker indication of the desired output type of the
|
||||||
track, **before** the `Track:restriction-caps` is applied.
|
track, **before** the `Track:restriction-caps` is applied.
|
||||||
Therefore, this should be set to a *generic* superset of the
|
Therefore, this should be set to a *generic* superset of the
|
||||||
|
@ -3997,7 +4087,7 @@ Default value: `GST_CAPS_ANY`.
|
||||||
The capabilities used to choose the output of the `Track`'s
|
The capabilities used to choose the output of the `Track`'s
|
||||||
elements. Internally, this is used to select output streams when
|
elements. Internally, this is used to select output streams when
|
||||||
several may be available, by determining whether its `gst::Pad` is
|
several may be available, by determining whether its `gst::Pad` is
|
||||||
compatible (see `nlecomposition:caps` for `nlecomposition`). As such,
|
compatible (see `NleObject:caps` for `nlecomposition`). As such,
|
||||||
this is used as a weaker indication of the desired output type of the
|
this is used as a weaker indication of the desired output type of the
|
||||||
track, **before** the `Track:restriction-caps` is applied.
|
track, **before** the `Track:restriction-caps` is applied.
|
||||||
Therefore, this should be set to a *generic* superset of the
|
Therefore, this should be set to a *generic* superset of the
|
||||||
|
@ -4226,7 +4316,7 @@ be initialized if it is initialized with 0
|
||||||
|
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
`true` if the property was found, `false` otherwize.
|
`true` if the property was found, `false` otherwise.
|
||||||
<!-- trait TrackElementExt::fn get_child_property_by_pspec -->
|
<!-- trait TrackElementExt::fn get_child_property_by_pspec -->
|
||||||
Gets a property of a child of `self`.
|
Gets a property of a child of `self`.
|
||||||
|
|
||||||
|
@ -4306,6 +4396,9 @@ The track-type of `self`.
|
||||||
<!-- trait TrackElementExt::fn has_internal_source -->
|
<!-- trait TrackElementExt::fn has_internal_source -->
|
||||||
Gets `TrackElement:has-internal-source` for the element.
|
Gets `TrackElement:has-internal-source` for the element.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
|
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
`true` if `self` can have its 'internal time' properties set.
|
`true` if `self` can have its 'internal time' properties set.
|
||||||
|
@ -4436,7 +4529,7 @@ The value
|
||||||
|
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
`true` if the property was set, `false` otherwize.
|
`true` if the property was set, `false` otherwise.
|
||||||
<!-- trait TrackElementExt::fn set_child_property_by_pspec -->
|
<!-- trait TrackElementExt::fn set_child_property_by_pspec -->
|
||||||
Sets a property of a child of `self`.
|
Sets a property of a child of `self`.
|
||||||
|
|
||||||
|
@ -4488,9 +4581,17 @@ Sets `TrackElement:has-internal-source` for the element. If this is
|
||||||
set to `false`, this method will also set the
|
set to `false`, this method will also set the
|
||||||
`TimelineElement:in-point` of the element to 0 and its
|
`TimelineElement:in-point` of the element to 0 and its
|
||||||
`TimelineElement:max-duration` to `GST_CLOCK_TIME_NONE`.
|
`TimelineElement:max-duration` to `GST_CLOCK_TIME_NONE`.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
## `has_internal_source`
|
## `has_internal_source`
|
||||||
Whether the `self` should be allowed to have its
|
Whether the `self` should be allowed to have its
|
||||||
'internal time' properties set.
|
'internal time' properties set.
|
||||||
|
|
||||||
|
# Returns
|
||||||
|
|
||||||
|
`false` if `has_internal_source` is forbidden for `self` and
|
||||||
|
`true` in any other case.
|
||||||
<!-- trait TrackElementExt::fn set_track_type -->
|
<!-- trait TrackElementExt::fn set_track_type -->
|
||||||
Sets the `TrackElement:track-type` for the element.
|
Sets the `TrackElement:track-type` for the element.
|
||||||
## `type_`
|
## `type_`
|
||||||
|
@ -4523,6 +4624,9 @@ See `TrackElementExt::clamp_control_source` for how this is done
|
||||||
per control source.
|
per control source.
|
||||||
|
|
||||||
Default value: `true`
|
Default value: `true`
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
<!-- trait TrackElementExt::fn set_property_auto_clamp_control_sources -->
|
<!-- trait TrackElementExt::fn set_property_auto_clamp_control_sources -->
|
||||||
Whether the control sources on the element (see
|
Whether the control sources on the element (see
|
||||||
`TrackElementExt::set_control_source`) will be automatically
|
`TrackElementExt::set_control_source`) will be automatically
|
||||||
|
@ -4533,6 +4637,9 @@ See `TrackElementExt::clamp_control_source` for how this is done
|
||||||
per control source.
|
per control source.
|
||||||
|
|
||||||
Default value: `true`
|
Default value: `true`
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
<!-- trait TrackElementExt::fn get_property_has_internal_source -->
|
<!-- trait TrackElementExt::fn get_property_has_internal_source -->
|
||||||
This property is used to determine whether the 'internal time'
|
This property is used to determine whether the 'internal time'
|
||||||
properties of the element have any meaning. In particular, unless
|
properties of the element have any meaning. In particular, unless
|
||||||
|
@ -4568,6 +4675,9 @@ time at which the subtitle file runs out of data.
|
||||||
Note that GES can not support track elements that have both internal
|
Note that GES can not support track elements that have both internal
|
||||||
content and manipulate the timing of their data streams (time
|
content and manipulate the timing of their data streams (time
|
||||||
effects).
|
effects).
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
<!-- trait TrackElementExt::fn set_property_has_internal_source -->
|
<!-- trait TrackElementExt::fn set_property_has_internal_source -->
|
||||||
This property is used to determine whether the 'internal time'
|
This property is used to determine whether the 'internal time'
|
||||||
properties of the element have any meaning. In particular, unless
|
properties of the element have any meaning. In particular, unless
|
||||||
|
@ -4603,6 +4713,9 @@ time at which the subtitle file runs out of data.
|
||||||
Note that GES can not support track elements that have both internal
|
Note that GES can not support track elements that have both internal
|
||||||
content and manipulate the timing of their data streams (time
|
content and manipulate the timing of their data streams (time
|
||||||
effects).
|
effects).
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
<!-- trait TrackElementExt::fn get_property_track -->
|
<!-- trait TrackElementExt::fn get_property_track -->
|
||||||
The track that this element belongs to, or `None` if it does not
|
The track that this element belongs to, or `None` if it does not
|
||||||
belong to a track.
|
belong to a track.
|
||||||
|
@ -4616,6 +4729,68 @@ The track type of the element, which determines the type of track the
|
||||||
element can be added to (see `Track:track-type`). This should
|
element can be added to (see `Track:track-type`). This should
|
||||||
correspond to the type of data that the element can produce or
|
correspond to the type of data that the element can produce or
|
||||||
process.
|
process.
|
||||||
|
<!-- struct TrackType -->
|
||||||
|
Types of content handled by a track. If the content is not one of
|
||||||
|
`TrackType::Audio`, `TrackType::Video` or `TrackType::Text`,
|
||||||
|
the user of the `Track` must set the type to `TrackType::Custom`.
|
||||||
|
|
||||||
|
`TrackType::Unknown` is for internal purposes and should not be used
|
||||||
|
by users
|
||||||
|
<!-- struct TrackType::const UNKNOWN -->
|
||||||
|
A track of unknown type (i.e. invalid)
|
||||||
|
<!-- struct TrackType::const AUDIO -->
|
||||||
|
An audio track
|
||||||
|
<!-- struct TrackType::const VIDEO -->
|
||||||
|
A video track
|
||||||
|
<!-- struct TrackType::const TEXT -->
|
||||||
|
A text (subtitle) track
|
||||||
|
<!-- struct TrackType::const CUSTOM -->
|
||||||
|
A custom-content track
|
||||||
|
<!-- struct TransitionClip -->
|
||||||
|
Creates an object that mixes together the two underlying objects, A and B.
|
||||||
|
The A object is assumed to have a higher prioirity (lower number) than the
|
||||||
|
B object. At the transition in point, only A will be visible, and by the
|
||||||
|
end only B will be visible.
|
||||||
|
|
||||||
|
The shape of the video transition depends on the value of the "vtype"
|
||||||
|
property. The default value is "crossfade". For audio, only "crossfade" is
|
||||||
|
supported.
|
||||||
|
|
||||||
|
The ID of the ExtractableType is the nickname of the vtype property value. Note
|
||||||
|
that this value can be changed after creation and the GESExtractable.asset value
|
||||||
|
will be updated when needed.
|
||||||
|
|
||||||
|
# Implements
|
||||||
|
|
||||||
|
[`TransitionClipExt`](trait.TransitionClipExt.html), [`BaseTransitionClipExt`](trait.BaseTransitionClipExt.html), [`OperationClipExt`](trait.OperationClipExt.html), [`ClipExt`](trait.ClipExt.html), [`GESContainerExt`](trait.GESContainerExt.html), [`TimelineElementExt`](trait.TimelineElementExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html), [`ExtractableExt`](trait.ExtractableExt.html), [`TimelineElementExtManual`](prelude/trait.TimelineElementExtManual.html)
|
||||||
|
<!-- trait TransitionClipExt -->
|
||||||
|
Trait containing all `TransitionClip` methods.
|
||||||
|
|
||||||
|
# Implementors
|
||||||
|
|
||||||
|
[`TransitionClip`](struct.TransitionClip.html)
|
||||||
|
<!-- impl TransitionClip::fn new -->
|
||||||
|
Creates a new `TransitionClip`.
|
||||||
|
## `vtype`
|
||||||
|
the type of transition to create
|
||||||
|
|
||||||
|
# Returns
|
||||||
|
|
||||||
|
a newly created `TransitionClip`,
|
||||||
|
or `None` if something went wrong.
|
||||||
|
<!-- impl TransitionClip::fn new_for_nick -->
|
||||||
|
Creates a new `TransitionClip` for the provided `nick`.
|
||||||
|
## `nick`
|
||||||
|
a string representing the type of transition to create
|
||||||
|
|
||||||
|
# Returns
|
||||||
|
|
||||||
|
The newly created `TransitionClip`,
|
||||||
|
or `None` if something went wrong
|
||||||
|
<!-- trait TransitionClipExt::fn get_property_vtype -->
|
||||||
|
a `VideoStandardTransitionType` representing the wipe to use
|
||||||
|
<!-- trait TransitionClipExt::fn set_property_vtype -->
|
||||||
|
a `VideoStandardTransitionType` representing the wipe to use
|
||||||
<!-- struct UriClip -->
|
<!-- struct UriClip -->
|
||||||
Represents all the output streams from a particular uri. It is assumed that
|
Represents all the output streams from a particular uri. It is assumed that
|
||||||
the URI points to a file of some type.
|
the URI points to a file of some type.
|
||||||
|
@ -4631,6 +4806,11 @@ Trait containing all `UriClip` methods.
|
||||||
[`UriClip`](struct.UriClip.html)
|
[`UriClip`](struct.UriClip.html)
|
||||||
<!-- impl UriClip::fn new -->
|
<!-- impl UriClip::fn new -->
|
||||||
Creates a new `UriClip` for the provided `uri`.
|
Creates a new `UriClip` for the provided `uri`.
|
||||||
|
|
||||||
|
> **WARNING**: This function might 'discover` @uri **synchrounously**, it is
|
||||||
|
> an IO and processing intensive task that you probably don't want to run in
|
||||||
|
> an application mainloop. Have a look at #ges_asset_request_async to see how
|
||||||
|
> to make that operation happen **asynchronously**.
|
||||||
## `uri`
|
## `uri`
|
||||||
the URI the source should control
|
the URI the source should control
|
||||||
|
|
||||||
|
@ -4784,6 +4964,9 @@ a
|
||||||
<!-- trait UriClipAssetExt::fn is_image -->
|
<!-- trait UriClipAssetExt::fn is_image -->
|
||||||
Gets Whether the file represented by `self` is an image or not
|
Gets Whether the file represented by `self` is an image or not
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
|
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
Whether the file represented by `self` is an image or not
|
Whether the file represented by `self` is an image or not
|
||||||
|
@ -4826,7 +5009,155 @@ a `UriClipAsset`
|
||||||
<!-- trait UriSourceAssetExt::fn is_image -->
|
<!-- trait UriSourceAssetExt::fn is_image -->
|
||||||
Check if `self` contains a single image
|
Check if `self` contains a single image
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
|
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
`true` if the video stream corresponds to an image (i.e. only
|
`true` if the video stream corresponds to an image (i.e. only
|
||||||
contains one frame)
|
contains one frame)
|
||||||
|
<!-- enum VideoStandardTransitionType -->
|
||||||
|
<!-- enum VideoStandardTransitionType::variant None -->
|
||||||
|
Transition type has not been set,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BarWipeLr -->
|
||||||
|
A bar moves from left to right,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BarWipeTb -->
|
||||||
|
A bar moves from top to bottom,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BoxWipeTl -->
|
||||||
|
A box expands from the upper-left corner to the lower-right corner,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BoxWipeTr -->
|
||||||
|
A box expands from the upper-right corner to the lower-left corner,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BoxWipeBr -->
|
||||||
|
A box expands from the lower-right corner to the upper-left corner,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BoxWipeBl -->
|
||||||
|
A box expands from the lower-left corner to the upper-right corner,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant FourBoxWipeCi -->
|
||||||
|
A box shape expands from each of the four corners toward the center,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant FourBoxWipeCo -->
|
||||||
|
A box shape expands from the center of each quadrant toward the corners of each quadrant,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BarndoorV -->
|
||||||
|
A central, vertical line splits and expands toward the left and right edges,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BarndoorH -->
|
||||||
|
A central, horizontal line splits and expands toward the top and bottom edges,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BoxWipeTc -->
|
||||||
|
A box expands from the top edge's midpoint to the bottom corners,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BoxWipeRc -->
|
||||||
|
A box expands from the right edge's midpoint to the left corners,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BoxWipeBc -->
|
||||||
|
A box expands from the bottom edge's midpoint to the top corners,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BoxWipeLc -->
|
||||||
|
A box expands from the left edge's midpoint to the right corners,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant DiagonalTl -->
|
||||||
|
A diagonal line moves from the upper-left corner to the lower-right corner,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant DiagonalTr -->
|
||||||
|
A diagonal line moves from the upper right corner to the lower-left corner,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BowtieV -->
|
||||||
|
Two wedge shapes slide in from the top and bottom edges toward the center,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BowtieH -->
|
||||||
|
Two wedge shapes slide in from the left and right edges toward the center,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BarndoorDbl -->
|
||||||
|
A diagonal line from the lower-left to upper-right corners splits and expands toward the opposite corners,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BarndoorDtl -->
|
||||||
|
A diagonal line from upper-left to lower-right corners splits and expands toward the opposite corners,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant MiscDiagonalDbd -->
|
||||||
|
Four wedge shapes split from the center and retract toward the four edges,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant MiscDiagonalDd -->
|
||||||
|
A diamond connecting the four edge midpoints simultaneously contracts toward the center and expands toward the edges,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant VeeD -->
|
||||||
|
A wedge shape moves from top to bottom,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant VeeL -->
|
||||||
|
A wedge shape moves from right to left,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant VeeU -->
|
||||||
|
A wedge shape moves from bottom to top,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant VeeR -->
|
||||||
|
A wedge shape moves from left to right,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BarnveeD -->
|
||||||
|
A 'V' shape extending from the bottom edge's midpoint to the opposite corners contracts toward the center and expands toward the edges,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BarnveeL -->
|
||||||
|
A 'V' shape extending from the left edge's midpoint to the opposite corners contracts toward the center and expands toward the edges,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BarnveeU -->
|
||||||
|
A 'V' shape extending from the top edge's midpoint to the opposite corners contracts toward the center and expands toward the edges,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant BarnveeR -->
|
||||||
|
A 'V' shape extending from the right edge's midpoint to the opposite corners contracts toward the center and expands toward the edges,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant IrisRect -->
|
||||||
|
A rectangle expands from the center.,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant ClockCw12 -->
|
||||||
|
A radial hand sweeps clockwise from the twelve o'clock position,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant ClockCw3 -->
|
||||||
|
A radial hand sweeps clockwise from the three o'clock position,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant ClockCw6 -->
|
||||||
|
A radial hand sweeps clockwise from the six o'clock position,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant ClockCw9 -->
|
||||||
|
A radial hand sweeps clockwise from the nine o'clock position,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant PinwheelTbv -->
|
||||||
|
Two radial hands sweep clockwise from the twelve and six o'clock positions,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant PinwheelTbh -->
|
||||||
|
Two radial hands sweep clockwise from the nine and three o'clock positions,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant PinwheelFb -->
|
||||||
|
Four radial hands sweep clockwise,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant FanCt -->
|
||||||
|
A fan unfolds from the top edge, the fan axis at the center,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant FanCr -->
|
||||||
|
A fan unfolds from the right edge, the fan axis at the center,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant DoublefanFov -->
|
||||||
|
Two fans, their axes at the center, unfold from the top and bottom,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant DoublefanFoh -->
|
||||||
|
Two fans, their axes at the center, unfold from the left and right,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant SinglesweepCwt -->
|
||||||
|
A radial hand sweeps clockwise from the top edge's midpoint,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant SinglesweepCwr -->
|
||||||
|
A radial hand sweeps clockwise from the right edge's midpoint,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant SinglesweepCwb -->
|
||||||
|
A radial hand sweeps clockwise from the bottom edge's midpoint,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant SinglesweepCwl -->
|
||||||
|
A radial hand sweeps clockwise from the left edge's midpoint,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant DoublesweepPv -->
|
||||||
|
Two radial hands sweep clockwise and counter-clockwise from the top and bottom edges' midpoints,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant DoublesweepPd -->
|
||||||
|
Two radial hands sweep clockwise and counter-clockwise from the left and right edges' midpoints,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant DoublesweepOv -->
|
||||||
|
Two radial hands attached at the top and bottom edges' midpoints sweep from right to left,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant DoublesweepOh -->
|
||||||
|
Two radial hands attached at the left and right edges' midpoints sweep from top to bottom,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant FanT -->
|
||||||
|
A fan unfolds from the bottom, the fan axis at the top edge's midpoint,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant FanR -->
|
||||||
|
A fan unfolds from the left, the fan axis at the right edge's midpoint,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant FanB -->
|
||||||
|
A fan unfolds from the top, the fan axis at the bottom edge's midpoint,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant FanL -->
|
||||||
|
A fan unfolds from the right, the fan axis at the left edge's midpoint,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant DoublefanFiv -->
|
||||||
|
Two fans, their axes at the top and bottom, unfold from the center,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant DoublefanFih -->
|
||||||
|
Two fans, their axes at the left and right, unfold from the center,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant SinglesweepCwtl -->
|
||||||
|
A radial hand sweeps clockwise from the upper-left corner,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant SinglesweepCwbl -->
|
||||||
|
A radial hand sweeps counter-clockwise from the lower-left corner.,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant SinglesweepCwbr -->
|
||||||
|
A radial hand sweeps clockwise from the lower-right corner,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant SinglesweepCwtr -->
|
||||||
|
A radial hand sweeps counter-clockwise from the upper-right corner,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant DoublesweepPdtl -->
|
||||||
|
Two radial hands attached at the upper-left and lower-right corners sweep down and up,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant DoublesweepPdbl -->
|
||||||
|
Two radial hands attached at the lower-left and upper-right corners sweep down and up,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant SaloondoorT -->
|
||||||
|
Two radial hands attached at the upper-left and upper-right corners sweep down,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant SaloondoorL -->
|
||||||
|
Two radial hands attached at the upper-left and lower-left corners sweep to the right,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant SaloondoorB -->
|
||||||
|
Two radial hands attached at the lower-left and lower-right corners sweep up,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant SaloondoorR -->
|
||||||
|
Two radial hands attached at the upper-right and lower-right corners sweep to the left,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant WindshieldR -->
|
||||||
|
Two radial hands attached at the midpoints of the top and bottom halves sweep from right to left,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant WindshieldU -->
|
||||||
|
Two radial hands attached at the midpoints of the left and right halves sweep from top to bottom,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant WindshieldV -->
|
||||||
|
Two sets of radial hands attached at the midpoints of the top and bottom halves sweep from top to bottom and bottom to top,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant WindshieldH -->
|
||||||
|
Two sets of radial hands attached at the midpoints of the left and right halves sweep from left to right and right to left,
|
||||||
|
<!-- enum VideoStandardTransitionType::variant Crossfade -->
|
||||||
|
Crossfade
|
||||||
|
|
|
@ -1,4 +1,18 @@
|
||||||
<!-- file * -->
|
<!-- file * -->
|
||||||
|
<!-- struct GLAPI -->
|
||||||
|
<!-- struct GLAPI::const NONE -->
|
||||||
|
no API
|
||||||
|
<!-- struct GLAPI::const OPENGL -->
|
||||||
|
Desktop OpenGL up to and including 3.1. The
|
||||||
|
compatibility profile when the OpenGL version is >= 3.2
|
||||||
|
<!-- struct GLAPI::const OPENGL3 -->
|
||||||
|
Desktop OpenGL >= 3.2 core profile
|
||||||
|
<!-- struct GLAPI::const GLES1 -->
|
||||||
|
OpenGL ES 1.x
|
||||||
|
<!-- struct GLAPI::const GLES2 -->
|
||||||
|
OpenGL ES 2.x and 3.x
|
||||||
|
<!-- struct GLAPI::const ANY -->
|
||||||
|
Any OpenGL API
|
||||||
<!-- struct GLBaseFilter -->
|
<!-- struct GLBaseFilter -->
|
||||||
`GLBaseFilter` handles the nitty gritty details of retrieving an OpenGL
|
`GLBaseFilter` handles the nitty gritty details of retrieving an OpenGL
|
||||||
context. It also provided some wrappers around `gst_base::BaseTransform`'s
|
context. It also provided some wrappers around `gst_base::BaseTransform`'s
|
||||||
|
@ -623,6 +637,29 @@ pointer to a display (or 0)
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
A `EGLDisplay` or `EGL_NO_DISPLAY`
|
A `EGLDisplay` or `EGL_NO_DISPLAY`
|
||||||
|
<!-- struct GLDisplayType -->
|
||||||
|
<!-- struct GLDisplayType::const NONE -->
|
||||||
|
no display type
|
||||||
|
<!-- struct GLDisplayType::const X11 -->
|
||||||
|
X11 display
|
||||||
|
<!-- struct GLDisplayType::const WAYLAND -->
|
||||||
|
Wayland display
|
||||||
|
<!-- struct GLDisplayType::const COCOA -->
|
||||||
|
Cocoa display
|
||||||
|
<!-- struct GLDisplayType::const WIN32 -->
|
||||||
|
Win32 display
|
||||||
|
<!-- struct GLDisplayType::const DISPMANX -->
|
||||||
|
Dispmanx display
|
||||||
|
<!-- struct GLDisplayType::const EGL -->
|
||||||
|
EGL display
|
||||||
|
<!-- struct GLDisplayType::const VIV_FB -->
|
||||||
|
Vivante Framebuffer display
|
||||||
|
<!-- struct GLDisplayType::const GBM -->
|
||||||
|
Mesa3D GBM display
|
||||||
|
<!-- struct GLDisplayType::const EGL_DEVICE -->
|
||||||
|
EGLDevice display (Since: 1.18)
|
||||||
|
<!-- struct GLDisplayType::const ANY -->
|
||||||
|
any display type
|
||||||
<!-- struct GLDisplayWayland -->
|
<!-- struct GLDisplayWayland -->
|
||||||
the contents of a `GLDisplayWayland` are private and should only be accessed
|
the contents of a `GLDisplayWayland` are private and should only be accessed
|
||||||
through the provided API
|
through the provided API
|
||||||
|
@ -794,6 +831,22 @@ Opaque `GLOverlayCompositor` object
|
||||||
# Implements
|
# Implements
|
||||||
|
|
||||||
[`gst::ObjectExt`](../gst/trait.ObjectExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html)
|
[`gst::ObjectExt`](../gst/trait.ObjectExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html)
|
||||||
|
<!-- struct GLPlatform -->
|
||||||
|
<!-- struct GLPlatform::const NONE -->
|
||||||
|
no platform
|
||||||
|
<!-- struct GLPlatform::const EGL -->
|
||||||
|
the EGL platform used primarily with the X11, wayland
|
||||||
|
and android window systems as well as on embedded Linux
|
||||||
|
<!-- struct GLPlatform::const GLX -->
|
||||||
|
the GLX platform used primarily with the X11 window system
|
||||||
|
<!-- struct GLPlatform::const WGL -->
|
||||||
|
the WGL platform used primarily on Windows
|
||||||
|
<!-- struct GLPlatform::const CGL -->
|
||||||
|
the CGL platform used primarily on OS X
|
||||||
|
<!-- struct GLPlatform::const EAGL -->
|
||||||
|
the EAGL platform used primarily on iOS
|
||||||
|
<!-- struct GLPlatform::const ANY -->
|
||||||
|
any OpenGL platform
|
||||||
<!-- enum GLQueryType -->
|
<!-- enum GLQueryType -->
|
||||||
<!-- enum GLQueryType::variant None -->
|
<!-- enum GLQueryType::variant None -->
|
||||||
no query
|
no query
|
||||||
|
@ -809,6 +862,18 @@ Compilation error occurred
|
||||||
Link error occurred
|
Link error occurred
|
||||||
<!-- enum GLSLError::variant Program -->
|
<!-- enum GLSLError::variant Program -->
|
||||||
General program error occurred
|
General program error occurred
|
||||||
|
<!-- struct GLSLProfile -->
|
||||||
|
GLSL profiles
|
||||||
|
<!-- struct GLSLProfile::const NONE -->
|
||||||
|
no profile supported/available
|
||||||
|
<!-- struct GLSLProfile::const ES -->
|
||||||
|
OpenGL|ES profile
|
||||||
|
<!-- struct GLSLProfile::const CORE -->
|
||||||
|
OpenGL core profile
|
||||||
|
<!-- struct GLSLProfile::const COMPATIBILITY -->
|
||||||
|
OpenGL compatibility profile
|
||||||
|
<!-- struct GLSLProfile::const ANY -->
|
||||||
|
any OpenGL/OpenGL|ES profile
|
||||||
<!-- struct GLSLStage -->
|
<!-- struct GLSLStage -->
|
||||||
`GLSLStage` holds and represents a single OpenGL shader stage.
|
`GLSLStage` holds and represents a single OpenGL shader stage.
|
||||||
|
|
||||||
|
|
|
@ -331,6 +331,21 @@ the discovery timed-out
|
||||||
the discoverer was already discovering a file
|
the discoverer was already discovering a file
|
||||||
<!-- enum DiscovererResult::variant MissingPlugins -->
|
<!-- enum DiscovererResult::variant MissingPlugins -->
|
||||||
Some plugins are missing for full discovery
|
Some plugins are missing for full discovery
|
||||||
|
<!-- struct DiscovererSerializeFlags -->
|
||||||
|
You can use these flags to control what is serialized by
|
||||||
|
`DiscovererInfo::to_variant`
|
||||||
|
<!-- struct DiscovererSerializeFlags::const BASIC -->
|
||||||
|
Serialize only basic information, excluding
|
||||||
|
caps, tags and miscellaneous information
|
||||||
|
<!-- struct DiscovererSerializeFlags::const CAPS -->
|
||||||
|
Serialize the caps for each stream
|
||||||
|
<!-- struct DiscovererSerializeFlags::const TAGS -->
|
||||||
|
Serialize the tags for each stream
|
||||||
|
<!-- struct DiscovererSerializeFlags::const MISC -->
|
||||||
|
Serialize miscellaneous information for each stream
|
||||||
|
<!-- struct DiscovererSerializeFlags::const ALL -->
|
||||||
|
Serialize all the available info, including
|
||||||
|
caps, tags and miscellaneous information
|
||||||
<!-- struct DiscovererStreamInfo -->
|
<!-- struct DiscovererStreamInfo -->
|
||||||
Base structure for information concerning a media stream. Depending on the
|
Base structure for information concerning a media stream. Depending on the
|
||||||
stream type, one can find more media-specific information in
|
stream type, one can find more media-specific information in
|
||||||
|
@ -836,6 +851,14 @@ The description of the `self`.
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
The name of the `self`.
|
The name of the `self`.
|
||||||
|
<!-- impl EncodingTarget::fn get_path -->
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
|
|
||||||
|
# Returns
|
||||||
|
|
||||||
|
The path to the `self` file.
|
||||||
<!-- impl EncodingTarget::fn get_profile -->
|
<!-- impl EncodingTarget::fn get_profile -->
|
||||||
## `name`
|
## `name`
|
||||||
the name of the profile to retrieve
|
the name of the profile to retrieve
|
||||||
|
|
|
@ -93,6 +93,33 @@ VoIP Metrics Report Block
|
||||||
|
|
||||||
Feature: `v1_16`
|
Feature: `v1_16`
|
||||||
|
|
||||||
|
<!-- struct RTPBufferFlags -->
|
||||||
|
Additional RTP buffer flags. These flags can potentially be used on any
|
||||||
|
buffers carrying RTP packets.
|
||||||
|
|
||||||
|
Note that these are only valid for `gst::Caps` of type: application/x-rtp (x-rtcp).
|
||||||
|
They can conflict with other extended buffer flags.
|
||||||
|
<!-- struct RTPBufferFlags::const RETRANSMISSION -->
|
||||||
|
The `gst::Buffer` was once wrapped
|
||||||
|
in a retransmitted packet as specified by RFC 4588.
|
||||||
|
<!-- struct RTPBufferFlags::const REDUNDANT -->
|
||||||
|
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
|
||||||
|
<!-- struct RTPBufferFlags::const LAST -->
|
||||||
|
Offset to define more flags.
|
||||||
|
|
||||||
|
Feature: `v1_10`
|
||||||
|
|
||||||
|
<!-- struct RTPBufferMapFlags -->
|
||||||
|
Additional mapping flags for `RTPBuffer::map`.
|
||||||
|
<!-- struct RTPBufferMapFlags::const SKIP_PADDING -->
|
||||||
|
Skip mapping and validation of RTP
|
||||||
|
padding and RTP pad count when present. Useful for buffers where
|
||||||
|
the padding may be encrypted.
|
||||||
|
<!-- struct RTPBufferMapFlags::const LAST -->
|
||||||
|
Offset to define more flags
|
||||||
<!-- enum RTPPayload -->
|
<!-- enum RTPPayload -->
|
||||||
Standard predefined fixed payload types.
|
Standard predefined fixed payload types.
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,20 @@ a copy of `self`.
|
||||||
<!-- impl RTSPAddress::fn free -->
|
<!-- impl RTSPAddress::fn free -->
|
||||||
Free `self` and releasing it back into the pool when owned by a
|
Free `self` and releasing it back into the pool when owned by a
|
||||||
pool.
|
pool.
|
||||||
|
<!-- struct RTSPAddressFlags -->
|
||||||
|
Flags used to control allocation of addresses
|
||||||
|
<!-- struct RTSPAddressFlags::const NONE -->
|
||||||
|
no flags
|
||||||
|
<!-- struct RTSPAddressFlags::const IPV4 -->
|
||||||
|
an IPv4 address
|
||||||
|
<!-- struct RTSPAddressFlags::const IPV6 -->
|
||||||
|
and IPv6 address
|
||||||
|
<!-- struct RTSPAddressFlags::const EVEN_PORT -->
|
||||||
|
address with an even port
|
||||||
|
<!-- struct RTSPAddressFlags::const MULTICAST -->
|
||||||
|
a multicast address
|
||||||
|
<!-- struct RTSPAddressFlags::const UNICAST -->
|
||||||
|
a unicast address
|
||||||
<!-- struct RTSPAddressPool -->
|
<!-- struct RTSPAddressPool -->
|
||||||
An address pool, all member are private
|
An address pool, all member are private
|
||||||
|
|
||||||
|
@ -3319,3 +3333,9 @@ pointer becomes invalid when you free the token. This function checks if
|
||||||
`self` is writable and will never return `None`.
|
`self` is writable and will never return `None`.
|
||||||
|
|
||||||
MT safe.
|
MT safe.
|
||||||
|
<!-- struct RTSPTransportMode -->
|
||||||
|
The supported modes of the media.
|
||||||
|
<!-- struct RTSPTransportMode::const PLAY -->
|
||||||
|
Transport supports PLAY mode
|
||||||
|
<!-- struct RTSPTransportMode::const RECORD -->
|
||||||
|
Transport supports RECORD mode
|
||||||
|
|
|
@ -11,6 +11,12 @@ digest authentication
|
||||||
RTSP Authentication parameter
|
RTSP Authentication parameter
|
||||||
|
|
||||||
Feature: `v1_12`
|
Feature: `v1_12`
|
||||||
|
<!-- struct RTSPEvent -->
|
||||||
|
The possible events for the connection.
|
||||||
|
<!-- struct RTSPEvent::const READ -->
|
||||||
|
connection is readable
|
||||||
|
<!-- struct RTSPEvent::const WRITE -->
|
||||||
|
connection is writable
|
||||||
<!-- enum RTSPFamily -->
|
<!-- enum RTSPFamily -->
|
||||||
The possible network families.
|
The possible network families.
|
||||||
<!-- enum RTSPFamily::variant None -->
|
<!-- enum RTSPFamily::variant None -->
|
||||||
|
@ -21,6 +27,50 @@ internet
|
||||||
internet V6
|
internet V6
|
||||||
<!-- enum RTSPHeaderField -->
|
<!-- enum RTSPHeaderField -->
|
||||||
Enumeration of rtsp header fields
|
Enumeration of rtsp header fields
|
||||||
|
<!-- struct RTSPLowerTrans -->
|
||||||
|
The different transport methods.
|
||||||
|
<!-- struct RTSPLowerTrans::const UNKNOWN -->
|
||||||
|
invalid transport flag
|
||||||
|
<!-- struct RTSPLowerTrans::const UDP -->
|
||||||
|
stream data over UDP
|
||||||
|
<!-- struct RTSPLowerTrans::const UDP_MCAST -->
|
||||||
|
stream data over UDP multicast
|
||||||
|
<!-- struct RTSPLowerTrans::const TCP -->
|
||||||
|
stream data over TCP
|
||||||
|
<!-- struct RTSPLowerTrans::const HTTP -->
|
||||||
|
stream data tunneled over HTTP.
|
||||||
|
<!-- struct RTSPLowerTrans::const TLS -->
|
||||||
|
encrypt TCP and HTTP with TLS
|
||||||
|
<!-- struct RTSPMethod -->
|
||||||
|
The different supported RTSP methods.
|
||||||
|
<!-- struct RTSPMethod::const INVALID -->
|
||||||
|
invalid method
|
||||||
|
<!-- struct RTSPMethod::const DESCRIBE -->
|
||||||
|
the DESCRIBE method
|
||||||
|
<!-- struct RTSPMethod::const ANNOUNCE -->
|
||||||
|
the ANNOUNCE method
|
||||||
|
<!-- struct RTSPMethod::const GET_PARAMETER -->
|
||||||
|
the GET_PARAMETER method
|
||||||
|
<!-- struct RTSPMethod::const OPTIONS -->
|
||||||
|
the OPTIONS method
|
||||||
|
<!-- struct RTSPMethod::const PAUSE -->
|
||||||
|
the PAUSE method
|
||||||
|
<!-- struct RTSPMethod::const PLAY -->
|
||||||
|
the PLAY method
|
||||||
|
<!-- struct RTSPMethod::const RECORD -->
|
||||||
|
the RECORD method
|
||||||
|
<!-- struct RTSPMethod::const REDIRECT -->
|
||||||
|
the REDIRECT method
|
||||||
|
<!-- struct RTSPMethod::const SETUP -->
|
||||||
|
the SETUP method
|
||||||
|
<!-- struct RTSPMethod::const SET_PARAMETER -->
|
||||||
|
the SET_PARAMETER method
|
||||||
|
<!-- struct RTSPMethod::const TEARDOWN -->
|
||||||
|
the TEARDOWN method
|
||||||
|
<!-- struct RTSPMethod::const GET -->
|
||||||
|
the GET method (HTTP).
|
||||||
|
<!-- struct RTSPMethod::const POST -->
|
||||||
|
the POST method (HTTP).
|
||||||
<!-- enum RTSPMsgType -->
|
<!-- enum RTSPMsgType -->
|
||||||
The type of a message.
|
The type of a message.
|
||||||
<!-- enum RTSPMsgType::variant Invalid -->
|
<!-- enum RTSPMsgType::variant Invalid -->
|
||||||
|
@ -35,6 +85,18 @@ HTTP request message.
|
||||||
HTTP response message.
|
HTTP response message.
|
||||||
<!-- enum RTSPMsgType::variant Data -->
|
<!-- enum RTSPMsgType::variant Data -->
|
||||||
data message
|
data message
|
||||||
|
<!-- struct RTSPProfile -->
|
||||||
|
The transfer profile to use.
|
||||||
|
<!-- struct RTSPProfile::const UNKNOWN -->
|
||||||
|
invalid profile
|
||||||
|
<!-- struct RTSPProfile::const AVP -->
|
||||||
|
the Audio/Visual profile (RFC 3551)
|
||||||
|
<!-- struct RTSPProfile::const SAVP -->
|
||||||
|
the secure Audio/Visual profile (RFC 3711)
|
||||||
|
<!-- struct RTSPProfile::const AVPF -->
|
||||||
|
the Audio/Visual profile with feedback (RFC 4585)
|
||||||
|
<!-- struct RTSPProfile::const SAVPF -->
|
||||||
|
the secure Audio/Visual profile with feedback (RFC 5124)
|
||||||
<!-- enum RTSPRangeUnit -->
|
<!-- enum RTSPRangeUnit -->
|
||||||
Different possible time range units.
|
Different possible time range units.
|
||||||
<!-- enum RTSPRangeUnit::variant Smpte -->
|
<!-- enum RTSPRangeUnit::variant Smpte -->
|
||||||
|
@ -113,6 +175,14 @@ end
|
||||||
frames and subframes
|
frames and subframes
|
||||||
<!-- enum RTSPTimeType::variant Utc -->
|
<!-- enum RTSPTimeType::variant Utc -->
|
||||||
UTC time
|
UTC time
|
||||||
|
<!-- struct RTSPTransMode -->
|
||||||
|
The transfer mode to use.
|
||||||
|
<!-- struct RTSPTransMode::const UNKNOWN -->
|
||||||
|
invalid tansport mode
|
||||||
|
<!-- struct RTSPTransMode::const RTP -->
|
||||||
|
transfer RTP data
|
||||||
|
<!-- struct RTSPTransMode::const RDT -->
|
||||||
|
transfer RDT (RealMedia) data
|
||||||
<!-- struct RTSPUrl -->
|
<!-- struct RTSPUrl -->
|
||||||
Provides helper functions to handle RTSP urls.
|
Provides helper functions to handle RTSP urls.
|
||||||
<!-- impl RTSPUrl::fn copy -->
|
<!-- impl RTSPUrl::fn copy -->
|
||||||
|
|
|
@ -105,6 +105,54 @@ multiply all alpha with
|
||||||
`GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE`.
|
`GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE`.
|
||||||
When the input format has no alpha but the output format has, the
|
When the input format has no alpha but the output format has, the
|
||||||
alpha value will be set to `GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE`
|
alpha value will be set to `GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE`
|
||||||
|
<!-- struct VideoBufferFlags -->
|
||||||
|
Additional video buffer flags. These flags can potentially be used on any
|
||||||
|
buffers carrying closed caption data, or video data - even encoded data.
|
||||||
|
|
||||||
|
Note that these are only valid for `gst::Caps` of type: video/... and caption/...
|
||||||
|
They can conflict with other extended buffer flags.
|
||||||
|
<!-- struct VideoBufferFlags::const INTERLACED -->
|
||||||
|
If the `gst::Buffer` is interlaced. In mixed
|
||||||
|
interlace-mode, this flags specifies if the frame is
|
||||||
|
interlaced or progressive.
|
||||||
|
<!-- struct VideoBufferFlags::const TFF -->
|
||||||
|
If the `gst::Buffer` is interlaced, then the first field
|
||||||
|
in the video frame is the top field. If unset, the
|
||||||
|
bottom field is first.
|
||||||
|
<!-- struct VideoBufferFlags::const RFF -->
|
||||||
|
If the `gst::Buffer` is interlaced, then the first field
|
||||||
|
(as defined by the `VideoBufferFlags::Tff` flag setting)
|
||||||
|
is repeated.
|
||||||
|
<!-- struct VideoBufferFlags::const ONEFIELD -->
|
||||||
|
If the `gst::Buffer` is interlaced, then only the
|
||||||
|
first field (as defined by the `VideoBufferFlags::Tff`
|
||||||
|
flag setting) is to be displayed (Since: 1.16).
|
||||||
|
<!-- struct VideoBufferFlags::const MULTIPLE_VIEW -->
|
||||||
|
The `gst::Buffer` 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
|
||||||
|
streams that contain only a single viewpoint. In mixed
|
||||||
|
mono / non-mono streams, the absence of the flag marks
|
||||||
|
mono buffers.
|
||||||
|
<!-- struct VideoBufferFlags::const FIRST_IN_BUNDLE -->
|
||||||
|
When conveying stereo/multiview content with
|
||||||
|
frame-by-frame methods, this flag marks the first buffer
|
||||||
|
in a bundle of frames that belong together.
|
||||||
|
<!-- struct VideoBufferFlags::const TOP_FIELD -->
|
||||||
|
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.
|
||||||
|
<!-- struct VideoBufferFlags::const BOTTOM_FIELD -->
|
||||||
|
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.
|
||||||
|
<!-- struct VideoBufferFlags::const MARKER -->
|
||||||
|
The `gst::Buffer` contains the end of a video field or frame
|
||||||
|
boundary such as the last subframe or packet (Since: 1.18).
|
||||||
|
<!-- struct VideoBufferFlags::const LAST -->
|
||||||
|
Offset to define more flags
|
||||||
<!-- struct VideoBufferPool -->
|
<!-- struct VideoBufferPool -->
|
||||||
|
|
||||||
|
|
||||||
|
@ -160,6 +208,26 @@ only perform chroma upsampling
|
||||||
only perform chroma downsampling
|
only perform chroma downsampling
|
||||||
<!-- enum VideoChromaMode::variant None -->
|
<!-- enum VideoChromaMode::variant None -->
|
||||||
disable chroma resampling
|
disable chroma resampling
|
||||||
|
<!-- struct VideoChromaSite -->
|
||||||
|
Various Chroma sitings.
|
||||||
|
<!-- struct VideoChromaSite::const UNKNOWN -->
|
||||||
|
unknown cositing
|
||||||
|
<!-- struct VideoChromaSite::const NONE -->
|
||||||
|
no cositing
|
||||||
|
<!-- struct VideoChromaSite::const H_COSITED -->
|
||||||
|
chroma is horizontally cosited
|
||||||
|
<!-- struct VideoChromaSite::const V_COSITED -->
|
||||||
|
chroma is vertically cosited
|
||||||
|
<!-- struct VideoChromaSite::const ALT_LINE -->
|
||||||
|
choma samples are sited on alternate lines
|
||||||
|
<!-- struct VideoChromaSite::const COSITED -->
|
||||||
|
chroma samples cosited with luma samples
|
||||||
|
<!-- struct VideoChromaSite::const JPEG -->
|
||||||
|
jpeg style cositing, also for mpeg1 and mjpeg
|
||||||
|
<!-- struct VideoChromaSite::const MPEG2 -->
|
||||||
|
mpeg2 style cositing
|
||||||
|
<!-- struct VideoChromaSite::const DV -->
|
||||||
|
DV style cositing
|
||||||
<!-- struct VideoCodecFrame -->
|
<!-- struct VideoCodecFrame -->
|
||||||
A `VideoCodecFrame` represents a video frame both in raw and
|
A `VideoCodecFrame` represents a video frame both in raw and
|
||||||
encoded form.
|
encoded form.
|
||||||
|
@ -189,6 +257,16 @@ a `GDestroyNotify`
|
||||||
<!-- impl VideoCodecFrame::fn unref -->
|
<!-- impl VideoCodecFrame::fn unref -->
|
||||||
Decreases the refcount of the frame. If the refcount reaches 0, the frame
|
Decreases the refcount of the frame. If the refcount reaches 0, the frame
|
||||||
will be freed.
|
will be freed.
|
||||||
|
<!-- struct VideoCodecFrameFlags -->
|
||||||
|
Flags for `VideoCodecFrame`
|
||||||
|
<!-- struct VideoCodecFrameFlags::const DECODE_ONLY -->
|
||||||
|
is the frame only meant to be decoded
|
||||||
|
<!-- struct VideoCodecFrameFlags::const SYNC_POINT -->
|
||||||
|
is the frame a synchronization point (keyframe)
|
||||||
|
<!-- struct VideoCodecFrameFlags::const FORCE_KEYFRAME -->
|
||||||
|
should the output frame be made a keyframe
|
||||||
|
<!-- struct VideoCodecFrameFlags::const FORCE_KEYFRAME_HEADERS -->
|
||||||
|
should the encoder output stream headers
|
||||||
<!-- struct VideoCodecState -->
|
<!-- struct VideoCodecState -->
|
||||||
Structure representing the state of an incoming or outgoing video
|
Structure representing the state of an incoming or outgoing video
|
||||||
stream for encoders and decoders.
|
stream for encoders and decoders.
|
||||||
|
@ -681,6 +759,18 @@ handler with `GST_PAD_SET_ACCEPT_INTERSECT` and
|
||||||
`GST_PAD_SET_ACCEPT_TEMPLATE`
|
`GST_PAD_SET_ACCEPT_TEMPLATE`
|
||||||
## `use_`
|
## `use_`
|
||||||
if the default pad accept-caps query handling should be used
|
if the default pad accept-caps query handling should be used
|
||||||
|
<!-- trait VideoDecoderExt::fn get_property_max_errors -->
|
||||||
|
Maximum number of tolerated consecutive decode errors. See
|
||||||
|
`VideoDecoderExt::set_max_errors` for more details.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
|
<!-- trait VideoDecoderExt::fn set_property_max_errors -->
|
||||||
|
Maximum number of tolerated consecutive decode errors. See
|
||||||
|
`VideoDecoderExt::set_max_errors` for more details.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
<!-- trait VideoDecoderExt::fn get_property_qos -->
|
<!-- trait VideoDecoderExt::fn get_property_qos -->
|
||||||
If set to `true` the decoder will handle QoS events received
|
If set to `true` the decoder will handle QoS events received
|
||||||
from downstream elements.
|
from downstream elements.
|
||||||
|
@ -888,6 +978,16 @@ a `VideoCodecFrame`
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
max decoding time.
|
max decoding time.
|
||||||
|
<!-- trait VideoEncoderExt::fn get_min_force_key_unit_interval -->
|
||||||
|
Returns the minimum force-keyunit interval, see `VideoEncoderExt::set_min_force_key_unit_interval`
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
|
|
||||||
|
# Returns
|
||||||
|
|
||||||
|
the minimum force-keyunit interval
|
||||||
<!-- trait VideoEncoderExt::fn get_oldest_frame -->
|
<!-- trait VideoEncoderExt::fn get_oldest_frame -->
|
||||||
Get the oldest unfinished pending `VideoCodecFrame`
|
Get the oldest unfinished pending `VideoCodecFrame`
|
||||||
|
|
||||||
|
@ -954,6 +1054,15 @@ Informs baseclass of encoding latency.
|
||||||
minimum latency
|
minimum latency
|
||||||
## `max_latency`
|
## `max_latency`
|
||||||
maximum latency
|
maximum latency
|
||||||
|
<!-- trait VideoEncoderExt::fn set_min_force_key_unit_interval -->
|
||||||
|
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.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
|
## `interval`
|
||||||
|
minimum interval
|
||||||
<!-- trait VideoEncoderExt::fn set_min_pts -->
|
<!-- trait VideoEncoderExt::fn set_min_pts -->
|
||||||
Request minimal value for PTS passed to handle_frame.
|
Request minimal value for PTS passed to handle_frame.
|
||||||
|
|
||||||
|
@ -995,6 +1104,18 @@ Feature: `v1_14`
|
||||||
|
|
||||||
## `enabled`
|
## `enabled`
|
||||||
the new qos value.
|
the new qos value.
|
||||||
|
<!-- trait VideoEncoderExt::fn get_property_min_force_key_unit_interval -->
|
||||||
|
Minimum interval between force-keyunit requests in nanoseconds. See
|
||||||
|
`VideoEncoderExt::set_min_force_key_unit_interval` for more details.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
|
<!-- trait VideoEncoderExt::fn set_property_min_force_key_unit_interval -->
|
||||||
|
Minimum interval between force-keyunit requests in nanoseconds. See
|
||||||
|
`VideoEncoderExt::set_min_force_key_unit_interval` for more details.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
<!-- enum VideoFieldOrder -->
|
<!-- enum VideoFieldOrder -->
|
||||||
Field order of interlaced content. This is only valid for
|
Field order of interlaced content. This is only valid for
|
||||||
interlace-mode=interleaved and not interlace-mode=mixed. In the case of
|
interlace-mode=interleaved and not interlace-mode=mixed. In the case of
|
||||||
|
@ -1019,6 +1140,16 @@ to implement frame dropping.
|
||||||
# Implements
|
# Implements
|
||||||
|
|
||||||
[`gst_base::BaseTransformExt`](../gst_base/trait.BaseTransformExt.html), [`gst::ElementExt`](../gst/trait.ElementExt.html), [`gst::ObjectExt`](../gst/trait.ObjectExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html)
|
[`gst_base::BaseTransformExt`](../gst_base/trait.BaseTransformExt.html), [`gst::ElementExt`](../gst/trait.ElementExt.html), [`gst::ObjectExt`](../gst/trait.ObjectExt.html), [`glib::object::ObjectExt`](../glib/object/trait.ObjectExt.html)
|
||||||
|
<!-- struct VideoFlags -->
|
||||||
|
Extra video flags
|
||||||
|
<!-- struct VideoFlags::const NONE -->
|
||||||
|
no flags
|
||||||
|
<!-- struct VideoFlags::const VARIABLE_FPS -->
|
||||||
|
a variable fps is selected, fps_n and fps_d
|
||||||
|
denote the maximum fps of the video
|
||||||
|
<!-- struct VideoFlags::const PREMULTIPLIED_ALPHA -->
|
||||||
|
Each color has been scaled by the alpha
|
||||||
|
value.
|
||||||
<!-- enum VideoFormat -->
|
<!-- enum VideoFormat -->
|
||||||
Enum value describing the most common video formats.
|
Enum value describing the most common video formats.
|
||||||
|
|
||||||
|
@ -1221,6 +1352,63 @@ 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)
|
||||||
<!-- enum VideoFormat::variant Y412Le -->
|
<!-- enum VideoFormat::variant Y412Le -->
|
||||||
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)
|
||||||
|
<!-- struct VideoFormatFlags -->
|
||||||
|
The different video flags that a format info can have.
|
||||||
|
<!-- struct VideoFormatFlags::const YUV -->
|
||||||
|
The video format is YUV, components are numbered
|
||||||
|
0=Y, 1=U, 2=V.
|
||||||
|
<!-- struct VideoFormatFlags::const RGB -->
|
||||||
|
The video format is RGB, components are numbered
|
||||||
|
0=R, 1=G, 2=B.
|
||||||
|
<!-- struct VideoFormatFlags::const GRAY -->
|
||||||
|
The video is gray, there is one gray component
|
||||||
|
with index 0.
|
||||||
|
<!-- struct VideoFormatFlags::const ALPHA -->
|
||||||
|
The video format has an alpha components with
|
||||||
|
the number 3.
|
||||||
|
<!-- struct VideoFormatFlags::const LE -->
|
||||||
|
The video format has data stored in little
|
||||||
|
endianness.
|
||||||
|
<!-- struct VideoFormatFlags::const PALETTE -->
|
||||||
|
The video format has a palette. The palette
|
||||||
|
is stored in the second plane and indexes are stored in the first plane.
|
||||||
|
<!-- struct VideoFormatFlags::const COMPLEX -->
|
||||||
|
The video format has a complex layout that
|
||||||
|
can't be described with the usual information in the `VideoFormatInfo`.
|
||||||
|
<!-- struct VideoFormatFlags::const UNPACK -->
|
||||||
|
This format can be used in a
|
||||||
|
`GstVideoFormatUnpack` and `GstVideoFormatPack` function.
|
||||||
|
<!-- struct VideoFormatFlags::const TILED -->
|
||||||
|
The format is tiled, there is tiling information
|
||||||
|
in the last plane.
|
||||||
|
<!-- struct VideoFrameFlags -->
|
||||||
|
Extra video frame flags
|
||||||
|
<!-- struct VideoFrameFlags::const NONE -->
|
||||||
|
no flags
|
||||||
|
<!-- struct VideoFrameFlags::const INTERLACED -->
|
||||||
|
The video frame is interlaced. In mixed
|
||||||
|
interlace-mode, this flag specifies if the frame is interlaced or
|
||||||
|
progressive.
|
||||||
|
<!-- struct VideoFrameFlags::const TFF -->
|
||||||
|
The video frame has the top field first
|
||||||
|
<!-- struct VideoFrameFlags::const RFF -->
|
||||||
|
The video frame has the repeat flag
|
||||||
|
<!-- struct VideoFrameFlags::const ONEFIELD -->
|
||||||
|
The video frame has one field
|
||||||
|
<!-- struct VideoFrameFlags::const MULTIPLE_VIEW -->
|
||||||
|
The video contains one or
|
||||||
|
more non-mono views
|
||||||
|
<!-- struct VideoFrameFlags::const FIRST_IN_BUNDLE -->
|
||||||
|
The video frame is the first
|
||||||
|
in a set of corresponding views provided as sequential frames.
|
||||||
|
<!-- struct VideoFrameFlags::const TOP_FIELD -->
|
||||||
|
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).
|
||||||
|
<!-- struct VideoFrameFlags::const BOTTOM_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).
|
||||||
<!-- enum VideoGammaMode -->
|
<!-- enum VideoGammaMode -->
|
||||||
<!-- enum VideoGammaMode::variant None -->
|
<!-- enum VideoGammaMode::variant None -->
|
||||||
disable gamma handling
|
disable gamma handling
|
||||||
|
@ -1396,6 +1584,42 @@ use the output color matrix to convert
|
||||||
to and from R'G'B
|
to and from R'G'B
|
||||||
<!-- enum VideoMatrixMode::variant None -->
|
<!-- enum VideoMatrixMode::variant None -->
|
||||||
disable color matrix conversion.
|
disable color matrix conversion.
|
||||||
|
<!-- struct VideoMultiviewFlags -->
|
||||||
|
GstVideoMultiviewFlags are used to indicate extra properties of a
|
||||||
|
stereo/multiview stream beyond the frame layout and buffer mapping
|
||||||
|
that is conveyed in the `VideoMultiviewMode`.
|
||||||
|
<!-- struct VideoMultiviewFlags::const NONE -->
|
||||||
|
No flags
|
||||||
|
<!-- struct VideoMultiviewFlags::const RIGHT_VIEW_FIRST -->
|
||||||
|
For stereo streams, the
|
||||||
|
normal arrangement of left and right views is reversed.
|
||||||
|
<!-- struct VideoMultiviewFlags::const LEFT_FLIPPED -->
|
||||||
|
The left view is vertically
|
||||||
|
mirrored.
|
||||||
|
<!-- struct VideoMultiviewFlags::const LEFT_FLOPPED -->
|
||||||
|
The left view is horizontally
|
||||||
|
mirrored.
|
||||||
|
<!-- struct VideoMultiviewFlags::const RIGHT_FLIPPED -->
|
||||||
|
The right view is
|
||||||
|
vertically mirrored.
|
||||||
|
<!-- struct VideoMultiviewFlags::const RIGHT_FLOPPED -->
|
||||||
|
The right view is
|
||||||
|
horizontally mirrored.
|
||||||
|
<!-- struct VideoMultiviewFlags::const HALF_ASPECT -->
|
||||||
|
For frame-packed
|
||||||
|
multiview modes, indicates that the individual
|
||||||
|
views have been encoded with half the true width or height
|
||||||
|
and should be scaled back up for display. This flag
|
||||||
|
is used for overriding input layout interpretation
|
||||||
|
by adjusting pixel-aspect-ratio.
|
||||||
|
For side-by-side, column interleaved or checkerboard packings, the
|
||||||
|
pixel width will be doubled. For row interleaved and top-bottom
|
||||||
|
encodings, pixel height will be doubled.
|
||||||
|
<!-- struct VideoMultiviewFlags::const MIXED_MONO -->
|
||||||
|
The video stream contains both
|
||||||
|
mono and multiview portions, signalled on each buffer by the
|
||||||
|
absence or presence of the `VideoBufferFlags::MultipleView`
|
||||||
|
buffer flag.
|
||||||
<!-- enum VideoMultiviewFramePacking -->
|
<!-- enum VideoMultiviewFramePacking -->
|
||||||
`VideoMultiviewFramePacking` represents the subset of `VideoMultiviewMode`
|
`VideoMultiviewFramePacking` represents the subset of `VideoMultiviewMode`
|
||||||
values that can be applied to any video frame without needing extra metadata.
|
values that can be applied to any video frame without needing extra metadata.
|
||||||
|
@ -1694,13 +1918,13 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
|
|
||||||
```text
|
```text
|
||||||
#include <glib.h>
|
#include <glib.h>;
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>;
|
||||||
#include <gst/video/videooverlay.h>
|
#include <gst/video/videooverlay.h>;
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>;
|
||||||
#include <QTimer>
|
#include <QTimer>;
|
||||||
#include <QWidget>
|
#include <QWidget>;
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
@ -1844,6 +2068,28 @@ specific window (e.g. an XWindow on X11). Passing 0 as the `handle` will
|
||||||
tell the overlay to stop using that window and create an internal one.
|
tell the overlay to stop using that window and create an internal one.
|
||||||
## `handle`
|
## `handle`
|
||||||
a handle referencing the window.
|
a handle referencing the window.
|
||||||
|
<!-- struct VideoOverlayFormatFlags -->
|
||||||
|
Overlay format flags.
|
||||||
|
<!-- struct VideoOverlayFormatFlags::const NONE -->
|
||||||
|
no flags
|
||||||
|
<!-- struct VideoOverlayFormatFlags::const PREMULTIPLIED_ALPHA -->
|
||||||
|
RGB are premultiplied by A/255.
|
||||||
|
<!-- struct VideoOverlayFormatFlags::const GLOBAL_ALPHA -->
|
||||||
|
a global-alpha value != 1 is set.
|
||||||
|
<!-- struct VideoPackFlags -->
|
||||||
|
The different flags that can be used when packing and unpacking.
|
||||||
|
<!-- struct VideoPackFlags::const NONE -->
|
||||||
|
No flag
|
||||||
|
<!-- struct VideoPackFlags::const TRUNCATE_RANGE -->
|
||||||
|
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.
|
||||||
|
<!-- struct VideoPackFlags::const INTERLACED -->
|
||||||
|
The source is interlaced. The unpacked
|
||||||
|
format will be interlaced as well with each line containing
|
||||||
|
information from alternating fields. (Since: 1.2)
|
||||||
<!-- enum VideoPrimariesMode -->
|
<!-- enum VideoPrimariesMode -->
|
||||||
Different primaries conversion modes
|
Different primaries conversion modes
|
||||||
<!-- enum VideoPrimariesMode::variant None -->
|
<!-- enum VideoPrimariesMode::variant None -->
|
||||||
|
@ -2200,6 +2446,18 @@ field 2
|
||||||
':' for non-drop-frame, non-interlaced content and for non-drop-frame
|
':' for non-drop-frame, non-interlaced content and for non-drop-frame
|
||||||
interlaced field 2
|
interlaced field 2
|
||||||
'.' for non-drop-frame interlaced field 1
|
'.' for non-drop-frame interlaced field 1
|
||||||
|
<!-- struct VideoTimeCodeFlags -->
|
||||||
|
Flags related to the time code information.
|
||||||
|
For drop frame, only 30000/1001 and 60000/1001 frame rates are supported.
|
||||||
|
<!-- struct VideoTimeCodeFlags::const NONE -->
|
||||||
|
No flags
|
||||||
|
<!-- struct VideoTimeCodeFlags::const DROP_FRAME -->
|
||||||
|
Whether we have drop frame rate
|
||||||
|
<!-- struct VideoTimeCodeFlags::const INTERLACED -->
|
||||||
|
Whether we have interlaced video
|
||||||
|
|
||||||
|
Feature: `v1_10`
|
||||||
|
|
||||||
<!-- struct VideoTimeCodeInterval -->
|
<!-- struct VideoTimeCodeInterval -->
|
||||||
A representation of a difference between two `VideoTimeCode` instances.
|
A representation of a difference between two `VideoTimeCode` instances.
|
||||||
Will not necessarily correspond to a real timecode (e.g. 00:00:10;00)
|
Will not necessarily correspond to a real timecode (e.g. 00:00:10;00)
|
||||||
|
|
|
@ -485,6 +485,20 @@ The messages are converted to an ELEMENT message with the bin as the
|
||||||
source. The structure of the message is named 'GstBinForwarded' and contains
|
source. The structure of the message is named 'GstBinForwarded' and contains
|
||||||
a field named 'message' of type GST_TYPE_MESSAGE that contains the original
|
a field named 'message' of type GST_TYPE_MESSAGE that contains the original
|
||||||
forwarded message.
|
forwarded message.
|
||||||
|
<!-- struct BinFlags -->
|
||||||
|
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 ().
|
||||||
|
<!-- struct BinFlags::const NO_RESYNC -->
|
||||||
|
don't resync a state change when elements are
|
||||||
|
added or linked in the bin (Since: 1.0.5)
|
||||||
|
<!-- struct BinFlags::const STREAMS_AWARE -->
|
||||||
|
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 (Since: 1.10)
|
||||||
|
<!-- struct BinFlags::const LAST -->
|
||||||
|
the last enum in the series of flags for bins.
|
||||||
|
Derived classes can use this as first value in a list of flags.
|
||||||
<!-- struct Buffer -->
|
<!-- struct Buffer -->
|
||||||
Buffers are the basic unit of data transfer in GStreamer. They contain the
|
Buffers are the basic unit of data transfer in GStreamer. They contain the
|
||||||
timing and offset along with other arbitrary metadata that is associated
|
timing and offset along with other arbitrary metadata that is associated
|
||||||
|
@ -1000,6 +1014,17 @@ a pointer to the maxsize
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
total size of `length` memory blocks starting at `idx` in `self`.
|
total size of `length` memory blocks starting at `idx` in `self`.
|
||||||
|
<!-- impl Buffer::fn has_flags -->
|
||||||
|
Gives the status of a specific flag on a buffer.
|
||||||
|
|
||||||
|
Feature: `v1_10`
|
||||||
|
|
||||||
|
## `flags`
|
||||||
|
the `BufferFlags` flag to check.
|
||||||
|
|
||||||
|
# Returns
|
||||||
|
|
||||||
|
`true` if all flags in `flags` are found on `self`.
|
||||||
<!-- impl Buffer::fn insert_memory -->
|
<!-- impl Buffer::fn insert_memory -->
|
||||||
Insert the memory block `mem` to `self` at `idx`. This function takes ownership
|
Insert the memory block `mem` to `self` at `idx`. This function takes ownership
|
||||||
of `mem` and thus doesn't increase its refcount.
|
of `mem` and thus doesn't increase its refcount.
|
||||||
|
@ -1303,6 +1328,82 @@ pointer to a `Buffer` that will
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
`true` when `obuf` was different from `nbuf`.
|
`true` when `obuf` was different from `nbuf`.
|
||||||
|
<!-- struct BufferCopyFlags -->
|
||||||
|
A set of flags that can be provided to the `Buffer::copy_into`
|
||||||
|
function to specify which items should be copied.
|
||||||
|
<!-- struct BufferCopyFlags::const NONE -->
|
||||||
|
copy nothing
|
||||||
|
<!-- struct BufferCopyFlags::const FLAGS -->
|
||||||
|
flag indicating that buffer flags should be copied
|
||||||
|
<!-- struct BufferCopyFlags::const TIMESTAMPS -->
|
||||||
|
flag indicating that buffer pts, dts,
|
||||||
|
duration, offset and offset_end should be copied
|
||||||
|
<!-- struct BufferCopyFlags::const META -->
|
||||||
|
flag indicating that buffer meta should be
|
||||||
|
copied
|
||||||
|
<!-- struct BufferCopyFlags::const MEMORY -->
|
||||||
|
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 `BufferCopyFlags::Deep` to force a real copy.
|
||||||
|
<!-- struct BufferCopyFlags::const MERGE -->
|
||||||
|
flag indicating that buffer memory should be
|
||||||
|
merged
|
||||||
|
<!-- struct BufferCopyFlags::const DEEP -->
|
||||||
|
flag indicating that memory should always be
|
||||||
|
copied instead of reffed (Since: 1.2)
|
||||||
|
<!-- struct BufferFlags -->
|
||||||
|
A set of buffer flags used to describe properties of a `Buffer`.
|
||||||
|
<!-- struct BufferFlags::const LIVE -->
|
||||||
|
the buffer is live data and should be discarded in
|
||||||
|
the PAUSED state.
|
||||||
|
<!-- struct BufferFlags::const DECODE_ONLY -->
|
||||||
|
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.
|
||||||
|
<!-- struct BufferFlags::const DISCONT -->
|
||||||
|
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.
|
||||||
|
<!-- struct BufferFlags::const RESYNC -->
|
||||||
|
the buffer timestamps might have a discontinuity
|
||||||
|
and this buffer is a good point to resynchronize.
|
||||||
|
<!-- struct BufferFlags::const CORRUPTED -->
|
||||||
|
the buffer data is corrupted.
|
||||||
|
<!-- struct BufferFlags::const MARKER -->
|
||||||
|
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.
|
||||||
|
<!-- struct BufferFlags::const HEADER -->
|
||||||
|
the buffer contains header information that is
|
||||||
|
needed to decode the following data.
|
||||||
|
<!-- struct BufferFlags::const GAP -->
|
||||||
|
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).
|
||||||
|
<!-- struct BufferFlags::const DROPPABLE -->
|
||||||
|
the buffer can be dropped without breaking the
|
||||||
|
stream, for example to reduce bandwidth.
|
||||||
|
<!-- struct BufferFlags::const DELTA_UNIT -->
|
||||||
|
this unit cannot be decoded independently.
|
||||||
|
<!-- struct BufferFlags::const TAG_MEMORY -->
|
||||||
|
this flag is set when memory of the buffer
|
||||||
|
is added/removed
|
||||||
|
<!-- struct BufferFlags::const SYNC_AFTER -->
|
||||||
|
Elements which write to disk or permanent
|
||||||
|
storage should ensure the data is synced after
|
||||||
|
writing the contents of this buffer. (Since: 1.6)
|
||||||
|
<!-- struct BufferFlags::const NON_DROPPABLE -->
|
||||||
|
This buffer is important and should not be dropped.
|
||||||
|
This can be used to mark important buffers, e.g. to flag
|
||||||
|
RTP packets 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. (Since: 1.14)
|
||||||
|
<!-- struct BufferFlags::const LAST -->
|
||||||
|
additional media specific flags can be added starting from
|
||||||
|
this flag.
|
||||||
<!-- struct BufferList -->
|
<!-- struct BufferList -->
|
||||||
Buffer lists are an object containing a list of buffers.
|
Buffer lists are an object containing a list of buffers.
|
||||||
|
|
||||||
|
@ -1716,6 +1817,21 @@ Enable or disable the flushing state of a `self` without freeing or
|
||||||
allocating buffers.
|
allocating buffers.
|
||||||
## `flushing`
|
## `flushing`
|
||||||
whether to start or stop flushing
|
whether to start or stop flushing
|
||||||
|
<!-- struct BufferPoolAcquireFlags -->
|
||||||
|
Additional flags to control the allocation of a buffer
|
||||||
|
<!-- struct BufferPoolAcquireFlags::const NONE -->
|
||||||
|
no flags
|
||||||
|
<!-- struct BufferPoolAcquireFlags::const KEY_UNIT -->
|
||||||
|
buffer is keyframe
|
||||||
|
<!-- struct BufferPoolAcquireFlags::const DONTWAIT -->
|
||||||
|
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 `FlowReturn::Eos` instead of blocking.
|
||||||
|
<!-- struct BufferPoolAcquireFlags::const DISCONT -->
|
||||||
|
buffer is discont
|
||||||
|
<!-- struct BufferPoolAcquireFlags::const LAST -->
|
||||||
|
last flag, subclasses can use private flags
|
||||||
|
starting from this value.
|
||||||
<!-- enum BufferingMode -->
|
<!-- enum BufferingMode -->
|
||||||
The different types of buffering methods.
|
The different types of buffering methods.
|
||||||
<!-- enum BufferingMode::variant Stream -->
|
<!-- enum BufferingMode::variant Stream -->
|
||||||
|
@ -3443,6 +3559,25 @@ The type of the clock entry
|
||||||
a single shot timeout
|
a single shot timeout
|
||||||
<!-- enum ClockEntryType::variant Periodic -->
|
<!-- enum ClockEntryType::variant Periodic -->
|
||||||
a periodic timeout request
|
a periodic timeout request
|
||||||
|
<!-- struct ClockFlags -->
|
||||||
|
The capabilities of this clock
|
||||||
|
<!-- struct ClockFlags::const CAN_DO_SINGLE_SYNC -->
|
||||||
|
clock can do a single sync timeout request
|
||||||
|
<!-- struct ClockFlags::const CAN_DO_SINGLE_ASYNC -->
|
||||||
|
clock can do a single async timeout request
|
||||||
|
<!-- struct ClockFlags::const CAN_DO_PERIODIC_SYNC -->
|
||||||
|
clock can do sync periodic timeout requests
|
||||||
|
<!-- struct ClockFlags::const CAN_DO_PERIODIC_ASYNC -->
|
||||||
|
clock can do async periodic timeout callbacks
|
||||||
|
<!-- struct ClockFlags::const CAN_SET_RESOLUTION -->
|
||||||
|
clock's resolution can be changed
|
||||||
|
<!-- struct ClockFlags::const CAN_SET_MASTER -->
|
||||||
|
clock can be slaved to a master clock
|
||||||
|
<!-- struct ClockFlags::const NEEDS_STARTUP_SYNC -->
|
||||||
|
clock needs to be synced before it can be used
|
||||||
|
(Since: 1.6)
|
||||||
|
<!-- struct ClockFlags::const LAST -->
|
||||||
|
subclasses can add additional flags starting from this flag
|
||||||
<!-- enum ClockReturn -->
|
<!-- enum ClockReturn -->
|
||||||
The return value of a clock operation.
|
The return value of a clock operation.
|
||||||
<!-- enum ClockReturn::variant Ok -->
|
<!-- enum ClockReturn::variant Ok -->
|
||||||
|
@ -3926,6 +4061,65 @@ a newly allocated string formatted according
|
||||||
<!-- impl DateTime::fn unref -->
|
<!-- impl DateTime::fn unref -->
|
||||||
Atomically decrements the reference count of `self` by one. When the
|
Atomically decrements the reference count of `self` by one. When the
|
||||||
reference count reaches zero, the structure is freed.
|
reference count reaches zero, the structure is freed.
|
||||||
|
<!-- struct DebugColorFlags -->
|
||||||
|
These are some terminal style flags you can use when creating your
|
||||||
|
debugging categories to make them stand out in debugging output.
|
||||||
|
<!-- struct DebugColorFlags::const FG_BLACK -->
|
||||||
|
Use black as foreground color.
|
||||||
|
<!-- struct DebugColorFlags::const FG_RED -->
|
||||||
|
Use red as foreground color.
|
||||||
|
<!-- struct DebugColorFlags::const FG_GREEN -->
|
||||||
|
Use green as foreground color.
|
||||||
|
<!-- struct DebugColorFlags::const FG_YELLOW -->
|
||||||
|
Use yellow as foreground color.
|
||||||
|
<!-- struct DebugColorFlags::const FG_BLUE -->
|
||||||
|
Use blue as foreground color.
|
||||||
|
<!-- struct DebugColorFlags::const FG_MAGENTA -->
|
||||||
|
Use magenta as foreground color.
|
||||||
|
<!-- struct DebugColorFlags::const FG_CYAN -->
|
||||||
|
Use cyan as foreground color.
|
||||||
|
<!-- struct DebugColorFlags::const FG_WHITE -->
|
||||||
|
Use white as foreground color.
|
||||||
|
<!-- struct DebugColorFlags::const BG_BLACK -->
|
||||||
|
Use black as background color.
|
||||||
|
<!-- struct DebugColorFlags::const BG_RED -->
|
||||||
|
Use red as background color.
|
||||||
|
<!-- struct DebugColorFlags::const BG_GREEN -->
|
||||||
|
Use green as background color.
|
||||||
|
<!-- struct DebugColorFlags::const BG_YELLOW -->
|
||||||
|
Use yellow as background color.
|
||||||
|
<!-- struct DebugColorFlags::const BG_BLUE -->
|
||||||
|
Use blue as background color.
|
||||||
|
<!-- struct DebugColorFlags::const BG_MAGENTA -->
|
||||||
|
Use magenta as background color.
|
||||||
|
<!-- struct DebugColorFlags::const BG_CYAN -->
|
||||||
|
Use cyan as background color.
|
||||||
|
<!-- struct DebugColorFlags::const BG_WHITE -->
|
||||||
|
Use white as background color.
|
||||||
|
<!-- struct DebugColorFlags::const BOLD -->
|
||||||
|
Make the output bold.
|
||||||
|
<!-- struct DebugColorFlags::const UNDERLINE -->
|
||||||
|
Underline the output.
|
||||||
|
<!-- struct DebugGraphDetails -->
|
||||||
|
Available details for pipeline graphs produced by GST_DEBUG_BIN_TO_DOT_FILE()
|
||||||
|
and GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS().
|
||||||
|
<!-- struct DebugGraphDetails::const MEDIA_TYPE -->
|
||||||
|
show caps-name on edges
|
||||||
|
<!-- struct DebugGraphDetails::const CAPS_DETAILS -->
|
||||||
|
show caps-details on edges
|
||||||
|
<!-- struct DebugGraphDetails::const NON_DEFAULT_PARAMS -->
|
||||||
|
show modified parameters on
|
||||||
|
elements
|
||||||
|
<!-- struct DebugGraphDetails::const STATES -->
|
||||||
|
show element states
|
||||||
|
<!-- struct DebugGraphDetails::const FULL_PARAMS -->
|
||||||
|
show full element parameter values even
|
||||||
|
if they are very long
|
||||||
|
<!-- struct DebugGraphDetails::const ALL -->
|
||||||
|
show all the typical details that one might want
|
||||||
|
<!-- struct DebugGraphDetails::const VERBOSE -->
|
||||||
|
show all details regardless of how large or
|
||||||
|
verbose they make the resulting output
|
||||||
<!-- enum DebugLevel -->
|
<!-- enum DebugLevel -->
|
||||||
The level defines the importance of a debugging message. The more important a
|
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.
|
message is, the greater the probability that the debugging system outputs it.
|
||||||
|
@ -5761,6 +5955,22 @@ a `ElementFactoryListType`
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
`true` if `self` is of `type_`.
|
`true` if `self` is of `type_`.
|
||||||
|
<!-- struct ElementFlags -->
|
||||||
|
The standard flags that an element may have.
|
||||||
|
<!-- struct ElementFlags::const LOCKED_STATE -->
|
||||||
|
ignore state changes from parent
|
||||||
|
<!-- struct ElementFlags::const SINK -->
|
||||||
|
the element is a sink
|
||||||
|
<!-- struct ElementFlags::const SOURCE -->
|
||||||
|
the element is a source.
|
||||||
|
<!-- struct ElementFlags::const PROVIDE_CLOCK -->
|
||||||
|
the element can provide a clock
|
||||||
|
<!-- struct ElementFlags::const REQUIRE_CLOCK -->
|
||||||
|
the element requires a clock
|
||||||
|
<!-- struct ElementFlags::const INDEXABLE -->
|
||||||
|
the element can use an index
|
||||||
|
<!-- struct ElementFlags::const LAST -->
|
||||||
|
offset to define more flags
|
||||||
<!-- struct Event -->
|
<!-- struct Event -->
|
||||||
The event class provides factory methods to construct events for sending
|
The event class provides factory methods to construct events for sending
|
||||||
and functions to query (parse) received events.
|
and functions to query (parse) received events.
|
||||||
|
@ -7021,6 +7231,11 @@ This function is most useful in language bindings and when subclassing
|
||||||
function. Call this function directly after a call to g_object_new
|
function. Call this function directly after a call to g_object_new
|
||||||
(GST_TYPE_GHOST_PAD, "direction", `dir`, ..., NULL).
|
(GST_TYPE_GHOST_PAD, "direction", `dir`, ..., NULL).
|
||||||
|
|
||||||
|
# Deprecated
|
||||||
|
|
||||||
|
This function is deprecated since 1.18 and does nothing
|
||||||
|
anymore.
|
||||||
|
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
`true` if the construction succeeds, `false` otherwise.
|
`true` if the construction succeeds, `false` otherwise.
|
||||||
|
@ -7062,6 +7277,24 @@ used when the library doesn't accept settings.
|
||||||
used when the library generated an encoding error.
|
used when the library generated an encoding error.
|
||||||
<!-- enum LibraryError::variant NumErrors -->
|
<!-- enum LibraryError::variant NumErrors -->
|
||||||
the number of library error types.
|
the number of library error types.
|
||||||
|
<!-- struct MemoryFlags -->
|
||||||
|
Flags for wrapped memory.
|
||||||
|
<!-- struct MemoryFlags::const READONLY -->
|
||||||
|
memory is readonly. It is not allowed to map the
|
||||||
|
memory with `MapFlags::Write`.
|
||||||
|
<!-- struct MemoryFlags::const NO_SHARE -->
|
||||||
|
memory must not be shared. Copies will have to be
|
||||||
|
made when this memory needs to be shared between buffers.
|
||||||
|
<!-- struct MemoryFlags::const ZERO_PREFIXED -->
|
||||||
|
the memory prefix is filled with 0 bytes
|
||||||
|
<!-- struct MemoryFlags::const ZERO_PADDED -->
|
||||||
|
the memory padding is filled with 0 bytes
|
||||||
|
<!-- struct MemoryFlags::const PHYSICALLY_CONTIGUOUS -->
|
||||||
|
the memory is physically contiguous. (Since: 1.2)
|
||||||
|
<!-- struct MemoryFlags::const NOT_MAPPABLE -->
|
||||||
|
the memory can't be mapped via `Memory::map` without any preconditions. (Since: 1.2)
|
||||||
|
<!-- struct MemoryFlags::const LAST -->
|
||||||
|
first flag that can be used for custom purposes
|
||||||
<!-- struct Message -->
|
<!-- struct Message -->
|
||||||
Messages are implemented as a subclass of `MiniObject` with a generic
|
Messages are implemented as a subclass of `MiniObject` with a generic
|
||||||
`Structure` as the content. This allows for writing custom messages without
|
`Structure` as the content. This allows for writing custom messages without
|
||||||
|
@ -7078,7 +7311,7 @@ The basic use pattern of posting a message on a `Bus` is as follows:
|
||||||
```
|
```
|
||||||
|
|
||||||
A `Element` usually posts messages on the bus provided by the parent
|
A `Element` usually posts messages on the bus provided by the parent
|
||||||
container using `ElementExt::post_message`.
|
container using `Element::post_message`.
|
||||||
<!-- impl Message::fn new_application -->
|
<!-- impl Message::fn new_application -->
|
||||||
Create a new application-typed message. GStreamer will never create these
|
Create a new application-typed message. GStreamer will never create these
|
||||||
messages; they are a gift from us to you. Enjoy.
|
messages; they are a gift from us to you. Enjoy.
|
||||||
|
@ -8487,7 +8720,7 @@ floating reference. Be aware that functions such as `GstBinExt::add` and
|
||||||
`ElementExt::add_pad` take ownership of the floating reference.
|
`ElementExt::add_pad` take ownership of the floating reference.
|
||||||
|
|
||||||
In contrast to `gobject::Object` instances, `Object` adds a name property. The functions
|
In contrast to `gobject::Object` instances, `Object` adds a name property. The functions
|
||||||
`GstObjectExt::set_name` and `GstObjectExt::get_name` are used to set/get the name
|
`Object::set_name` and `GstObjectExt::get_name` are used to set/get the name
|
||||||
of the object.
|
of the object.
|
||||||
|
|
||||||
## controlled properties
|
## controlled properties
|
||||||
|
@ -8908,6 +9141,14 @@ property, we don't emit `gobject::Object::notify` and `Object::deep-notify`
|
||||||
signals due to locking issues. In some cases one can use
|
signals due to locking issues. In some cases one can use
|
||||||
`Bin::element-added` or `Bin::element-removed` signals on the parent to
|
`Bin::element-added` or `Bin::element-removed` signals on the parent to
|
||||||
achieve a similar effect.
|
achieve a similar effect.
|
||||||
|
<!-- struct ObjectFlags -->
|
||||||
|
The standard flags that an gstobject may have.
|
||||||
|
<!-- struct ObjectFlags::const MAY_BE_LEAKED -->
|
||||||
|
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)
|
||||||
|
<!-- struct ObjectFlags::const LAST -->
|
||||||
|
subclasses can add additional flags starting from this flag
|
||||||
<!-- struct Pad -->
|
<!-- struct Pad -->
|
||||||
A `Element` is linked to other elements via "pads", which are extremely
|
A `Element` is linked to other elements via "pads", which are extremely
|
||||||
light-weight generic link points.
|
light-weight generic link points.
|
||||||
|
@ -10138,6 +10379,81 @@ direction is unknown.
|
||||||
the pad is a source pad.
|
the pad is a source pad.
|
||||||
<!-- enum PadDirection::variant Sink -->
|
<!-- enum PadDirection::variant Sink -->
|
||||||
the pad is a sink pad.
|
the pad is a sink pad.
|
||||||
|
<!-- struct PadFlags -->
|
||||||
|
Pad state flags
|
||||||
|
<!-- struct PadFlags::const BLOCKED -->
|
||||||
|
is dataflow on a pad blocked
|
||||||
|
<!-- struct PadFlags::const FLUSHING -->
|
||||||
|
is pad flushing
|
||||||
|
<!-- struct PadFlags::const EOS -->
|
||||||
|
is pad in EOS state
|
||||||
|
<!-- struct PadFlags::const BLOCKING -->
|
||||||
|
is pad currently blocking on a buffer or event
|
||||||
|
<!-- struct PadFlags::const NEED_PARENT -->
|
||||||
|
ensure that there is a parent object before calling
|
||||||
|
into the pad callbacks.
|
||||||
|
<!-- struct PadFlags::const NEED_RECONFIGURE -->
|
||||||
|
the pad should be reconfigured/renegotiated.
|
||||||
|
The flag has to be unset manually after
|
||||||
|
reconfiguration happened.
|
||||||
|
<!-- struct PadFlags::const PENDING_EVENTS -->
|
||||||
|
the pad has pending events
|
||||||
|
<!-- struct PadFlags::const FIXED_CAPS -->
|
||||||
|
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.
|
||||||
|
<!-- struct PadFlags::const PROXY_CAPS -->
|
||||||
|
the default event and query handler will forward
|
||||||
|
all events and queries to the internally linked pads
|
||||||
|
instead of discarding them.
|
||||||
|
<!-- struct PadFlags::const PROXY_ALLOCATION -->
|
||||||
|
the default query handler will forward
|
||||||
|
allocation queries to the internally linked pads
|
||||||
|
instead of discarding them.
|
||||||
|
<!-- struct PadFlags::const PROXY_SCHEDULING -->
|
||||||
|
the default query handler will forward
|
||||||
|
scheduling queries to the internally linked pads
|
||||||
|
instead of discarding them.
|
||||||
|
<!-- struct PadFlags::const ACCEPT_INTERSECT -->
|
||||||
|
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.
|
||||||
|
<!-- struct PadFlags::const ACCEPT_TEMPLATE -->
|
||||||
|
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 `PadFlags::AcceptIntersect`. (Since: 1.6)
|
||||||
|
<!-- struct PadFlags::const LAST -->
|
||||||
|
offset to define more flags
|
||||||
|
<!-- struct PadLinkCheck -->
|
||||||
|
The amount of checking to be done when linking pads. `PadLinkCheck::Caps`
|
||||||
|
and `PadLinkCheck::TemplateCaps` are mutually exclusive. If both are
|
||||||
|
specified, expensive but safe `PadLinkCheck::Caps` are performed.
|
||||||
|
|
||||||
|
> Only disable some of the checks if you are 100% certain you know the link
|
||||||
|
> will not fail because of hierarchy/caps compatibility failures. If uncertain,
|
||||||
|
> use the default checks (`PadLinkCheck::Default`) or the regular methods
|
||||||
|
> for linking the pads.
|
||||||
|
<!-- struct PadLinkCheck::const NOTHING -->
|
||||||
|
Don't check hierarchy or caps compatibility.
|
||||||
|
<!-- struct PadLinkCheck::const HIERARCHY -->
|
||||||
|
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.
|
||||||
|
<!-- struct PadLinkCheck::const TEMPLATE_CAPS -->
|
||||||
|
Check if the pads are compatible by using
|
||||||
|
their template caps. This is much faster than `PadLinkCheck::Caps`, but
|
||||||
|
would be unsafe e.g. if one pad has `GST_CAPS_ANY`.
|
||||||
|
<!-- struct PadLinkCheck::const CAPS -->
|
||||||
|
Check if the pads are compatible by comparing the
|
||||||
|
caps returned by `PadExt::query_caps`.
|
||||||
|
<!-- struct PadLinkCheck::const NO_RECONFIGURE -->
|
||||||
|
Disables pushing a reconfigure event when pads are
|
||||||
|
linked.
|
||||||
|
<!-- struct PadLinkCheck::const DEFAULT -->
|
||||||
|
The default checks done when linking
|
||||||
|
pads (i.e. the ones used by `Pad::link`).
|
||||||
<!-- enum PadLinkReturn -->
|
<!-- enum PadLinkReturn -->
|
||||||
Result values from gst_pad_link and friends.
|
Result values from gst_pad_link and friends.
|
||||||
<!-- enum PadLinkReturn::variant Ok -->
|
<!-- enum PadLinkReturn::variant Ok -->
|
||||||
|
@ -10201,6 +10517,57 @@ Data has been handled in the probe and will not be
|
||||||
`GST_PAD_PROBE_INFO_FLOW_RETURN`() accessor.
|
`GST_PAD_PROBE_INFO_FLOW_RETURN`() accessor.
|
||||||
Note that the resulting query must contain valid entries.
|
Note that the resulting query must contain valid entries.
|
||||||
Since: 1.6
|
Since: 1.6
|
||||||
|
<!-- struct PadProbeType -->
|
||||||
|
The different probing types that can occur. When either one of
|
||||||
|
`PadProbeType::Idle` or `PadProbeType::Block` is used, the probe will be a
|
||||||
|
blocking probe.
|
||||||
|
<!-- struct PadProbeType::const INVALID -->
|
||||||
|
invalid probe type
|
||||||
|
<!-- struct PadProbeType::const IDLE -->
|
||||||
|
probe idle pads and block while the callback is called
|
||||||
|
<!-- struct PadProbeType::const BLOCK -->
|
||||||
|
probe and block pads
|
||||||
|
<!-- struct PadProbeType::const BUFFER -->
|
||||||
|
probe buffers
|
||||||
|
<!-- struct PadProbeType::const BUFFER_LIST -->
|
||||||
|
probe buffer lists
|
||||||
|
<!-- struct PadProbeType::const EVENT_DOWNSTREAM -->
|
||||||
|
probe downstream events
|
||||||
|
<!-- struct PadProbeType::const EVENT_UPSTREAM -->
|
||||||
|
probe upstream events
|
||||||
|
<!-- struct PadProbeType::const EVENT_FLUSH -->
|
||||||
|
probe flush events. This probe has to be
|
||||||
|
explicitly enabled and is not included in the
|
||||||
|
@`PadProbeType::EventDownstream` or
|
||||||
|
@`PadProbeType::EventUpstream` probe types.
|
||||||
|
<!-- struct PadProbeType::const QUERY_DOWNSTREAM -->
|
||||||
|
probe downstream queries
|
||||||
|
<!-- struct PadProbeType::const QUERY_UPSTREAM -->
|
||||||
|
probe upstream queries
|
||||||
|
<!-- struct PadProbeType::const PUSH -->
|
||||||
|
probe push
|
||||||
|
<!-- struct PadProbeType::const PULL -->
|
||||||
|
probe pull
|
||||||
|
<!-- struct PadProbeType::const BLOCKING -->
|
||||||
|
probe and block at the next opportunity, at data flow or when idle
|
||||||
|
<!-- struct PadProbeType::const DATA_DOWNSTREAM -->
|
||||||
|
probe downstream data (buffers, buffer lists, and events)
|
||||||
|
<!-- struct PadProbeType::const DATA_UPSTREAM -->
|
||||||
|
probe upstream data (events)
|
||||||
|
<!-- struct PadProbeType::const DATA_BOTH -->
|
||||||
|
probe upstream and downstream data (buffers, buffer lists, and events)
|
||||||
|
<!-- struct PadProbeType::const BLOCK_DOWNSTREAM -->
|
||||||
|
probe and block downstream data (buffers, buffer lists, and events)
|
||||||
|
<!-- struct PadProbeType::const BLOCK_UPSTREAM -->
|
||||||
|
probe and block upstream data (events)
|
||||||
|
<!-- struct PadProbeType::const EVENT_BOTH -->
|
||||||
|
probe upstream and downstream events
|
||||||
|
<!-- struct PadProbeType::const QUERY_BOTH -->
|
||||||
|
probe upstream and downstream queries
|
||||||
|
<!-- struct PadProbeType::const ALL_BOTH -->
|
||||||
|
probe upstream events and queries and downstream buffers, buffer lists, events and queries
|
||||||
|
<!-- struct PadProbeType::const SCHEDULING -->
|
||||||
|
probe push and pull
|
||||||
<!-- struct PadTemplate -->
|
<!-- struct PadTemplate -->
|
||||||
Padtemplates describe the possible media types a pad or an elementfactory can
|
Padtemplates describe the possible media types a pad or an elementfactory can
|
||||||
handle. This allows for both inspection of handled types before loading the
|
handle. This allows for both inspection of handled types before loading the
|
||||||
|
@ -10323,10 +10690,30 @@ Gets the capabilities of the pad template.
|
||||||
|
|
||||||
the `Caps` of the pad template.
|
the `Caps` of the pad template.
|
||||||
Unref after usage.
|
Unref after usage.
|
||||||
|
<!-- impl PadTemplate::fn get_documentation_caps -->
|
||||||
|
See `PadTemplate::set_documentation_caps`.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
|
|
||||||
|
# Returns
|
||||||
|
|
||||||
|
The caps to document. For convenience, this will return
|
||||||
|
`PadTemplate::get_caps` when no documentation caps were set.
|
||||||
<!-- impl PadTemplate::fn pad_created -->
|
<!-- impl PadTemplate::fn pad_created -->
|
||||||
Emit the pad-created signal for this template when created by this pad.
|
Emit the pad-created signal for this template when created by this pad.
|
||||||
## `pad`
|
## `pad`
|
||||||
the `Pad` that created it
|
the `Pad` that created it
|
||||||
|
<!-- impl PadTemplate::fn set_documentation_caps -->
|
||||||
|
Certain elements will dynamically construct the caps of their
|
||||||
|
pad templates. In order not to let environment-specific information
|
||||||
|
into the documentation, element authors should use this method to
|
||||||
|
expose "stable" caps to the reader.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
|
## `caps`
|
||||||
|
the documented capabilities
|
||||||
<!-- impl PadTemplate::fn connect_pad_created -->
|
<!-- impl PadTemplate::fn connect_pad_created -->
|
||||||
This signal is fired when an element creates a pad from this template.
|
This signal is fired when an element creates a pad from this template.
|
||||||
## `pad`
|
## `pad`
|
||||||
|
@ -10372,6 +10759,9 @@ a newly-allocated parse context. Free
|
||||||
<!-- impl ParseContext::fn copy -->
|
<!-- impl ParseContext::fn copy -->
|
||||||
Copies the `self`.
|
Copies the `self`.
|
||||||
|
|
||||||
|
Feature: `v1_12_1`
|
||||||
|
|
||||||
|
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
A copied `ParseContext`
|
A copied `ParseContext`
|
||||||
|
@ -10405,6 +10795,21 @@ An empty bin was specified.
|
||||||
An empty description was specified
|
An empty description was specified
|
||||||
<!-- enum ParseError::variant DelayedLink -->
|
<!-- enum ParseError::variant DelayedLink -->
|
||||||
A delayed link did not get resolved.
|
A delayed link did not get resolved.
|
||||||
|
<!-- struct ParseFlags -->
|
||||||
|
Parsing options.
|
||||||
|
<!-- struct ParseFlags::const NONE -->
|
||||||
|
Do not use any special parsing options.
|
||||||
|
<!-- struct ParseFlags::const FATAL_ERRORS -->
|
||||||
|
Always return `None` when an error occurs
|
||||||
|
(default behaviour is to return partially constructed bins or elements
|
||||||
|
in some cases)
|
||||||
|
<!-- struct ParseFlags::const NO_SINGLE_ELEMENT_BINS -->
|
||||||
|
If a bin only has a single element,
|
||||||
|
just return the element.
|
||||||
|
<!-- struct ParseFlags::const PLACE_IN_BIN -->
|
||||||
|
If more than one toplevel element is described
|
||||||
|
by the pipeline description string, put them in a `Bin` instead of a
|
||||||
|
`Pipeline`. (Since: 1.10)
|
||||||
<!-- struct Pipeline -->
|
<!-- struct Pipeline -->
|
||||||
A `Pipeline` is a special `Bin` used as the toplevel container for
|
A `Pipeline` is a special `Bin` used as the toplevel container for
|
||||||
the filter graph. The `Pipeline` will manage the selection and
|
the filter graph. The `Pipeline` will manage the selection and
|
||||||
|
@ -10618,6 +11023,12 @@ see `PipelineExt::set_delay` for more information on this option.
|
||||||
Latency to configure on the pipeline. See `PipelineExt::set_latency`.
|
Latency to configure on the pipeline. See `PipelineExt::set_latency`.
|
||||||
<!-- trait PipelineExt::fn set_property_latency -->
|
<!-- trait PipelineExt::fn set_property_latency -->
|
||||||
Latency to configure on the pipeline. See `PipelineExt::set_latency`.
|
Latency to configure on the pipeline. See `PipelineExt::set_latency`.
|
||||||
|
<!-- struct PipelineFlags -->
|
||||||
|
Pipeline flags
|
||||||
|
<!-- struct PipelineFlags::const FIXED_CLOCK -->
|
||||||
|
this pipeline works with a fixed clock
|
||||||
|
<!-- struct PipelineFlags::const LAST -->
|
||||||
|
offset to define more flags
|
||||||
<!-- struct Plugin -->
|
<!-- struct Plugin -->
|
||||||
GStreamer is extensible, so `Element` instances can be loaded at runtime.
|
GStreamer is extensible, so `Element` instances can be loaded at runtime.
|
||||||
A plugin system can provide one or more of the basic GStreamer
|
A plugin system can provide one or more of the basic GStreamer
|
||||||
|
@ -10895,6 +11306,35 @@ the `self`.
|
||||||
The cache is flushed every time the registry is rebuilt.
|
The cache is flushed every time the registry is rebuilt.
|
||||||
## `cache_data`
|
## `cache_data`
|
||||||
a structure containing the data to cache
|
a structure containing the data to cache
|
||||||
|
<!-- struct PluginAPIFlags -->
|
||||||
|
<!-- struct PluginAPIFlags::const MEMBERS -->
|
||||||
|
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.
|
||||||
|
|
||||||
|
Feature: `v1_18`
|
||||||
|
|
||||||
|
<!-- struct PluginDependencyFlags -->
|
||||||
|
Flags used in connection with `Plugin::add_dependency`.
|
||||||
|
<!-- struct PluginDependencyFlags::const NONE -->
|
||||||
|
no special flags
|
||||||
|
<!-- struct PluginDependencyFlags::const RECURSE -->
|
||||||
|
recurse into subdirectories
|
||||||
|
<!-- struct PluginDependencyFlags::const PATHS_ARE_DEFAULT_ONLY -->
|
||||||
|
use paths
|
||||||
|
argument only if none of the environment variables is set
|
||||||
|
<!-- struct PluginDependencyFlags::const FILE_NAME_IS_SUFFIX -->
|
||||||
|
interpret
|
||||||
|
filename argument as filter suffix and check all matching files in
|
||||||
|
the directory
|
||||||
|
<!-- struct PluginDependencyFlags::const FILE_NAME_IS_PREFIX -->
|
||||||
|
interpret
|
||||||
|
filename argument as filter prefix and check all matching files in
|
||||||
|
the directory. Since: 1.8.
|
||||||
|
<!-- struct PluginDependencyFlags::const PATHS_ARE_RELATIVE_TO_EXE -->
|
||||||
|
interpret
|
||||||
|
non-absolute paths as relative to the main executable directory. Since
|
||||||
|
1.14.
|
||||||
<!-- enum PluginError -->
|
<!-- enum PluginError -->
|
||||||
The plugin loading errors
|
The plugin loading errors
|
||||||
<!-- enum PluginError::variant Module -->
|
<!-- enum PluginError::variant Module -->
|
||||||
|
@ -11010,6 +11450,12 @@ Specifies a rank for a plugin feature, so that autoplugging uses
|
||||||
the most appropriate feature.
|
the most appropriate feature.
|
||||||
## `rank`
|
## `rank`
|
||||||
rank value - higher number means more priority rank
|
rank value - higher number means more priority rank
|
||||||
|
<!-- struct PluginFlags -->
|
||||||
|
The plugin loading state
|
||||||
|
<!-- struct PluginFlags::const CACHED -->
|
||||||
|
Temporarily loaded plugins
|
||||||
|
<!-- struct PluginFlags::const BLACKLISTED -->
|
||||||
|
The plugin won't be scanned (again)
|
||||||
<!-- struct Preset -->
|
<!-- struct Preset -->
|
||||||
This interface offers methods to query and manipulate parameter preset sets.
|
This interface offers methods to query and manipulate parameter preset sets.
|
||||||
A preset is a bunch of property settings, together with meta data and a name.
|
A preset is a bunch of property settings, together with meta data and a name.
|
||||||
|
@ -12661,6 +13107,118 @@ A `Segment`
|
||||||
<!-- impl Sample::fn unref -->
|
<!-- impl Sample::fn unref -->
|
||||||
Decreases the refcount of the sample. If the refcount reaches 0, the
|
Decreases the refcount of the sample. If the refcount reaches 0, the
|
||||||
sample will be freed.
|
sample will be freed.
|
||||||
|
<!-- struct SchedulingFlags -->
|
||||||
|
The different scheduling flags.
|
||||||
|
<!-- struct SchedulingFlags::const SEEKABLE -->
|
||||||
|
if seeking is possible
|
||||||
|
<!-- struct SchedulingFlags::const SEQUENTIAL -->
|
||||||
|
if sequential access is recommended
|
||||||
|
<!-- struct SchedulingFlags::const BANDWIDTH_LIMITED -->
|
||||||
|
if bandwidth is limited and buffering possible (since 1.2)
|
||||||
|
<!-- struct SeekFlags -->
|
||||||
|
Flags to be used with `Element::seek` or `Event::new_seek`. All flags
|
||||||
|
can be used together.
|
||||||
|
|
||||||
|
A non flushing seek might take some time to perform as the currently
|
||||||
|
playing data in the pipeline will not be cleared.
|
||||||
|
|
||||||
|
An accurate seek might be slower for formats that don't have any indexes
|
||||||
|
or timestamp markers in the stream. Specifying this flag might require a
|
||||||
|
complete scan of the file in those cases.
|
||||||
|
|
||||||
|
When performing a segment seek: after the playback of the segment completes,
|
||||||
|
no EOS will be emitted by the element that performed the seek, but a
|
||||||
|
`MessageType::SegmentDone` message will be posted on the bus by the element.
|
||||||
|
When this message is posted, it is possible to send a new seek event to
|
||||||
|
continue playback. With this seek method it is possible to perform seamless
|
||||||
|
looping or simple linear editing.
|
||||||
|
|
||||||
|
When only changing the playback rate and not the direction, the
|
||||||
|
`SeekFlags::InstantRateChange` flag can be used for a non-flushing seek
|
||||||
|
to signal that the rate change should be applied immediately. This requires
|
||||||
|
special support in the seek handlers (e.g. demuxers) and any elements
|
||||||
|
synchronizing to the clock, and in general can't work in all cases (for example
|
||||||
|
UDP streaming where the delivery rate is controlled by a remote server). The
|
||||||
|
instant-rate-change mode supports changing the trickmode-related GST_SEEK_ flags,
|
||||||
|
but can't be used in conjunction with other seek flags that affect the new
|
||||||
|
playback position - as the playback position will not be changing.
|
||||||
|
|
||||||
|
When doing fast forward (rate > 1.0) or fast reverse (rate < -1.0) trickmode
|
||||||
|
playback, the `SeekFlags::Trickmode` flag can be used to instruct decoders
|
||||||
|
and demuxers to adjust the playback rate by skipping frames. This can improve
|
||||||
|
performance and decrease CPU usage because not all frames need to be decoded.
|
||||||
|
|
||||||
|
Beyond that, the `SeekFlags::TrickmodeKeyUnits` flag can be used to
|
||||||
|
request that decoders skip all frames except key units, and
|
||||||
|
`SeekFlags::TrickmodeNoAudio` flags can be used to request that audio
|
||||||
|
decoders do no decoding at all, and simple output silence.
|
||||||
|
|
||||||
|
The `SeekFlags::SnapBefore` flag can be used to snap to the previous
|
||||||
|
relevant location, and the `SeekFlags::SnapAfter` flag can be used to
|
||||||
|
select the next relevant location. If `SeekFlags::KeyUnit` is specified,
|
||||||
|
the relevant location is a keyframe. If both flags are specified, the nearest
|
||||||
|
of these locations will be selected. If none are specified, the implementation is
|
||||||
|
free to select whichever it wants.
|
||||||
|
|
||||||
|
The before and after here are in running time, so when playing backwards,
|
||||||
|
the next location refers to the one that will played in next, and not the
|
||||||
|
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.
|
||||||
|
<!-- struct SeekFlags::const NONE -->
|
||||||
|
no flag
|
||||||
|
<!-- struct SeekFlags::const FLUSH -->
|
||||||
|
flush pipeline
|
||||||
|
<!-- struct SeekFlags::const ACCURATE -->
|
||||||
|
accurate position is requested, this might
|
||||||
|
be considerably slower for some formats.
|
||||||
|
<!-- struct SeekFlags::const KEY_UNIT -->
|
||||||
|
seek to the nearest keyframe. This might be
|
||||||
|
faster but less accurate.
|
||||||
|
<!-- struct SeekFlags::const SEGMENT -->
|
||||||
|
perform a segment seek.
|
||||||
|
<!-- struct SeekFlags::const TRICKMODE -->
|
||||||
|
when doing fast forward or fast reverse playback, allow
|
||||||
|
elements to skip frames instead of generating all
|
||||||
|
frames. (Since: 1.6)
|
||||||
|
<!-- struct SeekFlags::const SKIP -->
|
||||||
|
Deprecated backward compatibility flag, replaced
|
||||||
|
by `SeekFlags::Trickmode`
|
||||||
|
<!-- struct SeekFlags::const SNAP_BEFORE -->
|
||||||
|
go to a location before the requested position,
|
||||||
|
if `SeekFlags::KeyUnit` this means the keyframe at or before
|
||||||
|
the requested position the one at or before the seek target.
|
||||||
|
<!-- struct SeekFlags::const SNAP_AFTER -->
|
||||||
|
go to a location after the requested position,
|
||||||
|
if `SeekFlags::KeyUnit` this means the keyframe at of after the
|
||||||
|
requested position.
|
||||||
|
<!-- struct SeekFlags::const SNAP_NEAREST -->
|
||||||
|
go to a position near the requested position,
|
||||||
|
if `SeekFlags::KeyUnit` this means the keyframe closest
|
||||||
|
to the requested position, if both keyframes are at an equal
|
||||||
|
distance, behaves like `SeekFlags::SnapBefore`.
|
||||||
|
<!-- struct SeekFlags::const TRICKMODE_KEY_UNITS -->
|
||||||
|
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)
|
||||||
|
<!-- struct SeekFlags::const TRICKMODE_NO_AUDIO -->
|
||||||
|
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)
|
||||||
|
<!-- struct SeekFlags::const TRICKMODE_FORWARD_PREDICTED -->
|
||||||
|
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)
|
||||||
|
<!-- struct SeekFlags::const INSTANT_RATE_CHANGE -->
|
||||||
|
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
|
||||||
|
and the seek is not flushing. (Since: 1.18)
|
||||||
<!-- enum SeekType -->
|
<!-- enum SeekType -->
|
||||||
The different types of seek events. When constructing a seek event with
|
The different types of seek events. When constructing a seek event with
|
||||||
`Event::new_seek` or when doing gst_segment_do_seek ().
|
`Event::new_seek` or when doing gst_segment_do_seek ().
|
||||||
|
@ -13043,6 +13601,42 @@ result stream-time
|
||||||
# Returns
|
# Returns
|
||||||
|
|
||||||
a 1 or -1 on success, 0 on failure.
|
a 1 or -1 on success, 0 on failure.
|
||||||
|
<!-- struct SegmentFlags -->
|
||||||
|
Flags for the GstSegment structure. Currently mapped to the corresponding
|
||||||
|
values of the seek flags.
|
||||||
|
<!-- struct SegmentFlags::const NONE -->
|
||||||
|
no flags
|
||||||
|
<!-- struct SegmentFlags::const RESET -->
|
||||||
|
reset the pipeline running_time to the segment
|
||||||
|
running_time
|
||||||
|
<!-- struct SegmentFlags::const TRICKMODE -->
|
||||||
|
perform skip playback (Since: 1.6)
|
||||||
|
<!-- struct SegmentFlags::const SKIP -->
|
||||||
|
Deprecated backward compatibility flag, replaced
|
||||||
|
by `SegmentFlags::Trickmode`
|
||||||
|
<!-- struct SegmentFlags::const SEGMENT -->
|
||||||
|
send SEGMENT_DONE instead of EOS
|
||||||
|
<!-- struct SegmentFlags::const TRICKMODE_KEY_UNITS -->
|
||||||
|
Decode only keyframes, where
|
||||||
|
possible (Since: 1.6)
|
||||||
|
<!-- struct SegmentFlags::const TRICKMODE_FORWARD_PREDICTED -->
|
||||||
|
Decode only keyframes or forward
|
||||||
|
predicted frames, where possible (Since: 1.18)
|
||||||
|
<!-- struct SegmentFlags::const TRICKMODE_NO_AUDIO -->
|
||||||
|
Do not decode any audio, where
|
||||||
|
possible (Since: 1.6)
|
||||||
|
<!-- struct StackTraceFlags -->
|
||||||
|
<!-- struct StackTraceFlags::const NONE -->
|
||||||
|
Try to retrieve the minimum information
|
||||||
|
available, which may be none on some platforms
|
||||||
|
(Since: 1.18)
|
||||||
|
<!-- struct StackTraceFlags::const FULL -->
|
||||||
|
Try to retrieve as much information as possible,
|
||||||
|
including source information when getting the
|
||||||
|
stack trace
|
||||||
|
|
||||||
|
Feature: `v1_12`
|
||||||
|
|
||||||
<!-- enum State -->
|
<!-- enum State -->
|
||||||
The possible states an element can be in. States can be changed using
|
The possible states an element can be in. States can be changed using
|
||||||
`Element::set_state` and checked using `Element::get_state`.
|
`Element::set_state` and checked using `Element::get_state`.
|
||||||
|
@ -13395,6 +13989,23 @@ used when the stream is encrypted and
|
||||||
can't be decrypted because no suitable key is available.
|
can't be decrypted because no suitable key is available.
|
||||||
<!-- enum StreamError::variant NumErrors -->
|
<!-- enum StreamError::variant NumErrors -->
|
||||||
the number of stream error types.
|
the number of stream error types.
|
||||||
|
<!-- struct StreamFlags -->
|
||||||
|
<!-- struct StreamFlags::const NONE -->
|
||||||
|
This stream has no special attributes
|
||||||
|
<!-- struct StreamFlags::const SPARSE -->
|
||||||
|
This stream is a sparse stream (e.g. a subtitle
|
||||||
|
stream), data may flow only in irregular intervals with large gaps in
|
||||||
|
between.
|
||||||
|
<!-- struct StreamFlags::const SELECT -->
|
||||||
|
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.
|
||||||
|
<!-- struct StreamFlags::const UNSELECT -->
|
||||||
|
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
|
||||||
|
selected by the user (e.g. an audio track for the hard of hearing or
|
||||||
|
a director's commentary track).
|
||||||
<!-- enum StreamStatusType -->
|
<!-- enum StreamStatusType -->
|
||||||
The type of a `MessageType::StreamStatus`. The stream status messages inform the
|
The type of a `MessageType::StreamStatus`. The stream status messages inform the
|
||||||
application of new streaming threads and their status.
|
application of new streaming threads and their status.
|
||||||
|
@ -13412,23 +14023,44 @@ a thread is started
|
||||||
a thread is paused
|
a thread is paused
|
||||||
<!-- enum StreamStatusType::variant Stop -->
|
<!-- enum StreamStatusType::variant Stop -->
|
||||||
a thread is stopped
|
a thread is stopped
|
||||||
|
<!-- struct StreamType -->
|
||||||
|
`StreamType` describes a high level classification set for
|
||||||
|
flows of data in `Stream` 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.
|
||||||
|
<!-- struct StreamType::const UNKNOWN -->
|
||||||
|
The stream is of unknown (unclassified) type.
|
||||||
|
<!-- struct StreamType::const AUDIO -->
|
||||||
|
The stream is of audio data
|
||||||
|
<!-- struct StreamType::const VIDEO -->
|
||||||
|
The stream carries video data
|
||||||
|
<!-- struct StreamType::const CONTAINER -->
|
||||||
|
The stream is a muxed container type
|
||||||
|
<!-- struct StreamType::const TEXT -->
|
||||||
|
The stream contains subtitle / subpicture data.
|
||||||
|
|
||||||
|
Feature: `v1_10`
|
||||||
|
|
||||||
<!-- struct Structure -->
|
<!-- struct Structure -->
|
||||||
A `Structure` is a collection of key/value pairs. The keys are expressed
|
A `Structure` is a collection of key/value pairs. The keys are expressed as
|
||||||
as GQuarks and the values can be of any GType.
|
GQuarks and the values can be of any GType.
|
||||||
|
|
||||||
In addition to the key/value pairs, a `Structure` also has a name. The name
|
In addition to the key/value pairs, a `Structure` also has a name. The name
|
||||||
starts with a letter and can be filled by letters, numbers and any of "/-_.:".
|
starts with a letter and can be filled by letters, numbers and any of
|
||||||
|
"/-_.:".
|
||||||
|
|
||||||
`Structure` is used by various GStreamer subsystems to store information
|
`Structure` is used by various GStreamer subsystems to store information in
|
||||||
in a flexible and extensible way. A `Structure` does not have a refcount
|
a flexible and extensible way. A `Structure` does not have a refcount
|
||||||
because it usually is part of a higher level object such as `Caps`,
|
because it usually is part of a higher level object such as `Caps`,
|
||||||
`Message`, `Event`, `Query`. It provides a means to enforce mutability
|
`Message`, `Event`, `Query`. It provides a means to enforce mutability
|
||||||
using the refcount of the parent with the `Structure::set_parent_refcount`
|
using the refcount of the parent with the `Structure::set_parent_refcount`
|
||||||
method.
|
method.
|
||||||
|
|
||||||
A `Structure` can be created with `Structure::new_empty` or
|
A `Structure` can be created with `Structure::new_empty` or
|
||||||
`Structure::new`, which both take a name and an optional set of
|
`Structure::new`, which both take a name and an optional set of key/value
|
||||||
key/value pairs along with the types of the values.
|
pairs along with the types of the values.
|
||||||
|
|
||||||
Field values can be changed with `Structure::set_value` or
|
Field values can be changed with `Structure::set_value` or
|
||||||
`Structure::set`.
|
`Structure::set`.
|
||||||
|
@ -13439,14 +14071,78 @@ convenient gst_structure_get_*() functions.
|
||||||
Fields can be removed with `Structure::remove_field` or
|
Fields can be removed with `Structure::remove_field` or
|
||||||
`Structure::remove_fields`.
|
`Structure::remove_fields`.
|
||||||
|
|
||||||
Strings in structures must be ASCII or UTF-8 encoded. Other encodings are
|
Strings in structures must be ASCII or UTF-8 encoded. Other encodings are not
|
||||||
not allowed. Strings may be `None` however.
|
allowed. Strings may be `None` however.
|
||||||
|
|
||||||
Be aware that the current `Caps` / `Structure` serialization into string
|
## The serialization format
|
||||||
has limited support for nested `Caps` / `Structure` fields. It can only
|
|
||||||
support one level of nesting. Using more levels will lead to unexpected
|
GstStructure serialization format serialize the GstStructure name,
|
||||||
behavior when using serialization features, such as `Caps::to_string` or
|
keys/GType/values in a comma separated list with the structure name as first
|
||||||
`gst_value_serialize` and their counterparts.
|
field without value followed by separated key/value pairs in the form
|
||||||
|
`key=value`, for example:
|
||||||
|
|
||||||
|
```
|
||||||
|
a-structure, key=value
|
||||||
|
````
|
||||||
|
|
||||||
|
The values type will be inferred if not explicitly specified with the
|
||||||
|
`(GTypeName)value` syntax, for example the following struct will have one
|
||||||
|
field called 'is-string' which has the string 'true' as a value:
|
||||||
|
|
||||||
|
```
|
||||||
|
a-struct, field-is-string=(string)true, field-is-boolean=true
|
||||||
|
```
|
||||||
|
|
||||||
|
*Note*: without specifying `(string), `field-is-string` type would have been
|
||||||
|
inferred as boolean.
|
||||||
|
|
||||||
|
*Note*: we specified `(string)` as a type even if `gchararray` is the actual
|
||||||
|
GType name as for convenience some well known types have been aliased or
|
||||||
|
abbreviated.
|
||||||
|
|
||||||
|
To avoid specifying the type, you can give some hints to the "type system".
|
||||||
|
For example to specify a value as a double, you should add a decimal (ie. `1`
|
||||||
|
is an `int` while `1.0` is a `double`).
|
||||||
|
|
||||||
|
*Note*: when a structure is serialized with `Structure::to_string`, all
|
||||||
|
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}`
|
||||||
|
- 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>
|
||||||
|
|
||||||
|
Structures are delimited either by a null character `\0` or a semicolumn `;`
|
||||||
|
the latter allowing to store multiple structures in the same string (see
|
||||||
|
#GstCaps).
|
||||||
|
|
||||||
|
Quotes are used as "default" delimiters and can be used around any types that
|
||||||
|
don't use other delimiters (for example `a-struct, i=(int)"1"`). They are use
|
||||||
|
to allow adding spaces or special characters (such as delimiters,
|
||||||
|
semicolumns, etc..) inside strings and you can use backslashes `\` to escape
|
||||||
|
characters inside them, for example:
|
||||||
|
|
||||||
|
```
|
||||||
|
a-struct, special="\"{[(;)]}\" can be used inside quotes"
|
||||||
|
```
|
||||||
|
|
||||||
|
They also allow for nested structure, such as:
|
||||||
|
|
||||||
|
```
|
||||||
|
a-struct, nested=(GstStructure)"nested-struct, nested=true"
|
||||||
|
```
|
||||||
|
|
||||||
|
> *Note*: Be aware that the current #GstCaps / #GstStructure serialization
|
||||||
|
> into string has limited support for nested #GstCaps / #GstStructure fields.
|
||||||
|
> It can only support one level of nesting. Using more levels will lead to
|
||||||
|
> unexpected behavior when using serialization features, such as
|
||||||
|
> gst_caps_to_string() or gst_value_serialize() and their counterparts.
|
||||||
<!-- impl Structure::fn from_string -->
|
<!-- impl Structure::fn from_string -->
|
||||||
Creates a `Structure` from a string representation.
|
Creates a `Structure` from a string representation.
|
||||||
If end is not `None`, a pointer to the place inside the given string
|
If end is not `None`, a pointer to the place inside the given string
|
||||||
|
@ -13687,6 +14383,9 @@ This is useful in language bindings where unknown `gobject::Value` types are not
|
||||||
supported. This function will convert the `GST_TYPE_ARRAY` into a newly
|
supported. This function will convert the `GST_TYPE_ARRAY` into a newly
|
||||||
allocated `gobject::ValueArray` and return it through `array`. Be aware that this is
|
allocated `gobject::ValueArray` and return it through `array`. Be aware that this is
|
||||||
slower then getting the `gobject::Value` directly.
|
slower then getting the `gobject::Value` directly.
|
||||||
|
|
||||||
|
Feature: `v1_12`
|
||||||
|
|
||||||
## `fieldname`
|
## `fieldname`
|
||||||
the name of a field
|
the name of a field
|
||||||
## `array`
|
## `array`
|
||||||
|
|
|
@ -1,36 +1,36 @@
|
||||||
[package]
|
[package]
|
||||||
name = "examples"
|
name = "examples"
|
||||||
version = "0.16.0"
|
version = "0.16.2"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
glib = "0.10"
|
||||||
gstreamer = { path = "../gstreamer" }
|
gstreamer = { version = "0.16", path = "../gstreamer" }
|
||||||
gstreamer-gl = { path = "../gstreamer-gl", optional = true }
|
gstreamer-gl = { version = "0.16", path = "../gstreamer-gl", optional = true }
|
||||||
gstreamer-app = { path = "../gstreamer-app" }
|
gstreamer-app = { version = "0.16", path = "../gstreamer-app" }
|
||||||
gstreamer-audio = { path = "../gstreamer-audio" }
|
gstreamer-audio = { version = "0.16", path = "../gstreamer-audio" }
|
||||||
gstreamer-base = { path = "../gstreamer-base" }
|
gstreamer-base = { version = "0.16", path = "../gstreamer-base" }
|
||||||
gstreamer-video = { path = "../gstreamer-video" }
|
gstreamer-video = { version = "0.16", path = "../gstreamer-video" }
|
||||||
gstreamer-pbutils = { path = "../gstreamer-pbutils" }
|
gstreamer-pbutils = { version = "0.16", path = "../gstreamer-pbutils" }
|
||||||
gstreamer-player = { path = "../gstreamer-player", optional = true }
|
gstreamer-player = { version = "0.16", path = "../gstreamer-player", optional = true }
|
||||||
gstreamer-editing-services = { path = "../gstreamer-editing-services", optional = true }
|
gstreamer-editing-services = { version = "0.16", path = "../gstreamer-editing-services", optional = true }
|
||||||
gstreamer-sdp = { path = "../gstreamer-sdp", optional = true }
|
gstreamer-sdp = { version = "0.16", path = "../gstreamer-sdp", optional = true }
|
||||||
gstreamer-rtsp = { path = "../gstreamer-rtsp", optional = true }
|
gstreamer-rtsp = { version = "0.16", path = "../gstreamer-rtsp", optional = true }
|
||||||
gstreamer-rtsp-server = { path = "../gstreamer-rtsp-server", optional = true }
|
gstreamer-rtsp-server = { version = "0.16", path = "../gstreamer-rtsp-server", optional = true }
|
||||||
gstreamer-rtsp-server-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"], optional = true }
|
gstreamer-rtsp-server-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"], optional = true }
|
||||||
gtk = { git = "https://github.com/gtk-rs/gtk", optional = true }
|
gtk = { version = "0.9", optional = true }
|
||||||
gdk = { git = "https://github.com/gtk-rs/gdk", optional = true }
|
gdk = { version = "0.13", optional = true }
|
||||||
gio = { git = "https://github.com/gtk-rs/gio", optional = true }
|
gio = { version = "0.9", optional = true }
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
derive_more = "0.99.5"
|
derive_more = "0.99.5"
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
byte-slice-cast = "0.3"
|
byte-slice-cast = "0.3"
|
||||||
cairo-rs = { git = "https://github.com/gtk-rs/cairo", features=["use_glib"], optional = true }
|
cairo-rs = { version = "0.9", features=["use_glib"], optional = true }
|
||||||
cairo-sys-rs = { git = "https://github.com/gtk-rs/cairo", features=["use_glib"], optional = true }
|
cairo-sys-rs = { version = "0.10", features=["use_glib"], optional = true }
|
||||||
pango = { git = "https://github.com/gtk-rs/pango", optional = true }
|
pango = { version = "0.9", optional = true }
|
||||||
pangocairo = { git = "https://github.com/gtk-rs/pangocairo", optional = true }
|
pangocairo = { version = "0.10", optional = true }
|
||||||
glutin = { version = "0.21", optional = true }
|
glutin = { version = "0.21", optional = true }
|
||||||
winit = { version = "0.19", optional = true }
|
winit = { version = "0.19", optional = true }
|
||||||
once_cell = "1.0"
|
once_cell = "1.0"
|
||||||
|
|
|
@ -19,7 +19,7 @@ mod custom_meta {
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
|
|
||||||
// Public Rust type for the custom meta.
|
// Public Rust type for the custom meta.
|
||||||
#[repr(C)]
|
#[repr(transparent)]
|
||||||
pub struct CustomMeta(imp::CustomMeta);
|
pub struct CustomMeta(imp::CustomMeta);
|
||||||
|
|
||||||
// Metas must be Send+Sync.
|
// Metas must be Send+Sync.
|
||||||
|
|
|
@ -84,7 +84,7 @@ fn create_ui(app: >k::Application) {
|
||||||
// the underlying pipeline, and display it in our gui.
|
// the underlying pipeline, and display it in our gui.
|
||||||
// Since this closure is called by the mainloop thread, we are allowed
|
// Since this closure is called by the mainloop thread, we are allowed
|
||||||
// to modify the gui widgets here.
|
// to modify the gui widgets here.
|
||||||
let timeout_id = gtk::timeout_add(500, move || {
|
let timeout_id = glib::timeout_add_local(500, move || {
|
||||||
// Here we temporarily retrieve a strong reference on the pipeline from the weak one
|
// Here we temporarily retrieve a strong reference on the pipeline from the weak one
|
||||||
// we moved into this callback.
|
// we moved into this callback.
|
||||||
let pipeline = match pipeline_weak.upgrade() {
|
let pipeline = match pipeline_weak.upgrade() {
|
||||||
|
|
|
@ -195,7 +195,7 @@ fn create_ui(app: >k::Application) {
|
||||||
// the underlying pipeline, and display it in our gui.
|
// the underlying pipeline, and display it in our gui.
|
||||||
// Since this closure is called by the mainloop thread, we are allowed
|
// Since this closure is called by the mainloop thread, we are allowed
|
||||||
// to modify the gui widgets here.
|
// to modify the gui widgets here.
|
||||||
let timeout_id = gtk::timeout_add(500, move || {
|
let timeout_id = glib::timeout_add_local(500, move || {
|
||||||
// Here we temporarily retrieve a strong reference on the pipeline from the weak one
|
// Here we temporarily retrieve a strong reference on the pipeline from the weak one
|
||||||
// we moved into this callback.
|
// we moved into this callback.
|
||||||
let pipeline = match pipeline_weak.upgrade() {
|
let pipeline = match pipeline_weak.upgrade() {
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
mod runloop {
|
mod runloop {
|
||||||
use std::os::raw::c_void;
|
use std::os::raw::c_void;
|
||||||
#[repr(C)]
|
|
||||||
pub struct CFRunLoop(*mut c_void);
|
pub struct CFRunLoop(*mut c_void);
|
||||||
|
|
||||||
#[link(name = "foundation", kind = "framework")]
|
#[link(name = "foundation", kind = "framework")]
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from os import listdir
|
from os import listdir
|
||||||
from os.path import isfile, join
|
from os.path import isfile, join
|
||||||
|
|
|
@ -949,7 +949,7 @@ be created by clips.</doc-deprecated>
|
||||||
<type name="utf8" c:type="gchar*"/>
|
<type name="utf8" c:type="gchar*"/>
|
||||||
</field>
|
</field>
|
||||||
<field name="priv" readable="0" private="1">
|
<field name="priv" readable="0" private="1">
|
||||||
<type name="AudioUriSourcePrivate" c:type="GESAudioUriSourcePrivate*"/>
|
<type name="UriSource" c:type="GESUriSource*"/>
|
||||||
</field>
|
</field>
|
||||||
<field name="_ges_reserved" readable="0" private="1">
|
<field name="_ges_reserved" readable="0" private="1">
|
||||||
<array zero-terminated="0" fixed-size="4">
|
<array zero-terminated="0" fixed-size="4">
|
||||||
|
@ -6742,7 +6742,7 @@ after calling this.
|
||||||
</parameters>
|
</parameters>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_render_settings" c:identifier="ges_pipeline_set_render_settings">
|
<method name="set_render_settings" c:identifier="ges_pipeline_set_render_settings">
|
||||||
<doc xml:space="preserve">Specifies the encoding to be used by the pipeline to render its
|
<doc xml:space="preserve">Specifies encoding setting to be used by the pipeline to render its
|
||||||
#GESPipeline:timeline, and where the result should be written to.
|
#GESPipeline:timeline, and where the result should be written to.
|
||||||
|
|
||||||
This method **must** be called before setting the pipeline mode to
|
This method **must** be called before setting the pipeline mode to
|
||||||
|
@ -6874,7 +6874,9 @@ forced decoding (the underlying #encodebin has its
|
||||||
<member name="smart_render" value="8" c:identifier="GES_PIPELINE_MODE_SMART_RENDER" glib:nick="smart_render">
|
<member name="smart_render" value="8" c:identifier="GES_PIPELINE_MODE_SMART_RENDER" glib:nick="smart_render">
|
||||||
<doc xml:space="preserve">Render the #GESPipeline:timeline,
|
<doc xml:space="preserve">Render the #GESPipeline:timeline,
|
||||||
avoiding decoding/reencoding (the underlying #encodebin has its
|
avoiding decoding/reencoding (the underlying #encodebin has its
|
||||||
#encodebin:avoid-reencoding property set to %TRUE)</doc>
|
#encodebin:avoid-reencoding property set to %TRUE).
|
||||||
|
> NOTE: Smart rendering can not work in tracks where #GESTrack:mixing
|
||||||
|
> is enabled.</doc>
|
||||||
</member>
|
</member>
|
||||||
</bitfield>
|
</bitfield>
|
||||||
<record name="PipelinePrivate" c:type="GESPipelinePrivate" disguised="1">
|
<record name="PipelinePrivate" c:type="GESPipelinePrivate" disguised="1">
|
||||||
|
@ -6905,6 +6907,7 @@ is really not in good shape and is deprecated.</doc>
|
||||||
</field>
|
</field>
|
||||||
</class>
|
</class>
|
||||||
<record name="PitiviFormatterClass" c:type="GESPitiviFormatterClass" glib:is-gtype-struct-for="PitiviFormatter">
|
<record name="PitiviFormatterClass" c:type="GESPitiviFormatterClass" glib:is-gtype-struct-for="PitiviFormatter">
|
||||||
|
<attribute name="doc.skip" value="true"/>
|
||||||
|
|
||||||
<field name="parent_class" readable="0" private="1">
|
<field name="parent_class" readable="0" private="1">
|
||||||
<type name="FormatterClass" c:type="GESFormatterClass"/>
|
<type name="FormatterClass" c:type="GESFormatterClass"/>
|
||||||
|
@ -9547,6 +9550,25 @@ layers were created for the timeline.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</glib:signal>
|
</glib:signal>
|
||||||
|
<glib:signal name="select-element-track" when="last" version="1.18">
|
||||||
|
<doc xml:space="preserve">Simplified version of #GESTimeline::select-tracks-for-object which only
|
||||||
|
allows @track_element to be added to a single #GESTrack.</doc>
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<doc xml:space="preserve">A track to put @track_element into, or %NULL if
|
||||||
|
it should be discarded.</doc>
|
||||||
|
<type name="Track"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="clip" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The clip that @track_element is being added to</doc>
|
||||||
|
<type name="Clip"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="track_element" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The element being added</doc>
|
||||||
|
<type name="TrackElement"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</glib:signal>
|
||||||
<glib:signal name="select-tracks-for-object" when="last">
|
<glib:signal name="select-tracks-for-object" when="last">
|
||||||
<doc xml:space="preserve">This will be emitted whenever the timeline needs to determine which
|
<doc xml:space="preserve">This will be emitted whenever the timeline needs to determine which
|
||||||
tracks a clip's children should be added to. The track element will
|
tracks a clip's children should be added to. The track element will
|
||||||
|
@ -12915,7 +12937,10 @@ function already set appropriately.</doc>
|
||||||
</parameters>
|
</parameters>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_restriction_caps" c:identifier="ges_track_set_restriction_caps">
|
<method name="set_restriction_caps" c:identifier="ges_track_set_restriction_caps">
|
||||||
<doc xml:space="preserve">Sets the #GESTrack:restriction-caps for the track.</doc>
|
<doc xml:space="preserve">Sets the #GESTrack:restriction-caps for the track.
|
||||||
|
|
||||||
|
> **NOTE**: Restriction caps are **not** taken into account when
|
||||||
|
> using #GESPipeline:mode=#GES_PIPELINE_MODE_SMART_RENDER.</doc>
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<type name="none" c:type="void"/>
|
<type name="none" c:type="void"/>
|
||||||
|
@ -14869,6 +14894,10 @@ are different as those can be extended 'infinitely'.</doc>
|
||||||
</record>
|
</record>
|
||||||
<record name="UriClipPrivate" c:type="GESUriClipPrivate" disguised="1">
|
<record name="UriClipPrivate" c:type="GESUriClipPrivate" disguised="1">
|
||||||
|
|
||||||
|
</record>
|
||||||
|
<record name="UriSource" c:type="GESUriSource" disguised="1">
|
||||||
|
<attribute name="doc.skip" value="true"/>
|
||||||
|
|
||||||
</record>
|
</record>
|
||||||
<class name="UriSourceAsset" c:symbol-prefix="uri_source_asset" c:type="GESUriSourceAsset" parent="TrackElementAsset" glib:type-name="GESUriSourceAsset" glib:get-type="ges_uri_source_asset_get_type" glib:type-struct="UriSourceAssetClass">
|
<class name="UriSourceAsset" c:symbol-prefix="uri_source_asset" c:type="GESUriSourceAsset" parent="TrackElementAsset" glib:type-name="GESUriSourceAsset" glib:get-type="ges_uri_source_asset_get_type" glib:type-struct="UriSourceAssetClass">
|
||||||
<doc xml:space="preserve">Asset to create a stream specific #GESSource for a media file.
|
<doc xml:space="preserve">Asset to create a stream specific #GESSource for a media file.
|
||||||
|
@ -14959,6 +14988,22 @@ contains one frame)</doc>
|
||||||
<record name="UriSourceAssetPrivate" c:type="GESUriSourceAssetPrivate" disguised="1">
|
<record name="UriSourceAssetPrivate" c:type="GESUriSourceAssetPrivate" disguised="1">
|
||||||
|
|
||||||
</record>
|
</record>
|
||||||
|
<constant name="VERSION_MAJOR" value="1" c:type="GES_VERSION_MAJOR">
|
||||||
|
|
||||||
|
<type name="gint" c:type="gint"/>
|
||||||
|
</constant>
|
||||||
|
<constant name="VERSION_MICRO" value="0" c:type="GES_VERSION_MICRO">
|
||||||
|
|
||||||
|
<type name="gint" c:type="gint"/>
|
||||||
|
</constant>
|
||||||
|
<constant name="VERSION_MINOR" value="18" c:type="GES_VERSION_MINOR">
|
||||||
|
|
||||||
|
<type name="gint" c:type="gint"/>
|
||||||
|
</constant>
|
||||||
|
<constant name="VERSION_NANO" value="0" c:type="GES_VERSION_NANO">
|
||||||
|
|
||||||
|
<type name="gint" c:type="gint"/>
|
||||||
|
</constant>
|
||||||
<class name="VideoSource" c:symbol-prefix="video_source" c:type="GESVideoSource" parent="Source" abstract="1" glib:type-name="GESVideoSource" glib:get-type="ges_video_source_get_type" glib:type-struct="VideoSourceClass">
|
<class name="VideoSource" c:symbol-prefix="video_source" c:type="GESVideoSource" parent="Source" abstract="1" glib:type-name="GESVideoSource" glib:get-type="ges_video_source_get_type" glib:type-struct="VideoSourceClass">
|
||||||
<doc xml:space="preserve">Base class for video sources</doc>
|
<doc xml:space="preserve">Base class for video sources</doc>
|
||||||
|
|
||||||
|
@ -15665,7 +15710,7 @@ for later use.</doc>
|
||||||
<type name="utf8" c:type="gchar*"/>
|
<type name="utf8" c:type="gchar*"/>
|
||||||
</field>
|
</field>
|
||||||
<field name="priv" readable="0" private="1">
|
<field name="priv" readable="0" private="1">
|
||||||
<type name="VideoUriSourcePrivate" c:type="GESVideoUriSourcePrivate*"/>
|
<type name="UriSource" c:type="GESUriSource*"/>
|
||||||
</field>
|
</field>
|
||||||
<field name="_ges_reserved" readable="0" private="1">
|
<field name="_ges_reserved" readable="0" private="1">
|
||||||
<array zero-terminated="0" fixed-size="4">
|
<array zero-terminated="0" fixed-size="4">
|
||||||
|
|
|
@ -12081,7 +12081,11 @@ when devices are added or removed from the system.
|
||||||
Since the #GstDeviceProvider is a singleton,
|
Since the #GstDeviceProvider is a singleton,
|
||||||
gst_device_provider_start() may already have been called by another
|
gst_device_provider_start() may already have been called by another
|
||||||
user of the object, gst_device_provider_stop() needs to be called the same
|
user of the object, gst_device_provider_stop() needs to be called the same
|
||||||
number of times.</doc>
|
number of times.
|
||||||
|
|
||||||
|
After this function has been called, gst_device_provider_get_devices() will
|
||||||
|
return the same objects that have been received from the
|
||||||
|
#GST_MESSAGE_DEVICE_ADDED messages and will no longer probe.</doc>
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<doc xml:space="preserve">%TRUE if the device providering could be started</doc>
|
<doc xml:space="preserve">%TRUE if the device providering could be started</doc>
|
||||||
|
@ -12203,7 +12207,10 @@ This is for use by subclasses.</doc>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_devices" c:identifier="gst_device_provider_get_devices" version="1.4">
|
<method name="get_devices" c:identifier="gst_device_provider_get_devices" version="1.4">
|
||||||
<doc xml:space="preserve">Gets a list of devices that this provider understands. This may actually
|
<doc xml:space="preserve">Gets a list of devices that this provider understands. This may actually
|
||||||
probe the hardware if the provider is not currently started.</doc>
|
probe the hardware if the provider is not currently started.
|
||||||
|
|
||||||
|
If the provider has been started, this will returned the same #GstDevice
|
||||||
|
objedcts that have been returned by the #GST_MESSAGE_DEVICE_ADDED messages.</doc>
|
||||||
|
|
||||||
<return-value transfer-ownership="full">
|
<return-value transfer-ownership="full">
|
||||||
<doc xml:space="preserve">a #GList of
|
<doc xml:space="preserve">a #GList of
|
||||||
|
@ -12300,7 +12307,11 @@ when devices are added or removed from the system.
|
||||||
Since the #GstDeviceProvider is a singleton,
|
Since the #GstDeviceProvider is a singleton,
|
||||||
gst_device_provider_start() may already have been called by another
|
gst_device_provider_start() may already have been called by another
|
||||||
user of the object, gst_device_provider_stop() needs to be called the same
|
user of the object, gst_device_provider_stop() needs to be called the same
|
||||||
number of times.</doc>
|
number of times.
|
||||||
|
|
||||||
|
After this function has been called, gst_device_provider_get_devices() will
|
||||||
|
return the same objects that have been received from the
|
||||||
|
#GST_MESSAGE_DEVICE_ADDED messages and will no longer probe.</doc>
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<doc xml:space="preserve">%TRUE if the device providering could be started</doc>
|
<doc xml:space="preserve">%TRUE if the device providering could be started</doc>
|
||||||
|
@ -18909,8 +18920,8 @@ element scope.</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="error" value="-5" c:identifier="GST_FLOW_ERROR" glib:nick="error">
|
<member name="error" value="-5" c:identifier="GST_FLOW_ERROR" glib:nick="error">
|
||||||
<doc xml:space="preserve">Some (fatal) error occurred. Element generating
|
<doc xml:space="preserve">Some (fatal) error occurred. Element generating
|
||||||
this error should post an error message with more
|
this error should post an error message using
|
||||||
details.</doc>
|
GST_ELEMENT_ERROR() with more details.</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="not_supported" value="-6" c:identifier="GST_FLOW_NOT_SUPPORTED" glib:nick="not-supported">
|
<member name="not_supported" value="-6" c:identifier="GST_FLOW_NOT_SUPPORTED" glib:nick="not-supported">
|
||||||
<doc xml:space="preserve">This operation is not supported.</doc>
|
<doc xml:space="preserve">This operation is not supported.</doc>
|
||||||
|
@ -42339,7 +42350,7 @@ Free-function: gst_tag_list_unref</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</method>
|
</method>
|
||||||
<method name="copy" c:identifier="gst_tag_list_copy" introspectable="0">
|
<method name="copy" c:identifier="gst_tag_list_copy">
|
||||||
<doc xml:space="preserve">Creates a new #GstTagList as a copy of the old @taglist. The new taglist
|
<doc xml:space="preserve">Creates a new #GstTagList as a copy of the old @taglist. The new taglist
|
||||||
will have a refcount of 1, owned by the caller, and will be writable as
|
will have a refcount of 1, owned by the caller, and will be writable as
|
||||||
a result.
|
a result.
|
||||||
|
@ -46723,6 +46734,32 @@ cannot be parsed.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function>
|
</function>
|
||||||
|
<function name="from_string_escaped" c:identifier="gst_uri_from_string_escaped" version="1.18">
|
||||||
|
<doc xml:space="preserve">Parses a URI string into a new #GstUri object. Will return NULL if the URI
|
||||||
|
cannot be parsed. This is identical to gst_uri_from_string() except that
|
||||||
|
the userinfo and fragment components of the URI will not be unescaped while
|
||||||
|
parsing.
|
||||||
|
|
||||||
|
Use this when you need to extract a username and password from the userinfo
|
||||||
|
such as https://user:password@example.com since either may contain
|
||||||
|
a URI-escaped ':' character. gst_uri_from_string() will unescape the entire
|
||||||
|
userinfo component, which will make it impossible to know which ':'
|
||||||
|
delineates the username and password.
|
||||||
|
|
||||||
|
The same applies to the fragment component of the URI, such as
|
||||||
|
https://example.com/path#fragment which may contain a URI-escaped '#'.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="full" nullable="1">
|
||||||
|
<doc xml:space="preserve">A new #GstUri object, or NULL.</doc>
|
||||||
|
<type name="Uri" c:type="GstUri*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="uri" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The URI string to parse.</doc>
|
||||||
|
<type name="utf8" c:type="const gchar*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
<function name="get_location" c:identifier="gst_uri_get_location">
|
<function name="get_location" c:identifier="gst_uri_get_location">
|
||||||
<doc xml:space="preserve">Extracts the location out of a given valid URI, ie. the protocol and "://"
|
<doc xml:space="preserve">Extracts the location out of a given valid URI, ie. the protocol and "://"
|
||||||
are stripped from the URI, which means that the location returned includes
|
are stripped from the URI, which means that the location returned includes
|
||||||
|
@ -47013,12 +47050,12 @@ determine a order for the two provided values.</doc>
|
||||||
|
|
||||||
<type name="gint" c:type="gint"/>
|
<type name="gint" c:type="gint"/>
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="VERSION_MICRO" value="2" c:type="GST_VERSION_MICRO">
|
<constant name="VERSION_MICRO" value="0" c:type="GST_VERSION_MICRO">
|
||||||
<doc xml:space="preserve">The micro version of GStreamer at compile time:</doc>
|
<doc xml:space="preserve">The micro version of GStreamer at compile time:</doc>
|
||||||
|
|
||||||
<type name="gint" c:type="gint"/>
|
<type name="gint" c:type="gint"/>
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="VERSION_MINOR" value="17" c:type="GST_VERSION_MINOR">
|
<constant name="VERSION_MINOR" value="18" c:type="GST_VERSION_MINOR">
|
||||||
<doc xml:space="preserve">The minor version of GStreamer at compile time:</doc>
|
<doc xml:space="preserve">The minor version of GStreamer at compile time:</doc>
|
||||||
|
|
||||||
<type name="gint" c:type="gint"/>
|
<type name="gint" c:type="gint"/>
|
||||||
|
@ -50952,6 +50989,32 @@ cannot be parsed.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function>
|
</function>
|
||||||
|
<function name="uri_from_string_escaped" c:identifier="gst_uri_from_string_escaped" moved-to="Uri.from_string_escaped" version="1.18">
|
||||||
|
<doc xml:space="preserve">Parses a URI string into a new #GstUri object. Will return NULL if the URI
|
||||||
|
cannot be parsed. This is identical to gst_uri_from_string() except that
|
||||||
|
the userinfo and fragment components of the URI will not be unescaped while
|
||||||
|
parsing.
|
||||||
|
|
||||||
|
Use this when you need to extract a username and password from the userinfo
|
||||||
|
such as https://user:password@example.com since either may contain
|
||||||
|
a URI-escaped ':' character. gst_uri_from_string() will unescape the entire
|
||||||
|
userinfo component, which will make it impossible to know which ':'
|
||||||
|
delineates the username and password.
|
||||||
|
|
||||||
|
The same applies to the fragment component of the URI, such as
|
||||||
|
https://example.com/path#fragment which may contain a URI-escaped '#'.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="full" nullable="1">
|
||||||
|
<doc xml:space="preserve">A new #GstUri object, or NULL.</doc>
|
||||||
|
<type name="Uri" c:type="GstUri*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="uri" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The URI string to parse.</doc>
|
||||||
|
<type name="utf8" c:type="const gchar*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
<function name="uri_get_location" c:identifier="gst_uri_get_location" moved-to="Uri.get_location">
|
<function name="uri_get_location" c:identifier="gst_uri_get_location" moved-to="Uri.get_location">
|
||||||
<doc xml:space="preserve">Extracts the location out of a given valid URI, ie. the protocol and "://"
|
<doc xml:space="preserve">Extracts the location out of a given valid URI, ie. the protocol and "://"
|
||||||
are stripped from the URI, which means that the location returned includes
|
are stripped from the URI, which means that the location returned includes
|
||||||
|
|
|
@ -1570,42 +1570,79 @@ A stream_type stream</doc>
|
||||||
</parameters>
|
</parameters>
|
||||||
</method>
|
</method>
|
||||||
<property name="block" writable="1" transfer-ownership="none">
|
<property name="block" writable="1" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">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.</doc>
|
||||||
<type name="gboolean" c:type="gboolean"/>
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
</property>
|
</property>
|
||||||
<property name="caps" writable="1" transfer-ownership="none">
|
<property name="caps" writable="1" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The GstCaps that will negotiated downstream and will be put
|
||||||
|
on outgoing buffers.</doc>
|
||||||
<type name="Gst.Caps"/>
|
<type name="Gst.Caps"/>
|
||||||
</property>
|
</property>
|
||||||
<property name="current-level-bytes" transfer-ownership="none">
|
<property name="current-level-bytes" version="1.2" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The number of currently queued bytes inside appsrc.</doc>
|
||||||
<type name="guint64" c:type="guint64"/>
|
<type name="guint64" c:type="guint64"/>
|
||||||
</property>
|
</property>
|
||||||
<property name="duration" writable="1" transfer-ownership="none">
|
<property name="duration" version="1.10" writable="1" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The total duration in nanoseconds of the data stream. If the total duration is known, it
|
||||||
|
is recommended to configure it with this property.</doc>
|
||||||
<type name="guint64" c:type="guint64"/>
|
<type name="guint64" c:type="guint64"/>
|
||||||
</property>
|
</property>
|
||||||
<property name="emit-signals" writable="1" transfer-ownership="none">
|
<property name="emit-signals" writable="1" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">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.</doc>
|
||||||
<type name="gboolean" c:type="gboolean"/>
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
</property>
|
</property>
|
||||||
<property name="format" writable="1" transfer-ownership="none">
|
<property name="format" writable="1" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The format to use for segment events. When the source is producing
|
||||||
|
timestamped buffers this property should be set to GST_FORMAT_TIME.</doc>
|
||||||
<type name="Gst.Format"/>
|
<type name="Gst.Format"/>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="handle-segment-change" version="1.18" writable="1" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">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
|
||||||
|
by next data flow.
|
||||||
|
|
||||||
|
FIXME: currently only GST_FORMAT_TIME format is supported and therefore
|
||||||
|
GstAppSrc::format should be time. However, possibly #GstAppSrc can support
|
||||||
|
other formats.</doc>
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</property>
|
||||||
<property name="is-live" writable="1" transfer-ownership="none">
|
<property name="is-live" writable="1" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">Instruct the source to behave like a live source. This includes that it
|
||||||
|
will only push out buffers in the PLAYING state.</doc>
|
||||||
<type name="gboolean" c:type="gboolean"/>
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
</property>
|
</property>
|
||||||
<property name="max-bytes" writable="1" transfer-ownership="none">
|
<property name="max-bytes" writable="1" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">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.</doc>
|
||||||
<type name="guint64" c:type="guint64"/>
|
<type name="guint64" c:type="guint64"/>
|
||||||
</property>
|
</property>
|
||||||
<property name="max-latency" writable="1" transfer-ownership="none">
|
<property name="max-latency" writable="1" transfer-ownership="none">
|
||||||
<type name="gint64" c:type="gint64"/>
|
<type name="gint64" c:type="gint64"/>
|
||||||
</property>
|
</property>
|
||||||
<property name="min-latency" writable="1" transfer-ownership="none">
|
<property name="min-latency" writable="1" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The minimum latency of the source. A value of -1 will use the default
|
||||||
|
latency calculations of #GstBaseSrc.</doc>
|
||||||
<type name="gint64" c:type="gint64"/>
|
<type name="gint64" c:type="gint64"/>
|
||||||
</property>
|
</property>
|
||||||
<property name="min-percent" writable="1" transfer-ownership="none">
|
<property name="min-percent" writable="1" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">Make appsrc emit the "need-data" signal when the amount of bytes in the
|
||||||
|
queue drops below this percentage of max-bytes.</doc>
|
||||||
<type name="guint" c:type="guint"/>
|
<type name="guint" c:type="guint"/>
|
||||||
</property>
|
</property>
|
||||||
<property name="size" writable="1" transfer-ownership="none">
|
<property name="size" writable="1" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The total size in bytes of the data stream. If the total size is known, it
|
||||||
|
is recommended to configure it with this property.</doc>
|
||||||
<type name="gint64" c:type="gint64"/>
|
<type name="gint64" c:type="gint64"/>
|
||||||
</property>
|
</property>
|
||||||
<property name="stream-type" writable="1" transfer-ownership="none">
|
<property name="stream-type" writable="1" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The type of stream that this source is producing. For seekable streams the
|
||||||
|
application should connect to the seek-data signal.</doc>
|
||||||
<type name="AppStreamType"/>
|
<type name="AppStreamType"/>
|
||||||
</property>
|
</property>
|
||||||
<field name="basesrc">
|
<field name="basesrc">
|
||||||
|
@ -1620,106 +1657,61 @@ A stream_type stream</doc>
|
||||||
</array>
|
</array>
|
||||||
</field>
|
</field>
|
||||||
<glib:signal name="end-of-stream" when="last" action="1">
|
<glib:signal name="end-of-stream" when="last" action="1">
|
||||||
<doc xml:space="preserve">Notify @appsrc that no more buffer are available.</doc>
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<type name="Gst.FlowReturn"/>
|
<type name="Gst.FlowReturn"/>
|
||||||
</return-value>
|
</return-value>
|
||||||
</glib:signal>
|
</glib:signal>
|
||||||
<glib:signal name="enough-data" when="last">
|
<glib:signal name="enough-data" when="last">
|
||||||
<doc xml:space="preserve">Signal that the source has enough data. It is recommended that the
|
|
||||||
application stops calling push-buffer until the need-data signal is
|
|
||||||
emitted again to avoid excessive buffer queueing.</doc>
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<type name="none" c:type="void"/>
|
<type name="none" c:type="void"/>
|
||||||
</return-value>
|
</return-value>
|
||||||
</glib:signal>
|
</glib:signal>
|
||||||
<glib:signal name="need-data" when="last">
|
<glib:signal name="need-data" when="last">
|
||||||
<doc xml:space="preserve">Signal that the source needs more data. In the callback or from another
|
|
||||||
thread you should call push-buffer or end-of-stream.
|
|
||||||
|
|
||||||
@length is just a hint and when it is set to -1, any number of bytes can be
|
|
||||||
pushed into @appsrc.
|
|
||||||
|
|
||||||
You can call push-buffer multiple times until the enough-data signal is
|
|
||||||
fired.</doc>
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<type name="none" c:type="void"/>
|
<type name="none" c:type="void"/>
|
||||||
</return-value>
|
</return-value>
|
||||||
<parameters>
|
<parameters>
|
||||||
<parameter name="length" transfer-ownership="none">
|
<parameter name="object" transfer-ownership="none">
|
||||||
<doc xml:space="preserve">the amount of bytes needed.</doc>
|
|
||||||
<type name="guint" c:type="guint"/>
|
<type name="guint" c:type="guint"/>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</glib:signal>
|
</glib:signal>
|
||||||
<glib:signal name="push-buffer" when="last" action="1">
|
<glib:signal name="push-buffer" when="last" action="1">
|
||||||
<doc xml:space="preserve">Adds a buffer to the queue of buffers that the appsrc element will
|
|
||||||
push to its source pad. This function does not take ownership of the
|
|
||||||
buffer so the buffer needs to be unreffed after calling this function.
|
|
||||||
|
|
||||||
When the block property is TRUE, this function can block until free space
|
|
||||||
becomes available in the queue.</doc>
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<type name="Gst.FlowReturn"/>
|
<type name="Gst.FlowReturn"/>
|
||||||
</return-value>
|
</return-value>
|
||||||
<parameters>
|
<parameters>
|
||||||
<parameter name="buffer" transfer-ownership="none">
|
<parameter name="object" transfer-ownership="none">
|
||||||
<doc xml:space="preserve">a buffer to push</doc>
|
|
||||||
<type name="Gst.Buffer"/>
|
<type name="Gst.Buffer"/>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</glib:signal>
|
</glib:signal>
|
||||||
<glib:signal name="push-buffer-list" when="last" action="1" version="1.14">
|
<glib:signal name="push-buffer-list" when="last" action="1">
|
||||||
<doc xml:space="preserve">Adds a buffer list to the queue of buffers and buffer lists that the
|
|
||||||
appsrc element will push to its source pad. This function does not take
|
|
||||||
ownership of the buffer list so the buffer list needs to be unreffed
|
|
||||||
after calling this function.
|
|
||||||
|
|
||||||
When the block property is TRUE, this function can block until free space
|
|
||||||
becomes available in the queue.</doc>
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<type name="Gst.FlowReturn"/>
|
<type name="Gst.FlowReturn"/>
|
||||||
</return-value>
|
</return-value>
|
||||||
<parameters>
|
<parameters>
|
||||||
<parameter name="buffer_list" transfer-ownership="none">
|
<parameter name="object" transfer-ownership="none">
|
||||||
<doc xml:space="preserve">a buffer list to push</doc>
|
|
||||||
<type name="Gst.BufferList"/>
|
<type name="Gst.BufferList"/>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</glib:signal>
|
</glib:signal>
|
||||||
<glib:signal name="push-sample" when="last" action="1" version="1.6">
|
<glib:signal name="push-sample" when="last" action="1">
|
||||||
<doc xml:space="preserve">Extract a buffer from the provided sample and adds the extracted buffer
|
|
||||||
to the queue of buffers that the appsrc element will
|
|
||||||
push to its source pad. This function set the appsrc caps based on the caps
|
|
||||||
in the sample and reset the caps if they change.
|
|
||||||
Only the caps and the buffer of the provided sample are used and not
|
|
||||||
for example the segment in the sample.
|
|
||||||
This function does not take ownership of the
|
|
||||||
sample so the sample needs to be unreffed after calling this function.
|
|
||||||
|
|
||||||
When the block property is TRUE, this function can block until free space
|
|
||||||
becomes available in the queue.</doc>
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<type name="Gst.FlowReturn"/>
|
<type name="Gst.FlowReturn"/>
|
||||||
</return-value>
|
</return-value>
|
||||||
<parameters>
|
<parameters>
|
||||||
<parameter name="sample" transfer-ownership="none">
|
<parameter name="object" transfer-ownership="none">
|
||||||
<doc xml:space="preserve">a sample from which extract buffer to push</doc>
|
|
||||||
<type name="Gst.Sample"/>
|
<type name="Gst.Sample"/>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</glib:signal>
|
</glib:signal>
|
||||||
<glib:signal name="seek-data" when="last">
|
<glib:signal name="seek-data" when="last">
|
||||||
<doc xml:space="preserve">Seek to the given offset. The next push-buffer should produce buffers from
|
|
||||||
the new @offset.
|
|
||||||
This callback is only called for seekable stream types.</doc>
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<doc xml:space="preserve">%TRUE if the seek succeeded.</doc>
|
|
||||||
<type name="gboolean" c:type="gboolean"/>
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
</return-value>
|
</return-value>
|
||||||
<parameters>
|
<parameters>
|
||||||
<parameter name="offset" transfer-ownership="none">
|
<parameter name="object" transfer-ownership="none">
|
||||||
<doc xml:space="preserve">the offset to seek to</doc>
|
|
||||||
<type name="guint64" c:type="guint64"/>
|
<type name="guint64" c:type="guint64"/>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
|
|
|
@ -1154,7 +1154,21 @@ caps.
|
||||||
A notable exception for now is the sample rate, sink pads must
|
A notable exception for now is the sample rate, sink pads must
|
||||||
have the same sample rate as either the downstream requirement,
|
have the same sample rate as either the downstream requirement,
|
||||||
or the first configured pad, or a combination of both (when
|
or the first configured pad, or a combination of both (when
|
||||||
downstream specifies a range or a set of acceptable rates).</doc>
|
downstream specifies a range or a set of acceptable rates).
|
||||||
|
|
||||||
|
The #GstAggregator::samples-selected signal is provided with some
|
||||||
|
additional information about the output buffer:
|
||||||
|
- "offset" G_TYPE_UINT64 Offset in samples since segment start
|
||||||
|
for the position that is next to be filled in the output buffer.
|
||||||
|
- "frames" G_TYPE_UINT Number of frames per output buffer.
|
||||||
|
|
||||||
|
In addition the gst_aggregator_peek_next_sample() function returns
|
||||||
|
additional information in the info #GstStructure of the returned sample:
|
||||||
|
- "output-offset" G_TYPE_UINT64 Sample offset in output segment relative to
|
||||||
|
the output segment's start where the current position of this input
|
||||||
|
buffer would be placed
|
||||||
|
- "position" G_TYPE_UINT current position in the input buffer in samples
|
||||||
|
- "size" G_TYPE_UINT size of the input buffer in samples</doc>
|
||||||
|
|
||||||
<virtual-method name="aggregate_one_buffer">
|
<virtual-method name="aggregate_one_buffer">
|
||||||
|
|
||||||
|
|
|
@ -982,16 +982,17 @@ Control is given to the subclass when all pads have data.
|
||||||
* When data is queued on all pads, the aggregate vmethod is called.
|
* When data is queued on all pads, the aggregate vmethod is called.
|
||||||
|
|
||||||
* One can peek at the data on any given GstAggregatorPad with the
|
* One can peek at the data on any given GstAggregatorPad with the
|
||||||
gst_aggregator_pad_peek_buffer () method, and remove it from the pad
|
gst_aggregator_pad_peek_buffer() method, and remove it from the pad
|
||||||
with the gst_aggregator_pad_pop_buffer () method. When a buffer
|
with the gst_aggregator_pad_pop_buffer () method. When a buffer
|
||||||
has been taken with pop_buffer (), a new buffer can be queued
|
has been taken with pop_buffer (), a new buffer can be queued
|
||||||
on that pad.
|
on that pad.
|
||||||
|
|
||||||
* If the subclass wishes to push a buffer downstream in its aggregate
|
* If the subclass wishes to push a buffer downstream in its aggregate
|
||||||
implementation, it should do so through the
|
implementation, it should do so through the
|
||||||
gst_aggregator_finish_buffer () method. This method will take care
|
gst_aggregator_finish_buffer() method. This method will take care
|
||||||
of sending and ordering mandatory events such as stream start, caps
|
of sending and ordering mandatory events such as stream start, caps
|
||||||
and segment.
|
and segment. Buffer lists can also be pushed out with
|
||||||
|
gst_aggregator_finish_buffer_list().
|
||||||
|
|
||||||
* Same goes for EOS events, which should not be pushed directly by the
|
* Same goes for EOS events, which should not be pushed directly by the
|
||||||
subclass, it should instead return GST_FLOW_EOS in its aggregate
|
subclass, it should instead return GST_FLOW_EOS in its aggregate
|
||||||
|
@ -1092,6 +1093,25 @@ sent before pushing the buffer.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</virtual-method>
|
</virtual-method>
|
||||||
|
<virtual-method name="finish_buffer_list" invoker="finish_buffer_list" version="1.18">
|
||||||
|
<doc xml:space="preserve">This method will push the provided output buffer list downstream. If needed,
|
||||||
|
mandatory events such as stream-start, caps, and segment events will be
|
||||||
|
sent before pushing the buffer.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<instance-parameter name="aggregator" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The #GstAggregator</doc>
|
||||||
|
<type name="Aggregator" c:type="GstAggregator*"/>
|
||||||
|
</instance-parameter>
|
||||||
|
<parameter name="bufferlist" transfer-ownership="full">
|
||||||
|
<doc xml:space="preserve">the #GstBufferList to push.</doc>
|
||||||
|
<type name="Gst.BufferList" c:type="GstBufferList*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</virtual-method>
|
||||||
<virtual-method name="fixate_src_caps">
|
<virtual-method name="fixate_src_caps">
|
||||||
|
|
||||||
<return-value transfer-ownership="full">
|
<return-value transfer-ownership="full">
|
||||||
|
@ -1158,6 +1178,28 @@ if #GstAggregatorClass.negotiate() fails.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</virtual-method>
|
</virtual-method>
|
||||||
|
<virtual-method name="peek_next_sample" invoker="peek_next_sample" version="1.18">
|
||||||
|
<doc xml:space="preserve">Use this function to determine what input buffers will be aggregated
|
||||||
|
to produce the next output buffer. This should only be called from
|
||||||
|
a #GstAggregator::samples-selected handler, and can be used to precisely
|
||||||
|
control aggregating parameters for a given set of input samples.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<doc xml:space="preserve">The sample that is about to be aggregated. It may hold a #GstBuffer
|
||||||
|
or a #GstBufferList. The contents of its info structure is subclass-dependent,
|
||||||
|
and documented on a subclass basis. The buffers held by the sample are
|
||||||
|
not writable.</doc>
|
||||||
|
<type name="Gst.Sample" c:type="GstSample*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<instance-parameter name="aggregator" transfer-ownership="none">
|
||||||
|
<type name="Aggregator" c:type="GstAggregator*"/>
|
||||||
|
</instance-parameter>
|
||||||
|
<parameter name="aggregator_pad" transfer-ownership="none">
|
||||||
|
<type name="AggregatorPad" c:type="GstAggregatorPad*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</virtual-method>
|
||||||
<virtual-method name="propose_allocation">
|
<virtual-method name="propose_allocation">
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
|
@ -1349,6 +1391,25 @@ sent before pushing the buffer.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="finish_buffer_list" c:identifier="gst_aggregator_finish_buffer_list" version="1.18">
|
||||||
|
<doc xml:space="preserve">This method will push the provided output buffer list downstream. If needed,
|
||||||
|
mandatory events such as stream-start, caps, and segment events will be
|
||||||
|
sent before pushing the buffer.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<instance-parameter name="aggregator" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The #GstAggregator</doc>
|
||||||
|
<type name="Aggregator" c:type="GstAggregator*"/>
|
||||||
|
</instance-parameter>
|
||||||
|
<parameter name="bufferlist" transfer-ownership="full">
|
||||||
|
<doc xml:space="preserve">the #GstBufferList to push.</doc>
|
||||||
|
<type name="Gst.BufferList" c:type="GstBufferList*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</method>
|
||||||
<method name="get_allocator" c:identifier="gst_aggregator_get_allocator">
|
<method name="get_allocator" c:identifier="gst_aggregator_get_allocator">
|
||||||
<doc xml:space="preserve">Lets #GstAggregator sub-classes get the memory @allocator
|
<doc xml:space="preserve">Lets #GstAggregator sub-classes get the memory @allocator
|
||||||
acquired by the base class and its @params.
|
acquired by the base class and its @params.
|
||||||
|
@ -1423,6 +1484,66 @@ if #GstAggregatorClass.negotiate() fails.</doc>
|
||||||
</instance-parameter>
|
</instance-parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="peek_next_sample" c:identifier="gst_aggregator_peek_next_sample" version="1.18">
|
||||||
|
<doc xml:space="preserve">Use this function to determine what input buffers will be aggregated
|
||||||
|
to produce the next output buffer. This should only be called from
|
||||||
|
a #GstAggregator::samples-selected handler, and can be used to precisely
|
||||||
|
control aggregating parameters for a given set of input samples.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<doc xml:space="preserve">The sample that is about to be aggregated. It may hold a #GstBuffer
|
||||||
|
or a #GstBufferList. The contents of its info structure is subclass-dependent,
|
||||||
|
and documented on a subclass basis. The buffers held by the sample are
|
||||||
|
not writable.</doc>
|
||||||
|
<type name="Gst.Sample" c:type="GstSample*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<instance-parameter name="self" transfer-ownership="none">
|
||||||
|
<type name="Aggregator" c:type="GstAggregator*"/>
|
||||||
|
</instance-parameter>
|
||||||
|
<parameter name="pad" transfer-ownership="none">
|
||||||
|
<type name="AggregatorPad" c:type="GstAggregatorPad*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</method>
|
||||||
|
<method name="selected_samples" c:identifier="gst_aggregator_selected_samples" version="1.18">
|
||||||
|
<doc xml:space="preserve">Subclasses should call this when they have prepared the
|
||||||
|
buffers they will aggregate for each of their sink pads, but
|
||||||
|
before using any of the properties of the pads that govern
|
||||||
|
*how* aggregation should be performed, for example z-index
|
||||||
|
for video aggregators.
|
||||||
|
|
||||||
|
If gst_aggregator_update_segment() is used by the subclass,
|
||||||
|
it MUST be called before gst_aggregator_selected_samples().
|
||||||
|
|
||||||
|
This function MUST only be called from the #GstAggregatorClass::aggregate()
|
||||||
|
function.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<instance-parameter name="self" transfer-ownership="none">
|
||||||
|
<type name="Aggregator" c:type="GstAggregator*"/>
|
||||||
|
</instance-parameter>
|
||||||
|
<parameter name="pts" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The presentation timestamp of the next output buffer</doc>
|
||||||
|
<type name="Gst.ClockTime" c:type="GstClockTime"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="dts" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The decoding timestamp of the next output buffer</doc>
|
||||||
|
<type name="Gst.ClockTime" c:type="GstClockTime"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="duration" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The duration of the next output buffer</doc>
|
||||||
|
<type name="Gst.ClockTime" c:type="GstClockTime"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="info" transfer-ownership="none" nullable="1" allow-none="1">
|
||||||
|
<doc xml:space="preserve">a #GstStructure containing additional information</doc>
|
||||||
|
<type name="Gst.Structure" c:type="GstStructure*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</method>
|
||||||
<method name="set_latency" c:identifier="gst_aggregator_set_latency">
|
<method name="set_latency" c:identifier="gst_aggregator_set_latency">
|
||||||
<doc xml:space="preserve">Lets #GstAggregator sub-classes tell the baseclass what their internal
|
<doc xml:space="preserve">Lets #GstAggregator sub-classes tell the baseclass what their internal
|
||||||
latency is. Will also post a LATENCY message on the bus so the pipeline
|
latency is. Will also post a LATENCY message on the bus so the pipeline
|
||||||
|
@ -1485,7 +1606,10 @@ and you have a dead line based aggregator subclass.</doc>
|
||||||
<method name="update_segment" c:identifier="gst_aggregator_update_segment" version="1.18">
|
<method name="update_segment" c:identifier="gst_aggregator_update_segment" version="1.18">
|
||||||
<doc xml:space="preserve">Subclasses should use this to update the segment on their
|
<doc xml:space="preserve">Subclasses should use this to update the segment on their
|
||||||
source pad, instead of directly pushing new segment events
|
source pad, instead of directly pushing new segment events
|
||||||
downstream.</doc>
|
downstream.
|
||||||
|
|
||||||
|
Subclasses MUST call this before gst_aggregator_selected_samples(),
|
||||||
|
if it is used at all.</doc>
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<type name="none" c:type="void"/>
|
<type name="none" c:type="void"/>
|
||||||
|
@ -1499,6 +1623,10 @@ downstream.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</method>
|
</method>
|
||||||
|
<property name="emit-signals" version="1.18" writable="1" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">Enables the emission of signals such as #GstAggregator::samples-selected</doc>
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</property>
|
||||||
<property name="latency" writable="1" transfer-ownership="none">
|
<property name="latency" writable="1" transfer-ownership="none">
|
||||||
<type name="guint64" c:type="guint64"/>
|
<type name="guint64" c:type="guint64"/>
|
||||||
</property>
|
</property>
|
||||||
|
@ -1531,6 +1659,36 @@ account when larger than the actually reported minimum latency.</doc>
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
</array>
|
</array>
|
||||||
</field>
|
</field>
|
||||||
|
<glib:signal name="samples-selected" when="first" version="1.18">
|
||||||
|
<doc xml:space="preserve">Signals that the #GstAggregator subclass has selected the next set
|
||||||
|
of input samples it will aggregate. Handlers may call
|
||||||
|
gst_aggregator_peek_next_sample() at that point.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="segment" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The #GstSegment the next output buffer is part of</doc>
|
||||||
|
<type name="Gst.Segment"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="pts" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The presentation timestamp of the next output buffer</doc>
|
||||||
|
<type name="guint64" c:type="guint64"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="dts" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The decoding timestamp of the next output buffer</doc>
|
||||||
|
<type name="guint64" c:type="guint64"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="duration" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The duration of the next output buffer</doc>
|
||||||
|
<type name="guint64" c:type="guint64"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="info" transfer-ownership="none" nullable="1" allow-none="1">
|
||||||
|
<doc xml:space="preserve">a #GstStructure containing additional information</doc>
|
||||||
|
<type name="Gst.Structure"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</glib:signal>
|
||||||
</class>
|
</class>
|
||||||
<record name="AggregatorClass" c:type="GstAggregatorClass" glib:is-gtype-struct-for="Aggregator" version="1.14">
|
<record name="AggregatorClass" c:type="GstAggregatorClass" glib:is-gtype-struct-for="Aggregator" version="1.14">
|
||||||
<doc xml:space="preserve">The aggregator base class will handle in a thread-safe way all manners of
|
<doc xml:space="preserve">The aggregator base class will handle in a thread-safe way all manners of
|
||||||
|
@ -1904,8 +2062,46 @@ _finish_buffer from inside that function.</doc>
|
||||||
</parameters>
|
</parameters>
|
||||||
</callback>
|
</callback>
|
||||||
</field>
|
</field>
|
||||||
|
<field name="finish_buffer_list">
|
||||||
|
<callback name="finish_buffer_list">
|
||||||
|
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="Gst.FlowReturn" c:type="GstFlowReturn"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="aggregator" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The #GstAggregator</doc>
|
||||||
|
<type name="Aggregator" c:type="GstAggregator*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="bufferlist" transfer-ownership="full">
|
||||||
|
<doc xml:space="preserve">the #GstBufferList to push.</doc>
|
||||||
|
<type name="Gst.BufferList" c:type="GstBufferList*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</callback>
|
||||||
|
</field>
|
||||||
|
<field name="peek_next_sample">
|
||||||
|
<callback name="peek_next_sample">
|
||||||
|
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<doc xml:space="preserve">The sample that is about to be aggregated. It may hold a #GstBuffer
|
||||||
|
or a #GstBufferList. The contents of its info structure is subclass-dependent,
|
||||||
|
and documented on a subclass basis. The buffers held by the sample are
|
||||||
|
not writable.</doc>
|
||||||
|
<type name="Gst.Sample" c:type="GstSample*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="aggregator" transfer-ownership="none">
|
||||||
|
<type name="Aggregator" c:type="GstAggregator*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="aggregator_pad" transfer-ownership="none">
|
||||||
|
<type name="AggregatorPad" c:type="GstAggregatorPad*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</callback>
|
||||||
|
</field>
|
||||||
<field name="_gst_reserved" readable="0" private="1">
|
<field name="_gst_reserved" readable="0" private="1">
|
||||||
<array zero-terminated="0" fixed-size="17">
|
<array zero-terminated="0" fixed-size="15">
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
</array>
|
</array>
|
||||||
</field>
|
</field>
|
||||||
|
@ -5549,13 +5745,14 @@ buffer is allocated.</doc>
|
||||||
</instance-parameter>
|
</instance-parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</method>
|
</method>
|
||||||
<method name="new_seamless_segment" c:identifier="gst_base_src_new_seamless_segment">
|
<method name="new_seamless_segment" c:identifier="gst_base_src_new_seamless_segment" deprecated="1" deprecated-version="1.18">
|
||||||
<doc xml:space="preserve">Prepare a new seamless segment for emission downstream. This function must
|
<doc xml:space="preserve">Prepare a new seamless segment for emission downstream. This function must
|
||||||
only be called by derived sub-classes, and only from the #GstBaseSrcClass::create function,
|
only be called by derived sub-classes, and only from the #GstBaseSrcClass::create function,
|
||||||
as the stream-lock needs to be held.
|
as the stream-lock needs to be held.
|
||||||
|
|
||||||
The format for the new segment will be the current format of the source, as
|
The format for the new segment will be the current format of the source, as
|
||||||
configured with gst_base_src_set_format()</doc>
|
configured with gst_base_src_set_format()</doc>
|
||||||
|
<doc-deprecated xml:space="preserve">Use gst_base_src_new_segment()</doc-deprecated>
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<doc xml:space="preserve">%TRUE if preparation of the seamless segment succeeded.</doc>
|
<doc xml:space="preserve">%TRUE if preparation of the seamless segment succeeded.</doc>
|
||||||
|
@ -5580,6 +5777,32 @@ configured with gst_base_src_set_format()</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="new_segment" c:identifier="gst_base_src_new_segment" version="1.18">
|
||||||
|
<doc xml:space="preserve">Prepare a new segment for emission downstream. This function must
|
||||||
|
only be called by derived sub-classes, and only from the #GstBaseSrcClass::create function,
|
||||||
|
as the stream-lock needs to be held.
|
||||||
|
|
||||||
|
The format for the @segment must be identical with the current format
|
||||||
|
of the source, as configured with gst_base_src_set_format().
|
||||||
|
|
||||||
|
The format of @src must not be %GST_FORMAT_UNDEFINED and the format
|
||||||
|
should be configured via gst_base_src_set_format() before calling this method.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">%TRUE if preparation of new segment succeeded.</doc>
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<instance-parameter name="src" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">a #GstBaseSrc</doc>
|
||||||
|
<type name="BaseSrc" c:type="GstBaseSrc*"/>
|
||||||
|
</instance-parameter>
|
||||||
|
<parameter name="segment" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">a pointer to a #GstSegment</doc>
|
||||||
|
<type name="Gst.Segment" c:type="const GstSegment*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</method>
|
||||||
<method name="query_latency" c:identifier="gst_base_src_query_latency">
|
<method name="query_latency" c:identifier="gst_base_src_query_latency">
|
||||||
<doc xml:space="preserve">Query the source for the latency parameters. @live will be %TRUE when @src is
|
<doc xml:space="preserve">Query the source for the latency parameters. @live will be %TRUE when @src is
|
||||||
configured as a live source. @min_latency and @max_latency will be set
|
configured as a live source. @min_latency and @max_latency will be set
|
||||||
|
|
|
@ -17,13 +17,6 @@ and/or use gtk-doc annotations. -->
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function-macro>
|
</function-macro>
|
||||||
<function-macro name="CHECK_MAIN" c:identifier="GST_CHECK_MAIN" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="name">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -2091,15 +2084,6 @@ MT safe.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function-macro>
|
</function-macro>
|
||||||
<function-macro name="START_TEST" c:identifier="GST_START_TEST" introspectable="0">
|
|
||||||
<doc xml:space="preserve">wrapper for checks START_TEST</doc>
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="__testname">
|
|
||||||
<doc xml:space="preserve">test function name</doc>
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<record name="StreamConsistency" c:type="GstStreamConsistency" disguised="1">
|
<record name="StreamConsistency" c:type="GstStreamConsistency" disguised="1">
|
||||||
<doc xml:space="preserve">Opaque consistency checker handle.</doc>
|
<doc xml:space="preserve">Opaque consistency checker handle.</doc>
|
||||||
|
|
||||||
|
|
|
@ -40,10 +40,6 @@ synchronization metadata on buffers from the pool.</doc>
|
||||||
|
|
||||||
<type name="utf8" c:type="gchar*"/>
|
<type name="utf8" c:type="gchar*"/>
|
||||||
</constant>
|
</constant>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<bitfield name="GLAPI" glib:type-name="GstGLAPI" glib:get-type="gst_gl_api_get_type" c:type="GstGLAPI">
|
<bitfield name="GLAPI" glib:type-name="GstGLAPI" glib:get-type="gst_gl_api_get_type" c:type="GstGLAPI">
|
||||||
<member name="none" value="0" c:identifier="GST_GL_API_NONE" glib:nick="none">
|
<member name="none" value="0" c:identifier="GST_GL_API_NONE" glib:nick="none">
|
||||||
<doc xml:space="preserve">no API</doc>
|
<doc xml:space="preserve">no API</doc>
|
||||||
|
@ -2660,19 +2656,6 @@ platform and window system specific functionality.
|
||||||
</instance-parameter>
|
</instance-parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</virtual-method>
|
</virtual-method>
|
||||||
<virtual-method name="get_foreign_display" invoker="get_foreign_display" version="1.18">
|
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">whether the context belongs to a foreign display</doc>
|
|
||||||
<type name="gboolean" c:type="gboolean"/>
|
|
||||||
</return-value>
|
|
||||||
<parameters>
|
|
||||||
<instance-parameter name="display" transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">a #GstGLDisplay</doc>
|
|
||||||
<type name="GLDisplay" c:type="GstGLDisplay*"/>
|
|
||||||
</instance-parameter>
|
|
||||||
</parameters>
|
|
||||||
</virtual-method>
|
|
||||||
<virtual-method name="get_handle" invoker="get_handle" version="1.4">
|
<virtual-method name="get_handle" invoker="get_handle" version="1.4">
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
|
@ -2741,7 +2724,6 @@ Must be called with the object lock held.</doc>
|
||||||
</instance-parameter>
|
</instance-parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</method>
|
</method>
|
||||||
|
|
||||||
<method name="filter_gl_api" c:identifier="gst_gl_display_filter_gl_api">
|
<method name="filter_gl_api" c:identifier="gst_gl_display_filter_gl_api">
|
||||||
<doc xml:space="preserve">limit the use of OpenGL to the requested @gl_api. This is intended to allow
|
<doc xml:space="preserve">limit the use of OpenGL to the requested @gl_api. This is intended to allow
|
||||||
application and elements to request a specific set of OpenGL API's based on
|
application and elements to request a specific set of OpenGL API's based on
|
||||||
|
@ -2789,19 +2771,6 @@ second argument is @data.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_foreign_display" c:identifier="gst_gl_display_get_foreign_display" version="1.18">
|
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">whether the context belongs to a foreign display</doc>
|
|
||||||
<type name="gboolean" c:type="gboolean"/>
|
|
||||||
</return-value>
|
|
||||||
<parameters>
|
|
||||||
<instance-parameter name="display" transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">a #GstGLDisplay</doc>
|
|
||||||
<type name="GLDisplay" c:type="GstGLDisplay*"/>
|
|
||||||
</instance-parameter>
|
|
||||||
</parameters>
|
|
||||||
</method>
|
|
||||||
<method name="get_gl_api" c:identifier="gst_gl_display_get_gl_api">
|
<method name="get_gl_api" c:identifier="gst_gl_display_get_gl_api">
|
||||||
<doc xml:space="preserve">see gst_gl_display_filter_gl_api() for what the returned value represents</doc>
|
<doc xml:space="preserve">see gst_gl_display_filter_gl_api() for what the returned value represents</doc>
|
||||||
|
|
||||||
|
@ -3005,98 +2974,12 @@ display's object lock held.</doc>
|
||||||
</parameters>
|
</parameters>
|
||||||
</callback>
|
</callback>
|
||||||
</field>
|
</field>
|
||||||
<field name="get_foreign_display">
|
|
||||||
<callback name="get_foreign_display">
|
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">whether the context belongs to a foreign display</doc>
|
|
||||||
<type name="gboolean" c:type="gboolean"/>
|
|
||||||
</return-value>
|
|
||||||
<parameters>
|
|
||||||
<parameter name="display" transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">a #GstGLDisplay</doc>
|
|
||||||
<type name="GLDisplay" c:type="GstGLDisplay*"/>
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</callback>
|
|
||||||
</field>
|
|
||||||
<field name="_padding" readable="0" private="1">
|
|
||||||
<array zero-terminated="0" fixed-size="3">
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</array>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
<class name="GLDisplayEGL" c:symbol-prefix="gl_display_egl" c:type="GstGLDisplayEGL" parent="GLDisplay" glib:type-name="GstGLDisplayEGL" glib:get-type="gst_gl_display_egl_get_type" glib:type-struct="GLDisplayEGLClass">
|
|
||||||
<doc xml:space="preserve">the contents of a #GstGLDisplayEGL are private and should only be accessed
|
|
||||||
through the provided API</doc>
|
|
||||||
|
|
||||||
<constructor name="new" c:identifier="gst_gl_display_egl_new">
|
|
||||||
<doc xml:space="preserve">Create a new #GstGLDisplayEGL using the default EGL_DEFAULT_DISPLAY.</doc>
|
|
||||||
|
|
||||||
<return-value transfer-ownership="full">
|
|
||||||
<doc xml:space="preserve">a new #GstGLDisplayEGL or %NULL</doc>
|
|
||||||
<type name="GLDisplayEGL" c:type="GstGLDisplayEGL*"/>
|
|
||||||
</return-value>
|
|
||||||
</constructor>
|
|
||||||
<constructor name="new_with_egl_display" c:identifier="gst_gl_display_egl_new_with_egl_display">
|
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
|
||||||
<type name="GLDisplayEGL" c:type="GstGLDisplayEGL*"/>
|
|
||||||
</return-value>
|
|
||||||
<parameters>
|
|
||||||
<parameter name="display" transfer-ownership="none" nullable="1" allow-none="1">
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</constructor>
|
|
||||||
<function name="get_from_native" c:identifier="gst_gl_display_egl_get_from_native" version="1.12">
|
|
||||||
<doc xml:space="preserve">Attempts to create a new `EGLDisplay` from @display. If @type is
|
|
||||||
%GST_GL_DISPLAY_TYPE_ANY, then @display must be 0. @type must not be
|
|
||||||
%GST_GL_DISPLAY_TYPE_NONE.</doc>
|
|
||||||
|
|
||||||
<return-value transfer-ownership="none" nullable="1">
|
|
||||||
<doc xml:space="preserve">A `EGLDisplay` or `EGL_NO_DISPLAY`</doc>
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</return-value>
|
|
||||||
<parameters>
|
|
||||||
<parameter name="type" transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">a #GstGLDisplayType</doc>
|
|
||||||
<type name="GLDisplayType" c:type="GstGLDisplayType"/>
|
|
||||||
</parameter>
|
|
||||||
<parameter name="display" transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">pointer to a display (or 0)</doc>
|
|
||||||
<type name="guintptr" c:type="guintptr"/>
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function>
|
|
||||||
<field name="parent">
|
|
||||||
<type name="GLDisplay" c:type="GstGLDisplay"/>
|
|
||||||
</field>
|
|
||||||
<field name="display" readable="0" private="1">
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</field>
|
|
||||||
<field name="foreign_display" readable="0" private="1">
|
|
||||||
<type name="gboolean" c:type="gboolean"/>
|
|
||||||
</field>
|
|
||||||
<field name="_padding" readable="0" private="1">
|
<field name="_padding" readable="0" private="1">
|
||||||
<array zero-terminated="0" fixed-size="4">
|
<array zero-terminated="0" fixed-size="4">
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
</array>
|
</array>
|
||||||
</field>
|
</field>
|
||||||
</class>
|
|
||||||
<record name="GLDisplayEGLClass" c:type="GstGLDisplayEGLClass" glib:is-gtype-struct-for="GLDisplayEGL">
|
|
||||||
|
|
||||||
<field name="object_class">
|
|
||||||
<type name="GLDisplayClass" c:type="GstGLDisplayClass"/>
|
|
||||||
</field>
|
|
||||||
<field name="_padding">
|
|
||||||
<array zero-terminated="0" fixed-size="4">
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</array>
|
|
||||||
</field>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
<record name="GLDisplayPrivate" c:type="GstGLDisplayPrivate" disguised="1">
|
<record name="GLDisplayPrivate" c:type="GstGLDisplayPrivate" disguised="1">
|
||||||
|
|
||||||
</record>
|
</record>
|
||||||
|
@ -3135,142 +3018,6 @@ through the provided API</doc>
|
||||||
<doc xml:space="preserve">any display type</doc>
|
<doc xml:space="preserve">any display type</doc>
|
||||||
</member>
|
</member>
|
||||||
</bitfield>
|
</bitfield>
|
||||||
<class name="GLDisplayWayland" c:symbol-prefix="gl_display_wayland" c:type="GstGLDisplayWayland" parent="GLDisplay" glib:type-name="GstGLDisplayWayland" glib:get-type="gst_gl_display_wayland_get_type" glib:type-struct="GLDisplayWaylandClass">
|
|
||||||
<doc xml:space="preserve">the contents of a #GstGLDisplayWayland are private and should only be accessed
|
|
||||||
through the provided API</doc>
|
|
||||||
|
|
||||||
<constructor name="new" c:identifier="gst_gl_display_wayland_new">
|
|
||||||
<doc xml:space="preserve">Create a new #GstGLDisplayWayland from the wayland display name. See `wl_display_connect`()
|
|
||||||
for details on what is a valid name.</doc>
|
|
||||||
|
|
||||||
<return-value transfer-ownership="full">
|
|
||||||
<doc xml:space="preserve">a new #GstGLDisplayWayland or %NULL</doc>
|
|
||||||
<type name="GLDisplayWayland" c:type="GstGLDisplayWayland*"/>
|
|
||||||
</return-value>
|
|
||||||
<parameters>
|
|
||||||
<parameter name="name" transfer-ownership="none" nullable="1" allow-none="1">
|
|
||||||
<doc xml:space="preserve">a display name</doc>
|
|
||||||
<type name="utf8" c:type="const gchar*"/>
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</constructor>
|
|
||||||
<constructor name="new_with_display" c:identifier="gst_gl_display_wayland_new_with_display">
|
|
||||||
<doc xml:space="preserve">Creates a new display connection from a wl_display Display.</doc>
|
|
||||||
|
|
||||||
<return-value transfer-ownership="full">
|
|
||||||
<doc xml:space="preserve">a new #GstGLDisplayWayland</doc>
|
|
||||||
<type name="GLDisplayWayland" c:type="GstGLDisplayWayland*"/>
|
|
||||||
</return-value>
|
|
||||||
<parameters>
|
|
||||||
<parameter name="display" transfer-ownership="none" nullable="1" allow-none="1">
|
|
||||||
<doc xml:space="preserve">an existing, wayland display</doc>
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</constructor>
|
|
||||||
<field name="parent">
|
|
||||||
<type name="GLDisplay" c:type="GstGLDisplay"/>
|
|
||||||
</field>
|
|
||||||
<field name="display">
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</field>
|
|
||||||
<field name="registry">
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</field>
|
|
||||||
<field name="compositor">
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</field>
|
|
||||||
<field name="subcompositor">
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</field>
|
|
||||||
<field name="shell">
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</field>
|
|
||||||
<field name="foreign_display" readable="0" private="1">
|
|
||||||
<type name="gboolean" c:type="gboolean"/>
|
|
||||||
</field>
|
|
||||||
<field name="_padding" readable="0" private="1">
|
|
||||||
<array zero-terminated="0" fixed-size="4">
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</array>
|
|
||||||
</field>
|
|
||||||
</class>
|
|
||||||
<record name="GLDisplayWaylandClass" c:type="GstGLDisplayWaylandClass" glib:is-gtype-struct-for="GLDisplayWayland">
|
|
||||||
|
|
||||||
<field name="object_class">
|
|
||||||
<type name="GLDisplayClass" c:type="GstGLDisplayClass"/>
|
|
||||||
</field>
|
|
||||||
<field name="_padding">
|
|
||||||
<array zero-terminated="0" fixed-size="4">
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</array>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
<class name="GLDisplayX11" c:symbol-prefix="gl_display_x11" c:type="GstGLDisplayX11" parent="GLDisplay" glib:type-name="GstGLDisplayX11" glib:get-type="gst_gl_display_x11_get_type" glib:type-struct="GLDisplayX11Class">
|
|
||||||
<doc xml:space="preserve">the contents of a #GstGLDisplayX11 are private and should only be accessed
|
|
||||||
through the provided API</doc>
|
|
||||||
|
|
||||||
<constructor name="new" c:identifier="gst_gl_display_x11_new">
|
|
||||||
<doc xml:space="preserve">Create a new #GstGLDisplayX11 from the x11 display name. See `XOpenDisplay`()
|
|
||||||
for details on what is a valid name.</doc>
|
|
||||||
|
|
||||||
<return-value transfer-ownership="full">
|
|
||||||
<doc xml:space="preserve">a new #GstGLDisplayX11 or %NULL</doc>
|
|
||||||
<type name="GLDisplayX11" c:type="GstGLDisplayX11*"/>
|
|
||||||
</return-value>
|
|
||||||
<parameters>
|
|
||||||
<parameter name="name" transfer-ownership="none" nullable="1" allow-none="1">
|
|
||||||
<doc xml:space="preserve">a display name</doc>
|
|
||||||
<type name="utf8" c:type="const gchar*"/>
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</constructor>
|
|
||||||
<constructor name="new_with_display" c:identifier="gst_gl_display_x11_new_with_display" introspectable="0">
|
|
||||||
<doc xml:space="preserve">Creates a new display connection from a X11 Display.</doc>
|
|
||||||
|
|
||||||
<return-value transfer-ownership="full">
|
|
||||||
<doc xml:space="preserve">a new #GstGLDisplayX11</doc>
|
|
||||||
<type name="GLDisplayX11" c:type="GstGLDisplayX11*"/>
|
|
||||||
</return-value>
|
|
||||||
<parameters>
|
|
||||||
<parameter name="display" transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">an existing, x11 display</doc>
|
|
||||||
<type c:type="gpointer" name="gpointer"/>
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</constructor>
|
|
||||||
<field name="parent" readable="0" private="1">
|
|
||||||
<type name="GLDisplay" c:type="GstGLDisplay"/>
|
|
||||||
</field>
|
|
||||||
<field name="name" readable="0" private="1">
|
|
||||||
<type name="utf8" c:type="gchar*"/>
|
|
||||||
</field>
|
|
||||||
<field name="display" introspectable="0" readable="0" private="1">
|
|
||||||
<type c:type="gpointer" name="gpointer"/>
|
|
||||||
</field>
|
|
||||||
<field name="xcb_connection" introspectable="0" readable="0" private="1">
|
|
||||||
<type c:type="gpointer" name="gpointer"/>
|
|
||||||
</field>
|
|
||||||
<field name="foreign_display" readable="0" private="1">
|
|
||||||
<type name="gboolean" c:type="gboolean"/>
|
|
||||||
</field>
|
|
||||||
<field name="_padding" readable="0" private="1">
|
|
||||||
<array zero-terminated="0" fixed-size="4">
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</array>
|
|
||||||
</field>
|
|
||||||
</class>
|
|
||||||
<record name="GLDisplayX11Class" c:type="GstGLDisplayX11Class" glib:is-gtype-struct-for="GLDisplayX11">
|
|
||||||
|
|
||||||
<field name="object_class">
|
|
||||||
<type name="GLDisplayClass" c:type="GstGLDisplayClass"/>
|
|
||||||
</field>
|
|
||||||
<field name="_padding">
|
|
||||||
<array zero-terminated="0" fixed-size="4">
|
|
||||||
<type name="gpointer" c:type="gpointer"/>
|
|
||||||
</array>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
<class name="GLFilter" c:symbol-prefix="gl_filter" c:type="GstGLFilter" parent="GLBaseFilter" glib:type-name="GstGLFilter" glib:get-type="gst_gl_filter_get_type" glib:type-struct="GLFilterClass">
|
<class name="GLFilter" c:symbol-prefix="gl_filter" c:type="GstGLFilter" parent="GLBaseFilter" glib:type-name="GstGLFilter" glib:get-type="gst_gl_filter_get_type" glib:type-struct="GLFilterClass">
|
||||||
<doc xml:space="preserve">#GstGLFilter helps to implement simple OpenGL filter elements taking a
|
<doc xml:space="preserve">#GstGLFilter helps to implement simple OpenGL filter elements taking a
|
||||||
single input and producing a single output with a #GstGLFramebuffer</doc>
|
single input and producing a single output with a #GstGLFramebuffer</doc>
|
||||||
|
@ -4390,9 +4137,6 @@ multiple times. This must be called before any other GstGLMemory operation.</do
|
||||||
</array>
|
</array>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<record name="GLMemoryPBO" c:type="GstGLMemoryPBO">
|
<record name="GLMemoryPBO" c:type="GstGLMemoryPBO">
|
||||||
<doc xml:space="preserve">#GstGLMemoryPBO is created or wrapped through gst_gl_base_memory_alloc()
|
<doc xml:space="preserve">#GstGLMemoryPBO is created or wrapped through gst_gl_base_memory_alloc()
|
||||||
with #GstGLVideoAllocationParams.
|
with #GstGLVideoAllocationParams.
|
||||||
|
@ -9270,52 +9014,6 @@ user-defined purposes.</doc>
|
||||||
|
|
||||||
<type name="utf8" c:type="gchar*"/>
|
<type name="utf8" c:type="gchar*"/>
|
||||||
</constant>
|
</constant>
|
||||||
<function-macro name="GL_DISPLAY_EGL" c:identifier="GST_GL_DISPLAY_EGL" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="obj">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="GL_DISPLAY_EGL_CAST" c:identifier="GST_GL_DISPLAY_EGL_CAST" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="obj">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="GL_DISPLAY_EGL_CLASS" c:identifier="GST_GL_DISPLAY_EGL_CLASS" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="klass">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="GL_DISPLAY_EGL_DEVICE" c:identifier="GST_GL_DISPLAY_EGL_DEVICE" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="obj">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="GL_DISPLAY_EGL_DEVICE_CAST" c:identifier="GST_GL_DISPLAY_EGL_DEVICE_CAST" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="obj">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="GL_DISPLAY_EGL_DEVICE_CLASS" c:identifier="GST_GL_DISPLAY_EGL_DEVICE_CLASS" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="klass">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<constant name="GL_DISPLAY_EGL_NAME" value="gst.gl.display.egl" c:type="GST_GL_DISPLAY_EGL_NAME">
|
|
||||||
|
|
||||||
<type name="utf8" c:type="gchar*"/>
|
|
||||||
</constant>
|
|
||||||
<function-macro name="GL_DISPLAY_GET_CLASS" c:identifier="GST_GL_DISPLAY_GET_CLASS" introspectable="0">
|
<function-macro name="GL_DISPLAY_GET_CLASS" c:identifier="GST_GL_DISPLAY_GET_CLASS" introspectable="0">
|
||||||
|
|
||||||
<parameters>
|
<parameters>
|
||||||
|
@ -9323,48 +9021,6 @@ user-defined purposes.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function-macro>
|
</function-macro>
|
||||||
<function-macro name="GL_DISPLAY_WAYLAND" c:identifier="GST_GL_DISPLAY_WAYLAND" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="obj">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="GL_DISPLAY_WAYLAND_CAST" c:identifier="GST_GL_DISPLAY_WAYLAND_CAST" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="obj">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="GL_DISPLAY_WAYLAND_CLASS" c:identifier="GST_GL_DISPLAY_WAYLAND_CLASS" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="klass">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="GL_DISPLAY_X11" c:identifier="GST_GL_DISPLAY_X11" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="obj">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="GL_DISPLAY_X11_CAST" c:identifier="GST_GL_DISPLAY_X11_CAST" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="obj">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="GL_DISPLAY_X11_CLASS" c:identifier="GST_GL_DISPLAY_X11_CLASS" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="klass">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="GL_FILTER" c:identifier="GST_GL_FILTER" introspectable="0">
|
<function-macro name="GL_FILTER" c:identifier="GST_GL_FILTER" introspectable="0">
|
||||||
|
|
||||||
<parameters>
|
<parameters>
|
||||||
|
@ -9447,11 +9103,6 @@ user-defined purposes.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function-macro>
|
</function-macro>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<function-macro name="GL_MEMORY_PBO_ALLOCATOR" c:identifier="GST_GL_MEMORY_PBO_ALLOCATOR" introspectable="0">
|
<function-macro name="GL_MEMORY_PBO_ALLOCATOR" c:identifier="GST_GL_MEMORY_PBO_ALLOCATOR" introspectable="0">
|
||||||
|
|
||||||
<parameters>
|
<parameters>
|
||||||
|
@ -9693,7 +9344,6 @@ user-defined purposes.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function-macro>
|
</function-macro>
|
||||||
|
|
||||||
<function-macro name="IS_GLSL_STAGE" c:identifier="GST_IS_GLSL_STAGE" introspectable="0">
|
<function-macro name="IS_GLSL_STAGE" c:identifier="GST_IS_GLSL_STAGE" introspectable="0">
|
||||||
|
|
||||||
<parameters>
|
<parameters>
|
||||||
|
@ -9813,62 +9463,6 @@ user-defined purposes.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function-macro>
|
</function-macro>
|
||||||
<function-macro name="IS_GL_DISPLAY_EGL" c:identifier="GST_IS_GL_DISPLAY_EGL" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="obj">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="IS_GL_DISPLAY_EGL_CLASS" c:identifier="GST_IS_GL_DISPLAY_EGL_CLASS" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="klass">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="IS_GL_DISPLAY_EGL_DEVICE" c:identifier="GST_IS_GL_DISPLAY_EGL_DEVICE" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="obj">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="IS_GL_DISPLAY_EGL_DEVICE_CLASS" c:identifier="GST_IS_GL_DISPLAY_EGL_DEVICE_CLASS" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="klass">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="IS_GL_DISPLAY_WAYLAND" c:identifier="GST_IS_GL_DISPLAY_WAYLAND" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="obj">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="IS_GL_DISPLAY_WAYLAND_CLASS" c:identifier="GST_IS_GL_DISPLAY_WAYLAND_CLASS" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="klass">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="IS_GL_DISPLAY_X11" c:identifier="GST_IS_GL_DISPLAY_X11" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="obj">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="IS_GL_DISPLAY_X11_CLASS" c:identifier="GST_IS_GL_DISPLAY_X11_CLASS" introspectable="0">
|
|
||||||
|
|
||||||
<parameters>
|
|
||||||
<parameter name="klass">
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function-macro>
|
|
||||||
<function-macro name="IS_GL_FILTER" c:identifier="GST_IS_GL_FILTER" introspectable="0">
|
<function-macro name="IS_GL_FILTER" c:identifier="GST_IS_GL_FILTER" introspectable="0">
|
||||||
|
|
||||||
<parameters>
|
<parameters>
|
||||||
|
@ -9911,8 +9505,6 @@ user-defined purposes.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function-macro>
|
</function-macro>
|
||||||
|
|
||||||
|
|
||||||
<function-macro name="IS_GL_MEMORY_PBO_ALLOCATOR" c:identifier="GST_IS_GL_MEMORY_PBO_ALLOCATOR" introspectable="0">
|
<function-macro name="IS_GL_MEMORY_PBO_ALLOCATOR" c:identifier="GST_IS_GL_MEMORY_PBO_ALLOCATOR" introspectable="0">
|
||||||
|
|
||||||
<parameters>
|
<parameters>
|
||||||
|
@ -10129,11 +9721,6 @@ you are writing to OpenGL. Conversely, combining #GST_MAP_GL with
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function>
|
</function>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<function name="gl_api_from_string" c:identifier="gst_gl_api_from_string" moved-to="GLAPI.from_string">
|
<function name="gl_api_from_string" c:identifier="gst_gl_api_from_string" moved-to="GLAPI.from_string">
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
|
@ -10499,7 +10086,6 @@ debug category to be at least %GST_LEVEL_FIXME.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function>
|
</function>
|
||||||
|
|
||||||
<function name="gl_memory_init_once" c:identifier="gst_gl_memory_init_once" moved-to="GLMemory.init_once" version="1.4">
|
<function name="gl_memory_init_once" c:identifier="gst_gl_memory_init_once" moved-to="GLMemory.init_once" version="1.4">
|
||||||
<doc xml:space="preserve">Initializes the GL Base Texture allocator. It is safe to call this function
|
<doc xml:space="preserve">Initializes the GL Base Texture allocator. It is safe to call this function
|
||||||
multiple times. This must be called before any other GstGLMemory operation.</doc>
|
multiple times. This must be called before any other GstGLMemory operation.</doc>
|
||||||
|
@ -11009,7 +10595,6 @@ or a valid GLSL version and/or profile.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function>
|
</function>
|
||||||
|
|
||||||
<function name="is_gl_memory_pbo" c:identifier="gst_is_gl_memory_pbo" version="1.8">
|
<function name="is_gl_memory_pbo" c:identifier="gst_is_gl_memory_pbo" version="1.8">
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
|
@ -11036,5 +10621,395 @@ or a valid GLSL version and/or profile.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function>
|
</function>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<class name="GLDisplayEGL" c:symbol-prefix="gl_display_egl" c:type="GstGLDisplayEGL" parent="GstGL.GLDisplay" glib:type-name="GstGLDisplayEGL" glib:get-type="gst_gl_display_egl_get_type" glib:type-struct="GLDisplayEGLClass">
|
||||||
|
<doc xml:space="preserve">the contents of a #GstGLDisplayEGL are private and should only be accessed
|
||||||
|
through the provided API</doc>
|
||||||
|
|
||||||
|
<constructor name="new" c:identifier="gst_gl_display_egl_new">
|
||||||
|
<doc xml:space="preserve">Create a new #GstGLDisplayEGL using the default EGL_DEFAULT_DISPLAY.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<doc xml:space="preserve">a new #GstGLDisplayEGL or %NULL</doc>
|
||||||
|
<type name="GLDisplayEGL" c:type="GstGLDisplayEGL*"/>
|
||||||
|
</return-value>
|
||||||
|
</constructor>
|
||||||
|
<constructor name="new_with_egl_display" c:identifier="gst_gl_display_egl_new_with_egl_display">
|
||||||
|
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="GLDisplayEGL" c:type="GstGLDisplayEGL*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="display" transfer-ownership="none" nullable="1" allow-none="1">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</constructor>
|
||||||
|
<function name="from_gl_display" c:identifier="gst_gl_display_egl_from_gl_display" version="1.12">
|
||||||
|
<doc xml:space="preserve">Creates a EGL display connection from a native Display.
|
||||||
|
|
||||||
|
This function will return the same value for multiple calls with the same
|
||||||
|
@display.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<doc xml:space="preserve">a new #GstGLDisplayEGL</doc>
|
||||||
|
<type name="GLDisplayEGL" c:type="GstGLDisplayEGL*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="display" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">an existing #GstGLDisplay</doc>
|
||||||
|
<type name="GstGL.GLDisplay" c:type="GstGLDisplay*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="get_from_native" c:identifier="gst_gl_display_egl_get_from_native" version="1.12">
|
||||||
|
<doc xml:space="preserve">Attempts to create a new `EGLDisplay` from @display. If @type is
|
||||||
|
%GST_GL_DISPLAY_TYPE_ANY, then @display must be 0. @type must not be
|
||||||
|
%GST_GL_DISPLAY_TYPE_NONE.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="none" nullable="1">
|
||||||
|
<doc xml:space="preserve">A `EGLDisplay` or `EGL_NO_DISPLAY`</doc>
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="type" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">a #GstGLDisplayType</doc>
|
||||||
|
<type name="GstGL.GLDisplayType" c:type="GstGLDisplayType"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="display" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">pointer to a display (or 0)</doc>
|
||||||
|
<type name="guintptr" c:type="guintptr"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<field name="parent">
|
||||||
|
<type name="GstGL.GLDisplay" c:type="GstGLDisplay"/>
|
||||||
|
</field>
|
||||||
|
<field name="display" readable="0" private="1">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</field>
|
||||||
|
<field name="foreign_display" readable="0" private="1">
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</field>
|
||||||
|
<field name="_padding" readable="0" private="1">
|
||||||
|
<array zero-terminated="0" fixed-size="4">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</array>
|
||||||
|
</field>
|
||||||
|
</class>
|
||||||
|
<record name="GLDisplayEGLClass" c:type="GstGLDisplayEGLClass" glib:is-gtype-struct-for="GLDisplayEGL">
|
||||||
|
|
||||||
|
<field name="object_class">
|
||||||
|
<type name="GstGL.GLDisplayClass" c:type="GstGLDisplayClass"/>
|
||||||
|
</field>
|
||||||
|
<field name="_padding">
|
||||||
|
<array zero-terminated="0" fixed-size="4">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</array>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<function-macro name="GL_DISPLAY_EGL" c:identifier="GST_GL_DISPLAY_EGL" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="obj">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="GL_DISPLAY_EGL_CAST" c:identifier="GST_GL_DISPLAY_EGL_CAST" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="obj">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="GL_DISPLAY_EGL_CLASS" c:identifier="GST_GL_DISPLAY_EGL_CLASS" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="klass">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="GL_DISPLAY_EGL_DEVICE" c:identifier="GST_GL_DISPLAY_EGL_DEVICE" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="obj">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="GL_DISPLAY_EGL_DEVICE_CAST" c:identifier="GST_GL_DISPLAY_EGL_DEVICE_CAST" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="obj">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="GL_DISPLAY_EGL_DEVICE_CLASS" c:identifier="GST_GL_DISPLAY_EGL_DEVICE_CLASS" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="klass">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<constant name="GL_DISPLAY_EGL_NAME" value="gst.gl.display.egl" c:type="GST_GL_DISPLAY_EGL_NAME">
|
||||||
|
|
||||||
|
<type name="utf8" c:type="gchar*"/>
|
||||||
|
</constant>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<function-macro name="IS_GL_DISPLAY_EGL" c:identifier="GST_IS_GL_DISPLAY_EGL" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="obj">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="IS_GL_DISPLAY_EGL_CLASS" c:identifier="GST_IS_GL_DISPLAY_EGL_CLASS" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="klass">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="IS_GL_DISPLAY_EGL_DEVICE" c:identifier="GST_IS_GL_DISPLAY_EGL_DEVICE" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="obj">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="IS_GL_DISPLAY_EGL_DEVICE_CLASS" c:identifier="GST_IS_GL_DISPLAY_EGL_DEVICE_CLASS" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="klass">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<class name="GLDisplayWayland" c:symbol-prefix="gl_display_wayland" c:type="GstGLDisplayWayland" parent="GstGL.GLDisplay" glib:type-name="GstGLDisplayWayland" glib:get-type="gst_gl_display_wayland_get_type" glib:type-struct="GLDisplayWaylandClass">
|
||||||
|
<doc xml:space="preserve">the contents of a #GstGLDisplayWayland are private and should only be accessed
|
||||||
|
through the provided API</doc>
|
||||||
|
|
||||||
|
<constructor name="new" c:identifier="gst_gl_display_wayland_new">
|
||||||
|
<doc xml:space="preserve">Create a new #GstGLDisplayWayland from the wayland display name. See `wl_display_connect`()
|
||||||
|
for details on what is a valid name.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<doc xml:space="preserve">a new #GstGLDisplayWayland or %NULL</doc>
|
||||||
|
<type name="GLDisplayWayland" c:type="GstGLDisplayWayland*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="name" transfer-ownership="none" nullable="1" allow-none="1">
|
||||||
|
<doc xml:space="preserve">a display name</doc>
|
||||||
|
<type name="utf8" c:type="const gchar*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</constructor>
|
||||||
|
<constructor name="new_with_display" c:identifier="gst_gl_display_wayland_new_with_display">
|
||||||
|
<doc xml:space="preserve">Creates a new display connection from a wl_display Display.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<doc xml:space="preserve">a new #GstGLDisplayWayland</doc>
|
||||||
|
<type name="GLDisplayWayland" c:type="GstGLDisplayWayland*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="display" transfer-ownership="none" nullable="1" allow-none="1">
|
||||||
|
<doc xml:space="preserve">an existing, wayland display</doc>
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</constructor>
|
||||||
|
<field name="parent">
|
||||||
|
<type name="GstGL.GLDisplay" c:type="GstGLDisplay"/>
|
||||||
|
</field>
|
||||||
|
<field name="display">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</field>
|
||||||
|
<field name="registry">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</field>
|
||||||
|
<field name="compositor">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</field>
|
||||||
|
<field name="subcompositor">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</field>
|
||||||
|
<field name="shell">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</field>
|
||||||
|
<field name="foreign_display" readable="0" private="1">
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</field>
|
||||||
|
<field name="_padding" readable="0" private="1">
|
||||||
|
<array zero-terminated="0" fixed-size="4">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</array>
|
||||||
|
</field>
|
||||||
|
</class>
|
||||||
|
<record name="GLDisplayWaylandClass" c:type="GstGLDisplayWaylandClass" glib:is-gtype-struct-for="GLDisplayWayland">
|
||||||
|
|
||||||
|
<field name="object_class">
|
||||||
|
<type name="GstGL.GLDisplayClass" c:type="GstGLDisplayClass"/>
|
||||||
|
</field>
|
||||||
|
<field name="_padding">
|
||||||
|
<array zero-terminated="0" fixed-size="4">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</array>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
<function-macro name="GL_DISPLAY_WAYLAND" c:identifier="GST_GL_DISPLAY_WAYLAND" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="obj">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="GL_DISPLAY_WAYLAND_CAST" c:identifier="GST_GL_DISPLAY_WAYLAND_CAST" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="obj">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="GL_DISPLAY_WAYLAND_CLASS" c:identifier="GST_GL_DISPLAY_WAYLAND_CLASS" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="klass">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="IS_GL_DISPLAY_WAYLAND" c:identifier="GST_IS_GL_DISPLAY_WAYLAND" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="obj">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="IS_GL_DISPLAY_WAYLAND_CLASS" c:identifier="GST_IS_GL_DISPLAY_WAYLAND_CLASS" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="klass">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<class name="GLDisplayX11" c:symbol-prefix="gl_display_x11" c:type="GstGLDisplayX11" parent="GstGL.GLDisplay" glib:type-name="GstGLDisplayX11" glib:get-type="gst_gl_display_x11_get_type" glib:type-struct="GLDisplayX11Class">
|
||||||
|
<doc xml:space="preserve">the contents of a #GstGLDisplayX11 are private and should only be accessed
|
||||||
|
through the provided API</doc>
|
||||||
|
|
||||||
|
<constructor name="new" c:identifier="gst_gl_display_x11_new">
|
||||||
|
<doc xml:space="preserve">Create a new #GstGLDisplayX11 from the x11 display name. See `XOpenDisplay`()
|
||||||
|
for details on what is a valid name.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<doc xml:space="preserve">a new #GstGLDisplayX11 or %NULL</doc>
|
||||||
|
<type name="GLDisplayX11" c:type="GstGLDisplayX11*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="name" transfer-ownership="none" nullable="1" allow-none="1">
|
||||||
|
<doc xml:space="preserve">a display name</doc>
|
||||||
|
<type name="utf8" c:type="const gchar*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</constructor>
|
||||||
|
<constructor name="new_with_display" c:identifier="gst_gl_display_x11_new_with_display" introspectable="0">
|
||||||
|
<doc xml:space="preserve">Creates a new display connection from a X11 Display.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<doc xml:space="preserve">a new #GstGLDisplayX11</doc>
|
||||||
|
<type name="GLDisplayX11" c:type="GstGLDisplayX11*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="display" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">an existing, x11 display</doc>
|
||||||
|
<type c:type="gpointer" name="gpointer"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</constructor>
|
||||||
|
<field name="parent" readable="0" private="1">
|
||||||
|
<type name="GstGL.GLDisplay" c:type="GstGLDisplay"/>
|
||||||
|
</field>
|
||||||
|
<field name="name" readable="0" private="1">
|
||||||
|
<type name="utf8" c:type="gchar*"/>
|
||||||
|
</field>
|
||||||
|
<field name="display" introspectable="0" readable="0" private="1">
|
||||||
|
<type c:type="gpointer" name="gpointer"/>
|
||||||
|
</field>
|
||||||
|
<field name="xcb_connection" introspectable="0" readable="0" private="1">
|
||||||
|
<type c:type="gpointer" name="gpointer"/>
|
||||||
|
</field>
|
||||||
|
<field name="foreign_display" readable="0" private="1">
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</field>
|
||||||
|
<field name="_padding" readable="0" private="1">
|
||||||
|
<array zero-terminated="0" fixed-size="4">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</array>
|
||||||
|
</field>
|
||||||
|
</class>
|
||||||
|
<record name="GLDisplayX11Class" c:type="GstGLDisplayX11Class" glib:is-gtype-struct-for="GLDisplayX11">
|
||||||
|
|
||||||
|
<field name="object_class">
|
||||||
|
<type name="GstGL.GLDisplayClass" c:type="GstGLDisplayClass"/>
|
||||||
|
</field>
|
||||||
|
<field name="_padding">
|
||||||
|
<array zero-terminated="0" fixed-size="4">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</array>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
<function-macro name="GL_DISPLAY_X11" c:identifier="GST_GL_DISPLAY_X11" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="obj">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="GL_DISPLAY_X11_CAST" c:identifier="GST_GL_DISPLAY_X11_CAST" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="obj">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="GL_DISPLAY_X11_CLASS" c:identifier="GST_GL_DISPLAY_X11_CLASS" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="klass">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="IS_GL_DISPLAY_X11" c:identifier="GST_IS_GL_DISPLAY_X11" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="obj">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
|
<function-macro name="IS_GL_DISPLAY_X11_CLASS" c:identifier="GST_IS_GL_DISPLAY_X11_CLASS" introspectable="0">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter name="klass">
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function-macro>
|
||||||
</namespace>
|
</namespace>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
|
@ -2027,8 +2027,11 @@ for more about restrictions. Does not apply to #GstEncodingContainerProfile.</do
|
||||||
</parameters>
|
</parameters>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_single_segment" c:identifier="gst_encoding_profile_set_single_segment" version="1.18">
|
<method name="set_single_segment" c:identifier="gst_encoding_profile_set_single_segment" version="1.18">
|
||||||
<doc xml:space="preserve">If using a single segment, buffers will be retimestamped
|
<doc xml:space="preserve">If using a single segment, buffers will be retimestamped and segments will be
|
||||||
and segments will be eat so as to appear as one segment.</doc>
|
eat so as to appear as one segment.
|
||||||
|
|
||||||
|
> *NOTE*: Single segment is not property supported when using
|
||||||
|
> #encodebin:avoid-reencoding</doc>
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<type name="none" c:type="void"/>
|
<type name="none" c:type="void"/>
|
||||||
|
@ -2039,8 +2042,8 @@ and segments will be eat so as to appear as one segment.</doc>
|
||||||
<type name="EncodingProfile" c:type="GstEncodingProfile*"/>
|
<type name="EncodingProfile" c:type="GstEncodingProfile*"/>
|
||||||
</instance-parameter>
|
</instance-parameter>
|
||||||
<parameter name="single_segment" transfer-ownership="none">
|
<parameter name="single_segment" transfer-ownership="none">
|
||||||
<doc xml:space="preserve">#TRUE if the stream represented by @profile should use a single
|
<doc xml:space="preserve">#TRUE if the stream represented by @profile should use a
|
||||||
segment before the encoder #FALSE otherwise.</doc>
|
single segment before the encoder, #FALSE otherwise.</doc>
|
||||||
<type name="gboolean" c:type="gboolean"/>
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
|
@ -2336,6 +2339,8 @@ not a multi-pass profile</doc>
|
||||||
</parameters>
|
</parameters>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_variableframerate" c:identifier="gst_encoding_video_profile_get_variableframerate">
|
<method name="get_variableframerate" c:identifier="gst_encoding_video_profile_get_variableframerate">
|
||||||
|
<doc xml:space="preserve">> *NOTE*: Fixed framerate won't be enforced when #encodebin:avoid-reencoding
|
||||||
|
> is set.</doc>
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<doc xml:space="preserve">Whether non-constant video framerate is allowed for encoding.</doc>
|
<doc xml:space="preserve">Whether non-constant video framerate is allowed for encoding.</doc>
|
||||||
|
@ -2756,12 +2761,12 @@ in debugging.</doc>
|
||||||
|
|
||||||
<type name="gint" c:type="gint"/>
|
<type name="gint" c:type="gint"/>
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PLUGINS_BASE_VERSION_MICRO" value="2" c:type="GST_PLUGINS_BASE_VERSION_MICRO">
|
<constant name="PLUGINS_BASE_VERSION_MICRO" value="0" c:type="GST_PLUGINS_BASE_VERSION_MICRO">
|
||||||
<doc xml:space="preserve">The micro version of GStreamer's gst-plugins-base libraries at compile time.</doc>
|
<doc xml:space="preserve">The micro version of GStreamer's gst-plugins-base libraries at compile time.</doc>
|
||||||
|
|
||||||
<type name="gint" c:type="gint"/>
|
<type name="gint" c:type="gint"/>
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PLUGINS_BASE_VERSION_MINOR" value="17" c:type="GST_PLUGINS_BASE_VERSION_MINOR">
|
<constant name="PLUGINS_BASE_VERSION_MINOR" value="18" c:type="GST_PLUGINS_BASE_VERSION_MINOR">
|
||||||
<doc xml:space="preserve">The minor version of GStreamer's gst-plugins-base libraries at compile time.</doc>
|
<doc xml:space="preserve">The minor version of GStreamer's gst-plugins-base libraries at compile time.</doc>
|
||||||
|
|
||||||
<type name="gint" c:type="gint"/>
|
<type name="gint" c:type="gint"/>
|
||||||
|
|
|
@ -2988,16 +2988,6 @@ the last processed buffer and current state of the stream being payloaded:
|
||||||
<property name="timestamp-offset" writable="1" transfer-ownership="none">
|
<property name="timestamp-offset" writable="1" transfer-ownership="none">
|
||||||
<type name="guint" c:type="guint"/>
|
<type name="guint" c:type="guint"/>
|
||||||
</property>
|
</property>
|
||||||
<property name="twcc-ext-id" version="1.18" writable="1" transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">The RTP header-extension ID used for tagging buffers with Transport-Wide
|
|
||||||
Congestion Control sequence-numbers.
|
|
||||||
|
|
||||||
To use this across multiple bundled streams (transport wide), the
|
|
||||||
GstRTPFunnel can mux TWCC sequence-numbers together.
|
|
||||||
|
|
||||||
This is experimental, as it is still a draft and not yet a standard.</doc>
|
|
||||||
<type name="guint" c:type="guint"/>
|
|
||||||
</property>
|
|
||||||
<field name="element">
|
<field name="element">
|
||||||
<type name="Gst.Element" c:type="GstElement"/>
|
<type name="Gst.Element" c:type="GstElement"/>
|
||||||
</field>
|
</field>
|
||||||
|
|
|
@ -2317,7 +2317,7 @@ return to upstream/caller (indicating either GST_FLOW_ERROR or GST_FLOW_OK).</do
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function-macro>
|
</function-macro>
|
||||||
<constant name="VIDEO_FORMATS_ALL" value="{ AYUV64, ARGB64, GBRA_12BE, GBRA_12LE, Y412_BE, Y412_LE, A444_10BE, GBRA_10BE, A444_10LE, GBRA_10LE, A422_10BE, A422_10LE, A420_10BE, A420_10LE, Y410, RGB10A2_LE, BGR10A2_LE, GBRA, ABGR, VUYA, BGRA, AYUV, ARGB, RGBA, A420, Y444_16BE, Y444_16LE, v216, P016_BE, P016_LE, Y444_12BE, GBR_12BE, Y444_12LE, GBR_12LE, I422_12BE, I422_12LE, Y212_BE, Y212_LE, I420_12BE, I420_12LE, P012_BE, P012_LE, Y444_10BE, GBR_10BE, Y444_10LE, GBR_10LE, r210, I422_10BE, I422_10LE, NV16_10LE32, Y210, v210, UYVP, I420_10BE, I420_10LE, P010_10BE, P010_10LE, NV12_10LE32, NV12_10LE40, Y444, GBR, NV24, xBGR, BGRx, xRGB, RGBx, BGR, IYU2, v308, RGB, Y42B, NV61, NV16, VYUY, UYVY, YVYU, YUY2, I420, YV12, NV21, NV12, NV12_64Z32, Y41B, IYU1, YVU9, YUV9, RGB16, BGR16, RGB15, BGR15, RGB8P, GRAY16_BE, GRAY16_LE, GRAY10_LE32, GRAY8 }" c:type="GST_VIDEO_FORMATS_ALL">
|
<constant name="VIDEO_FORMATS_ALL" value="{ AYUV64, ARGB64, GBRA_12BE, GBRA_12LE, Y412_BE, Y412_LE, A444_10BE, GBRA_10BE, A444_10LE, GBRA_10LE, A422_10BE, A422_10LE, A420_10BE, A420_10LE, Y410, RGB10A2_LE, BGR10A2_LE, GBRA, ABGR, VUYA, BGRA, AYUV, ARGB, RGBA, A420, Y444_16BE, Y444_16LE, v216, P016_BE, P016_LE, Y444_12BE, GBR_12BE, Y444_12LE, GBR_12LE, I422_12BE, I422_12LE, Y212_BE, Y212_LE, I420_12BE, I420_12LE, P012_BE, P012_LE, Y444_10BE, GBR_10BE, Y444_10LE, GBR_10LE, r210, I422_10BE, I422_10LE, NV16_10LE32, Y210, v210, UYVP, I420_10BE, I420_10LE, P010_10BE, P010_10LE, NV12_10LE32, NV12_10LE40, Y444, GBR, NV24, xBGR, BGRx, xRGB, RGBx, BGR, IYU2, v308, RGB, Y42B, NV61, NV16, VYUY, UYVY, YVYU, YUY2, I420, YV12, NV21, NV12, NV12_64Z32, NV12_4L4, NV12_32L32, Y41B, IYU1, YVU9, YUV9, RGB16, BGR16, RGB15, BGR15, RGB8P, GRAY16_BE, GRAY16_LE, GRAY10_LE32, GRAY8 }" c:type="GST_VIDEO_FORMATS_ALL">
|
||||||
<doc xml:space="preserve">List of all video formats, for use in template caps strings.
|
<doc xml:space="preserve">List of all video formats, for use in template caps strings.
|
||||||
|
|
||||||
Formats are sorted by decreasing "quality", using these criteria by priority:
|
Formats are sorted by decreasing "quality", using these criteria by priority:
|
||||||
|
@ -4878,16 +4878,18 @@ non-linear RGB (R'G'B')</doc>
|
||||||
<doc xml:space="preserve">unknown matrix</doc>
|
<doc xml:space="preserve">unknown matrix</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="rgb" value="1" c:identifier="GST_VIDEO_COLOR_MATRIX_RGB" glib:nick="rgb">
|
<member name="rgb" value="1" c:identifier="GST_VIDEO_COLOR_MATRIX_RGB" glib:nick="rgb">
|
||||||
<doc xml:space="preserve">identity matrix</doc>
|
<doc xml:space="preserve">identity matrix. Order of coefficients is
|
||||||
|
actually GBR, also IEC 61966-2-1 (sRGB)</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="fcc" value="2" c:identifier="GST_VIDEO_COLOR_MATRIX_FCC" glib:nick="fcc">
|
<member name="fcc" value="2" c:identifier="GST_VIDEO_COLOR_MATRIX_FCC" glib:nick="fcc">
|
||||||
<doc xml:space="preserve">FCC color matrix</doc>
|
<doc xml:space="preserve">FCC Title 47 Code of Federal Regulations 73.682 (a)(20)</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="bt709" value="3" c:identifier="GST_VIDEO_COLOR_MATRIX_BT709" glib:nick="bt709">
|
<member name="bt709" value="3" c:identifier="GST_VIDEO_COLOR_MATRIX_BT709" glib:nick="bt709">
|
||||||
<doc xml:space="preserve">ITU-R BT.709 color matrix</doc>
|
<doc xml:space="preserve">ITU-R BT.709 color matrix, also ITU-R BT1361
|
||||||
|
/ IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="bt601" value="4" c:identifier="GST_VIDEO_COLOR_MATRIX_BT601" glib:nick="bt601">
|
<member name="bt601" value="4" c:identifier="GST_VIDEO_COLOR_MATRIX_BT601" glib:nick="bt601">
|
||||||
<doc xml:space="preserve">ITU-R BT.601 color matrix</doc>
|
<doc xml:space="preserve">ITU-R BT.601 color matrix, also SMPTE170M / ITU-R BT1358 525 / ITU-R BT1700 NTSC</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="smpte240m" value="5" c:identifier="GST_VIDEO_COLOR_MATRIX_SMPTE240M" glib:nick="smpte240m">
|
<member name="smpte240m" value="5" c:identifier="GST_VIDEO_COLOR_MATRIX_SMPTE240M" glib:nick="smpte240m">
|
||||||
<doc xml:space="preserve">SMPTE 240M color matrix</doc>
|
<doc xml:space="preserve">SMPTE 240M color matrix</doc>
|
||||||
|
@ -4984,40 +4986,49 @@ the CIE XYZ colorspace.</doc>
|
||||||
<doc xml:space="preserve">unknown color primaries</doc>
|
<doc xml:space="preserve">unknown color primaries</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="bt709" value="1" c:identifier="GST_VIDEO_COLOR_PRIMARIES_BT709" glib:nick="bt709">
|
<member name="bt709" value="1" c:identifier="GST_VIDEO_COLOR_PRIMARIES_BT709" glib:nick="bt709">
|
||||||
<doc xml:space="preserve">BT709 primaries</doc>
|
<doc xml:space="preserve">BT709 primaries, also ITU-R BT1361 / IEC
|
||||||
|
61966-2-4 / SMPTE RP177 Annex B</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="bt470m" value="2" c:identifier="GST_VIDEO_COLOR_PRIMARIES_BT470M" glib:nick="bt470m">
|
<member name="bt470m" value="2" c:identifier="GST_VIDEO_COLOR_PRIMARIES_BT470M" glib:nick="bt470m">
|
||||||
<doc xml:space="preserve">BT470M primaries</doc>
|
<doc xml:space="preserve">BT470M primaries, also FCC Title 47 Code
|
||||||
|
of Federal Regulations 73.682 (a)(20)</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="bt470bg" value="3" c:identifier="GST_VIDEO_COLOR_PRIMARIES_BT470BG" glib:nick="bt470bg">
|
<member name="bt470bg" value="3" c:identifier="GST_VIDEO_COLOR_PRIMARIES_BT470BG" glib:nick="bt470bg">
|
||||||
<doc xml:space="preserve">BT470BG primaries</doc>
|
<doc xml:space="preserve">BT470BG primaries, also ITU-R BT601-6
|
||||||
|
625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="smpte170m" value="4" c:identifier="GST_VIDEO_COLOR_PRIMARIES_SMPTE170M" glib:nick="smpte170m">
|
<member name="smpte170m" value="4" c:identifier="GST_VIDEO_COLOR_PRIMARIES_SMPTE170M" glib:nick="smpte170m">
|
||||||
<doc xml:space="preserve">SMPTE170M primaries</doc>
|
<doc xml:space="preserve">SMPTE170M primaries, also ITU-R
|
||||||
|
BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="smpte240m" value="5" c:identifier="GST_VIDEO_COLOR_PRIMARIES_SMPTE240M" glib:nick="smpte240m">
|
<member name="smpte240m" value="5" c:identifier="GST_VIDEO_COLOR_PRIMARIES_SMPTE240M" glib:nick="smpte240m">
|
||||||
<doc xml:space="preserve">SMPTE240M primaries</doc>
|
<doc xml:space="preserve">SMPTE240M primaries</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="film" value="6" c:identifier="GST_VIDEO_COLOR_PRIMARIES_FILM" glib:nick="film">
|
<member name="film" value="6" c:identifier="GST_VIDEO_COLOR_PRIMARIES_FILM" glib:nick="film">
|
||||||
<doc xml:space="preserve">Generic film</doc>
|
<doc xml:space="preserve">Generic film (colour filters using
|
||||||
|
Illuminant C)</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="bt2020" value="7" c:identifier="GST_VIDEO_COLOR_PRIMARIES_BT2020" glib:nick="bt2020">
|
<member name="bt2020" value="7" c:identifier="GST_VIDEO_COLOR_PRIMARIES_BT2020" glib:nick="bt2020">
|
||||||
<doc xml:space="preserve">BT2020 primaries. Since: 1.6</doc>
|
<doc xml:space="preserve">ITU-R BT2020 primaries. Since: 1.6</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="adobergb" value="8" c:identifier="GST_VIDEO_COLOR_PRIMARIES_ADOBERGB" glib:nick="adobergb">
|
<member name="adobergb" value="8" c:identifier="GST_VIDEO_COLOR_PRIMARIES_ADOBERGB" glib:nick="adobergb">
|
||||||
<doc xml:space="preserve">Adobe RGB primaries. Since: 1.8</doc>
|
<doc xml:space="preserve">Adobe RGB primaries. Since: 1.8</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="smptest428" value="9" c:identifier="GST_VIDEO_COLOR_PRIMARIES_SMPTEST428" glib:nick="smptest428">
|
<member name="smptest428" value="9" c:identifier="GST_VIDEO_COLOR_PRIMARIES_SMPTEST428" glib:nick="smptest428">
|
||||||
<doc xml:space="preserve">SMPTE ST 428 primaries. Since: 1.16</doc>
|
<doc xml:space="preserve">SMPTE ST 428 primaries (CIE 1931
|
||||||
|
XYZ). Since: 1.16</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="smpterp431" value="10" c:identifier="GST_VIDEO_COLOR_PRIMARIES_SMPTERP431" glib:nick="smpterp431">
|
<member name="smpterp431" value="10" c:identifier="GST_VIDEO_COLOR_PRIMARIES_SMPTERP431" glib:nick="smpterp431">
|
||||||
<doc xml:space="preserve">SMPTE RP 431 primaries. Since: 1.16</doc>
|
<doc xml:space="preserve">SMPTE RP 431 primaries (ST 431-2
|
||||||
|
(2011) / DCI P3). Since: 1.16</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="smpteeg432" value="11" c:identifier="GST_VIDEO_COLOR_PRIMARIES_SMPTEEG432" glib:nick="smpteeg432">
|
<member name="smpteeg432" value="11" c:identifier="GST_VIDEO_COLOR_PRIMARIES_SMPTEEG432" glib:nick="smpteeg432">
|
||||||
<doc xml:space="preserve">SMPTE EG 432 primaries. Since: 1.16</doc>
|
<doc xml:space="preserve">SMPTE EG 432 primaries (ST 432-1
|
||||||
|
(2010) / P3 D65). Since: 1.16</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="ebu3213" value="12" c:identifier="GST_VIDEO_COLOR_PRIMARIES_EBU3213" glib:nick="ebu3213">
|
<member name="ebu3213" value="12" c:identifier="GST_VIDEO_COLOR_PRIMARIES_EBU3213" glib:nick="ebu3213">
|
||||||
<doc xml:space="preserve">EBU 3213 primaries. Since: 1.16</doc>
|
<doc xml:space="preserve">EBU 3213 primaries (JEDEC P22
|
||||||
|
phosphors). Since: 1.16</doc>
|
||||||
</member>
|
</member>
|
||||||
<function name="from_iso" c:identifier="gst_video_color_primaries_from_iso" version="1.18">
|
<function name="from_iso" c:identifier="gst_video_color_primaries_from_iso" version="1.18">
|
||||||
<doc xml:space="preserve">Converts the @value to the #GstVideoColorPrimaries
|
<doc xml:space="preserve">Converts the @value to the #GstVideoColorPrimaries
|
||||||
|
@ -8666,6 +8677,12 @@ for details about the layout and packing of these formats in memory.</doc>
|
||||||
<member name="y412_le" value="96" c:identifier="GST_VIDEO_FORMAT_Y412_LE" glib:nick="y412-le">
|
<member name="y412_le" value="96" c:identifier="GST_VIDEO_FORMAT_Y412_LE" glib:nick="y412-le">
|
||||||
<doc xml:space="preserve">packed 4:4:4:4 YUV, 12 bits per channel(U-Y-V-A...) (Since: 1.18)</doc>
|
<doc xml:space="preserve">packed 4:4:4:4 YUV, 12 bits per channel(U-Y-V-A...) (Since: 1.18)</doc>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="nv12_4l4" value="97" c:identifier="GST_VIDEO_FORMAT_NV12_4L4" glib:nick="nv12-4l4">
|
||||||
|
<doc xml:space="preserve">NV12 with 4x4 tiles in linear order (Since: 1.18)</doc>
|
||||||
|
</member>
|
||||||
|
<member name="nv12_32l32" value="98" c:identifier="GST_VIDEO_FORMAT_NV12_32L32" glib:nick="nv12-32l32">
|
||||||
|
<doc xml:space="preserve">NV12 with 32x32 tiles in linear order (Since: 1.18)</doc>
|
||||||
|
</member>
|
||||||
<function name="from_fourcc" c:identifier="gst_video_format_from_fourcc">
|
<function name="from_fourcc" c:identifier="gst_video_format_from_fourcc">
|
||||||
<doc xml:space="preserve">Converts a FOURCC value into the corresponding #GstVideoFormat.
|
<doc xml:space="preserve">Converts a FOURCC value into the corresponding #GstVideoFormat.
|
||||||
If the FOURCC cannot be represented by #GstVideoFormat,
|
If the FOURCC cannot be represented by #GstVideoFormat,
|
||||||
|
@ -9139,7 +9156,10 @@ separate step after unpacking.</doc>
|
||||||
</array>
|
</array>
|
||||||
</field>
|
</field>
|
||||||
<method name="copy" c:identifier="gst_video_frame_copy">
|
<method name="copy" c:identifier="gst_video_frame_copy">
|
||||||
<doc xml:space="preserve">Copy the contents from @src to @dest.</doc>
|
<doc xml:space="preserve">Copy the contents from @src to @dest.
|
||||||
|
|
||||||
|
Note: Since: 1.18, @dest dimensions are allowed to be
|
||||||
|
smaller than @src dimensions.</doc>
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
<return-value transfer-ownership="none">
|
||||||
<doc xml:space="preserve">TRUE if the contents could be copied.</doc>
|
<doc xml:space="preserve">TRUE if the contents could be copied.</doc>
|
||||||
|
@ -12822,6 +12842,9 @@ frames will only be rendered in PLAYING state.</doc>
|
||||||
in memory in Z or flipped Z order. In case of odd rows, the last row
|
in memory in Z or flipped Z order. In case of odd rows, the last row
|
||||||
of blocks is arranged in linear order.</doc>
|
of blocks is arranged in linear order.</doc>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="linear" value="131072" c:identifier="GST_VIDEO_TILE_MODE_LINEAR" glib:nick="linear">
|
||||||
|
<doc xml:space="preserve">Tiles are in row order. (Since: 1.18)</doc>
|
||||||
|
</member>
|
||||||
</enumeration>
|
</enumeration>
|
||||||
<enumeration name="VideoTileType" glib:type-name="GstVideoTileType" glib:get-type="gst_video_tile_type_get_type" c:type="GstVideoTileType">
|
<enumeration name="VideoTileType" glib:type-name="GstVideoTileType" glib:get-type="gst_video_tile_type_get_type" c:type="GstVideoTileType">
|
||||||
<doc xml:space="preserve">Enum value describing the most common tiling types.</doc>
|
<doc xml:space="preserve">Enum value describing the most common tiling types.</doc>
|
||||||
|
@ -13532,7 +13555,8 @@ non-linear RGB (R'G'B') and linear RGB</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="bt709" value="5" c:identifier="GST_VIDEO_TRANSFER_BT709" glib:nick="bt709">
|
<member name="bt709" value="5" c:identifier="GST_VIDEO_TRANSFER_BT709" glib:nick="bt709">
|
||||||
<doc xml:space="preserve">Gamma 2.2 curve with a linear segment in the lower
|
<doc xml:space="preserve">Gamma 2.2 curve with a linear segment in the lower
|
||||||
range</doc>
|
range, also ITU-R BT470M / ITU-R BT1700 625 PAL &
|
||||||
|
SECAM / ITU-R BT1361</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="smpte240m" value="6" c:identifier="GST_VIDEO_TRANSFER_SMPTE240M" glib:nick="smpte240m">
|
<member name="smpte240m" value="6" c:identifier="GST_VIDEO_TRANSFER_SMPTE240M" glib:nick="smpte240m">
|
||||||
<doc xml:space="preserve">Gamma 2.2 curve with a linear segment in the
|
<doc xml:space="preserve">Gamma 2.2 curve with a linear segment in the
|
||||||
|
@ -13540,10 +13564,10 @@ non-linear RGB (R'G'B') and linear RGB</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="srgb" value="7" c:identifier="GST_VIDEO_TRANSFER_SRGB" glib:nick="srgb">
|
<member name="srgb" value="7" c:identifier="GST_VIDEO_TRANSFER_SRGB" glib:nick="srgb">
|
||||||
<doc xml:space="preserve">Gamma 2.4 curve with a linear segment in the lower
|
<doc xml:space="preserve">Gamma 2.4 curve with a linear segment in the lower
|
||||||
range</doc>
|
range. IEC 61966-2-1 (sRGB or sYCC)</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="gamma28" value="8" c:identifier="GST_VIDEO_TRANSFER_GAMMA28" glib:nick="gamma28">
|
<member name="gamma28" value="8" c:identifier="GST_VIDEO_TRANSFER_GAMMA28" glib:nick="gamma28">
|
||||||
<doc xml:space="preserve">Gamma 2.8 curve</doc>
|
<doc xml:space="preserve">Gamma 2.8 curve, also ITU-R BT470BG</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="log100" value="9" c:identifier="GST_VIDEO_TRANSFER_LOG100" glib:nick="log100">
|
<member name="log100" value="9" c:identifier="GST_VIDEO_TRANSFER_LOG100" glib:nick="log100">
|
||||||
<doc xml:space="preserve">Logarithmic transfer characteristic
|
<doc xml:space="preserve">Logarithmic transfer characteristic
|
||||||
|
@ -13551,7 +13575,7 @@ non-linear RGB (R'G'B') and linear RGB</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="log316" value="10" c:identifier="GST_VIDEO_TRANSFER_LOG316" glib:nick="log316">
|
<member name="log316" value="10" c:identifier="GST_VIDEO_TRANSFER_LOG316" glib:nick="log316">
|
||||||
<doc xml:space="preserve">Logarithmic transfer characteristic
|
<doc xml:space="preserve">Logarithmic transfer characteristic
|
||||||
316.22777:1 range</doc>
|
316.22777:1 range (100 * sqrt(10) : 1)</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="bt2020_12" value="11" c:identifier="GST_VIDEO_TRANSFER_BT2020_12" glib:nick="bt2020-12">
|
<member name="bt2020_12" value="11" c:identifier="GST_VIDEO_TRANSFER_BT2020_12" glib:nick="bt2020-12">
|
||||||
<doc xml:space="preserve">Gamma 2.2 curve with a linear segment in the lower
|
<doc xml:space="preserve">Gamma 2.2 curve with a linear segment in the lower
|
||||||
|
@ -13564,7 +13588,7 @@ non-linear RGB (R'G'B') and linear RGB</doc>
|
||||||
<member name="bt2020_10" value="13" c:identifier="GST_VIDEO_TRANSFER_BT2020_10" glib:nick="bt2020-10">
|
<member name="bt2020_10" value="13" c:identifier="GST_VIDEO_TRANSFER_BT2020_10" glib:nick="bt2020-10">
|
||||||
<doc xml:space="preserve">Rec. ITU-R BT.2020-2 with 10 bits per component.
|
<doc xml:space="preserve">Rec. ITU-R BT.2020-2 with 10 bits per component.
|
||||||
(functionally the same as the values
|
(functionally the same as the values
|
||||||
GST_VIDEO_TRANSFER_BT709 and GST_VIDEO_TRANSFER_BT2020_12).
|
GST_VIDEO_TRANSFER_BT709 and GST_VIDEO_TRANSFER_BT601).
|
||||||
Since: 1.18</doc>
|
Since: 1.18</doc>
|
||||||
</member>
|
</member>
|
||||||
<member name="smpte2084" value="14" c:identifier="GST_VIDEO_TRANSFER_SMPTE2084" glib:nick="smpte2084">
|
<member name="smpte2084" value="14" c:identifier="GST_VIDEO_TRANSFER_SMPTE2084" glib:nick="smpte2084">
|
||||||
|
@ -13577,6 +13601,77 @@ non-linear RGB (R'G'B') and linear RGB</doc>
|
||||||
STD-B67 and Rec. ITU-R BT.2100-1 hybrid loggamma (HLG) system
|
STD-B67 and Rec. ITU-R BT.2100-1 hybrid loggamma (HLG) system
|
||||||
Since: 1.18</doc>
|
Since: 1.18</doc>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="bt601" value="16" c:identifier="GST_VIDEO_TRANSFER_BT601" glib:nick="bt601">
|
||||||
|
<doc xml:space="preserve">also known as SMPTE170M / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC
|
||||||
|
Functionally the same as the values
|
||||||
|
GST_VIDEO_TRANSFER_BT709, and GST_VIDEO_TRANSFER_BT2020_10.
|
||||||
|
Since: 1.18</doc>
|
||||||
|
</member>
|
||||||
|
<function name="from_iso" c:identifier="gst_video_transfer_function_from_iso" version="1.18">
|
||||||
|
<doc xml:space="preserve">Converts the @value to the #GstVideoTransferFunction
|
||||||
|
The transfer characteristics (TransferCharacteristics) value is
|
||||||
|
defined by "ISO/IEC 23001-8 Section 7.2 Table 3"
|
||||||
|
and "ITU-T H.273 Table 3".
|
||||||
|
"H.264 Table E-4" and "H.265 Table E.4" share the identical values.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">the matched #GstVideoTransferFunction</doc>
|
||||||
|
<type name="VideoTransferFunction" c:type="GstVideoTransferFunction"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="value" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">a ITU-T H.273 transfer characteristics value</doc>
|
||||||
|
<type name="guint" c:type="guint"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="is_equivalent" c:identifier="gst_video_transfer_function_is_equivalent" version="1.18">
|
||||||
|
<doc xml:space="preserve">Returns whether @from_func and @to_func are equivalent. There are cases
|
||||||
|
(e.g. BT601, BT709, and BT2020_10) where several functions are functionally
|
||||||
|
identical. In these cases, when doing conversion, we should consider them
|
||||||
|
as equivalent. Also, BT2020_12 is the same as the aforementioned three for
|
||||||
|
less than 12 bits per pixel.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">TRUE if @from_func and @to_func can be considered equivalent.</doc>
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="from_func" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">#GstVideoTransferFunction to convert from</doc>
|
||||||
|
<type name="VideoTransferFunction" c:type="GstVideoTransferFunction"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="from_bpp" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">bits per pixel to convert from</doc>
|
||||||
|
<type name="guint" c:type="guint"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="to_func" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">#GstVideoTransferFunction to convert into</doc>
|
||||||
|
<type name="VideoTransferFunction" c:type="GstVideoTransferFunction"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="to_bpp" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">bits per pixel to convert into</doc>
|
||||||
|
<type name="guint" c:type="guint"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="to_iso" c:identifier="gst_video_transfer_function_to_iso" version="1.18">
|
||||||
|
<doc xml:space="preserve">Converts #GstVideoTransferFunction to the "transfer characteristics"
|
||||||
|
(TransferCharacteristics) value defined by "ISO/IEC 23001-8 Section 7.2 Table 3"
|
||||||
|
and "ITU-T H.273 Table 3".
|
||||||
|
"H.264 Table E-4" and "H.265 Table E.4" share the identical values.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The value of ISO/IEC 23001-8 transfer characteristics.</doc>
|
||||||
|
<type name="guint" c:type="guint"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="func" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">a #GstVideoTransferFunction</doc>
|
||||||
|
<type name="VideoTransferFunction" c:type="GstVideoTransferFunction"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
</enumeration>
|
</enumeration>
|
||||||
<record name="VideoVBIEncoder" c:type="GstVideoVBIEncoder" version="1.16" glib:type-name="GstVideoVBIEncoder" glib:get-type="gst_video_vbi_encoder_get_type" c:symbol-prefix="video_vbi_encoder">
|
<record name="VideoVBIEncoder" c:type="GstVideoVBIEncoder" version="1.16" glib:type-name="GstVideoVBIEncoder" glib:get-type="gst_video_vbi_encoder_get_type" c:symbol-prefix="video_vbi_encoder">
|
||||||
<doc xml:space="preserve">An encoder for writing ancillary data to the
|
<doc xml:space="preserve">An encoder for writing ancillary data to the
|
||||||
|
@ -15342,41 +15437,6 @@ encode a linear segment in the lower range.</doc>
|
||||||
</parameter>
|
</parameter>
|
||||||
</parameters>
|
</parameters>
|
||||||
</function>
|
</function>
|
||||||
<function name="video_color_transfer_from_iso" c:identifier="gst_video_color_transfer_from_iso" version="1.18">
|
|
||||||
<doc xml:space="preserve">Converts the @value to the #GstVideoTransferFunction
|
|
||||||
The transfer characteristics (TransferCharacteristics) value is
|
|
||||||
defined by "ISO/IEC 23001-8 Section 7.2 Table 3"
|
|
||||||
and "ITU-T H.273 Table 3".
|
|
||||||
"H.264 Table E-4" and "H.265 Table E.4" share the identical values.</doc>
|
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">the matched #GstVideoTransferFunction</doc>
|
|
||||||
<type name="VideoTransferFunction" c:type="GstVideoTransferFunction"/>
|
|
||||||
</return-value>
|
|
||||||
<parameters>
|
|
||||||
<parameter name="value" transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">a ITU-T H.273 transfer characteristics value</doc>
|
|
||||||
<type name="guint" c:type="guint"/>
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function>
|
|
||||||
<function name="video_color_transfer_to_iso" c:identifier="gst_video_color_transfer_to_iso" version="1.18">
|
|
||||||
<doc xml:space="preserve">Converts #GstVideoTransferFunction to the "transfer characteristics"
|
|
||||||
(TransferCharacteristics) value defined by "ISO/IEC 23001-8 Section 7.2 Table 3"
|
|
||||||
and "ITU-T H.273 Table 3".
|
|
||||||
"H.264 Table E-4" and "H.265 Table E.4" share the identical values.</doc>
|
|
||||||
|
|
||||||
<return-value transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">The value of ISO/IEC 23001-8 transfer characteristics.</doc>
|
|
||||||
<type name="guint" c:type="guint"/>
|
|
||||||
</return-value>
|
|
||||||
<parameters>
|
|
||||||
<parameter name="func" transfer-ownership="none">
|
|
||||||
<doc xml:space="preserve">a #GstVideoTransferFunction</doc>
|
|
||||||
<type name="VideoTransferFunction" c:type="GstVideoTransferFunction"/>
|
|
||||||
</parameter>
|
|
||||||
</parameters>
|
|
||||||
</function>
|
|
||||||
<function name="video_convert_sample" c:identifier="gst_video_convert_sample" throws="1">
|
<function name="video_convert_sample" c:identifier="gst_video_convert_sample" throws="1">
|
||||||
<doc xml:space="preserve">Converts a raw video buffer into the specified output caps.
|
<doc xml:space="preserve">Converts a raw video buffer into the specified output caps.
|
||||||
|
|
||||||
|
@ -16363,5 +16423,70 @@ Use this method when @mode is of type %GST_VIDEO_TILE_TYPE_INDEXED.</doc>
|
||||||
<type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>
|
<type name="Gst.MetaInfo" c:type="const GstMetaInfo*"/>
|
||||||
</return-value>
|
</return-value>
|
||||||
</function>
|
</function>
|
||||||
|
<function name="video_transfer_function_from_iso" c:identifier="gst_video_transfer_function_from_iso" moved-to="VideoTransferFunction.from_iso" version="1.18">
|
||||||
|
<doc xml:space="preserve">Converts the @value to the #GstVideoTransferFunction
|
||||||
|
The transfer characteristics (TransferCharacteristics) value is
|
||||||
|
defined by "ISO/IEC 23001-8 Section 7.2 Table 3"
|
||||||
|
and "ITU-T H.273 Table 3".
|
||||||
|
"H.264 Table E-4" and "H.265 Table E.4" share the identical values.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">the matched #GstVideoTransferFunction</doc>
|
||||||
|
<type name="VideoTransferFunction" c:type="GstVideoTransferFunction"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="value" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">a ITU-T H.273 transfer characteristics value</doc>
|
||||||
|
<type name="guint" c:type="guint"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="video_transfer_function_is_equivalent" c:identifier="gst_video_transfer_function_is_equivalent" moved-to="VideoTransferFunction.is_equivalent" version="1.18">
|
||||||
|
<doc xml:space="preserve">Returns whether @from_func and @to_func are equivalent. There are cases
|
||||||
|
(e.g. BT601, BT709, and BT2020_10) where several functions are functionally
|
||||||
|
identical. In these cases, when doing conversion, we should consider them
|
||||||
|
as equivalent. Also, BT2020_12 is the same as the aforementioned three for
|
||||||
|
less than 12 bits per pixel.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">TRUE if @from_func and @to_func can be considered equivalent.</doc>
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="from_func" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">#GstVideoTransferFunction to convert from</doc>
|
||||||
|
<type name="VideoTransferFunction" c:type="GstVideoTransferFunction"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="from_bpp" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">bits per pixel to convert from</doc>
|
||||||
|
<type name="guint" c:type="guint"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="to_func" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">#GstVideoTransferFunction to convert into</doc>
|
||||||
|
<type name="VideoTransferFunction" c:type="GstVideoTransferFunction"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="to_bpp" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">bits per pixel to convert into</doc>
|
||||||
|
<type name="guint" c:type="guint"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="video_transfer_function_to_iso" c:identifier="gst_video_transfer_function_to_iso" moved-to="VideoTransferFunction.to_iso" version="1.18">
|
||||||
|
<doc xml:space="preserve">Converts #GstVideoTransferFunction to the "transfer characteristics"
|
||||||
|
(TransferCharacteristics) value defined by "ISO/IEC 23001-8 Section 7.2 Table 3"
|
||||||
|
and "ITU-T H.273 Table 3".
|
||||||
|
"H.264 Table E-4" and "H.265 Table E.4" share the identical values.</doc>
|
||||||
|
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">The value of ISO/IEC 23001-8 transfer characteristics.</doc>
|
||||||
|
<type name="guint" c:type="guint"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="func" transfer-ownership="none">
|
||||||
|
<doc xml:space="preserve">a #GstVideoTransferFunction</doc>
|
||||||
|
<type name="VideoTransferFunction" c:type="GstVideoTransferFunction"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
</namespace>
|
</namespace>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
|
@ -5,6 +5,195 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||||
|
|
||||||
|
## [0.16.7] - 2021-02-13
|
||||||
|
### Fixed
|
||||||
|
- Usage of the logging system with a GStreamer library with the logging system
|
||||||
|
compiled out does not crash any longer.
|
||||||
|
- Double-free in `gst_video::VideoTimeCode` API when converting between
|
||||||
|
validated and unvalidated timecodes.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::Element::get_current_state()` and `get_pending_state()` convenience APIs.
|
||||||
|
- `gst_audio::AudioConverterConfig` for setting the configuration on e.g. the
|
||||||
|
`audiomixer` element. The low-level `AudioConverter` API is still not
|
||||||
|
included in the bindings.
|
||||||
|
|
||||||
|
## [0.16.6] - 2020-12-20
|
||||||
|
### Fixed
|
||||||
|
- `VideoTimeCodeInterval`'s `Ord` and `PartialEq` implementations compare
|
||||||
|
against the correct fields now.
|
||||||
|
- `SDPMessage::medias_mut()` iterator does not crash any longer.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `PartialEq` and `Eq` implementations on `VideoAlignment`.
|
||||||
|
- Alignment API for `VideoMeta` and `get_plane_height()` / `get_plane_size()`.
|
||||||
|
- `VideoInfo::align_full()`.
|
||||||
|
|
||||||
|
## [0.16.5] - 2020-11-23
|
||||||
|
### Fixed
|
||||||
|
- Make sure to use `$crate` in more macros to allow them to work without
|
||||||
|
anything special in scope already.
|
||||||
|
- Update documentation location.
|
||||||
|
- Don't panic if C code stores invalid seqnums in events and the seqnum is
|
||||||
|
used directly or via the `Display` impl.
|
||||||
|
- Fix docs build for some crates on docs.rs.
|
||||||
|
- Fix `Debug` impl for `gst_video::VideoTimeCode` to print the correct type
|
||||||
|
name.
|
||||||
|
- Fix plugin version to be 1.18 instead of 1.17 when compiling a plugin with
|
||||||
|
`v1_18`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Event handling support in pad probes, that is returning
|
||||||
|
`PadProbeReturn::Handled` for events.
|
||||||
|
- `EventRef::get_structure_mut()` getter that allows changing the events'
|
||||||
|
structures.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Remove unnecessary `PhantomData` markers and use `repr(transparent)` instead
|
||||||
|
of `repr(C)` where it is more correct.
|
||||||
|
|
||||||
|
## [0.16.4] - 2020-10-09
|
||||||
|
### Fixed
|
||||||
|
- Correctly implement `ExactSizeIterator` on the `AudioFormat` and
|
||||||
|
`VideoFormat` iterators. Previously they returned the overall size instead
|
||||||
|
of the remaining size, and they didn't implement `Iterator::size_hint()`.
|
||||||
|
- Don't implement `ExactSizeIterator` on the buffer `gst::Meta` iterator. The
|
||||||
|
overall length is not known easily and the implementation would've simply
|
||||||
|
panicked in the past.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::ClockID::wait_async_stream()` for async integration for clock waiting.
|
||||||
|
- `From` / `TryFrom` impls for converting between `gst::ClockTime` and
|
||||||
|
`std::time::Duration`.
|
||||||
|
|
||||||
|
## [0.16.3] - 2020-09-08
|
||||||
|
### Fixed
|
||||||
|
- Reset vfuncs if calling `BaseTransformClass::configure()` multiple times.
|
||||||
|
- Fix `gst::debug_remove_default_log_function()` to actually remove the
|
||||||
|
default log function.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Some more new APIs added in 1.18.
|
||||||
|
- API for getting an owned buffer from a readable `gst_video::VideoFrame` /
|
||||||
|
`VideoFrameRef`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Updated bindings to 1.18.0. This stabilized GStreamer 1.18 support and any
|
||||||
|
API behind the "v1_18" feature is considered stable now.
|
||||||
|
- Factor out some common code from `gst::Pad::ProbeInfo` code. This reduces
|
||||||
|
the code generated for each pad probe considerably.
|
||||||
|
- Update paste dependency to 1.0 and pretty-hex to 0.2.
|
||||||
|
|
||||||
|
## [0.16.2] - 2020-07-27
|
||||||
|
### Fixed
|
||||||
|
- Use correct pointer for the plane data in `gst_audio::AudioBuffer`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add `gst::GhostPad` convenience constructors that take a target pad, similar
|
||||||
|
to the ones that existed in 0.15 and before.
|
||||||
|
- Add `gst::parse_bin_from_description_with_name` that allows setting a name
|
||||||
|
for the created bin without having to use unsafe code in application code.
|
||||||
|
|
||||||
|
## [0.16.1] - 2020-07-10
|
||||||
|
### Fixed
|
||||||
|
- Allow calling `gst::DebugCategory::new()` before `gst::init()` again.
|
||||||
|
|
||||||
|
## [0.16.0] - 2020-07-06
|
||||||
|
### Added
|
||||||
|
- Updated bindings to 1.17.2, adding experimental 1.18 support. This can be
|
||||||
|
opted-in via the "v1_18" feature flag but there might still be API changes
|
||||||
|
in the newly added API.
|
||||||
|
- `gst::MemoryRef::dump()` for dumping contents of a memory.
|
||||||
|
- `gst::Bus::stream()` instead of a custom constructor on the `BusStream`.
|
||||||
|
- Use more accurate types for `Seqnum`, `GroupId` and `MetaSeqnum`. These are
|
||||||
|
now proper wrapper types instead of plain integers, which makes mis-use
|
||||||
|
harder.
|
||||||
|
- Provide `TryFrom` impls for conversion between `glib::DateTime` and
|
||||||
|
`gst::DateTime`.
|
||||||
|
- Add `get_allocator()` functions to `gst_base::{Aggregator, BaseTransform,
|
||||||
|
BaseSrc}`, and allow overriding `BaseSrc::alloc()`.
|
||||||
|
- Add subclassing bindings for `gst_base::PushSrc`.
|
||||||
|
- Add new `gst::BufferCursor` API that allows to handle a buffer as `Read`,
|
||||||
|
`Write` and `Seek` and accesses the underlying memories of the buffer
|
||||||
|
individually without mapping them all together.
|
||||||
|
- Add `gst::Plugin::get_plugin_name()`.
|
||||||
|
- Support for `gst_video::VideoAFDMeta` and `VideoBarMeta`.
|
||||||
|
- API for getting all / iterating over all `gst_audio::AudioFormat` and
|
||||||
|
`gst_video::VideoFormat`.
|
||||||
|
- Bindings and subclassing bindings for `gst_video::VideoSink`.
|
||||||
|
- `gst::Pad` can be constructed via the builder pattern and `gst::PadBuilder`
|
||||||
|
now, which allows to safely set the pad functions and various other fields
|
||||||
|
during construction. The `PadBuilder` works on any `gst::Pad` subclass and
|
||||||
|
also has special support for `GhostPad`s by allowing to set pad functions of
|
||||||
|
the proxy pad.
|
||||||
|
- `gst::Message`, `gst::Event` and `gst::Query` type constructors are now on
|
||||||
|
the specific target type instead of various `new_XXX()` functions on the
|
||||||
|
basic type. E.g. `gst::message::Eos::new()`.
|
||||||
|
- Support for overriding `gst_audio::AudioSrc/Sink::reset()`.
|
||||||
|
- Support for overriding `gst_base::BaseParse::stop()`.
|
||||||
|
- Support for overriding `gst::Element::post_message()`.
|
||||||
|
- Added bindings for `gst::BufferList::foreach()` and `foreach_mut()`.
|
||||||
|
- Added bindings for `gst::Buffer::foreach_meta()` and `foreach_meta_mut()`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Allow using any `glib::Object` as target object for logging instead of just
|
||||||
|
`gst::Object`.
|
||||||
|
- Remove restriction API from `gst_pbutils::EncodingContainerProfile`. They
|
||||||
|
are supposed to be used only with the other encoding profiles.
|
||||||
|
- Return `&'static str` for various `gst::StructureRef` functions where the
|
||||||
|
string is backed by a `glib::Quark`.
|
||||||
|
- Fix various `gst::DateTime` functions to actually return `Option`s.
|
||||||
|
- Add support for filling in a buffer passed to the `gst::Pad` getrange
|
||||||
|
function, allow passing one in into `get_range()` and `pull_range()` and
|
||||||
|
provide the corresponding API on `gst_base::BaseSrc` too.
|
||||||
|
- Allocator in audio/video `Decoder` base classes is optional and can return
|
||||||
|
`None`.
|
||||||
|
- `gst_video::ValidVideoTimeCode::add_interval()` always returns a valid
|
||||||
|
timecode again.
|
||||||
|
- Allow resolving a `gst::Promise` with `None` and also handle that correctly
|
||||||
|
in the callback. This is allowed by the API.
|
||||||
|
- Allow calling various debugging related functions before `gst::init()`.
|
||||||
|
- Various enum/function versions were fixed to only show up if the
|
||||||
|
corresponding version feature is enabled.
|
||||||
|
- `gst::Pad` function setters are marked unsafe now as changing the functions
|
||||||
|
is not thread-safe.
|
||||||
|
- Remove `gst::Object::set_name()` as changing the name after construction
|
||||||
|
generally causes problems and is potentially unsafe.
|
||||||
|
- Remove `gst::Pad::set_pad_template()` as changing the pad template after
|
||||||
|
construction is generally unsafe.
|
||||||
|
- `gst::Pad::stream_lock()` borrows the pad now instead of taking a new
|
||||||
|
reference.
|
||||||
|
- Unimplemented `Jitter` and `Buffer` queries were removed from the bindings.
|
||||||
|
These are not implemented in C and only have a type registered.
|
||||||
|
- Various `LAST`, `NONE` variants of enums and flags were removed as these
|
||||||
|
only make sense in C.
|
||||||
|
- Call the parent impl of various vfuncs that were omitted before to not
|
||||||
|
require further subclasses of them to implement them but automatically call
|
||||||
|
the parent ones.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Use `NonZeroU64/U32` for various ID types to allow further optimizations.
|
||||||
|
- Use `thiserror` crate for deriving error types.
|
||||||
|
- Switch from `lazy_static` to `once_cell`.
|
||||||
|
- Change various miniobject functions like `gst::Caps::append()` from taking
|
||||||
|
the object by value to modifying it internally. This makes them easier to
|
||||||
|
use and only applies to functions that are defined on the non-reference type
|
||||||
|
and take ownership of the values passed in.
|
||||||
|
- Use `mem::ManuallyDrop` instead of `mem::forget()` everywhere.
|
||||||
|
- Replace most `mem::transmute()` calls with safer alternatives.
|
||||||
|
- `gst:StreamCollection` API was changed to the builder pattern for
|
||||||
|
construction as the collection must not be changed after construction.
|
||||||
|
- `gst::ProxyPad` default functions are plain functions on `ProxyPad` now
|
||||||
|
instead of trait functions to allow easier usage of them.
|
||||||
|
- Use proper error types in various `TryFrom` impls.
|
||||||
|
- `gst_video::VideoMeta::add()` returns a `Result` now instead of panicking.
|
||||||
|
- Various constructors were renamed from `new_with_XXX()` and `new_from_XXX()`
|
||||||
|
to the more idiomatic `with_XXX()` and `from_XXX()`.
|
||||||
|
- Miniobject bindings are simplified now and there is no `gst::GstRc` type
|
||||||
|
anymore, instead everything is directly implemented on the concrete types.
|
||||||
|
As part of this the `gst::MiniObject` trait was also removed as it was
|
||||||
|
unneeded now.
|
||||||
|
|
||||||
## [0.15.7] - 2020-06-08
|
## [0.15.7] - 2020-06-08
|
||||||
### Fixed
|
### Fixed
|
||||||
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
||||||
|
@ -746,7 +935,14 @@ specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-v
|
||||||
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
||||||
The API of the two is incompatible.
|
The API of the two is incompatible.
|
||||||
|
|
||||||
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...HEAD
|
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.6...HEAD
|
||||||
|
[0.16.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.5...0.16.6
|
||||||
|
[0.16.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.4...0.16.5
|
||||||
|
[0.16.4]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.3...0.16.4
|
||||||
|
[0.16.3]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.2...0.16.3
|
||||||
|
[0.16.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.1...0.16.2
|
||||||
|
[0.16.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.0...0.16.1
|
||||||
|
[0.16.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...0.16.0
|
||||||
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
||||||
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
||||||
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "gstreamer-app"
|
name = "gstreamer-app"
|
||||||
version = "0.16.0"
|
version = "0.16.7"
|
||||||
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
||||||
categories = ["api-bindings", "multimedia"]
|
categories = ["api-bindings", "multimedia"]
|
||||||
description = "Rust bindings for GStreamer App library"
|
description = "Rust bindings for GStreamer App library"
|
||||||
|
@ -17,17 +17,17 @@ futures-core = "0.3"
|
||||||
futures-sink = "0.3"
|
futures-sink = "0.3"
|
||||||
bitflags = "1.0"
|
bitflags = "1.0"
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
glib-sys = "0.10"
|
||||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
gobject-sys = "0.10"
|
||||||
gstreamer-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
gstreamer-app-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-app-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
glib = "0.10"
|
||||||
gstreamer = { path = "../gstreamer" }
|
gstreamer = { version = "0.16", path = "../gstreamer" }
|
||||||
gstreamer-base = { path = "../gstreamer-base" }
|
gstreamer-base = { version = "0.16", path = "../gstreamer-base" }
|
||||||
once_cell = "1.0"
|
once_cell = "1.0"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
gstreamer-rs-lgpl-docs = { path = "../docs", optional = true }
|
gstreamer-rs-lgpl-docs = { version = "0.16", path = "../docs", optional = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
futures-util = { version = "0.3", features = ["sink"] }
|
futures-util = { version = "0.3", features = ["sink"] }
|
||||||
|
|
|
@ -140,7 +140,7 @@ $ export PKG_CONFIG_PATH="c:\\gstreamer\\1.0\\x86_64\\lib\\pkgconfig${PKG_CONFIG
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
The API reference can be found
|
The API reference can be found
|
||||||
[here](https://slomo.pages.freedesktop.org/rustdocs/gstreamer/gstreamer/), however it is
|
[here](https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer/index.html), however it is
|
||||||
only the Rust API reference and does not explain any of the concepts.
|
only the Rust API reference and does not explain any of the concepts.
|
||||||
|
|
||||||
For getting started with GStreamer development, the best would be to follow
|
For getting started with GStreamer development, the best would be to follow
|
||||||
|
|
|
@ -130,31 +130,6 @@ impl AppSrc {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_property_duration(&self) -> u64 {
|
|
||||||
unsafe {
|
|
||||||
let mut value = Value::from_type(<u64 as StaticType>::static_type());
|
|
||||||
gobject_sys::g_object_get_property(
|
|
||||||
self.as_ptr() as *mut gobject_sys::GObject,
|
|
||||||
b"duration\0".as_ptr() as *const _,
|
|
||||||
value.to_glib_none_mut().0,
|
|
||||||
);
|
|
||||||
value
|
|
||||||
.get()
|
|
||||||
.expect("Return Value for property `duration` getter")
|
|
||||||
.unwrap()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn set_property_duration(&self, duration: u64) {
|
|
||||||
unsafe {
|
|
||||||
gobject_sys::g_object_set_property(
|
|
||||||
self.as_ptr() as *mut gobject_sys::GObject,
|
|
||||||
b"duration\0".as_ptr() as *const _,
|
|
||||||
Value::from(&duration).to_glib_none().0,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_property_format(&self) -> gst::Format {
|
pub fn get_property_format(&self) -> gst::Format {
|
||||||
unsafe {
|
unsafe {
|
||||||
let mut value = Value::from_type(<gst::Format as StaticType>::static_type());
|
let mut value = Value::from_type(<gst::Format as StaticType>::static_type());
|
||||||
|
@ -180,6 +155,33 @@ impl AppSrc {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
pub fn get_property_handle_segment_change(&self) -> bool {
|
||||||
|
unsafe {
|
||||||
|
let mut value = Value::from_type(<bool as StaticType>::static_type());
|
||||||
|
gobject_sys::g_object_get_property(
|
||||||
|
self.as_ptr() as *mut gobject_sys::GObject,
|
||||||
|
b"handle-segment-change\0".as_ptr() as *const _,
|
||||||
|
value.to_glib_none_mut().0,
|
||||||
|
);
|
||||||
|
value
|
||||||
|
.get()
|
||||||
|
.expect("Return Value for property `handle-segment-change` getter")
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
pub fn set_property_handle_segment_change(&self, handle_segment_change: bool) {
|
||||||
|
unsafe {
|
||||||
|
gobject_sys::g_object_set_property(
|
||||||
|
self.as_ptr() as *mut gobject_sys::GObject,
|
||||||
|
b"handle-segment-change\0".as_ptr() as *const _,
|
||||||
|
Value::from(&handle_segment_change).to_glib_none().0,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_property_is_live(&self) -> bool {
|
pub fn get_property_is_live(&self) -> bool {
|
||||||
unsafe {
|
unsafe {
|
||||||
let mut value = Value::from_type(<bool as StaticType>::static_type());
|
let mut value = Value::from_type(<bool as StaticType>::static_type());
|
||||||
|
@ -310,11 +312,11 @@ impl AppSrc {
|
||||||
) -> SignalHandlerId {
|
) -> SignalHandlerId {
|
||||||
unsafe extern "C" fn need_data_trampoline<F: Fn(&AppSrc, u32) + Send + Sync + 'static>(
|
unsafe extern "C" fn need_data_trampoline<F: Fn(&AppSrc, u32) + Send + Sync + 'static>(
|
||||||
this: *mut gst_app_sys::GstAppSrc,
|
this: *mut gst_app_sys::GstAppSrc,
|
||||||
length: libc::c_uint,
|
object: libc::c_uint,
|
||||||
f: glib_sys::gpointer,
|
f: glib_sys::gpointer,
|
||||||
) {
|
) {
|
||||||
let f: &F = &*(f as *const F);
|
let f: &F = &*(f as *const F);
|
||||||
f(&from_glib_borrow(this), length)
|
f(&from_glib_borrow(this), object)
|
||||||
}
|
}
|
||||||
unsafe {
|
unsafe {
|
||||||
let f: Box_<F> = Box_::new(f);
|
let f: Box_<F> = Box_::new(f);
|
||||||
|
@ -337,11 +339,11 @@ impl AppSrc {
|
||||||
F: Fn(&AppSrc, u64) -> bool + Send + Sync + 'static,
|
F: Fn(&AppSrc, u64) -> bool + Send + Sync + 'static,
|
||||||
>(
|
>(
|
||||||
this: *mut gst_app_sys::GstAppSrc,
|
this: *mut gst_app_sys::GstAppSrc,
|
||||||
offset: u64,
|
object: u64,
|
||||||
f: glib_sys::gpointer,
|
f: glib_sys::gpointer,
|
||||||
) -> glib_sys::gboolean {
|
) -> glib_sys::gboolean {
|
||||||
let f: &F = &*(f as *const F);
|
let f: &F = &*(f as *const F);
|
||||||
f(&from_glib_borrow(this), offset).to_glib()
|
f(&from_glib_borrow(this), object).to_glib()
|
||||||
}
|
}
|
||||||
unsafe {
|
unsafe {
|
||||||
let f: Box_<F> = Box_::new(f);
|
let f: Box_<F> = Box_::new(f);
|
||||||
|
@ -433,6 +435,7 @@ impl AppSrc {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||||
pub fn connect_property_duration_notify<F: Fn(&AppSrc) + Send + Sync + 'static>(
|
pub fn connect_property_duration_notify<F: Fn(&AppSrc) + Send + Sync + 'static>(
|
||||||
&self,
|
&self,
|
||||||
f: F,
|
f: F,
|
||||||
|
@ -510,6 +513,34 @@ impl AppSrc {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
pub fn connect_property_handle_segment_change_notify<F: Fn(&AppSrc) + Send + Sync + 'static>(
|
||||||
|
&self,
|
||||||
|
f: F,
|
||||||
|
) -> SignalHandlerId {
|
||||||
|
unsafe extern "C" fn notify_handle_segment_change_trampoline<
|
||||||
|
F: Fn(&AppSrc) + Send + Sync + 'static,
|
||||||
|
>(
|
||||||
|
this: *mut gst_app_sys::GstAppSrc,
|
||||||
|
_param_spec: glib_sys::gpointer,
|
||||||
|
f: glib_sys::gpointer,
|
||||||
|
) {
|
||||||
|
let f: &F = &*(f as *const F);
|
||||||
|
f(&from_glib_borrow(this))
|
||||||
|
}
|
||||||
|
unsafe {
|
||||||
|
let f: Box_<F> = Box_::new(f);
|
||||||
|
connect_raw(
|
||||||
|
self.as_ptr() as *mut _,
|
||||||
|
b"notify::handle-segment-change\0".as_ptr() as *const _,
|
||||||
|
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||||
|
notify_handle_segment_change_trampoline::<F> as *const (),
|
||||||
|
)),
|
||||||
|
Box_::into_raw(f),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn connect_property_is_live_notify<F: Fn(&AppSrc) + Send + Sync + 'static>(
|
pub fn connect_property_is_live_notify<F: Fn(&AppSrc) + Send + Sync + 'static>(
|
||||||
&self,
|
&self,
|
||||||
f: F,
|
f: F,
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
// This file was generated by gir (https://github.com/gtk-rs/gir)
|
|
||||||
// from gir-files (https://github.com/gtk-rs/gir-files)
|
|
||||||
// DO NOT EDIT
|
|
||||||
|
|
||||||
use gst_app_sys;
|
|
||||||
use glib::translate::*;
|
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
||||||
from gir-files (https://github.com/gtk-rs/gir-files @ 2d4abeba)
|
from gir-files (https://github.com/gtk-rs/gir-files @ 8f334830)
|
||||||
|
|
|
@ -5,6 +5,195 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||||
|
|
||||||
|
## [0.16.7] - 2021-02-13
|
||||||
|
### Fixed
|
||||||
|
- Usage of the logging system with a GStreamer library with the logging system
|
||||||
|
compiled out does not crash any longer.
|
||||||
|
- Double-free in `gst_video::VideoTimeCode` API when converting between
|
||||||
|
validated and unvalidated timecodes.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::Element::get_current_state()` and `get_pending_state()` convenience APIs.
|
||||||
|
- `gst_audio::AudioConverterConfig` for setting the configuration on e.g. the
|
||||||
|
`audiomixer` element. The low-level `AudioConverter` API is still not
|
||||||
|
included in the bindings.
|
||||||
|
|
||||||
|
## [0.16.6] - 2020-12-20
|
||||||
|
### Fixed
|
||||||
|
- `VideoTimeCodeInterval`'s `Ord` and `PartialEq` implementations compare
|
||||||
|
against the correct fields now.
|
||||||
|
- `SDPMessage::medias_mut()` iterator does not crash any longer.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `PartialEq` and `Eq` implementations on `VideoAlignment`.
|
||||||
|
- Alignment API for `VideoMeta` and `get_plane_height()` / `get_plane_size()`.
|
||||||
|
- `VideoInfo::align_full()`.
|
||||||
|
|
||||||
|
## [0.16.5] - 2020-11-23
|
||||||
|
### Fixed
|
||||||
|
- Make sure to use `$crate` in more macros to allow them to work without
|
||||||
|
anything special in scope already.
|
||||||
|
- Update documentation location.
|
||||||
|
- Don't panic if C code stores invalid seqnums in events and the seqnum is
|
||||||
|
used directly or via the `Display` impl.
|
||||||
|
- Fix docs build for some crates on docs.rs.
|
||||||
|
- Fix `Debug` impl for `gst_video::VideoTimeCode` to print the correct type
|
||||||
|
name.
|
||||||
|
- Fix plugin version to be 1.18 instead of 1.17 when compiling a plugin with
|
||||||
|
`v1_18`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Event handling support in pad probes, that is returning
|
||||||
|
`PadProbeReturn::Handled` for events.
|
||||||
|
- `EventRef::get_structure_mut()` getter that allows changing the events'
|
||||||
|
structures.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Remove unnecessary `PhantomData` markers and use `repr(transparent)` instead
|
||||||
|
of `repr(C)` where it is more correct.
|
||||||
|
|
||||||
|
## [0.16.4] - 2020-10-09
|
||||||
|
### Fixed
|
||||||
|
- Correctly implement `ExactSizeIterator` on the `AudioFormat` and
|
||||||
|
`VideoFormat` iterators. Previously they returned the overall size instead
|
||||||
|
of the remaining size, and they didn't implement `Iterator::size_hint()`.
|
||||||
|
- Don't implement `ExactSizeIterator` on the buffer `gst::Meta` iterator. The
|
||||||
|
overall length is not known easily and the implementation would've simply
|
||||||
|
panicked in the past.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::ClockID::wait_async_stream()` for async integration for clock waiting.
|
||||||
|
- `From` / `TryFrom` impls for converting between `gst::ClockTime` and
|
||||||
|
`std::time::Duration`.
|
||||||
|
|
||||||
|
## [0.16.3] - 2020-09-08
|
||||||
|
### Fixed
|
||||||
|
- Reset vfuncs if calling `BaseTransformClass::configure()` multiple times.
|
||||||
|
- Fix `gst::debug_remove_default_log_function()` to actually remove the
|
||||||
|
default log function.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Some more new APIs added in 1.18.
|
||||||
|
- API for getting an owned buffer from a readable `gst_video::VideoFrame` /
|
||||||
|
`VideoFrameRef`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Updated bindings to 1.18.0. This stabilized GStreamer 1.18 support and any
|
||||||
|
API behind the "v1_18" feature is considered stable now.
|
||||||
|
- Factor out some common code from `gst::Pad::ProbeInfo` code. This reduces
|
||||||
|
the code generated for each pad probe considerably.
|
||||||
|
- Update paste dependency to 1.0 and pretty-hex to 0.2.
|
||||||
|
|
||||||
|
## [0.16.2] - 2020-07-27
|
||||||
|
### Fixed
|
||||||
|
- Use correct pointer for the plane data in `gst_audio::AudioBuffer`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add `gst::GhostPad` convenience constructors that take a target pad, similar
|
||||||
|
to the ones that existed in 0.15 and before.
|
||||||
|
- Add `gst::parse_bin_from_description_with_name` that allows setting a name
|
||||||
|
for the created bin without having to use unsafe code in application code.
|
||||||
|
|
||||||
|
## [0.16.1] - 2020-07-10
|
||||||
|
### Fixed
|
||||||
|
- Allow calling `gst::DebugCategory::new()` before `gst::init()` again.
|
||||||
|
|
||||||
|
## [0.16.0] - 2020-07-06
|
||||||
|
### Added
|
||||||
|
- Updated bindings to 1.17.2, adding experimental 1.18 support. This can be
|
||||||
|
opted-in via the "v1_18" feature flag but there might still be API changes
|
||||||
|
in the newly added API.
|
||||||
|
- `gst::MemoryRef::dump()` for dumping contents of a memory.
|
||||||
|
- `gst::Bus::stream()` instead of a custom constructor on the `BusStream`.
|
||||||
|
- Use more accurate types for `Seqnum`, `GroupId` and `MetaSeqnum`. These are
|
||||||
|
now proper wrapper types instead of plain integers, which makes mis-use
|
||||||
|
harder.
|
||||||
|
- Provide `TryFrom` impls for conversion between `glib::DateTime` and
|
||||||
|
`gst::DateTime`.
|
||||||
|
- Add `get_allocator()` functions to `gst_base::{Aggregator, BaseTransform,
|
||||||
|
BaseSrc}`, and allow overriding `BaseSrc::alloc()`.
|
||||||
|
- Add subclassing bindings for `gst_base::PushSrc`.
|
||||||
|
- Add new `gst::BufferCursor` API that allows to handle a buffer as `Read`,
|
||||||
|
`Write` and `Seek` and accesses the underlying memories of the buffer
|
||||||
|
individually without mapping them all together.
|
||||||
|
- Add `gst::Plugin::get_plugin_name()`.
|
||||||
|
- Support for `gst_video::VideoAFDMeta` and `VideoBarMeta`.
|
||||||
|
- API for getting all / iterating over all `gst_audio::AudioFormat` and
|
||||||
|
`gst_video::VideoFormat`.
|
||||||
|
- Bindings and subclassing bindings for `gst_video::VideoSink`.
|
||||||
|
- `gst::Pad` can be constructed via the builder pattern and `gst::PadBuilder`
|
||||||
|
now, which allows to safely set the pad functions and various other fields
|
||||||
|
during construction. The `PadBuilder` works on any `gst::Pad` subclass and
|
||||||
|
also has special support for `GhostPad`s by allowing to set pad functions of
|
||||||
|
the proxy pad.
|
||||||
|
- `gst::Message`, `gst::Event` and `gst::Query` type constructors are now on
|
||||||
|
the specific target type instead of various `new_XXX()` functions on the
|
||||||
|
basic type. E.g. `gst::message::Eos::new()`.
|
||||||
|
- Support for overriding `gst_audio::AudioSrc/Sink::reset()`.
|
||||||
|
- Support for overriding `gst_base::BaseParse::stop()`.
|
||||||
|
- Support for overriding `gst::Element::post_message()`.
|
||||||
|
- Added bindings for `gst::BufferList::foreach()` and `foreach_mut()`.
|
||||||
|
- Added bindings for `gst::Buffer::foreach_meta()` and `foreach_meta_mut()`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Allow using any `glib::Object` as target object for logging instead of just
|
||||||
|
`gst::Object`.
|
||||||
|
- Remove restriction API from `gst_pbutils::EncodingContainerProfile`. They
|
||||||
|
are supposed to be used only with the other encoding profiles.
|
||||||
|
- Return `&'static str` for various `gst::StructureRef` functions where the
|
||||||
|
string is backed by a `glib::Quark`.
|
||||||
|
- Fix various `gst::DateTime` functions to actually return `Option`s.
|
||||||
|
- Add support for filling in a buffer passed to the `gst::Pad` getrange
|
||||||
|
function, allow passing one in into `get_range()` and `pull_range()` and
|
||||||
|
provide the corresponding API on `gst_base::BaseSrc` too.
|
||||||
|
- Allocator in audio/video `Decoder` base classes is optional and can return
|
||||||
|
`None`.
|
||||||
|
- `gst_video::ValidVideoTimeCode::add_interval()` always returns a valid
|
||||||
|
timecode again.
|
||||||
|
- Allow resolving a `gst::Promise` with `None` and also handle that correctly
|
||||||
|
in the callback. This is allowed by the API.
|
||||||
|
- Allow calling various debugging related functions before `gst::init()`.
|
||||||
|
- Various enum/function versions were fixed to only show up if the
|
||||||
|
corresponding version feature is enabled.
|
||||||
|
- `gst::Pad` function setters are marked unsafe now as changing the functions
|
||||||
|
is not thread-safe.
|
||||||
|
- Remove `gst::Object::set_name()` as changing the name after construction
|
||||||
|
generally causes problems and is potentially unsafe.
|
||||||
|
- Remove `gst::Pad::set_pad_template()` as changing the pad template after
|
||||||
|
construction is generally unsafe.
|
||||||
|
- `gst::Pad::stream_lock()` borrows the pad now instead of taking a new
|
||||||
|
reference.
|
||||||
|
- Unimplemented `Jitter` and `Buffer` queries were removed from the bindings.
|
||||||
|
These are not implemented in C and only have a type registered.
|
||||||
|
- Various `LAST`, `NONE` variants of enums and flags were removed as these
|
||||||
|
only make sense in C.
|
||||||
|
- Call the parent impl of various vfuncs that were omitted before to not
|
||||||
|
require further subclasses of them to implement them but automatically call
|
||||||
|
the parent ones.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Use `NonZeroU64/U32` for various ID types to allow further optimizations.
|
||||||
|
- Use `thiserror` crate for deriving error types.
|
||||||
|
- Switch from `lazy_static` to `once_cell`.
|
||||||
|
- Change various miniobject functions like `gst::Caps::append()` from taking
|
||||||
|
the object by value to modifying it internally. This makes them easier to
|
||||||
|
use and only applies to functions that are defined on the non-reference type
|
||||||
|
and take ownership of the values passed in.
|
||||||
|
- Use `mem::ManuallyDrop` instead of `mem::forget()` everywhere.
|
||||||
|
- Replace most `mem::transmute()` calls with safer alternatives.
|
||||||
|
- `gst:StreamCollection` API was changed to the builder pattern for
|
||||||
|
construction as the collection must not be changed after construction.
|
||||||
|
- `gst::ProxyPad` default functions are plain functions on `ProxyPad` now
|
||||||
|
instead of trait functions to allow easier usage of them.
|
||||||
|
- Use proper error types in various `TryFrom` impls.
|
||||||
|
- `gst_video::VideoMeta::add()` returns a `Result` now instead of panicking.
|
||||||
|
- Various constructors were renamed from `new_with_XXX()` and `new_from_XXX()`
|
||||||
|
to the more idiomatic `with_XXX()` and `from_XXX()`.
|
||||||
|
- Miniobject bindings are simplified now and there is no `gst::GstRc` type
|
||||||
|
anymore, instead everything is directly implemented on the concrete types.
|
||||||
|
As part of this the `gst::MiniObject` trait was also removed as it was
|
||||||
|
unneeded now.
|
||||||
|
|
||||||
## [0.15.7] - 2020-06-08
|
## [0.15.7] - 2020-06-08
|
||||||
### Fixed
|
### Fixed
|
||||||
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
||||||
|
@ -746,7 +935,14 @@ specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-v
|
||||||
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
||||||
The API of the two is incompatible.
|
The API of the two is incompatible.
|
||||||
|
|
||||||
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...HEAD
|
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.6...HEAD
|
||||||
|
[0.16.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.5...0.16.6
|
||||||
|
[0.16.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.4...0.16.5
|
||||||
|
[0.16.4]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.3...0.16.4
|
||||||
|
[0.16.3]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.2...0.16.3
|
||||||
|
[0.16.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.1...0.16.2
|
||||||
|
[0.16.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.0...0.16.1
|
||||||
|
[0.16.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...0.16.0
|
||||||
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
||||||
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
||||||
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "gstreamer-audio"
|
name = "gstreamer-audio"
|
||||||
version = "0.16.0"
|
version = "0.16.7"
|
||||||
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
||||||
categories = ["api-bindings", "multimedia"]
|
categories = ["api-bindings", "multimedia"]
|
||||||
description = "Rust bindings for GStreamer Audio library"
|
description = "Rust bindings for GStreamer Audio library"
|
||||||
|
@ -15,19 +15,19 @@ build = "build.rs"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
bitflags = "1.0"
|
bitflags = "1.0"
|
||||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
glib-sys = "0.10"
|
||||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
gobject-sys = "0.10"
|
||||||
gstreamer-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
gstreamer-base-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-base-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
gstreamer-audio-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-audio-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
glib = "0.10"
|
||||||
gstreamer = { path = "../gstreamer" }
|
gstreamer = { version = "0.16", path = "../gstreamer" }
|
||||||
gstreamer-base = { path = "../gstreamer-base" }
|
gstreamer-base = { version = "0.16", path = "../gstreamer-base" }
|
||||||
array-init = "0.1"
|
array-init = "1.0"
|
||||||
once_cell = "1.0"
|
once_cell = "1.0"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
gstreamer-rs-lgpl-docs = { path = "../docs", optional = true }
|
gstreamer-rs-lgpl-docs = { version = "0.16", path = "../docs", optional = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
itertools = "0.9"
|
itertools = "0.9"
|
||||||
|
@ -41,7 +41,7 @@ v1_16 = ["gstreamer/v1_16", "gstreamer-base/v1_16", "gstreamer-audio-sys/v1_16",
|
||||||
v1_18 = ["gstreamer/v1_18", "gstreamer-base/v1_18", "gstreamer-audio-sys/v1_18", "v1_16"]
|
v1_18 = ["gstreamer/v1_18", "gstreamer-base/v1_18", "gstreamer-audio-sys/v1_18", "v1_16"]
|
||||||
embed-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
embed-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
||||||
purge-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
purge-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
||||||
dox = ["v1_18", "gstreamer-audio-sys/dox", "glib/dox", "gstreamer/dox"]
|
dox = ["v1_18", "gstreamer-audio-sys/dox", "glib/dox", "gstreamer/dox", "gstreamer-base/dox"]
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
features = ["dox", "embed-lgpl-docs"]
|
features = ["dox", "embed-lgpl-docs"]
|
||||||
|
|
|
@ -140,7 +140,7 @@ $ export PKG_CONFIG_PATH="c:\\gstreamer\\1.0\\x86_64\\lib\\pkgconfig${PKG_CONFIG
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
The API reference can be found
|
The API reference can be found
|
||||||
[here](https://slomo.pages.freedesktop.org/rustdocs/gstreamer/gstreamer/), however it is
|
[here](https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer/index.html), however it is
|
||||||
only the Rust API reference and does not explain any of the concepts.
|
only the Rust API reference and does not explain any of the concepts.
|
||||||
|
|
||||||
For getting started with GStreamer development, the best would be to follow
|
For getting started with GStreamer development, the best would be to follow
|
||||||
|
|
|
@ -118,7 +118,7 @@ impl<T> AudioBuffer<T> {
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
Ok(slice::from_raw_parts(
|
Ok(slice::from_raw_parts(
|
||||||
self.audio_buffer.planes.add(plane as usize) as *const u8,
|
(*self.audio_buffer.planes.add(plane as usize)) as *const u8,
|
||||||
self.plane_size(),
|
self.plane_size(),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -227,7 +227,7 @@ impl AudioBuffer<Writable> {
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
Ok(slice::from_raw_parts_mut(
|
Ok(slice::from_raw_parts_mut(
|
||||||
self.audio_buffer.planes.add(plane as usize) as *mut u8,
|
(*self.audio_buffer.planes.add(plane as usize)) as *mut u8,
|
||||||
self.plane_size(),
|
self.plane_size(),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -348,7 +348,7 @@ impl<T> AudioBufferRef<T> {
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
Ok(slice::from_raw_parts(
|
Ok(slice::from_raw_parts(
|
||||||
self.audio_buffer.planes.add(plane as usize) as *const u8,
|
(*self.audio_buffer.planes.add(plane as usize)) as *const u8,
|
||||||
self.plane_size(),
|
self.plane_size(),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -479,7 +479,7 @@ impl<'a> AudioBufferRef<&'a mut gst::BufferRef> {
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
Ok(slice::from_raw_parts_mut(
|
Ok(slice::from_raw_parts_mut(
|
||||||
self.audio_buffer.planes.add(plane as usize) as *mut u8,
|
(*self.audio_buffer.planes.add(plane as usize)) as *mut u8,
|
||||||
self.plane_size(),
|
self.plane_size(),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
188
gstreamer-audio/src/audio_converter.rs
Normal file
188
gstreamer-audio/src/audio_converter.rs
Normal file
|
@ -0,0 +1,188 @@
|
||||||
|
// Take a look at the license at the top of the repository in the LICENSE file.
|
||||||
|
|
||||||
|
use glib::prelude::*;
|
||||||
|
|
||||||
|
use std::convert;
|
||||||
|
use std::ops;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
|
pub struct AudioConverterConfig(gst::Structure);
|
||||||
|
|
||||||
|
impl ops::Deref for AudioConverterConfig {
|
||||||
|
type Target = gst::StructureRef;
|
||||||
|
|
||||||
|
fn deref(&self) -> &gst::StructureRef {
|
||||||
|
self.0.deref()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ops::DerefMut for AudioConverterConfig {
|
||||||
|
fn deref_mut(&mut self) -> &mut gst::StructureRef {
|
||||||
|
self.0.deref_mut()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AsRef<gst::StructureRef> for AudioConverterConfig {
|
||||||
|
fn as_ref(&self) -> &gst::StructureRef {
|
||||||
|
self.0.as_ref()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AsMut<gst::StructureRef> for AudioConverterConfig {
|
||||||
|
fn as_mut(&mut self) -> &mut gst::StructureRef {
|
||||||
|
self.0.as_mut()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for AudioConverterConfig {
|
||||||
|
fn default() -> Self {
|
||||||
|
AudioConverterConfig::new()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl convert::TryFrom<gst::Structure> for AudioConverterConfig {
|
||||||
|
type Error = glib::BoolError;
|
||||||
|
|
||||||
|
fn try_from(v: gst::Structure) -> Result<AudioConverterConfig, Self::Error> {
|
||||||
|
skip_assert_initialized!();
|
||||||
|
if v.get_name() == "GstAudioConverter" {
|
||||||
|
Ok(AudioConverterConfig(v))
|
||||||
|
} else {
|
||||||
|
Err(glib_bool_error!("Structure is no AudioConverterConfig"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> convert::TryFrom<&'a gst::StructureRef> for AudioConverterConfig {
|
||||||
|
type Error = glib::BoolError;
|
||||||
|
|
||||||
|
fn try_from(v: &'a gst::StructureRef) -> Result<AudioConverterConfig, Self::Error> {
|
||||||
|
skip_assert_initialized!();
|
||||||
|
AudioConverterConfig::try_from(v.to_owned())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<AudioConverterConfig> for gst::Structure {
|
||||||
|
fn from(v: AudioConverterConfig) -> gst::Structure {
|
||||||
|
skip_assert_initialized!();
|
||||||
|
v.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AudioConverterConfig {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
AudioConverterConfig(gst::Structure::new_empty("GstAudioConverter"))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_dither_method(&mut self, v: crate::AudioDitherMethod) {
|
||||||
|
self.0.set("GstAudioConverter.dither-method", &v);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_dither_method(&self) -> crate::AudioDitherMethod {
|
||||||
|
self.0
|
||||||
|
.get_optional("GstAudioConverter.dither-method")
|
||||||
|
.expect("Wrong type")
|
||||||
|
.unwrap_or(crate::AudioDitherMethod::None)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_noise_shaping_method(&mut self, v: crate::AudioNoiseShapingMethod) {
|
||||||
|
self.0.set("GstAudioConverter.noise-shaping-method", &v);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_noise_shaping_method(&self) -> crate::AudioNoiseShapingMethod {
|
||||||
|
self.0
|
||||||
|
.get_optional("GstAudioConverter.noise-shaping-method")
|
||||||
|
.expect("Wrong type")
|
||||||
|
.unwrap_or(crate::AudioNoiseShapingMethod::None)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_quantization(&mut self, v: u32) {
|
||||||
|
self.0.set("GstAudioConverter.quantization", &v);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_quantization(&self) -> u32 {
|
||||||
|
self.0
|
||||||
|
.get_optional("GstAudioConverter.quantization")
|
||||||
|
.expect("Wrong type")
|
||||||
|
.unwrap_or(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||||
|
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_10")))]
|
||||||
|
pub fn set_resampler_method(&mut self, v: crate::AudioResamplerMethod) {
|
||||||
|
self.0.set("GstAudioConverter.resampler-method", &v);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||||
|
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_10")))]
|
||||||
|
pub fn get_resampler_method(&self) -> crate::AudioResamplerMethod {
|
||||||
|
self.0
|
||||||
|
.get_optional("GstAudioConverter.resampler-method")
|
||||||
|
.expect("Wrong type")
|
||||||
|
.unwrap_or(crate::AudioResamplerMethod::BlackmanNuttall)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_mix_matrix<T: AsRef<[f32]>>(&mut self, v: &[T]) {
|
||||||
|
let length = v.get(0).map(|v| v.as_ref().len()).unwrap_or(0);
|
||||||
|
let array = gst::Array::from_owned(
|
||||||
|
v.iter()
|
||||||
|
.map(|val| {
|
||||||
|
let val = val.as_ref();
|
||||||
|
assert_eq!(val.len(), length);
|
||||||
|
gst::Array::from_owned(
|
||||||
|
val.iter()
|
||||||
|
.map(|val| val.to_send_value())
|
||||||
|
.collect::<Vec<_>>(),
|
||||||
|
)
|
||||||
|
.to_send_value()
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>(),
|
||||||
|
);
|
||||||
|
self.0.set("GstAudioConverter.mix-matrix", &array);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_mix_matrix(&self) -> Vec<Vec<f32>> {
|
||||||
|
self.0
|
||||||
|
.get_optional::<gst::Array>("GstAudioConverter.mix-matrix")
|
||||||
|
.expect("Wrong type")
|
||||||
|
.map(|array| {
|
||||||
|
array
|
||||||
|
.as_slice()
|
||||||
|
.iter()
|
||||||
|
.map(|val| {
|
||||||
|
let array = val
|
||||||
|
.get::<gst::Array>()
|
||||||
|
.expect("Wrong type")
|
||||||
|
.unwrap_or_else(|| gst::Array::from_owned(Vec::new()));
|
||||||
|
|
||||||
|
array
|
||||||
|
.as_slice()
|
||||||
|
.iter()
|
||||||
|
.map(|val| val.get_some::<f32>().expect("Wrong type"))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
})
|
||||||
|
.unwrap_or_else(Vec::new)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_mix_matrix() {
|
||||||
|
const MATRIX: &[&[f32]] = &[&[1.2, 0.3], &[0.2, 0.8]];
|
||||||
|
|
||||||
|
gst::init().unwrap();
|
||||||
|
|
||||||
|
let mut config = AudioConverterConfig::new();
|
||||||
|
config.set_mix_matrix(MATRIX);
|
||||||
|
|
||||||
|
let matrix = config.get_mix_matrix();
|
||||||
|
assert_eq!(matrix, MATRIX);
|
||||||
|
|
||||||
|
config.set_mix_matrix(&matrix);
|
||||||
|
}
|
||||||
|
}
|
|
@ -263,14 +263,20 @@ impl Iterator for AudioFormatIterator {
|
||||||
Some(fmt)
|
Some(fmt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
impl ExactSizeIterator for AudioFormatIterator {
|
fn size_hint(&self) -> (usize, Option<usize>) {
|
||||||
fn len(&self) -> usize {
|
if self.idx == self.len {
|
||||||
self.len
|
return (0, Some(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
let remaining = (self.len - self.idx) as usize;
|
||||||
|
|
||||||
|
(remaining, Some(remaining))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ExactSizeIterator for AudioFormatIterator {}
|
||||||
|
|
||||||
impl DoubleEndedIterator for AudioFormatIterator {
|
impl DoubleEndedIterator for AudioFormatIterator {
|
||||||
fn next_back(&mut self) -> Option<Self::Item> {
|
fn next_back(&mut self) -> Option<Self::Item> {
|
||||||
if self.idx >= self.len {
|
if self.idx >= self.len {
|
||||||
|
|
|
@ -21,7 +21,7 @@ use gst;
|
||||||
use gst::prelude::*;
|
use gst::prelude::*;
|
||||||
use gst_audio_sys;
|
use gst_audio_sys;
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(transparent)]
|
||||||
pub struct AudioClippingMeta(gst_audio_sys::GstAudioClippingMeta);
|
pub struct AudioClippingMeta(gst_audio_sys::GstAudioClippingMeta);
|
||||||
|
|
||||||
unsafe impl Send for AudioClippingMeta {}
|
unsafe impl Send for AudioClippingMeta {}
|
||||||
|
@ -76,7 +76,7 @@ impl fmt::Debug for AudioClippingMeta {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
||||||
#[repr(C)]
|
#[repr(transparent)]
|
||||||
pub struct AudioMeta(gst_audio_sys::GstAudioMeta);
|
pub struct AudioMeta(gst_audio_sys::GstAudioMeta);
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
||||||
|
|
|
@ -7,7 +7,7 @@ use AudioRingBufferFormatType;
|
||||||
|
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(transparent)]
|
||||||
pub struct AudioRingBufferSpec(pub(crate) GstAudioRingBufferSpec);
|
pub struct AudioRingBufferSpec(pub(crate) GstAudioRingBufferSpec);
|
||||||
|
|
||||||
impl AudioRingBufferSpec {
|
impl AudioRingBufferSpec {
|
||||||
|
|
|
@ -193,6 +193,70 @@ impl SetValue for AudioChannelPosition {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum AudioDitherMethod {
|
||||||
|
None,
|
||||||
|
Rpdf,
|
||||||
|
Tpdf,
|
||||||
|
TpdfHf,
|
||||||
|
#[doc(hidden)]
|
||||||
|
__Unknown(i32),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
impl ToGlib for AudioDitherMethod {
|
||||||
|
type GlibType = gst_audio_sys::GstAudioDitherMethod;
|
||||||
|
|
||||||
|
fn to_glib(&self) -> gst_audio_sys::GstAudioDitherMethod {
|
||||||
|
match *self {
|
||||||
|
AudioDitherMethod::None => gst_audio_sys::GST_AUDIO_DITHER_NONE,
|
||||||
|
AudioDitherMethod::Rpdf => gst_audio_sys::GST_AUDIO_DITHER_RPDF,
|
||||||
|
AudioDitherMethod::Tpdf => gst_audio_sys::GST_AUDIO_DITHER_TPDF,
|
||||||
|
AudioDitherMethod::TpdfHf => gst_audio_sys::GST_AUDIO_DITHER_TPDF_HF,
|
||||||
|
AudioDitherMethod::__Unknown(value) => value,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
impl FromGlib<gst_audio_sys::GstAudioDitherMethod> for AudioDitherMethod {
|
||||||
|
fn from_glib(value: gst_audio_sys::GstAudioDitherMethod) -> Self {
|
||||||
|
skip_assert_initialized!();
|
||||||
|
match value {
|
||||||
|
0 => AudioDitherMethod::None,
|
||||||
|
1 => AudioDitherMethod::Rpdf,
|
||||||
|
2 => AudioDitherMethod::Tpdf,
|
||||||
|
3 => AudioDitherMethod::TpdfHf,
|
||||||
|
value => AudioDitherMethod::__Unknown(value),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl StaticType for AudioDitherMethod {
|
||||||
|
fn static_type() -> Type {
|
||||||
|
unsafe { from_glib(gst_audio_sys::gst_audio_dither_method_get_type()) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> FromValueOptional<'a> for AudioDitherMethod {
|
||||||
|
unsafe fn from_value_optional(value: &Value) -> Option<Self> {
|
||||||
|
Some(FromValue::from_value(value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> FromValue<'a> for AudioDitherMethod {
|
||||||
|
unsafe fn from_value(value: &Value) -> Self {
|
||||||
|
from_glib(gobject_sys::g_value_get_enum(value.to_glib_none().0))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SetValue for AudioDitherMethod {
|
||||||
|
unsafe fn set_value(value: &mut Value, this: &Self) {
|
||||||
|
gobject_sys::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Eq, PartialEq, Hash, Clone, Copy)]
|
#[derive(Debug, Eq, PartialEq, Hash, Clone, Copy)]
|
||||||
#[non_exhaustive]
|
#[non_exhaustive]
|
||||||
pub enum AudioFormat {
|
pub enum AudioFormat {
|
||||||
|
@ -399,6 +463,151 @@ impl SetValue for AudioLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum AudioNoiseShapingMethod {
|
||||||
|
None,
|
||||||
|
ErrorFeedback,
|
||||||
|
Simple,
|
||||||
|
Medium,
|
||||||
|
High,
|
||||||
|
#[doc(hidden)]
|
||||||
|
__Unknown(i32),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
impl ToGlib for AudioNoiseShapingMethod {
|
||||||
|
type GlibType = gst_audio_sys::GstAudioNoiseShapingMethod;
|
||||||
|
|
||||||
|
fn to_glib(&self) -> gst_audio_sys::GstAudioNoiseShapingMethod {
|
||||||
|
match *self {
|
||||||
|
AudioNoiseShapingMethod::None => gst_audio_sys::GST_AUDIO_NOISE_SHAPING_NONE,
|
||||||
|
AudioNoiseShapingMethod::ErrorFeedback => {
|
||||||
|
gst_audio_sys::GST_AUDIO_NOISE_SHAPING_ERROR_FEEDBACK
|
||||||
|
}
|
||||||
|
AudioNoiseShapingMethod::Simple => gst_audio_sys::GST_AUDIO_NOISE_SHAPING_SIMPLE,
|
||||||
|
AudioNoiseShapingMethod::Medium => gst_audio_sys::GST_AUDIO_NOISE_SHAPING_MEDIUM,
|
||||||
|
AudioNoiseShapingMethod::High => gst_audio_sys::GST_AUDIO_NOISE_SHAPING_HIGH,
|
||||||
|
AudioNoiseShapingMethod::__Unknown(value) => value,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
impl FromGlib<gst_audio_sys::GstAudioNoiseShapingMethod> for AudioNoiseShapingMethod {
|
||||||
|
fn from_glib(value: gst_audio_sys::GstAudioNoiseShapingMethod) -> Self {
|
||||||
|
skip_assert_initialized!();
|
||||||
|
match value {
|
||||||
|
0 => AudioNoiseShapingMethod::None,
|
||||||
|
1 => AudioNoiseShapingMethod::ErrorFeedback,
|
||||||
|
2 => AudioNoiseShapingMethod::Simple,
|
||||||
|
3 => AudioNoiseShapingMethod::Medium,
|
||||||
|
4 => AudioNoiseShapingMethod::High,
|
||||||
|
value => AudioNoiseShapingMethod::__Unknown(value),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl StaticType for AudioNoiseShapingMethod {
|
||||||
|
fn static_type() -> Type {
|
||||||
|
unsafe { from_glib(gst_audio_sys::gst_audio_noise_shaping_method_get_type()) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> FromValueOptional<'a> for AudioNoiseShapingMethod {
|
||||||
|
unsafe fn from_value_optional(value: &Value) -> Option<Self> {
|
||||||
|
Some(FromValue::from_value(value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> FromValue<'a> for AudioNoiseShapingMethod {
|
||||||
|
unsafe fn from_value(value: &Value) -> Self {
|
||||||
|
from_glib(gobject_sys::g_value_get_enum(value.to_glib_none().0))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SetValue for AudioNoiseShapingMethod {
|
||||||
|
unsafe fn set_value(value: &mut Value, this: &Self) {
|
||||||
|
gobject_sys::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||||
|
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum AudioResamplerMethod {
|
||||||
|
Nearest,
|
||||||
|
Linear,
|
||||||
|
Cubic,
|
||||||
|
BlackmanNuttall,
|
||||||
|
Kaiser,
|
||||||
|
#[doc(hidden)]
|
||||||
|
__Unknown(i32),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||||
|
#[doc(hidden)]
|
||||||
|
impl ToGlib for AudioResamplerMethod {
|
||||||
|
type GlibType = gst_audio_sys::GstAudioResamplerMethod;
|
||||||
|
|
||||||
|
fn to_glib(&self) -> gst_audio_sys::GstAudioResamplerMethod {
|
||||||
|
match *self {
|
||||||
|
AudioResamplerMethod::Nearest => gst_audio_sys::GST_AUDIO_RESAMPLER_METHOD_NEAREST,
|
||||||
|
AudioResamplerMethod::Linear => gst_audio_sys::GST_AUDIO_RESAMPLER_METHOD_LINEAR,
|
||||||
|
AudioResamplerMethod::Cubic => gst_audio_sys::GST_AUDIO_RESAMPLER_METHOD_CUBIC,
|
||||||
|
AudioResamplerMethod::BlackmanNuttall => {
|
||||||
|
gst_audio_sys::GST_AUDIO_RESAMPLER_METHOD_BLACKMAN_NUTTALL
|
||||||
|
}
|
||||||
|
AudioResamplerMethod::Kaiser => gst_audio_sys::GST_AUDIO_RESAMPLER_METHOD_KAISER,
|
||||||
|
AudioResamplerMethod::__Unknown(value) => value,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||||
|
#[doc(hidden)]
|
||||||
|
impl FromGlib<gst_audio_sys::GstAudioResamplerMethod> for AudioResamplerMethod {
|
||||||
|
fn from_glib(value: gst_audio_sys::GstAudioResamplerMethod) -> Self {
|
||||||
|
skip_assert_initialized!();
|
||||||
|
match value {
|
||||||
|
0 => AudioResamplerMethod::Nearest,
|
||||||
|
1 => AudioResamplerMethod::Linear,
|
||||||
|
2 => AudioResamplerMethod::Cubic,
|
||||||
|
3 => AudioResamplerMethod::BlackmanNuttall,
|
||||||
|
4 => AudioResamplerMethod::Kaiser,
|
||||||
|
value => AudioResamplerMethod::__Unknown(value),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||||
|
impl StaticType for AudioResamplerMethod {
|
||||||
|
fn static_type() -> Type {
|
||||||
|
unsafe { from_glib(gst_audio_sys::gst_audio_resampler_method_get_type()) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||||
|
impl<'a> FromValueOptional<'a> for AudioResamplerMethod {
|
||||||
|
unsafe fn from_value_optional(value: &Value) -> Option<Self> {
|
||||||
|
Some(FromValue::from_value(value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||||
|
impl<'a> FromValue<'a> for AudioResamplerMethod {
|
||||||
|
unsafe fn from_value(value: &Value) -> Self {
|
||||||
|
from_glib(gobject_sys::g_value_get_enum(value.to_glib_none().0))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||||
|
impl SetValue for AudioResamplerMethod {
|
||||||
|
unsafe fn set_value(value: &mut Value, this: &Self) {
|
||||||
|
gobject_sys::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
|
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
|
||||||
#[non_exhaustive]
|
#[non_exhaustive]
|
||||||
pub enum AudioRingBufferFormatType {
|
pub enum AudioRingBufferFormatType {
|
||||||
|
|
|
@ -35,8 +35,12 @@ pub use self::audio_stream_align::AudioStreamAlign;
|
||||||
|
|
||||||
mod enums;
|
mod enums;
|
||||||
pub use self::enums::AudioChannelPosition;
|
pub use self::enums::AudioChannelPosition;
|
||||||
|
pub use self::enums::AudioDitherMethod;
|
||||||
pub use self::enums::AudioFormat;
|
pub use self::enums::AudioFormat;
|
||||||
pub use self::enums::AudioLayout;
|
pub use self::enums::AudioLayout;
|
||||||
|
pub use self::enums::AudioNoiseShapingMethod;
|
||||||
|
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||||
|
pub use self::enums::AudioResamplerMethod;
|
||||||
pub use self::enums::AudioRingBufferFormatType;
|
pub use self::enums::AudioRingBufferFormatType;
|
||||||
pub use self::enums::StreamVolumeFormat;
|
pub use self::enums::StreamVolumeFormat;
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
||||||
from gir-files (https://github.com/gtk-rs/gir-files @ 2d4abeba)
|
from gir-files (https://github.com/gtk-rs/gir-files @ 8f334830)
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
|
#![cfg_attr(feature = "dox", feature(doc_cfg))]
|
||||||
|
|
||||||
extern crate array_init;
|
extern crate array_init;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate bitflags;
|
extern crate bitflags;
|
||||||
|
@ -69,6 +71,9 @@ pub use audio_decoder::AudioDecoderExtManual;
|
||||||
mod audio_encoder;
|
mod audio_encoder;
|
||||||
pub use audio_encoder::AudioEncoderExtManual;
|
pub use audio_encoder::AudioEncoderExtManual;
|
||||||
|
|
||||||
|
mod audio_converter;
|
||||||
|
pub use crate::audio_converter::AudioConverterConfig;
|
||||||
|
|
||||||
// Re-export all the traits in a prelude module, so that applications
|
// Re-export all the traits in a prelude module, so that applications
|
||||||
// can always "use gst::prelude::*" without getting conflicts
|
// can always "use gst::prelude::*" without getting conflicts
|
||||||
pub mod prelude {
|
pub mod prelude {
|
||||||
|
|
|
@ -5,6 +5,195 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||||
|
|
||||||
|
## [0.16.7] - 2021-02-13
|
||||||
|
### Fixed
|
||||||
|
- Usage of the logging system with a GStreamer library with the logging system
|
||||||
|
compiled out does not crash any longer.
|
||||||
|
- Double-free in `gst_video::VideoTimeCode` API when converting between
|
||||||
|
validated and unvalidated timecodes.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::Element::get_current_state()` and `get_pending_state()` convenience APIs.
|
||||||
|
- `gst_audio::AudioConverterConfig` for setting the configuration on e.g. the
|
||||||
|
`audiomixer` element. The low-level `AudioConverter` API is still not
|
||||||
|
included in the bindings.
|
||||||
|
|
||||||
|
## [0.16.6] - 2020-12-20
|
||||||
|
### Fixed
|
||||||
|
- `VideoTimeCodeInterval`'s `Ord` and `PartialEq` implementations compare
|
||||||
|
against the correct fields now.
|
||||||
|
- `SDPMessage::medias_mut()` iterator does not crash any longer.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `PartialEq` and `Eq` implementations on `VideoAlignment`.
|
||||||
|
- Alignment API for `VideoMeta` and `get_plane_height()` / `get_plane_size()`.
|
||||||
|
- `VideoInfo::align_full()`.
|
||||||
|
|
||||||
|
## [0.16.5] - 2020-11-23
|
||||||
|
### Fixed
|
||||||
|
- Make sure to use `$crate` in more macros to allow them to work without
|
||||||
|
anything special in scope already.
|
||||||
|
- Update documentation location.
|
||||||
|
- Don't panic if C code stores invalid seqnums in events and the seqnum is
|
||||||
|
used directly or via the `Display` impl.
|
||||||
|
- Fix docs build for some crates on docs.rs.
|
||||||
|
- Fix `Debug` impl for `gst_video::VideoTimeCode` to print the correct type
|
||||||
|
name.
|
||||||
|
- Fix plugin version to be 1.18 instead of 1.17 when compiling a plugin with
|
||||||
|
`v1_18`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Event handling support in pad probes, that is returning
|
||||||
|
`PadProbeReturn::Handled` for events.
|
||||||
|
- `EventRef::get_structure_mut()` getter that allows changing the events'
|
||||||
|
structures.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Remove unnecessary `PhantomData` markers and use `repr(transparent)` instead
|
||||||
|
of `repr(C)` where it is more correct.
|
||||||
|
|
||||||
|
## [0.16.4] - 2020-10-09
|
||||||
|
### Fixed
|
||||||
|
- Correctly implement `ExactSizeIterator` on the `AudioFormat` and
|
||||||
|
`VideoFormat` iterators. Previously they returned the overall size instead
|
||||||
|
of the remaining size, and they didn't implement `Iterator::size_hint()`.
|
||||||
|
- Don't implement `ExactSizeIterator` on the buffer `gst::Meta` iterator. The
|
||||||
|
overall length is not known easily and the implementation would've simply
|
||||||
|
panicked in the past.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::ClockID::wait_async_stream()` for async integration for clock waiting.
|
||||||
|
- `From` / `TryFrom` impls for converting between `gst::ClockTime` and
|
||||||
|
`std::time::Duration`.
|
||||||
|
|
||||||
|
## [0.16.3] - 2020-09-08
|
||||||
|
### Fixed
|
||||||
|
- Reset vfuncs if calling `BaseTransformClass::configure()` multiple times.
|
||||||
|
- Fix `gst::debug_remove_default_log_function()` to actually remove the
|
||||||
|
default log function.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Some more new APIs added in 1.18.
|
||||||
|
- API for getting an owned buffer from a readable `gst_video::VideoFrame` /
|
||||||
|
`VideoFrameRef`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Updated bindings to 1.18.0. This stabilized GStreamer 1.18 support and any
|
||||||
|
API behind the "v1_18" feature is considered stable now.
|
||||||
|
- Factor out some common code from `gst::Pad::ProbeInfo` code. This reduces
|
||||||
|
the code generated for each pad probe considerably.
|
||||||
|
- Update paste dependency to 1.0 and pretty-hex to 0.2.
|
||||||
|
|
||||||
|
## [0.16.2] - 2020-07-27
|
||||||
|
### Fixed
|
||||||
|
- Use correct pointer for the plane data in `gst_audio::AudioBuffer`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add `gst::GhostPad` convenience constructors that take a target pad, similar
|
||||||
|
to the ones that existed in 0.15 and before.
|
||||||
|
- Add `gst::parse_bin_from_description_with_name` that allows setting a name
|
||||||
|
for the created bin without having to use unsafe code in application code.
|
||||||
|
|
||||||
|
## [0.16.1] - 2020-07-10
|
||||||
|
### Fixed
|
||||||
|
- Allow calling `gst::DebugCategory::new()` before `gst::init()` again.
|
||||||
|
|
||||||
|
## [0.16.0] - 2020-07-06
|
||||||
|
### Added
|
||||||
|
- Updated bindings to 1.17.2, adding experimental 1.18 support. This can be
|
||||||
|
opted-in via the "v1_18" feature flag but there might still be API changes
|
||||||
|
in the newly added API.
|
||||||
|
- `gst::MemoryRef::dump()` for dumping contents of a memory.
|
||||||
|
- `gst::Bus::stream()` instead of a custom constructor on the `BusStream`.
|
||||||
|
- Use more accurate types for `Seqnum`, `GroupId` and `MetaSeqnum`. These are
|
||||||
|
now proper wrapper types instead of plain integers, which makes mis-use
|
||||||
|
harder.
|
||||||
|
- Provide `TryFrom` impls for conversion between `glib::DateTime` and
|
||||||
|
`gst::DateTime`.
|
||||||
|
- Add `get_allocator()` functions to `gst_base::{Aggregator, BaseTransform,
|
||||||
|
BaseSrc}`, and allow overriding `BaseSrc::alloc()`.
|
||||||
|
- Add subclassing bindings for `gst_base::PushSrc`.
|
||||||
|
- Add new `gst::BufferCursor` API that allows to handle a buffer as `Read`,
|
||||||
|
`Write` and `Seek` and accesses the underlying memories of the buffer
|
||||||
|
individually without mapping them all together.
|
||||||
|
- Add `gst::Plugin::get_plugin_name()`.
|
||||||
|
- Support for `gst_video::VideoAFDMeta` and `VideoBarMeta`.
|
||||||
|
- API for getting all / iterating over all `gst_audio::AudioFormat` and
|
||||||
|
`gst_video::VideoFormat`.
|
||||||
|
- Bindings and subclassing bindings for `gst_video::VideoSink`.
|
||||||
|
- `gst::Pad` can be constructed via the builder pattern and `gst::PadBuilder`
|
||||||
|
now, which allows to safely set the pad functions and various other fields
|
||||||
|
during construction. The `PadBuilder` works on any `gst::Pad` subclass and
|
||||||
|
also has special support for `GhostPad`s by allowing to set pad functions of
|
||||||
|
the proxy pad.
|
||||||
|
- `gst::Message`, `gst::Event` and `gst::Query` type constructors are now on
|
||||||
|
the specific target type instead of various `new_XXX()` functions on the
|
||||||
|
basic type. E.g. `gst::message::Eos::new()`.
|
||||||
|
- Support for overriding `gst_audio::AudioSrc/Sink::reset()`.
|
||||||
|
- Support for overriding `gst_base::BaseParse::stop()`.
|
||||||
|
- Support for overriding `gst::Element::post_message()`.
|
||||||
|
- Added bindings for `gst::BufferList::foreach()` and `foreach_mut()`.
|
||||||
|
- Added bindings for `gst::Buffer::foreach_meta()` and `foreach_meta_mut()`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Allow using any `glib::Object` as target object for logging instead of just
|
||||||
|
`gst::Object`.
|
||||||
|
- Remove restriction API from `gst_pbutils::EncodingContainerProfile`. They
|
||||||
|
are supposed to be used only with the other encoding profiles.
|
||||||
|
- Return `&'static str` for various `gst::StructureRef` functions where the
|
||||||
|
string is backed by a `glib::Quark`.
|
||||||
|
- Fix various `gst::DateTime` functions to actually return `Option`s.
|
||||||
|
- Add support for filling in a buffer passed to the `gst::Pad` getrange
|
||||||
|
function, allow passing one in into `get_range()` and `pull_range()` and
|
||||||
|
provide the corresponding API on `gst_base::BaseSrc` too.
|
||||||
|
- Allocator in audio/video `Decoder` base classes is optional and can return
|
||||||
|
`None`.
|
||||||
|
- `gst_video::ValidVideoTimeCode::add_interval()` always returns a valid
|
||||||
|
timecode again.
|
||||||
|
- Allow resolving a `gst::Promise` with `None` and also handle that correctly
|
||||||
|
in the callback. This is allowed by the API.
|
||||||
|
- Allow calling various debugging related functions before `gst::init()`.
|
||||||
|
- Various enum/function versions were fixed to only show up if the
|
||||||
|
corresponding version feature is enabled.
|
||||||
|
- `gst::Pad` function setters are marked unsafe now as changing the functions
|
||||||
|
is not thread-safe.
|
||||||
|
- Remove `gst::Object::set_name()` as changing the name after construction
|
||||||
|
generally causes problems and is potentially unsafe.
|
||||||
|
- Remove `gst::Pad::set_pad_template()` as changing the pad template after
|
||||||
|
construction is generally unsafe.
|
||||||
|
- `gst::Pad::stream_lock()` borrows the pad now instead of taking a new
|
||||||
|
reference.
|
||||||
|
- Unimplemented `Jitter` and `Buffer` queries were removed from the bindings.
|
||||||
|
These are not implemented in C and only have a type registered.
|
||||||
|
- Various `LAST`, `NONE` variants of enums and flags were removed as these
|
||||||
|
only make sense in C.
|
||||||
|
- Call the parent impl of various vfuncs that were omitted before to not
|
||||||
|
require further subclasses of them to implement them but automatically call
|
||||||
|
the parent ones.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Use `NonZeroU64/U32` for various ID types to allow further optimizations.
|
||||||
|
- Use `thiserror` crate for deriving error types.
|
||||||
|
- Switch from `lazy_static` to `once_cell`.
|
||||||
|
- Change various miniobject functions like `gst::Caps::append()` from taking
|
||||||
|
the object by value to modifying it internally. This makes them easier to
|
||||||
|
use and only applies to functions that are defined on the non-reference type
|
||||||
|
and take ownership of the values passed in.
|
||||||
|
- Use `mem::ManuallyDrop` instead of `mem::forget()` everywhere.
|
||||||
|
- Replace most `mem::transmute()` calls with safer alternatives.
|
||||||
|
- `gst:StreamCollection` API was changed to the builder pattern for
|
||||||
|
construction as the collection must not be changed after construction.
|
||||||
|
- `gst::ProxyPad` default functions are plain functions on `ProxyPad` now
|
||||||
|
instead of trait functions to allow easier usage of them.
|
||||||
|
- Use proper error types in various `TryFrom` impls.
|
||||||
|
- `gst_video::VideoMeta::add()` returns a `Result` now instead of panicking.
|
||||||
|
- Various constructors were renamed from `new_with_XXX()` and `new_from_XXX()`
|
||||||
|
to the more idiomatic `with_XXX()` and `from_XXX()`.
|
||||||
|
- Miniobject bindings are simplified now and there is no `gst::GstRc` type
|
||||||
|
anymore, instead everything is directly implemented on the concrete types.
|
||||||
|
As part of this the `gst::MiniObject` trait was also removed as it was
|
||||||
|
unneeded now.
|
||||||
|
|
||||||
## [0.15.7] - 2020-06-08
|
## [0.15.7] - 2020-06-08
|
||||||
### Fixed
|
### Fixed
|
||||||
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
||||||
|
@ -746,7 +935,14 @@ specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-v
|
||||||
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
||||||
The API of the two is incompatible.
|
The API of the two is incompatible.
|
||||||
|
|
||||||
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...HEAD
|
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.6...HEAD
|
||||||
|
[0.16.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.5...0.16.6
|
||||||
|
[0.16.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.4...0.16.5
|
||||||
|
[0.16.4]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.3...0.16.4
|
||||||
|
[0.16.3]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.2...0.16.3
|
||||||
|
[0.16.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.1...0.16.2
|
||||||
|
[0.16.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.0...0.16.1
|
||||||
|
[0.16.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...0.16.0
|
||||||
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
||||||
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
||||||
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "gstreamer-base"
|
name = "gstreamer-base"
|
||||||
version = "0.16.0"
|
version = "0.16.7"
|
||||||
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
||||||
categories = ["api-bindings", "multimedia"]
|
categories = ["api-bindings", "multimedia"]
|
||||||
description = "Rust bindings for GStreamer Base library"
|
description = "Rust bindings for GStreamer Base library"
|
||||||
|
@ -15,15 +15,15 @@ build = "build.rs"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
bitflags = "1.0"
|
bitflags = "1.0"
|
||||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
glib-sys = "0.10"
|
||||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
gobject-sys = "0.10"
|
||||||
gstreamer-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
gstreamer-base-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-base-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
glib = "0.10"
|
||||||
gstreamer = { path = "../gstreamer" }
|
gstreamer = { version = "0.16", path = "../gstreamer" }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
gstreamer-rs-lgpl-docs = { path = "../docs", optional = true }
|
gstreamer-rs-lgpl-docs = { version = "0.16", path = "../docs", optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
|
|
|
@ -140,7 +140,7 @@ $ export PKG_CONFIG_PATH="c:\\gstreamer\\1.0\\x86_64\\lib\\pkgconfig${PKG_CONFIG
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
The API reference can be found
|
The API reference can be found
|
||||||
[here](https://slomo.pages.freedesktop.org/rustdocs/gstreamer/gstreamer/), however it is
|
[here](https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer/index.html), however it is
|
||||||
only the Rust API reference and does not explain any of the concepts.
|
only the Rust API reference and does not explain any of the concepts.
|
||||||
|
|
||||||
For getting started with GStreamer development, the best would be to follow
|
For getting started with GStreamer development, the best would be to follow
|
||||||
|
|
|
@ -28,6 +28,13 @@ pub trait AggregatorExtManual: 'static {
|
||||||
fn get_allocator(&self) -> (Option<gst::Allocator>, gst::AllocationParams);
|
fn get_allocator(&self) -> (Option<gst::Allocator>, gst::AllocationParams);
|
||||||
|
|
||||||
fn finish_buffer(&self, buffer: gst::Buffer) -> Result<gst::FlowSuccess, gst::FlowError>;
|
fn finish_buffer(&self, buffer: gst::Buffer) -> Result<gst::FlowSuccess, gst::FlowError>;
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn finish_buffer_list(
|
||||||
|
&self,
|
||||||
|
bufferlist: gst::BufferList,
|
||||||
|
) -> Result<gst::FlowSuccess, gst::FlowError>;
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
||||||
fn get_property_min_upstream_latency(&self) -> gst::ClockTime;
|
fn get_property_min_upstream_latency(&self) -> gst::ClockTime;
|
||||||
|
|
||||||
|
@ -42,6 +49,34 @@ pub trait AggregatorExtManual: 'static {
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
fn update_segment<F: gst::FormattedValue>(&self, segment: &gst::FormattedSegment<F>);
|
fn update_segment<F: gst::FormattedValue>(&self, segment: &gst::FormattedSegment<F>);
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn selected_samples(
|
||||||
|
&self,
|
||||||
|
pts: gst::ClockTime,
|
||||||
|
dts: gst::ClockTime,
|
||||||
|
duration: gst::ClockTime,
|
||||||
|
info: Option<&gst::StructureRef>,
|
||||||
|
);
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn connect_samples_selected<
|
||||||
|
P,
|
||||||
|
F: Fn(
|
||||||
|
&P,
|
||||||
|
&gst::Segment,
|
||||||
|
gst::ClockTime,
|
||||||
|
gst::ClockTime,
|
||||||
|
gst::ClockTime,
|
||||||
|
Option<&gst::StructureRef>,
|
||||||
|
) + Send
|
||||||
|
+ 'static,
|
||||||
|
>(
|
||||||
|
&self,
|
||||||
|
f: F,
|
||||||
|
) -> SignalHandlerId
|
||||||
|
where
|
||||||
|
P: IsA<Aggregator>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<O: IsA<Aggregator>> AggregatorExtManual for O {
|
impl<O: IsA<Aggregator>> AggregatorExtManual for O {
|
||||||
|
@ -68,6 +103,20 @@ impl<O: IsA<Aggregator>> AggregatorExtManual for O {
|
||||||
ret.into_result()
|
ret.into_result()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn finish_buffer_list(
|
||||||
|
&self,
|
||||||
|
bufferlist: gst::BufferList,
|
||||||
|
) -> Result<gst::FlowSuccess, gst::FlowError> {
|
||||||
|
let ret: gst::FlowReturn = unsafe {
|
||||||
|
from_glib(gst_base_sys::gst_aggregator_finish_buffer_list(
|
||||||
|
self.as_ref().to_glib_none().0,
|
||||||
|
bufferlist.into_ptr(),
|
||||||
|
))
|
||||||
|
};
|
||||||
|
ret.into_result()
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
||||||
fn get_property_min_upstream_latency(&self) -> gst::ClockTime {
|
fn get_property_min_upstream_latency(&self) -> gst::ClockTime {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
@ -121,6 +170,96 @@ impl<O: IsA<Aggregator>> AggregatorExtManual for O {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn selected_samples(
|
||||||
|
&self,
|
||||||
|
pts: gst::ClockTime,
|
||||||
|
dts: gst::ClockTime,
|
||||||
|
duration: gst::ClockTime,
|
||||||
|
info: Option<&gst::StructureRef>,
|
||||||
|
) {
|
||||||
|
unsafe {
|
||||||
|
gst_base_sys::gst_aggregator_selected_samples(
|
||||||
|
self.as_ref().to_glib_none().0,
|
||||||
|
pts.to_glib(),
|
||||||
|
dts.to_glib(),
|
||||||
|
duration.to_glib(),
|
||||||
|
info.as_ref()
|
||||||
|
.map(|s| s.as_ptr() as *mut _)
|
||||||
|
.unwrap_or(ptr::null_mut()),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn connect_samples_selected<
|
||||||
|
P,
|
||||||
|
F: Fn(
|
||||||
|
&P,
|
||||||
|
&gst::Segment,
|
||||||
|
gst::ClockTime,
|
||||||
|
gst::ClockTime,
|
||||||
|
gst::ClockTime,
|
||||||
|
Option<&gst::StructureRef>,
|
||||||
|
) + Send
|
||||||
|
+ 'static,
|
||||||
|
>(
|
||||||
|
&self,
|
||||||
|
f: F,
|
||||||
|
) -> SignalHandlerId
|
||||||
|
where
|
||||||
|
P: IsA<Aggregator>,
|
||||||
|
{
|
||||||
|
unsafe extern "C" fn samples_selected_trampoline<
|
||||||
|
P,
|
||||||
|
F: Fn(
|
||||||
|
&P,
|
||||||
|
&gst::Segment,
|
||||||
|
gst::ClockTime,
|
||||||
|
gst::ClockTime,
|
||||||
|
gst::ClockTime,
|
||||||
|
Option<&gst::StructureRef>,
|
||||||
|
) + Send
|
||||||
|
+ 'static,
|
||||||
|
>(
|
||||||
|
this: *mut gst_base_sys::GstAggregator,
|
||||||
|
segment: *mut gst_sys::GstSegment,
|
||||||
|
pts: gst_sys::GstClockTime,
|
||||||
|
dts: gst_sys::GstClockTime,
|
||||||
|
duration: gst_sys::GstClockTime,
|
||||||
|
info: *mut gst_sys::GstStructure,
|
||||||
|
f: glib_sys::gpointer,
|
||||||
|
) where
|
||||||
|
P: IsA<Aggregator>,
|
||||||
|
{
|
||||||
|
let f: &F = &*(f as *const F);
|
||||||
|
f(
|
||||||
|
&Aggregator::from_glib_borrow(this).unsafe_cast_ref(),
|
||||||
|
&gst::Segment::from_glib_borrow(segment),
|
||||||
|
from_glib(pts),
|
||||||
|
from_glib(dts),
|
||||||
|
from_glib(duration),
|
||||||
|
if info.is_null() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(gst::StructureRef::from_glib_borrow(info))
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
let f: Box_<F> = Box_::new(f);
|
||||||
|
connect_raw(
|
||||||
|
self.as_ptr() as *mut _,
|
||||||
|
b"samples-selected\0".as_ptr() as *const _,
|
||||||
|
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||||
|
samples_selected_trampoline::<P, F> as *const (),
|
||||||
|
)),
|
||||||
|
Box_::into_raw(f),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
||||||
|
|
|
@ -16,6 +16,8 @@ use gst_base_sys;
|
||||||
use std::boxed::Box as Box_;
|
use std::boxed::Box as Box_;
|
||||||
use std::mem::transmute;
|
use std::mem::transmute;
|
||||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
use AggregatorPad;
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
use AggregatorStartTimeSelection;
|
use AggregatorStartTimeSelection;
|
||||||
|
|
||||||
glib_wrapper! {
|
glib_wrapper! {
|
||||||
|
@ -44,6 +46,9 @@ pub trait AggregatorExt: 'static {
|
||||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
fn negotiate(&self) -> bool;
|
fn negotiate(&self) -> bool;
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn peek_next_sample<P: IsA<AggregatorPad>>(&self, pad: &P) -> Option<gst::Sample>;
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||||
fn set_latency(&self, min_latency: gst::ClockTime, max_latency: gst::ClockTime);
|
fn set_latency(&self, min_latency: gst::ClockTime, max_latency: gst::ClockTime);
|
||||||
|
|
||||||
|
@ -56,6 +61,12 @@ pub trait AggregatorExt: 'static {
|
||||||
//#[cfg(any(feature = "v1_18", feature = "dox"))]
|
//#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
//fn update_segment(&self, segment: /*Ignored*/&gst::Segment);
|
//fn update_segment(&self, segment: /*Ignored*/&gst::Segment);
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn get_property_emit_signals(&self) -> bool;
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn set_property_emit_signals(&self, emit_signals: bool);
|
||||||
|
|
||||||
fn get_property_start_time(&self) -> u64;
|
fn get_property_start_time(&self) -> u64;
|
||||||
|
|
||||||
fn set_property_start_time(&self, start_time: u64);
|
fn set_property_start_time(&self, start_time: u64);
|
||||||
|
@ -66,6 +77,15 @@ pub trait AggregatorExt: 'static {
|
||||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
fn set_property_start_time_selection(&self, start_time_selection: AggregatorStartTimeSelection);
|
fn set_property_start_time_selection(&self, start_time_selection: AggregatorStartTimeSelection);
|
||||||
|
|
||||||
|
//#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
//fn connect_samples_selected<Unsupported or ignored types>(&self, f: F) -> SignalHandlerId;
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn connect_property_emit_signals_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
||||||
|
&self,
|
||||||
|
f: F,
|
||||||
|
) -> SignalHandlerId;
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||||
fn connect_property_latency_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
fn connect_property_latency_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
||||||
&self,
|
&self,
|
||||||
|
@ -117,6 +137,16 @@ impl<O: IsA<Aggregator>> AggregatorExt for O {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn peek_next_sample<P: IsA<AggregatorPad>>(&self, pad: &P) -> Option<gst::Sample> {
|
||||||
|
unsafe {
|
||||||
|
from_glib_full(gst_base_sys::gst_aggregator_peek_next_sample(
|
||||||
|
self.as_ref().to_glib_none().0,
|
||||||
|
pad.as_ref().to_glib_none().0,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||||
fn set_latency(&self, min_latency: gst::ClockTime, max_latency: gst::ClockTime) {
|
fn set_latency(&self, min_latency: gst::ClockTime, max_latency: gst::ClockTime) {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
@ -152,6 +182,33 @@ impl<O: IsA<Aggregator>> AggregatorExt for O {
|
||||||
// unsafe { TODO: call gst_base_sys:gst_aggregator_update_segment() }
|
// unsafe { TODO: call gst_base_sys:gst_aggregator_update_segment() }
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn get_property_emit_signals(&self) -> bool {
|
||||||
|
unsafe {
|
||||||
|
let mut value = Value::from_type(<bool as StaticType>::static_type());
|
||||||
|
gobject_sys::g_object_get_property(
|
||||||
|
self.to_glib_none().0 as *mut gobject_sys::GObject,
|
||||||
|
b"emit-signals\0".as_ptr() as *const _,
|
||||||
|
value.to_glib_none_mut().0,
|
||||||
|
);
|
||||||
|
value
|
||||||
|
.get()
|
||||||
|
.expect("Return Value for property `emit-signals` getter")
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn set_property_emit_signals(&self, emit_signals: bool) {
|
||||||
|
unsafe {
|
||||||
|
gobject_sys::g_object_set_property(
|
||||||
|
self.to_glib_none().0 as *mut gobject_sys::GObject,
|
||||||
|
b"emit-signals\0".as_ptr() as *const _,
|
||||||
|
Value::from(&emit_signals).to_glib_none().0,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn get_property_start_time(&self) -> u64 {
|
fn get_property_start_time(&self) -> u64 {
|
||||||
unsafe {
|
unsafe {
|
||||||
let mut value = Value::from_type(<u64 as StaticType>::static_type());
|
let mut value = Value::from_type(<u64 as StaticType>::static_type());
|
||||||
|
@ -208,6 +265,39 @@ impl<O: IsA<Aggregator>> AggregatorExt for O {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
//fn connect_samples_selected<Unsupported or ignored types>(&self, f: F) -> SignalHandlerId {
|
||||||
|
// Ignored segment: Gst.Segment
|
||||||
|
//}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn connect_property_emit_signals_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
||||||
|
&self,
|
||||||
|
f: F,
|
||||||
|
) -> SignalHandlerId {
|
||||||
|
unsafe extern "C" fn notify_emit_signals_trampoline<P, F: Fn(&P) + Send + Sync + 'static>(
|
||||||
|
this: *mut gst_base_sys::GstAggregator,
|
||||||
|
_param_spec: glib_sys::gpointer,
|
||||||
|
f: glib_sys::gpointer,
|
||||||
|
) where
|
||||||
|
P: IsA<Aggregator>,
|
||||||
|
{
|
||||||
|
let f: &F = &*(f as *const F);
|
||||||
|
f(&Aggregator::from_glib_borrow(this).unsafe_cast_ref())
|
||||||
|
}
|
||||||
|
unsafe {
|
||||||
|
let f: Box_<F> = Box_::new(f);
|
||||||
|
connect_raw(
|
||||||
|
self.as_ptr() as *mut _,
|
||||||
|
b"notify::emit-signals\0".as_ptr() as *const _,
|
||||||
|
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||||
|
notify_emit_signals_trampoline::<Self, F> as *const (),
|
||||||
|
)),
|
||||||
|
Box_::into_raw(f),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||||
fn connect_property_latency_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
fn connect_property_latency_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
||||||
&self,
|
&self,
|
||||||
|
|
|
@ -46,6 +46,7 @@ pub trait BaseSrcExt: 'static {
|
||||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
fn negotiate(&self) -> bool;
|
fn negotiate(&self) -> bool;
|
||||||
|
|
||||||
|
#[cfg_attr(feature = "v1_18", deprecated)]
|
||||||
fn new_seamless_segment(&self, start: i64, stop: i64, time: i64) -> bool;
|
fn new_seamless_segment(&self, start: i64, stop: i64, time: i64) -> bool;
|
||||||
|
|
||||||
fn set_async(&self, async: bool);
|
fn set_async(&self, async: bool);
|
||||||
|
|
|
@ -2,14 +2,23 @@
|
||||||
// from gir-files (https://github.com/gtk-rs/gir-files)
|
// from gir-files (https://github.com/gtk-rs/gir-files)
|
||||||
// DO NOT EDIT
|
// DO NOT EDIT
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
use glib::translate::*;
|
use glib::translate::*;
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
use glib::value::FromValue;
|
use glib::value::FromValue;
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
use glib::value::FromValueOptional;
|
use glib::value::FromValueOptional;
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
use glib::value::SetValue;
|
use glib::value::SetValue;
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
use glib::value::Value;
|
use glib::value::Value;
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
use glib::StaticType;
|
use glib::StaticType;
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
use glib::Type;
|
use glib::Type;
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
use gobject_sys;
|
use gobject_sys;
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
use gst_base_sys;
|
use gst_base_sys;
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
|
|
@ -38,7 +38,6 @@ pub use self::base_transform::{BaseTransform, BaseTransformClass, NONE_BASE_TRAN
|
||||||
mod push_src;
|
mod push_src;
|
||||||
pub use self::push_src::{PushSrc, PushSrcClass, NONE_PUSH_SRC};
|
pub use self::push_src::{PushSrc, PushSrcClass, NONE_PUSH_SRC};
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
|
||||||
mod enums;
|
mod enums;
|
||||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
pub use self::enums::AggregatorStartTimeSelection;
|
pub use self::enums::AggregatorStartTimeSelection;
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
||||||
from gir-files (https://github.com/gtk-rs/gir-files @ 2d4abeba)
|
from gir-files (https://github.com/gtk-rs/gir-files @ 8f334830)
|
||||||
|
|
|
@ -27,6 +27,9 @@ pub trait BaseSrcExtManual: 'static {
|
||||||
fn wait_playing(&self) -> Result<gst::FlowSuccess, gst::FlowError>;
|
fn wait_playing(&self) -> Result<gst::FlowSuccess, gst::FlowError>;
|
||||||
|
|
||||||
fn query_latency(&self) -> Result<(bool, gst::ClockTime, gst::ClockTime), glib::BoolError>;
|
fn query_latency(&self) -> Result<(bool, gst::ClockTime, gst::ClockTime), glib::BoolError>;
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn new_segment(&self, segment: &gst::Segment) -> Result<(), glib::BoolError>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<O: IsA<BaseSrc>> BaseSrcExtManual for O {
|
impl<O: IsA<BaseSrc>> BaseSrcExtManual for O {
|
||||||
|
@ -104,4 +107,20 @@ impl<O: IsA<BaseSrc>> BaseSrcExtManual for O {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn new_segment(&self, segment: &gst::Segment) -> Result<(), glib::BoolError> {
|
||||||
|
unsafe {
|
||||||
|
let ret = from_glib(gst_base_sys::gst_base_src_new_segment(
|
||||||
|
self.as_ref().to_glib_none().0,
|
||||||
|
segment.to_glib_none().0,
|
||||||
|
));
|
||||||
|
|
||||||
|
if ret {
|
||||||
|
Ok(())
|
||||||
|
} else {
|
||||||
|
Err(glib_bool_error!("Failed to configure new segment"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,15 @@ pub trait AggregatorImpl: AggregatorImplExt + ElementImpl + Send + Sync + 'stati
|
||||||
self.parent_clip(aggregator, aggregator_pad, buffer)
|
self.parent_clip(aggregator, aggregator_pad, buffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn finish_buffer_list(
|
||||||
|
&self,
|
||||||
|
aggregator: &Aggregator,
|
||||||
|
buffer_list: gst::BufferList,
|
||||||
|
) -> Result<gst::FlowSuccess, gst::FlowError> {
|
||||||
|
self.parent_finish_buffer_list(aggregator, buffer_list)
|
||||||
|
}
|
||||||
|
|
||||||
fn finish_buffer(
|
fn finish_buffer(
|
||||||
&self,
|
&self,
|
||||||
aggregator: &Aggregator,
|
aggregator: &Aggregator,
|
||||||
|
@ -155,6 +164,15 @@ pub trait AggregatorImpl: AggregatorImplExt + ElementImpl + Send + Sync + 'stati
|
||||||
fn negotiate(&self, aggregator: &Aggregator) -> bool {
|
fn negotiate(&self, aggregator: &Aggregator) -> bool {
|
||||||
self.parent_negotiate(aggregator)
|
self.parent_negotiate(aggregator)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn peek_next_sample(
|
||||||
|
&self,
|
||||||
|
aggregator: &Aggregator,
|
||||||
|
pad: &AggregatorPad,
|
||||||
|
) -> Option<gst::Sample> {
|
||||||
|
self.parent_peek_next_sample(aggregator, pad)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait AggregatorImplExt {
|
pub trait AggregatorImplExt {
|
||||||
|
@ -173,6 +191,13 @@ pub trait AggregatorImplExt {
|
||||||
buffer: gst::Buffer,
|
buffer: gst::Buffer,
|
||||||
) -> Result<gst::FlowSuccess, gst::FlowError>;
|
) -> Result<gst::FlowSuccess, gst::FlowError>;
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn parent_finish_buffer_list(
|
||||||
|
&self,
|
||||||
|
aggregator: &Aggregator,
|
||||||
|
buffer_list: gst::BufferList,
|
||||||
|
) -> Result<gst::FlowSuccess, gst::FlowError>;
|
||||||
|
|
||||||
fn parent_sink_event(
|
fn parent_sink_event(
|
||||||
&self,
|
&self,
|
||||||
aggregator: &Aggregator,
|
aggregator: &Aggregator,
|
||||||
|
@ -250,6 +275,13 @@ pub trait AggregatorImplExt {
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
fn parent_negotiate(&self, aggregator: &Aggregator) -> bool;
|
fn parent_negotiate(&self, aggregator: &Aggregator) -> bool;
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn parent_peek_next_sample(
|
||||||
|
&self,
|
||||||
|
aggregator: &Aggregator,
|
||||||
|
pad: &AggregatorPad,
|
||||||
|
) -> Option<gst::Sample>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: AggregatorImpl + ObjectImpl> AggregatorImplExt for T {
|
impl<T: AggregatorImpl + ObjectImpl> AggregatorImplExt for T {
|
||||||
|
@ -304,6 +336,24 @@ impl<T: AggregatorImpl + ObjectImpl> AggregatorImplExt for T {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn parent_finish_buffer_list(
|
||||||
|
&self,
|
||||||
|
aggregator: &Aggregator,
|
||||||
|
buffer_list: gst::BufferList,
|
||||||
|
) -> Result<gst::FlowSuccess, gst::FlowError> {
|
||||||
|
unsafe {
|
||||||
|
let data = self.get_type_data();
|
||||||
|
let parent_class =
|
||||||
|
data.as_ref().get_parent_class() as *mut gst_base_sys::GstAggregatorClass;
|
||||||
|
let f = (*parent_class)
|
||||||
|
.finish_buffer_list
|
||||||
|
.expect("Missing parent function `finish_buffer_list`");
|
||||||
|
gst::FlowReturn::from_glib(f(aggregator.to_glib_none().0, buffer_list.into_ptr()))
|
||||||
|
.into_result()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn parent_sink_event(
|
fn parent_sink_event(
|
||||||
&self,
|
&self,
|
||||||
aggregator: &Aggregator,
|
aggregator: &Aggregator,
|
||||||
|
@ -604,6 +654,23 @@ impl<T: AggregatorImpl + ObjectImpl> AggregatorImplExt for T {
|
||||||
.unwrap_or(true)
|
.unwrap_or(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn parent_peek_next_sample(
|
||||||
|
&self,
|
||||||
|
aggregator: &Aggregator,
|
||||||
|
pad: &AggregatorPad,
|
||||||
|
) -> Option<gst::Sample> {
|
||||||
|
unsafe {
|
||||||
|
let data = self.get_type_data();
|
||||||
|
let parent_class =
|
||||||
|
data.as_ref().get_parent_class() as *mut gst_base_sys::GstAggregatorClass;
|
||||||
|
(*parent_class)
|
||||||
|
.peek_next_sample
|
||||||
|
.map(|f| from_glib_full(f(aggregator.to_glib_none().0, pad.to_glib_none().0)))
|
||||||
|
.unwrap_or(None)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe impl<T: ObjectSubclass + AggregatorImpl> IsSubclassable<T> for AggregatorClass
|
unsafe impl<T: ObjectSubclass + AggregatorImpl> IsSubclassable<T> for AggregatorClass
|
||||||
|
@ -635,6 +702,8 @@ where
|
||||||
klass.sink_event_pre_queue = Some(aggregator_sink_event_pre_queue::<T>);
|
klass.sink_event_pre_queue = Some(aggregator_sink_event_pre_queue::<T>);
|
||||||
klass.sink_query_pre_queue = Some(aggregator_sink_query_pre_queue::<T>);
|
klass.sink_query_pre_queue = Some(aggregator_sink_query_pre_queue::<T>);
|
||||||
klass.negotiate = Some(aggregator_negotiate::<T>);
|
klass.negotiate = Some(aggregator_negotiate::<T>);
|
||||||
|
klass.peek_next_sample = Some(aggregator_peek_next_sample::<T>);
|
||||||
|
klass.finish_buffer_list = Some(aggregator_finish_buffer_list::<T>);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -699,6 +768,26 @@ where
|
||||||
.to_glib()
|
.to_glib()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
unsafe extern "C" fn aggregator_finish_buffer_list<T: ObjectSubclass>(
|
||||||
|
ptr: *mut gst_base_sys::GstAggregator,
|
||||||
|
buffer_list: *mut gst_sys::GstBufferList,
|
||||||
|
) -> gst_sys::GstFlowReturn
|
||||||
|
where
|
||||||
|
T: AggregatorImpl,
|
||||||
|
T::Instance: PanicPoison,
|
||||||
|
{
|
||||||
|
let instance = &*(ptr as *mut T::Instance);
|
||||||
|
let imp = instance.get_impl();
|
||||||
|
let wrap: Borrowed<Aggregator> = from_glib_borrow(ptr);
|
||||||
|
|
||||||
|
gst_panic_to_error!(&wrap, &instance.panicked(), gst::FlowReturn::Error, {
|
||||||
|
imp.finish_buffer_list(&wrap, from_glib_full(buffer_list))
|
||||||
|
.into()
|
||||||
|
})
|
||||||
|
.to_glib()
|
||||||
|
}
|
||||||
|
|
||||||
unsafe extern "C" fn aggregator_sink_event<T: ObjectSubclass>(
|
unsafe extern "C" fn aggregator_sink_event<T: ObjectSubclass>(
|
||||||
ptr: *mut gst_base_sys::GstAggregator,
|
ptr: *mut gst_base_sys::GstAggregator,
|
||||||
aggregator_pad: *mut gst_base_sys::GstAggregatorPad,
|
aggregator_pad: *mut gst_base_sys::GstAggregatorPad,
|
||||||
|
@ -1048,3 +1137,22 @@ where
|
||||||
|
|
||||||
gst_panic_to_error!(&wrap, &instance.panicked(), false, { imp.negotiate(&wrap) }).to_glib()
|
gst_panic_to_error!(&wrap, &instance.panicked(), false, { imp.negotiate(&wrap) }).to_glib()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
unsafe extern "C" fn aggregator_peek_next_sample<T: ObjectSubclass>(
|
||||||
|
ptr: *mut gst_base_sys::GstAggregator,
|
||||||
|
pad: *mut gst_base_sys::GstAggregatorPad,
|
||||||
|
) -> *mut gst_sys::GstSample
|
||||||
|
where
|
||||||
|
T: AggregatorImpl,
|
||||||
|
T::Instance: PanicPoison,
|
||||||
|
{
|
||||||
|
let instance = &*(ptr as *mut T::Instance);
|
||||||
|
let imp = instance.get_impl();
|
||||||
|
let wrap: Borrowed<Aggregator> = from_glib_borrow(ptr);
|
||||||
|
|
||||||
|
gst_panic_to_error!(&wrap, &instance.panicked(), None, {
|
||||||
|
imp.peek_next_sample(&wrap, &from_glib_borrow(pad))
|
||||||
|
})
|
||||||
|
.to_glib_full()
|
||||||
|
}
|
||||||
|
|
|
@ -874,10 +874,12 @@ pub unsafe trait BaseTransformClassSubclassExt: Sized + 'static {
|
||||||
|
|
||||||
match mode {
|
match mode {
|
||||||
BaseTransformMode::AlwaysInPlace => {
|
BaseTransformMode::AlwaysInPlace => {
|
||||||
|
klass.transform = None;
|
||||||
klass.transform_ip = Some(base_transform_transform_ip::<T>);
|
klass.transform_ip = Some(base_transform_transform_ip::<T>);
|
||||||
}
|
}
|
||||||
BaseTransformMode::NeverInPlace => {
|
BaseTransformMode::NeverInPlace => {
|
||||||
klass.transform = Some(base_transform_transform::<T>);
|
klass.transform = Some(base_transform_transform::<T>);
|
||||||
|
klass.transform_ip = None;
|
||||||
}
|
}
|
||||||
BaseTransformMode::Both => {
|
BaseTransformMode::Both => {
|
||||||
klass.transform = Some(base_transform_transform::<T>);
|
klass.transform = Some(base_transform_transform::<T>);
|
||||||
|
|
|
@ -5,6 +5,195 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||||
|
|
||||||
|
## [0.16.7] - 2021-02-13
|
||||||
|
### Fixed
|
||||||
|
- Usage of the logging system with a GStreamer library with the logging system
|
||||||
|
compiled out does not crash any longer.
|
||||||
|
- Double-free in `gst_video::VideoTimeCode` API when converting between
|
||||||
|
validated and unvalidated timecodes.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::Element::get_current_state()` and `get_pending_state()` convenience APIs.
|
||||||
|
- `gst_audio::AudioConverterConfig` for setting the configuration on e.g. the
|
||||||
|
`audiomixer` element. The low-level `AudioConverter` API is still not
|
||||||
|
included in the bindings.
|
||||||
|
|
||||||
|
## [0.16.6] - 2020-12-20
|
||||||
|
### Fixed
|
||||||
|
- `VideoTimeCodeInterval`'s `Ord` and `PartialEq` implementations compare
|
||||||
|
against the correct fields now.
|
||||||
|
- `SDPMessage::medias_mut()` iterator does not crash any longer.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `PartialEq` and `Eq` implementations on `VideoAlignment`.
|
||||||
|
- Alignment API for `VideoMeta` and `get_plane_height()` / `get_plane_size()`.
|
||||||
|
- `VideoInfo::align_full()`.
|
||||||
|
|
||||||
|
## [0.16.5] - 2020-11-23
|
||||||
|
### Fixed
|
||||||
|
- Make sure to use `$crate` in more macros to allow them to work without
|
||||||
|
anything special in scope already.
|
||||||
|
- Update documentation location.
|
||||||
|
- Don't panic if C code stores invalid seqnums in events and the seqnum is
|
||||||
|
used directly or via the `Display` impl.
|
||||||
|
- Fix docs build for some crates on docs.rs.
|
||||||
|
- Fix `Debug` impl for `gst_video::VideoTimeCode` to print the correct type
|
||||||
|
name.
|
||||||
|
- Fix plugin version to be 1.18 instead of 1.17 when compiling a plugin with
|
||||||
|
`v1_18`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Event handling support in pad probes, that is returning
|
||||||
|
`PadProbeReturn::Handled` for events.
|
||||||
|
- `EventRef::get_structure_mut()` getter that allows changing the events'
|
||||||
|
structures.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Remove unnecessary `PhantomData` markers and use `repr(transparent)` instead
|
||||||
|
of `repr(C)` where it is more correct.
|
||||||
|
|
||||||
|
## [0.16.4] - 2020-10-09
|
||||||
|
### Fixed
|
||||||
|
- Correctly implement `ExactSizeIterator` on the `AudioFormat` and
|
||||||
|
`VideoFormat` iterators. Previously they returned the overall size instead
|
||||||
|
of the remaining size, and they didn't implement `Iterator::size_hint()`.
|
||||||
|
- Don't implement `ExactSizeIterator` on the buffer `gst::Meta` iterator. The
|
||||||
|
overall length is not known easily and the implementation would've simply
|
||||||
|
panicked in the past.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::ClockID::wait_async_stream()` for async integration for clock waiting.
|
||||||
|
- `From` / `TryFrom` impls for converting between `gst::ClockTime` and
|
||||||
|
`std::time::Duration`.
|
||||||
|
|
||||||
|
## [0.16.3] - 2020-09-08
|
||||||
|
### Fixed
|
||||||
|
- Reset vfuncs if calling `BaseTransformClass::configure()` multiple times.
|
||||||
|
- Fix `gst::debug_remove_default_log_function()` to actually remove the
|
||||||
|
default log function.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Some more new APIs added in 1.18.
|
||||||
|
- API for getting an owned buffer from a readable `gst_video::VideoFrame` /
|
||||||
|
`VideoFrameRef`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Updated bindings to 1.18.0. This stabilized GStreamer 1.18 support and any
|
||||||
|
API behind the "v1_18" feature is considered stable now.
|
||||||
|
- Factor out some common code from `gst::Pad::ProbeInfo` code. This reduces
|
||||||
|
the code generated for each pad probe considerably.
|
||||||
|
- Update paste dependency to 1.0 and pretty-hex to 0.2.
|
||||||
|
|
||||||
|
## [0.16.2] - 2020-07-27
|
||||||
|
### Fixed
|
||||||
|
- Use correct pointer for the plane data in `gst_audio::AudioBuffer`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add `gst::GhostPad` convenience constructors that take a target pad, similar
|
||||||
|
to the ones that existed in 0.15 and before.
|
||||||
|
- Add `gst::parse_bin_from_description_with_name` that allows setting a name
|
||||||
|
for the created bin without having to use unsafe code in application code.
|
||||||
|
|
||||||
|
## [0.16.1] - 2020-07-10
|
||||||
|
### Fixed
|
||||||
|
- Allow calling `gst::DebugCategory::new()` before `gst::init()` again.
|
||||||
|
|
||||||
|
## [0.16.0] - 2020-07-06
|
||||||
|
### Added
|
||||||
|
- Updated bindings to 1.17.2, adding experimental 1.18 support. This can be
|
||||||
|
opted-in via the "v1_18" feature flag but there might still be API changes
|
||||||
|
in the newly added API.
|
||||||
|
- `gst::MemoryRef::dump()` for dumping contents of a memory.
|
||||||
|
- `gst::Bus::stream()` instead of a custom constructor on the `BusStream`.
|
||||||
|
- Use more accurate types for `Seqnum`, `GroupId` and `MetaSeqnum`. These are
|
||||||
|
now proper wrapper types instead of plain integers, which makes mis-use
|
||||||
|
harder.
|
||||||
|
- Provide `TryFrom` impls for conversion between `glib::DateTime` and
|
||||||
|
`gst::DateTime`.
|
||||||
|
- Add `get_allocator()` functions to `gst_base::{Aggregator, BaseTransform,
|
||||||
|
BaseSrc}`, and allow overriding `BaseSrc::alloc()`.
|
||||||
|
- Add subclassing bindings for `gst_base::PushSrc`.
|
||||||
|
- Add new `gst::BufferCursor` API that allows to handle a buffer as `Read`,
|
||||||
|
`Write` and `Seek` and accesses the underlying memories of the buffer
|
||||||
|
individually without mapping them all together.
|
||||||
|
- Add `gst::Plugin::get_plugin_name()`.
|
||||||
|
- Support for `gst_video::VideoAFDMeta` and `VideoBarMeta`.
|
||||||
|
- API for getting all / iterating over all `gst_audio::AudioFormat` and
|
||||||
|
`gst_video::VideoFormat`.
|
||||||
|
- Bindings and subclassing bindings for `gst_video::VideoSink`.
|
||||||
|
- `gst::Pad` can be constructed via the builder pattern and `gst::PadBuilder`
|
||||||
|
now, which allows to safely set the pad functions and various other fields
|
||||||
|
during construction. The `PadBuilder` works on any `gst::Pad` subclass and
|
||||||
|
also has special support for `GhostPad`s by allowing to set pad functions of
|
||||||
|
the proxy pad.
|
||||||
|
- `gst::Message`, `gst::Event` and `gst::Query` type constructors are now on
|
||||||
|
the specific target type instead of various `new_XXX()` functions on the
|
||||||
|
basic type. E.g. `gst::message::Eos::new()`.
|
||||||
|
- Support for overriding `gst_audio::AudioSrc/Sink::reset()`.
|
||||||
|
- Support for overriding `gst_base::BaseParse::stop()`.
|
||||||
|
- Support for overriding `gst::Element::post_message()`.
|
||||||
|
- Added bindings for `gst::BufferList::foreach()` and `foreach_mut()`.
|
||||||
|
- Added bindings for `gst::Buffer::foreach_meta()` and `foreach_meta_mut()`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Allow using any `glib::Object` as target object for logging instead of just
|
||||||
|
`gst::Object`.
|
||||||
|
- Remove restriction API from `gst_pbutils::EncodingContainerProfile`. They
|
||||||
|
are supposed to be used only with the other encoding profiles.
|
||||||
|
- Return `&'static str` for various `gst::StructureRef` functions where the
|
||||||
|
string is backed by a `glib::Quark`.
|
||||||
|
- Fix various `gst::DateTime` functions to actually return `Option`s.
|
||||||
|
- Add support for filling in a buffer passed to the `gst::Pad` getrange
|
||||||
|
function, allow passing one in into `get_range()` and `pull_range()` and
|
||||||
|
provide the corresponding API on `gst_base::BaseSrc` too.
|
||||||
|
- Allocator in audio/video `Decoder` base classes is optional and can return
|
||||||
|
`None`.
|
||||||
|
- `gst_video::ValidVideoTimeCode::add_interval()` always returns a valid
|
||||||
|
timecode again.
|
||||||
|
- Allow resolving a `gst::Promise` with `None` and also handle that correctly
|
||||||
|
in the callback. This is allowed by the API.
|
||||||
|
- Allow calling various debugging related functions before `gst::init()`.
|
||||||
|
- Various enum/function versions were fixed to only show up if the
|
||||||
|
corresponding version feature is enabled.
|
||||||
|
- `gst::Pad` function setters are marked unsafe now as changing the functions
|
||||||
|
is not thread-safe.
|
||||||
|
- Remove `gst::Object::set_name()` as changing the name after construction
|
||||||
|
generally causes problems and is potentially unsafe.
|
||||||
|
- Remove `gst::Pad::set_pad_template()` as changing the pad template after
|
||||||
|
construction is generally unsafe.
|
||||||
|
- `gst::Pad::stream_lock()` borrows the pad now instead of taking a new
|
||||||
|
reference.
|
||||||
|
- Unimplemented `Jitter` and `Buffer` queries were removed from the bindings.
|
||||||
|
These are not implemented in C and only have a type registered.
|
||||||
|
- Various `LAST`, `NONE` variants of enums and flags were removed as these
|
||||||
|
only make sense in C.
|
||||||
|
- Call the parent impl of various vfuncs that were omitted before to not
|
||||||
|
require further subclasses of them to implement them but automatically call
|
||||||
|
the parent ones.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Use `NonZeroU64/U32` for various ID types to allow further optimizations.
|
||||||
|
- Use `thiserror` crate for deriving error types.
|
||||||
|
- Switch from `lazy_static` to `once_cell`.
|
||||||
|
- Change various miniobject functions like `gst::Caps::append()` from taking
|
||||||
|
the object by value to modifying it internally. This makes them easier to
|
||||||
|
use and only applies to functions that are defined on the non-reference type
|
||||||
|
and take ownership of the values passed in.
|
||||||
|
- Use `mem::ManuallyDrop` instead of `mem::forget()` everywhere.
|
||||||
|
- Replace most `mem::transmute()` calls with safer alternatives.
|
||||||
|
- `gst:StreamCollection` API was changed to the builder pattern for
|
||||||
|
construction as the collection must not be changed after construction.
|
||||||
|
- `gst::ProxyPad` default functions are plain functions on `ProxyPad` now
|
||||||
|
instead of trait functions to allow easier usage of them.
|
||||||
|
- Use proper error types in various `TryFrom` impls.
|
||||||
|
- `gst_video::VideoMeta::add()` returns a `Result` now instead of panicking.
|
||||||
|
- Various constructors were renamed from `new_with_XXX()` and `new_from_XXX()`
|
||||||
|
to the more idiomatic `with_XXX()` and `from_XXX()`.
|
||||||
|
- Miniobject bindings are simplified now and there is no `gst::GstRc` type
|
||||||
|
anymore, instead everything is directly implemented on the concrete types.
|
||||||
|
As part of this the `gst::MiniObject` trait was also removed as it was
|
||||||
|
unneeded now.
|
||||||
|
|
||||||
## [0.15.7] - 2020-06-08
|
## [0.15.7] - 2020-06-08
|
||||||
### Fixed
|
### Fixed
|
||||||
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
||||||
|
@ -746,7 +935,14 @@ specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-v
|
||||||
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
||||||
The API of the two is incompatible.
|
The API of the two is incompatible.
|
||||||
|
|
||||||
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...HEAD
|
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.6...HEAD
|
||||||
|
[0.16.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.5...0.16.6
|
||||||
|
[0.16.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.4...0.16.5
|
||||||
|
[0.16.4]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.3...0.16.4
|
||||||
|
[0.16.3]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.2...0.16.3
|
||||||
|
[0.16.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.1...0.16.2
|
||||||
|
[0.16.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.0...0.16.1
|
||||||
|
[0.16.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...0.16.0
|
||||||
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
||||||
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
||||||
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "gstreamer-check"
|
name = "gstreamer-check"
|
||||||
version = "0.16.0"
|
version = "0.16.7"
|
||||||
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
||||||
categories = ["api-bindings", "multimedia"]
|
categories = ["api-bindings", "multimedia"]
|
||||||
description = "Rust bindings for GStreamer Check library"
|
description = "Rust bindings for GStreamer Check library"
|
||||||
|
@ -14,15 +14,15 @@ build = "build.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bitflags = "1.0"
|
bitflags = "1.0"
|
||||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
glib-sys = "0.10"
|
||||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
gobject-sys = "0.10"
|
||||||
gstreamer-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
gstreamer-check-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-check-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
glib = "0.10"
|
||||||
gstreamer = { path = "../gstreamer" }
|
gstreamer = { version = "0.16", path = "../gstreamer" }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
gstreamer-rs-lgpl-docs = { path = "../docs", optional = true }
|
gstreamer-rs-lgpl-docs = { version = "0.16", path = "../docs", optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
|
|
|
@ -140,7 +140,7 @@ $ export PKG_CONFIG_PATH="c:\\gstreamer\\1.0\\x86_64\\lib\\pkgconfig${PKG_CONFIG
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
The API reference can be found
|
The API reference can be found
|
||||||
[here](https://slomo.pages.freedesktop.org/rustdocs/gstreamer/gstreamer/), however it is
|
[here](https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer/index.html), however it is
|
||||||
only the Rust API reference and does not explain any of the concepts.
|
only the Rust API reference and does not explain any of the concepts.
|
||||||
|
|
||||||
For getting started with GStreamer development, the best would be to follow
|
For getting started with GStreamer development, the best would be to follow
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
||||||
from gir-files (https://github.com/gtk-rs/gir-files @ 2d4abeba)
|
from gir-files (https://github.com/gtk-rs/gir-files @ 8f334830)
|
||||||
|
|
|
@ -22,10 +22,7 @@ use std::ptr;
|
||||||
use TestClock;
|
use TestClock;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Harness(
|
pub struct Harness(ptr::NonNull<gst_check_sys::GstHarness>);
|
||||||
ptr::NonNull<gst_check_sys::GstHarness>,
|
|
||||||
PhantomData<gst_check_sys::GstHarness>,
|
|
||||||
);
|
|
||||||
|
|
||||||
impl Drop for Harness {
|
impl Drop for Harness {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
|
@ -567,7 +564,7 @@ impl Harness {
|
||||||
unsafe fn from_glib_full(ptr: *mut gst_check_sys::GstHarness) -> Harness {
|
unsafe fn from_glib_full(ptr: *mut gst_check_sys::GstHarness) -> Harness {
|
||||||
assert!(!ptr.is_null());
|
assert!(!ptr.is_null());
|
||||||
|
|
||||||
Harness(ptr::NonNull::new_unchecked(ptr), PhantomData)
|
Harness(ptr::NonNull::new_unchecked(ptr))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new(element_name: &str) -> Harness {
|
pub fn new(element_name: &str) -> Harness {
|
||||||
|
@ -728,10 +725,7 @@ impl Harness {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(Ref(
|
Some(Ref(
|
||||||
mem::ManuallyDrop::new(Harness(
|
mem::ManuallyDrop::new(Harness(ptr::NonNull::new_unchecked(sink_harness))),
|
||||||
ptr::NonNull::new_unchecked(sink_harness),
|
|
||||||
PhantomData,
|
|
||||||
)),
|
|
||||||
PhantomData,
|
PhantomData,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -745,10 +739,7 @@ impl Harness {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(Ref(
|
Some(Ref(
|
||||||
mem::ManuallyDrop::new(Harness(
|
mem::ManuallyDrop::new(Harness(ptr::NonNull::new_unchecked(src_harness))),
|
||||||
ptr::NonNull::new_unchecked(src_harness),
|
|
||||||
PhantomData,
|
|
||||||
)),
|
|
||||||
PhantomData,
|
PhantomData,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -762,10 +753,7 @@ impl Harness {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(RefMut(
|
Some(RefMut(
|
||||||
mem::ManuallyDrop::new(Harness(
|
mem::ManuallyDrop::new(Harness(ptr::NonNull::new_unchecked(sink_harness))),
|
||||||
ptr::NonNull::new_unchecked(sink_harness),
|
|
||||||
PhantomData,
|
|
||||||
)),
|
|
||||||
PhantomData,
|
PhantomData,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -779,10 +767,7 @@ impl Harness {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(RefMut(
|
Some(RefMut(
|
||||||
mem::ManuallyDrop::new(Harness(
|
mem::ManuallyDrop::new(Harness(ptr::NonNull::new_unchecked(src_harness))),
|
||||||
ptr::NonNull::new_unchecked(src_harness),
|
|
||||||
PhantomData,
|
|
||||||
)),
|
|
||||||
PhantomData,
|
PhantomData,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,195 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||||
|
|
||||||
|
## [0.16.7] - 2021-02-13
|
||||||
|
### Fixed
|
||||||
|
- Usage of the logging system with a GStreamer library with the logging system
|
||||||
|
compiled out does not crash any longer.
|
||||||
|
- Double-free in `gst_video::VideoTimeCode` API when converting between
|
||||||
|
validated and unvalidated timecodes.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::Element::get_current_state()` and `get_pending_state()` convenience APIs.
|
||||||
|
- `gst_audio::AudioConverterConfig` for setting the configuration on e.g. the
|
||||||
|
`audiomixer` element. The low-level `AudioConverter` API is still not
|
||||||
|
included in the bindings.
|
||||||
|
|
||||||
|
## [0.16.6] - 2020-12-20
|
||||||
|
### Fixed
|
||||||
|
- `VideoTimeCodeInterval`'s `Ord` and `PartialEq` implementations compare
|
||||||
|
against the correct fields now.
|
||||||
|
- `SDPMessage::medias_mut()` iterator does not crash any longer.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `PartialEq` and `Eq` implementations on `VideoAlignment`.
|
||||||
|
- Alignment API for `VideoMeta` and `get_plane_height()` / `get_plane_size()`.
|
||||||
|
- `VideoInfo::align_full()`.
|
||||||
|
|
||||||
|
## [0.16.5] - 2020-11-23
|
||||||
|
### Fixed
|
||||||
|
- Make sure to use `$crate` in more macros to allow them to work without
|
||||||
|
anything special in scope already.
|
||||||
|
- Update documentation location.
|
||||||
|
- Don't panic if C code stores invalid seqnums in events and the seqnum is
|
||||||
|
used directly or via the `Display` impl.
|
||||||
|
- Fix docs build for some crates on docs.rs.
|
||||||
|
- Fix `Debug` impl for `gst_video::VideoTimeCode` to print the correct type
|
||||||
|
name.
|
||||||
|
- Fix plugin version to be 1.18 instead of 1.17 when compiling a plugin with
|
||||||
|
`v1_18`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Event handling support in pad probes, that is returning
|
||||||
|
`PadProbeReturn::Handled` for events.
|
||||||
|
- `EventRef::get_structure_mut()` getter that allows changing the events'
|
||||||
|
structures.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Remove unnecessary `PhantomData` markers and use `repr(transparent)` instead
|
||||||
|
of `repr(C)` where it is more correct.
|
||||||
|
|
||||||
|
## [0.16.4] - 2020-10-09
|
||||||
|
### Fixed
|
||||||
|
- Correctly implement `ExactSizeIterator` on the `AudioFormat` and
|
||||||
|
`VideoFormat` iterators. Previously they returned the overall size instead
|
||||||
|
of the remaining size, and they didn't implement `Iterator::size_hint()`.
|
||||||
|
- Don't implement `ExactSizeIterator` on the buffer `gst::Meta` iterator. The
|
||||||
|
overall length is not known easily and the implementation would've simply
|
||||||
|
panicked in the past.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::ClockID::wait_async_stream()` for async integration for clock waiting.
|
||||||
|
- `From` / `TryFrom` impls for converting between `gst::ClockTime` and
|
||||||
|
`std::time::Duration`.
|
||||||
|
|
||||||
|
## [0.16.3] - 2020-09-08
|
||||||
|
### Fixed
|
||||||
|
- Reset vfuncs if calling `BaseTransformClass::configure()` multiple times.
|
||||||
|
- Fix `gst::debug_remove_default_log_function()` to actually remove the
|
||||||
|
default log function.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Some more new APIs added in 1.18.
|
||||||
|
- API for getting an owned buffer from a readable `gst_video::VideoFrame` /
|
||||||
|
`VideoFrameRef`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Updated bindings to 1.18.0. This stabilized GStreamer 1.18 support and any
|
||||||
|
API behind the "v1_18" feature is considered stable now.
|
||||||
|
- Factor out some common code from `gst::Pad::ProbeInfo` code. This reduces
|
||||||
|
the code generated for each pad probe considerably.
|
||||||
|
- Update paste dependency to 1.0 and pretty-hex to 0.2.
|
||||||
|
|
||||||
|
## [0.16.2] - 2020-07-27
|
||||||
|
### Fixed
|
||||||
|
- Use correct pointer for the plane data in `gst_audio::AudioBuffer`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add `gst::GhostPad` convenience constructors that take a target pad, similar
|
||||||
|
to the ones that existed in 0.15 and before.
|
||||||
|
- Add `gst::parse_bin_from_description_with_name` that allows setting a name
|
||||||
|
for the created bin without having to use unsafe code in application code.
|
||||||
|
|
||||||
|
## [0.16.1] - 2020-07-10
|
||||||
|
### Fixed
|
||||||
|
- Allow calling `gst::DebugCategory::new()` before `gst::init()` again.
|
||||||
|
|
||||||
|
## [0.16.0] - 2020-07-06
|
||||||
|
### Added
|
||||||
|
- Updated bindings to 1.17.2, adding experimental 1.18 support. This can be
|
||||||
|
opted-in via the "v1_18" feature flag but there might still be API changes
|
||||||
|
in the newly added API.
|
||||||
|
- `gst::MemoryRef::dump()` for dumping contents of a memory.
|
||||||
|
- `gst::Bus::stream()` instead of a custom constructor on the `BusStream`.
|
||||||
|
- Use more accurate types for `Seqnum`, `GroupId` and `MetaSeqnum`. These are
|
||||||
|
now proper wrapper types instead of plain integers, which makes mis-use
|
||||||
|
harder.
|
||||||
|
- Provide `TryFrom` impls for conversion between `glib::DateTime` and
|
||||||
|
`gst::DateTime`.
|
||||||
|
- Add `get_allocator()` functions to `gst_base::{Aggregator, BaseTransform,
|
||||||
|
BaseSrc}`, and allow overriding `BaseSrc::alloc()`.
|
||||||
|
- Add subclassing bindings for `gst_base::PushSrc`.
|
||||||
|
- Add new `gst::BufferCursor` API that allows to handle a buffer as `Read`,
|
||||||
|
`Write` and `Seek` and accesses the underlying memories of the buffer
|
||||||
|
individually without mapping them all together.
|
||||||
|
- Add `gst::Plugin::get_plugin_name()`.
|
||||||
|
- Support for `gst_video::VideoAFDMeta` and `VideoBarMeta`.
|
||||||
|
- API for getting all / iterating over all `gst_audio::AudioFormat` and
|
||||||
|
`gst_video::VideoFormat`.
|
||||||
|
- Bindings and subclassing bindings for `gst_video::VideoSink`.
|
||||||
|
- `gst::Pad` can be constructed via the builder pattern and `gst::PadBuilder`
|
||||||
|
now, which allows to safely set the pad functions and various other fields
|
||||||
|
during construction. The `PadBuilder` works on any `gst::Pad` subclass and
|
||||||
|
also has special support for `GhostPad`s by allowing to set pad functions of
|
||||||
|
the proxy pad.
|
||||||
|
- `gst::Message`, `gst::Event` and `gst::Query` type constructors are now on
|
||||||
|
the specific target type instead of various `new_XXX()` functions on the
|
||||||
|
basic type. E.g. `gst::message::Eos::new()`.
|
||||||
|
- Support for overriding `gst_audio::AudioSrc/Sink::reset()`.
|
||||||
|
- Support for overriding `gst_base::BaseParse::stop()`.
|
||||||
|
- Support for overriding `gst::Element::post_message()`.
|
||||||
|
- Added bindings for `gst::BufferList::foreach()` and `foreach_mut()`.
|
||||||
|
- Added bindings for `gst::Buffer::foreach_meta()` and `foreach_meta_mut()`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Allow using any `glib::Object` as target object for logging instead of just
|
||||||
|
`gst::Object`.
|
||||||
|
- Remove restriction API from `gst_pbutils::EncodingContainerProfile`. They
|
||||||
|
are supposed to be used only with the other encoding profiles.
|
||||||
|
- Return `&'static str` for various `gst::StructureRef` functions where the
|
||||||
|
string is backed by a `glib::Quark`.
|
||||||
|
- Fix various `gst::DateTime` functions to actually return `Option`s.
|
||||||
|
- Add support for filling in a buffer passed to the `gst::Pad` getrange
|
||||||
|
function, allow passing one in into `get_range()` and `pull_range()` and
|
||||||
|
provide the corresponding API on `gst_base::BaseSrc` too.
|
||||||
|
- Allocator in audio/video `Decoder` base classes is optional and can return
|
||||||
|
`None`.
|
||||||
|
- `gst_video::ValidVideoTimeCode::add_interval()` always returns a valid
|
||||||
|
timecode again.
|
||||||
|
- Allow resolving a `gst::Promise` with `None` and also handle that correctly
|
||||||
|
in the callback. This is allowed by the API.
|
||||||
|
- Allow calling various debugging related functions before `gst::init()`.
|
||||||
|
- Various enum/function versions were fixed to only show up if the
|
||||||
|
corresponding version feature is enabled.
|
||||||
|
- `gst::Pad` function setters are marked unsafe now as changing the functions
|
||||||
|
is not thread-safe.
|
||||||
|
- Remove `gst::Object::set_name()` as changing the name after construction
|
||||||
|
generally causes problems and is potentially unsafe.
|
||||||
|
- Remove `gst::Pad::set_pad_template()` as changing the pad template after
|
||||||
|
construction is generally unsafe.
|
||||||
|
- `gst::Pad::stream_lock()` borrows the pad now instead of taking a new
|
||||||
|
reference.
|
||||||
|
- Unimplemented `Jitter` and `Buffer` queries were removed from the bindings.
|
||||||
|
These are not implemented in C and only have a type registered.
|
||||||
|
- Various `LAST`, `NONE` variants of enums and flags were removed as these
|
||||||
|
only make sense in C.
|
||||||
|
- Call the parent impl of various vfuncs that were omitted before to not
|
||||||
|
require further subclasses of them to implement them but automatically call
|
||||||
|
the parent ones.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Use `NonZeroU64/U32` for various ID types to allow further optimizations.
|
||||||
|
- Use `thiserror` crate for deriving error types.
|
||||||
|
- Switch from `lazy_static` to `once_cell`.
|
||||||
|
- Change various miniobject functions like `gst::Caps::append()` from taking
|
||||||
|
the object by value to modifying it internally. This makes them easier to
|
||||||
|
use and only applies to functions that are defined on the non-reference type
|
||||||
|
and take ownership of the values passed in.
|
||||||
|
- Use `mem::ManuallyDrop` instead of `mem::forget()` everywhere.
|
||||||
|
- Replace most `mem::transmute()` calls with safer alternatives.
|
||||||
|
- `gst:StreamCollection` API was changed to the builder pattern for
|
||||||
|
construction as the collection must not be changed after construction.
|
||||||
|
- `gst::ProxyPad` default functions are plain functions on `ProxyPad` now
|
||||||
|
instead of trait functions to allow easier usage of them.
|
||||||
|
- Use proper error types in various `TryFrom` impls.
|
||||||
|
- `gst_video::VideoMeta::add()` returns a `Result` now instead of panicking.
|
||||||
|
- Various constructors were renamed from `new_with_XXX()` and `new_from_XXX()`
|
||||||
|
to the more idiomatic `with_XXX()` and `from_XXX()`.
|
||||||
|
- Miniobject bindings are simplified now and there is no `gst::GstRc` type
|
||||||
|
anymore, instead everything is directly implemented on the concrete types.
|
||||||
|
As part of this the `gst::MiniObject` trait was also removed as it was
|
||||||
|
unneeded now.
|
||||||
|
|
||||||
## [0.15.7] - 2020-06-08
|
## [0.15.7] - 2020-06-08
|
||||||
### Fixed
|
### Fixed
|
||||||
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
||||||
|
@ -746,7 +935,14 @@ specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-v
|
||||||
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
||||||
The API of the two is incompatible.
|
The API of the two is incompatible.
|
||||||
|
|
||||||
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...HEAD
|
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.6...HEAD
|
||||||
|
[0.16.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.5...0.16.6
|
||||||
|
[0.16.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.4...0.16.5
|
||||||
|
[0.16.4]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.3...0.16.4
|
||||||
|
[0.16.3]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.2...0.16.3
|
||||||
|
[0.16.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.1...0.16.2
|
||||||
|
[0.16.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.0...0.16.1
|
||||||
|
[0.16.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...0.16.0
|
||||||
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
||||||
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
||||||
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "gstreamer-editing-services"
|
name = "gstreamer-editing-services"
|
||||||
version = "0.16.0"
|
version = "0.16.7"
|
||||||
authors = ["Thibault Saunier <tsaunier@igalia.com>", "Sebastian Dröge <sebastian@centricular.com>"]
|
authors = ["Thibault Saunier <tsaunier@igalia.com>", "Sebastian Dröge <sebastian@centricular.com>"]
|
||||||
categories = ["api-bindings", "multimedia"]
|
categories = ["api-bindings", "multimedia"]
|
||||||
description = "Rust bindings for GStreamer Editing Services"
|
description = "Rust bindings for GStreamer Editing Services"
|
||||||
|
@ -15,19 +15,19 @@ build = "build.rs"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
bitflags = "1.0"
|
bitflags = "1.0"
|
||||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
glib-sys = "0.10"
|
||||||
gio-sys = { git = "https://github.com/gtk-rs/sys" }
|
gio-sys = "0.10"
|
||||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
gobject-sys = "0.10"
|
||||||
gstreamer-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
gstreamer-editing-services-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"]}
|
gstreamer-editing-services-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"]}
|
||||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
glib = "0.10"
|
||||||
gio = { git = "https://github.com/gtk-rs/gio" }
|
gio = "0.9"
|
||||||
gstreamer = { path = "../gstreamer" }
|
gstreamer = { version = "0.16", path = "../gstreamer" }
|
||||||
gstreamer-base = { path = "../gstreamer-base" }
|
gstreamer-base = { version = "0.16", path = "../gstreamer-base" }
|
||||||
gstreamer-pbutils = { path = "../gstreamer-pbutils" }
|
gstreamer-pbutils = { version = "0.16", path = "../gstreamer-pbutils" }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
gstreamer-rs-lgpl-docs = { path = "../docs", optional = true }
|
gstreamer-rs-lgpl-docs = { version = "0.16", path = "../docs", optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
v1_10 = ["gstreamer/v1_10", "gstreamer-base/v1_10", "gstreamer-pbutils/v1_10", "gstreamer-editing-services-sys/v1_10"]
|
v1_10 = ["gstreamer/v1_10", "gstreamer-base/v1_10", "gstreamer-pbutils/v1_10", "gstreamer-editing-services-sys/v1_10"]
|
||||||
|
@ -37,7 +37,7 @@ v1_16 = ["gstreamer/v1_16", "gstreamer-base/v1_16", "gstreamer-pbutils/v1_16", "
|
||||||
v1_18 = ["gstreamer/v1_18", "gstreamer-base/v1_18", "gstreamer-pbutils/v1_18", "gstreamer-editing-services-sys/v1_18", "v1_16"]
|
v1_18 = ["gstreamer/v1_18", "gstreamer-base/v1_18", "gstreamer-pbutils/v1_18", "gstreamer-editing-services-sys/v1_18", "v1_16"]
|
||||||
embed-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
embed-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
||||||
purge-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
purge-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
||||||
dox = ["v1_18", "gstreamer-editing-services-sys/dox", "glib/dox", "gstreamer/dox"]
|
dox = ["v1_18", "gstreamer-editing-services-sys/dox", "glib/dox", "gio/dox", "gstreamer/dox", "gstreamer-base/dox", "gstreamer-pbutils/dox"]
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
features = ["dox", "embed-lgpl-docs"]
|
features = ["dox", "embed-lgpl-docs"]
|
||||||
|
|
|
@ -145,7 +145,7 @@ $ export PKG_CONFIG_PATH="c:\\gstreamer\\1.0\\x86_64\\lib\\pkgconfig${PKG_CONFIG
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
The API reference can be found
|
The API reference can be found
|
||||||
[here](https://slomo.pages.freedesktop.org/rustdocs/gstreamer/gstreamer/), however it is
|
[here](https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer/index.html), however it is
|
||||||
only the Rust API reference and does not explain any of the concepts.
|
only the Rust API reference and does not explain any of the concepts.
|
||||||
|
|
||||||
For getting started with GStreamer development, the best would be to follow
|
For getting started with GStreamer development, the best would be to follow
|
||||||
|
|
23
gstreamer-editing-services/src/auto/base_transition_clip.rs
Normal file
23
gstreamer-editing-services/src/auto/base_transition_clip.rs
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
// This file was generated by gir (https://github.com/gtk-rs/gir)
|
||||||
|
// from gir-files (https://github.com/gtk-rs/gir-files)
|
||||||
|
// DO NOT EDIT
|
||||||
|
|
||||||
|
use ges_sys;
|
||||||
|
use glib::translate::*;
|
||||||
|
use Clip;
|
||||||
|
use Container;
|
||||||
|
use Extractable;
|
||||||
|
use OperationClip;
|
||||||
|
use TimelineElement;
|
||||||
|
|
||||||
|
glib_wrapper! {
|
||||||
|
pub struct BaseTransitionClip(Object<ges_sys::GESBaseTransitionClip, ges_sys::GESBaseTransitionClipClass, BaseTransitionClipClass>) @extends OperationClip, Clip, Container, TimelineElement, @implements Extractable;
|
||||||
|
|
||||||
|
match fn {
|
||||||
|
get_type => || ges_sys::ges_base_transition_clip_get_type(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BaseTransitionClip {}
|
||||||
|
|
||||||
|
pub const NONE_BASE_TRANSITION_CLIP: Option<&BaseTransitionClip> = None;
|
|
@ -139,3 +139,397 @@ impl SetValue for EditMode {
|
||||||
gobject_sys::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
|
gobject_sys::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum VideoStandardTransitionType {
|
||||||
|
None,
|
||||||
|
BarWipeLr,
|
||||||
|
BarWipeTb,
|
||||||
|
BoxWipeTl,
|
||||||
|
BoxWipeTr,
|
||||||
|
BoxWipeBr,
|
||||||
|
BoxWipeBl,
|
||||||
|
FourBoxWipeCi,
|
||||||
|
FourBoxWipeCo,
|
||||||
|
BarndoorV,
|
||||||
|
BarndoorH,
|
||||||
|
BoxWipeTc,
|
||||||
|
BoxWipeRc,
|
||||||
|
BoxWipeBc,
|
||||||
|
BoxWipeLc,
|
||||||
|
DiagonalTl,
|
||||||
|
DiagonalTr,
|
||||||
|
BowtieV,
|
||||||
|
BowtieH,
|
||||||
|
BarndoorDbl,
|
||||||
|
BarndoorDtl,
|
||||||
|
MiscDiagonalDbd,
|
||||||
|
MiscDiagonalDd,
|
||||||
|
VeeD,
|
||||||
|
VeeL,
|
||||||
|
VeeU,
|
||||||
|
VeeR,
|
||||||
|
BarnveeD,
|
||||||
|
BarnveeL,
|
||||||
|
BarnveeU,
|
||||||
|
BarnveeR,
|
||||||
|
IrisRect,
|
||||||
|
ClockCw12,
|
||||||
|
ClockCw3,
|
||||||
|
ClockCw6,
|
||||||
|
ClockCw9,
|
||||||
|
PinwheelTbv,
|
||||||
|
PinwheelTbh,
|
||||||
|
PinwheelFb,
|
||||||
|
FanCt,
|
||||||
|
FanCr,
|
||||||
|
DoublefanFov,
|
||||||
|
DoublefanFoh,
|
||||||
|
SinglesweepCwt,
|
||||||
|
SinglesweepCwr,
|
||||||
|
SinglesweepCwb,
|
||||||
|
SinglesweepCwl,
|
||||||
|
DoublesweepPv,
|
||||||
|
DoublesweepPd,
|
||||||
|
DoublesweepOv,
|
||||||
|
DoublesweepOh,
|
||||||
|
FanT,
|
||||||
|
FanR,
|
||||||
|
FanB,
|
||||||
|
FanL,
|
||||||
|
DoublefanFiv,
|
||||||
|
DoublefanFih,
|
||||||
|
SinglesweepCwtl,
|
||||||
|
SinglesweepCwbl,
|
||||||
|
SinglesweepCwbr,
|
||||||
|
SinglesweepCwtr,
|
||||||
|
DoublesweepPdtl,
|
||||||
|
DoublesweepPdbl,
|
||||||
|
SaloondoorT,
|
||||||
|
SaloondoorL,
|
||||||
|
SaloondoorB,
|
||||||
|
SaloondoorR,
|
||||||
|
WindshieldR,
|
||||||
|
WindshieldU,
|
||||||
|
WindshieldV,
|
||||||
|
WindshieldH,
|
||||||
|
Crossfade,
|
||||||
|
#[doc(hidden)]
|
||||||
|
__Unknown(i32),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
impl ToGlib for VideoStandardTransitionType {
|
||||||
|
type GlibType = ges_sys::GESVideoStandardTransitionType;
|
||||||
|
|
||||||
|
fn to_glib(&self) -> ges_sys::GESVideoStandardTransitionType {
|
||||||
|
match *self {
|
||||||
|
VideoStandardTransitionType::None => ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_NONE,
|
||||||
|
VideoStandardTransitionType::BarWipeLr => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_LR
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BarWipeTb => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BAR_WIPE_TB
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BoxWipeTl => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TL
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BoxWipeTr => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TR
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BoxWipeBr => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BR
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BoxWipeBl => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BL
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::FourBoxWipeCi => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CI
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::FourBoxWipeCo => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_FOUR_BOX_WIPE_CO
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BarndoorV => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_V
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BarndoorH => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_H
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BoxWipeTc => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_TC
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BoxWipeRc => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_RC
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BoxWipeBc => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_BC
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BoxWipeLc => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOX_WIPE_LC
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::DiagonalTl => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TL
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::DiagonalTr => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_DIAGONAL_TR
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BowtieV => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_V
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BowtieH => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BOWTIE_H
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BarndoorDbl => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DBL
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BarndoorDtl => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNDOOR_DTL
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::MiscDiagonalDbd => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DBD
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::MiscDiagonalDd => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_MISC_DIAGONAL_DD
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::VeeD => ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_D,
|
||||||
|
VideoStandardTransitionType::VeeL => ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_L,
|
||||||
|
VideoStandardTransitionType::VeeU => ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_U,
|
||||||
|
VideoStandardTransitionType::VeeR => ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_VEE_R,
|
||||||
|
VideoStandardTransitionType::BarnveeD => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_D
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BarnveeL => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_L
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BarnveeU => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_U
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::BarnveeR => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_BARNVEE_R
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::IrisRect => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_IRIS_RECT
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::ClockCw12 => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW12
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::ClockCw3 => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW3
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::ClockCw6 => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW6
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::ClockCw9 => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_CLOCK_CW9
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::PinwheelTbv => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBV
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::PinwheelTbh => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_TBH
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::PinwheelFb => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_PINWHEEL_FB
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::FanCt => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CT
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::FanCr => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_CR
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::DoublefanFov => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOV
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::DoublefanFoh => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FOH
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::SinglesweepCwt => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWT
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::SinglesweepCwr => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWR
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::SinglesweepCwb => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWB
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::SinglesweepCwl => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWL
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::DoublesweepPv => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PV
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::DoublesweepPd => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PD
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::DoublesweepOv => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OV
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::DoublesweepOh => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_OH
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::FanT => ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_T,
|
||||||
|
VideoStandardTransitionType::FanR => ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_R,
|
||||||
|
VideoStandardTransitionType::FanB => ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_B,
|
||||||
|
VideoStandardTransitionType::FanL => ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_FAN_L,
|
||||||
|
VideoStandardTransitionType::DoublefanFiv => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIV
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::DoublefanFih => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLEFAN_FIH
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::SinglesweepCwtl => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTL
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::SinglesweepCwbl => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBL
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::SinglesweepCwbr => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWBR
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::SinglesweepCwtr => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_SINGLESWEEP_CWTR
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::DoublesweepPdtl => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDTL
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::DoublesweepPdbl => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_DOUBLESWEEP_PDBL
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::SaloondoorT => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_T
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::SaloondoorL => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_L
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::SaloondoorB => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_B
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::SaloondoorR => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_SALOONDOOR_R
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::WindshieldR => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_R
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::WindshieldU => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_U
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::WindshieldV => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_V
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::WindshieldH => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_WINDSHIELD_H
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::Crossfade => {
|
||||||
|
ges_sys::GES_VIDEO_STANDARD_TRANSITION_TYPE_CROSSFADE
|
||||||
|
}
|
||||||
|
VideoStandardTransitionType::__Unknown(value) => value,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
impl FromGlib<ges_sys::GESVideoStandardTransitionType> for VideoStandardTransitionType {
|
||||||
|
fn from_glib(value: ges_sys::GESVideoStandardTransitionType) -> Self {
|
||||||
|
skip_assert_initialized!();
|
||||||
|
match value {
|
||||||
|
0 => VideoStandardTransitionType::None,
|
||||||
|
1 => VideoStandardTransitionType::BarWipeLr,
|
||||||
|
2 => VideoStandardTransitionType::BarWipeTb,
|
||||||
|
3 => VideoStandardTransitionType::BoxWipeTl,
|
||||||
|
4 => VideoStandardTransitionType::BoxWipeTr,
|
||||||
|
5 => VideoStandardTransitionType::BoxWipeBr,
|
||||||
|
6 => VideoStandardTransitionType::BoxWipeBl,
|
||||||
|
7 => VideoStandardTransitionType::FourBoxWipeCi,
|
||||||
|
8 => VideoStandardTransitionType::FourBoxWipeCo,
|
||||||
|
21 => VideoStandardTransitionType::BarndoorV,
|
||||||
|
22 => VideoStandardTransitionType::BarndoorH,
|
||||||
|
23 => VideoStandardTransitionType::BoxWipeTc,
|
||||||
|
24 => VideoStandardTransitionType::BoxWipeRc,
|
||||||
|
25 => VideoStandardTransitionType::BoxWipeBc,
|
||||||
|
26 => VideoStandardTransitionType::BoxWipeLc,
|
||||||
|
41 => VideoStandardTransitionType::DiagonalTl,
|
||||||
|
42 => VideoStandardTransitionType::DiagonalTr,
|
||||||
|
43 => VideoStandardTransitionType::BowtieV,
|
||||||
|
44 => VideoStandardTransitionType::BowtieH,
|
||||||
|
45 => VideoStandardTransitionType::BarndoorDbl,
|
||||||
|
46 => VideoStandardTransitionType::BarndoorDtl,
|
||||||
|
47 => VideoStandardTransitionType::MiscDiagonalDbd,
|
||||||
|
48 => VideoStandardTransitionType::MiscDiagonalDd,
|
||||||
|
61 => VideoStandardTransitionType::VeeD,
|
||||||
|
62 => VideoStandardTransitionType::VeeL,
|
||||||
|
63 => VideoStandardTransitionType::VeeU,
|
||||||
|
64 => VideoStandardTransitionType::VeeR,
|
||||||
|
65 => VideoStandardTransitionType::BarnveeD,
|
||||||
|
66 => VideoStandardTransitionType::BarnveeL,
|
||||||
|
67 => VideoStandardTransitionType::BarnveeU,
|
||||||
|
68 => VideoStandardTransitionType::BarnveeR,
|
||||||
|
101 => VideoStandardTransitionType::IrisRect,
|
||||||
|
201 => VideoStandardTransitionType::ClockCw12,
|
||||||
|
202 => VideoStandardTransitionType::ClockCw3,
|
||||||
|
203 => VideoStandardTransitionType::ClockCw6,
|
||||||
|
204 => VideoStandardTransitionType::ClockCw9,
|
||||||
|
205 => VideoStandardTransitionType::PinwheelTbv,
|
||||||
|
206 => VideoStandardTransitionType::PinwheelTbh,
|
||||||
|
207 => VideoStandardTransitionType::PinwheelFb,
|
||||||
|
211 => VideoStandardTransitionType::FanCt,
|
||||||
|
212 => VideoStandardTransitionType::FanCr,
|
||||||
|
213 => VideoStandardTransitionType::DoublefanFov,
|
||||||
|
214 => VideoStandardTransitionType::DoublefanFoh,
|
||||||
|
221 => VideoStandardTransitionType::SinglesweepCwt,
|
||||||
|
222 => VideoStandardTransitionType::SinglesweepCwr,
|
||||||
|
223 => VideoStandardTransitionType::SinglesweepCwb,
|
||||||
|
224 => VideoStandardTransitionType::SinglesweepCwl,
|
||||||
|
225 => VideoStandardTransitionType::DoublesweepPv,
|
||||||
|
226 => VideoStandardTransitionType::DoublesweepPd,
|
||||||
|
227 => VideoStandardTransitionType::DoublesweepOv,
|
||||||
|
228 => VideoStandardTransitionType::DoublesweepOh,
|
||||||
|
231 => VideoStandardTransitionType::FanT,
|
||||||
|
232 => VideoStandardTransitionType::FanR,
|
||||||
|
233 => VideoStandardTransitionType::FanB,
|
||||||
|
234 => VideoStandardTransitionType::FanL,
|
||||||
|
235 => VideoStandardTransitionType::DoublefanFiv,
|
||||||
|
236 => VideoStandardTransitionType::DoublefanFih,
|
||||||
|
241 => VideoStandardTransitionType::SinglesweepCwtl,
|
||||||
|
242 => VideoStandardTransitionType::SinglesweepCwbl,
|
||||||
|
243 => VideoStandardTransitionType::SinglesweepCwbr,
|
||||||
|
244 => VideoStandardTransitionType::SinglesweepCwtr,
|
||||||
|
245 => VideoStandardTransitionType::DoublesweepPdtl,
|
||||||
|
246 => VideoStandardTransitionType::DoublesweepPdbl,
|
||||||
|
251 => VideoStandardTransitionType::SaloondoorT,
|
||||||
|
252 => VideoStandardTransitionType::SaloondoorL,
|
||||||
|
253 => VideoStandardTransitionType::SaloondoorB,
|
||||||
|
254 => VideoStandardTransitionType::SaloondoorR,
|
||||||
|
261 => VideoStandardTransitionType::WindshieldR,
|
||||||
|
262 => VideoStandardTransitionType::WindshieldU,
|
||||||
|
263 => VideoStandardTransitionType::WindshieldV,
|
||||||
|
264 => VideoStandardTransitionType::WindshieldH,
|
||||||
|
512 => VideoStandardTransitionType::Crossfade,
|
||||||
|
value => VideoStandardTransitionType::__Unknown(value),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl StaticType for VideoStandardTransitionType {
|
||||||
|
fn static_type() -> Type {
|
||||||
|
unsafe { from_glib(ges_sys::ges_video_standard_transition_type_get_type()) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> FromValueOptional<'a> for VideoStandardTransitionType {
|
||||||
|
unsafe fn from_value_optional(value: &Value) -> Option<Self> {
|
||||||
|
Some(FromValue::from_value(value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> FromValue<'a> for VideoStandardTransitionType {
|
||||||
|
unsafe fn from_value(value: &Value) -> Self {
|
||||||
|
from_glib(gobject_sys::g_value_get_enum(value.to_glib_none().0))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SetValue for VideoStandardTransitionType {
|
||||||
|
unsafe fn set_value(value: &mut Value, this: &Self) {
|
||||||
|
gobject_sys::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -10,6 +10,11 @@ mod base_effect;
|
||||||
pub use self::base_effect::BaseEffectExt;
|
pub use self::base_effect::BaseEffectExt;
|
||||||
pub use self::base_effect::{BaseEffect, BaseEffectClass, NONE_BASE_EFFECT};
|
pub use self::base_effect::{BaseEffect, BaseEffectClass, NONE_BASE_EFFECT};
|
||||||
|
|
||||||
|
mod base_transition_clip;
|
||||||
|
pub use self::base_transition_clip::{
|
||||||
|
BaseTransitionClip, BaseTransitionClipClass, NONE_BASE_TRANSITION_CLIP,
|
||||||
|
};
|
||||||
|
|
||||||
mod clip;
|
mod clip;
|
||||||
pub use self::clip::ClipExt;
|
pub use self::clip::ClipExt;
|
||||||
pub use self::clip::{Clip, ClipClass, NONE_CLIP};
|
pub use self::clip::{Clip, ClipClass, NONE_CLIP};
|
||||||
|
@ -34,6 +39,9 @@ mod layer;
|
||||||
pub use self::layer::LayerExt;
|
pub use self::layer::LayerExt;
|
||||||
pub use self::layer::{Layer, LayerClass, NONE_LAYER};
|
pub use self::layer::{Layer, LayerClass, NONE_LAYER};
|
||||||
|
|
||||||
|
mod operation_clip;
|
||||||
|
pub use self::operation_clip::{OperationClip, OperationClipClass, NONE_OPERATION_CLIP};
|
||||||
|
|
||||||
mod pipeline;
|
mod pipeline;
|
||||||
pub use self::pipeline::GESPipelineExt;
|
pub use self::pipeline::GESPipelineExt;
|
||||||
pub use self::pipeline::{Pipeline, PipelineClass, NONE_PIPELINE};
|
pub use self::pipeline::{Pipeline, PipelineClass, NONE_PIPELINE};
|
||||||
|
@ -58,6 +66,10 @@ mod track_element;
|
||||||
pub use self::track_element::TrackElementExt;
|
pub use self::track_element::TrackElementExt;
|
||||||
pub use self::track_element::{TrackElement, TrackElementClass, NONE_TRACK_ELEMENT};
|
pub use self::track_element::{TrackElement, TrackElementClass, NONE_TRACK_ELEMENT};
|
||||||
|
|
||||||
|
mod transition_clip;
|
||||||
|
pub use self::transition_clip::TransitionClipExt;
|
||||||
|
pub use self::transition_clip::{TransitionClip, TransitionClipClass, NONE_TRANSITION_CLIP};
|
||||||
|
|
||||||
mod uri_clip;
|
mod uri_clip;
|
||||||
pub use self::uri_clip::UriClipExt;
|
pub use self::uri_clip::UriClipExt;
|
||||||
pub use self::uri_clip::{UriClip, UriClipClass, NONE_URI_CLIP};
|
pub use self::uri_clip::{UriClip, UriClipClass, NONE_URI_CLIP};
|
||||||
|
@ -73,6 +85,7 @@ pub use self::uri_source_asset::{UriSourceAsset, UriSourceAssetClass, NONE_URI_S
|
||||||
mod enums;
|
mod enums;
|
||||||
pub use self::enums::Edge;
|
pub use self::enums::Edge;
|
||||||
pub use self::enums::EditMode;
|
pub use self::enums::EditMode;
|
||||||
|
pub use self::enums::VideoStandardTransitionType;
|
||||||
|
|
||||||
mod flags;
|
mod flags;
|
||||||
pub use self::flags::PipelineFlags;
|
pub use self::flags::PipelineFlags;
|
||||||
|
@ -97,6 +110,7 @@ pub mod traits {
|
||||||
pub use super::TimelineElementExt;
|
pub use super::TimelineElementExt;
|
||||||
pub use super::TimelineExt;
|
pub use super::TimelineExt;
|
||||||
pub use super::TrackElementExt;
|
pub use super::TrackElementExt;
|
||||||
|
pub use super::TransitionClipExt;
|
||||||
pub use super::UriClipAssetExt;
|
pub use super::UriClipAssetExt;
|
||||||
pub use super::UriClipExt;
|
pub use super::UriClipExt;
|
||||||
pub use super::UriSourceAssetExt;
|
pub use super::UriSourceAssetExt;
|
||||||
|
|
22
gstreamer-editing-services/src/auto/operation_clip.rs
Normal file
22
gstreamer-editing-services/src/auto/operation_clip.rs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
// This file was generated by gir (https://github.com/gtk-rs/gir)
|
||||||
|
// from gir-files (https://github.com/gtk-rs/gir-files)
|
||||||
|
// DO NOT EDIT
|
||||||
|
|
||||||
|
use ges_sys;
|
||||||
|
use glib::translate::*;
|
||||||
|
use Clip;
|
||||||
|
use Container;
|
||||||
|
use Extractable;
|
||||||
|
use TimelineElement;
|
||||||
|
|
||||||
|
glib_wrapper! {
|
||||||
|
pub struct OperationClip(Object<ges_sys::GESOperationClip, ges_sys::GESOperationClipClass, OperationClipClass>) @extends Clip, Container, TimelineElement, @implements Extractable;
|
||||||
|
|
||||||
|
match fn {
|
||||||
|
get_type => || ges_sys::ges_operation_clip_get_type(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl OperationClip {}
|
||||||
|
|
||||||
|
pub const NONE_OPERATION_CLIP: Option<&OperationClip> = None;
|
|
@ -15,6 +15,8 @@ use std::boxed::Box as Box_;
|
||||||
use std::mem::transmute;
|
use std::mem::transmute;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
use Asset;
|
use Asset;
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
use Clip;
|
||||||
use Extractable;
|
use Extractable;
|
||||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
use FrameNumber;
|
use FrameNumber;
|
||||||
|
@ -146,6 +148,12 @@ pub trait TimelineExt: 'static {
|
||||||
|
|
||||||
fn connect_layer_removed<F: Fn(&Self, &Layer) + 'static>(&self, f: F) -> SignalHandlerId;
|
fn connect_layer_removed<F: Fn(&Self, &Layer) + 'static>(&self, f: F) -> SignalHandlerId;
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn connect_select_element_track<F: Fn(&Self, &Clip, &TrackElement) -> Track + 'static>(
|
||||||
|
&self,
|
||||||
|
f: F,
|
||||||
|
) -> SignalHandlerId;
|
||||||
|
|
||||||
//fn connect_select_tracks_for_object<Unsupported or ignored types>(&self, f: F) -> SignalHandlerId;
|
//fn connect_select_tracks_for_object<Unsupported or ignored types>(&self, f: F) -> SignalHandlerId;
|
||||||
|
|
||||||
fn connect_snapping_ended<F: Fn(&Self, &TrackElement, &TrackElement, u64) + 'static>(
|
fn connect_snapping_ended<F: Fn(&Self, &TrackElement, &TrackElement, u64) + 'static>(
|
||||||
|
@ -495,7 +503,7 @@ impl<O: IsA<Timeline>> TimelineExt for O {
|
||||||
}
|
}
|
||||||
|
|
||||||
//fn connect_group_removed<Unsupported or ignored types>(&self, f: F) -> SignalHandlerId {
|
//fn connect_group_removed<Unsupported or ignored types>(&self, f: F) -> SignalHandlerId {
|
||||||
// Empty ctype children: *.PtrArray TypeId { ns_id: 1, id: 53 }
|
// Empty ctype children: *.PtrArray TypeId { ns_id: 1, id: 54 }
|
||||||
//}
|
//}
|
||||||
|
|
||||||
fn connect_layer_added<F: Fn(&Self, &Layer) + 'static>(&self, f: F) -> SignalHandlerId {
|
fn connect_layer_added<F: Fn(&Self, &Layer) + 'static>(&self, f: F) -> SignalHandlerId {
|
||||||
|
@ -552,6 +560,44 @@ impl<O: IsA<Timeline>> TimelineExt for O {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||||
|
fn connect_select_element_track<F: Fn(&Self, &Clip, &TrackElement) -> Track + 'static>(
|
||||||
|
&self,
|
||||||
|
f: F,
|
||||||
|
) -> SignalHandlerId {
|
||||||
|
unsafe extern "C" fn select_element_track_trampoline<
|
||||||
|
P,
|
||||||
|
F: Fn(&P, &Clip, &TrackElement) -> Track + 'static,
|
||||||
|
>(
|
||||||
|
this: *mut ges_sys::GESTimeline,
|
||||||
|
clip: *mut ges_sys::GESClip,
|
||||||
|
track_element: *mut ges_sys::GESTrackElement,
|
||||||
|
f: glib_sys::gpointer,
|
||||||
|
) -> *mut ges_sys::GESTrack
|
||||||
|
where
|
||||||
|
P: IsA<Timeline>,
|
||||||
|
{
|
||||||
|
let f: &F = &*(f as *const F);
|
||||||
|
f(
|
||||||
|
&Timeline::from_glib_borrow(this).unsafe_cast_ref(),
|
||||||
|
&from_glib_borrow(clip),
|
||||||
|
&from_glib_borrow(track_element),
|
||||||
|
)
|
||||||
|
.to_glib_full()
|
||||||
|
}
|
||||||
|
unsafe {
|
||||||
|
let f: Box_<F> = Box_::new(f);
|
||||||
|
connect_raw(
|
||||||
|
self.as_ptr() as *mut _,
|
||||||
|
b"select-element-track\0".as_ptr() as *const _,
|
||||||
|
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||||
|
select_element_track_trampoline::<Self, F> as *const (),
|
||||||
|
)),
|
||||||
|
Box_::into_raw(f),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//fn connect_select_tracks_for_object<Unsupported or ignored types>(&self, f: F) -> SignalHandlerId {
|
//fn connect_select_tracks_for_object<Unsupported or ignored types>(&self, f: F) -> SignalHandlerId {
|
||||||
// Empty ctype return value *.PtrArray TypeId { ns_id: 1, id: 17 }
|
// Empty ctype return value *.PtrArray TypeId { ns_id: 1, id: 17 }
|
||||||
//}
|
//}
|
||||||
|
|
109
gstreamer-editing-services/src/auto/transition_clip.rs
Normal file
109
gstreamer-editing-services/src/auto/transition_clip.rs
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
// This file was generated by gir (https://github.com/gtk-rs/gir)
|
||||||
|
// from gir-files (https://github.com/gtk-rs/gir-files)
|
||||||
|
// DO NOT EDIT
|
||||||
|
|
||||||
|
use ges_sys;
|
||||||
|
use glib::object::Cast;
|
||||||
|
use glib::object::IsA;
|
||||||
|
use glib::signal::connect_raw;
|
||||||
|
use glib::signal::SignalHandlerId;
|
||||||
|
use glib::translate::*;
|
||||||
|
use glib::StaticType;
|
||||||
|
use glib::Value;
|
||||||
|
use glib_sys;
|
||||||
|
use gobject_sys;
|
||||||
|
use std::boxed::Box as Box_;
|
||||||
|
use std::mem::transmute;
|
||||||
|
use BaseTransitionClip;
|
||||||
|
use Clip;
|
||||||
|
use Container;
|
||||||
|
use Extractable;
|
||||||
|
use OperationClip;
|
||||||
|
use TimelineElement;
|
||||||
|
use VideoStandardTransitionType;
|
||||||
|
|
||||||
|
glib_wrapper! {
|
||||||
|
pub struct TransitionClip(Object<ges_sys::GESTransitionClip, ges_sys::GESTransitionClipClass, TransitionClipClass>) @extends BaseTransitionClip, OperationClip, Clip, Container, TimelineElement, @implements Extractable;
|
||||||
|
|
||||||
|
match fn {
|
||||||
|
get_type => || ges_sys::ges_transition_clip_get_type(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TransitionClip {
|
||||||
|
pub fn new(vtype: VideoStandardTransitionType) -> Option<TransitionClip> {
|
||||||
|
assert_initialized_main_thread!();
|
||||||
|
unsafe { from_glib_none(ges_sys::ges_transition_clip_new(vtype.to_glib())) }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn new_for_nick(nick: &str) -> Option<TransitionClip> {
|
||||||
|
assert_initialized_main_thread!();
|
||||||
|
unsafe {
|
||||||
|
from_glib_none(ges_sys::ges_transition_clip_new_for_nick(
|
||||||
|
nick.to_glib_none().0,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const NONE_TRANSITION_CLIP: Option<&TransitionClip> = None;
|
||||||
|
|
||||||
|
pub trait TransitionClipExt: 'static {
|
||||||
|
fn get_property_vtype(&self) -> VideoStandardTransitionType;
|
||||||
|
|
||||||
|
fn set_property_vtype(&self, vtype: VideoStandardTransitionType);
|
||||||
|
|
||||||
|
fn connect_property_vtype_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<O: IsA<TransitionClip>> TransitionClipExt for O {
|
||||||
|
fn get_property_vtype(&self) -> VideoStandardTransitionType {
|
||||||
|
unsafe {
|
||||||
|
let mut value =
|
||||||
|
Value::from_type(<VideoStandardTransitionType as StaticType>::static_type());
|
||||||
|
gobject_sys::g_object_get_property(
|
||||||
|
self.to_glib_none().0 as *mut gobject_sys::GObject,
|
||||||
|
b"vtype\0".as_ptr() as *const _,
|
||||||
|
value.to_glib_none_mut().0,
|
||||||
|
);
|
||||||
|
value
|
||||||
|
.get()
|
||||||
|
.expect("Return Value for property `vtype` getter")
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_property_vtype(&self, vtype: VideoStandardTransitionType) {
|
||||||
|
unsafe {
|
||||||
|
gobject_sys::g_object_set_property(
|
||||||
|
self.to_glib_none().0 as *mut gobject_sys::GObject,
|
||||||
|
b"vtype\0".as_ptr() as *const _,
|
||||||
|
Value::from(&vtype).to_glib_none().0,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn connect_property_vtype_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
|
||||||
|
unsafe extern "C" fn notify_vtype_trampoline<P, F: Fn(&P) + 'static>(
|
||||||
|
this: *mut ges_sys::GESTransitionClip,
|
||||||
|
_param_spec: glib_sys::gpointer,
|
||||||
|
f: glib_sys::gpointer,
|
||||||
|
) where
|
||||||
|
P: IsA<TransitionClip>,
|
||||||
|
{
|
||||||
|
let f: &F = &*(f as *const F);
|
||||||
|
f(&TransitionClip::from_glib_borrow(this).unsafe_cast_ref())
|
||||||
|
}
|
||||||
|
unsafe {
|
||||||
|
let f: Box_<F> = Box_::new(f);
|
||||||
|
connect_raw(
|
||||||
|
self.as_ptr() as *mut _,
|
||||||
|
b"notify::vtype\0".as_ptr() as *const _,
|
||||||
|
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||||
|
notify_vtype_trampoline::<Self, F> as *const (),
|
||||||
|
)),
|
||||||
|
Box_::into_raw(f),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,2 +1,2 @@
|
||||||
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
||||||
from gir-files (https://github.com/gtk-rs/gir-files @ 2d4abeba)
|
from gir-files (https://github.com/gtk-rs/gir-files @ 8f334830)
|
||||||
|
|
|
@ -5,6 +5,195 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||||
|
|
||||||
|
## [0.16.7] - 2021-02-13
|
||||||
|
### Fixed
|
||||||
|
- Usage of the logging system with a GStreamer library with the logging system
|
||||||
|
compiled out does not crash any longer.
|
||||||
|
- Double-free in `gst_video::VideoTimeCode` API when converting between
|
||||||
|
validated and unvalidated timecodes.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::Element::get_current_state()` and `get_pending_state()` convenience APIs.
|
||||||
|
- `gst_audio::AudioConverterConfig` for setting the configuration on e.g. the
|
||||||
|
`audiomixer` element. The low-level `AudioConverter` API is still not
|
||||||
|
included in the bindings.
|
||||||
|
|
||||||
|
## [0.16.6] - 2020-12-20
|
||||||
|
### Fixed
|
||||||
|
- `VideoTimeCodeInterval`'s `Ord` and `PartialEq` implementations compare
|
||||||
|
against the correct fields now.
|
||||||
|
- `SDPMessage::medias_mut()` iterator does not crash any longer.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `PartialEq` and `Eq` implementations on `VideoAlignment`.
|
||||||
|
- Alignment API for `VideoMeta` and `get_plane_height()` / `get_plane_size()`.
|
||||||
|
- `VideoInfo::align_full()`.
|
||||||
|
|
||||||
|
## [0.16.5] - 2020-11-23
|
||||||
|
### Fixed
|
||||||
|
- Make sure to use `$crate` in more macros to allow them to work without
|
||||||
|
anything special in scope already.
|
||||||
|
- Update documentation location.
|
||||||
|
- Don't panic if C code stores invalid seqnums in events and the seqnum is
|
||||||
|
used directly or via the `Display` impl.
|
||||||
|
- Fix docs build for some crates on docs.rs.
|
||||||
|
- Fix `Debug` impl for `gst_video::VideoTimeCode` to print the correct type
|
||||||
|
name.
|
||||||
|
- Fix plugin version to be 1.18 instead of 1.17 when compiling a plugin with
|
||||||
|
`v1_18`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Event handling support in pad probes, that is returning
|
||||||
|
`PadProbeReturn::Handled` for events.
|
||||||
|
- `EventRef::get_structure_mut()` getter that allows changing the events'
|
||||||
|
structures.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Remove unnecessary `PhantomData` markers and use `repr(transparent)` instead
|
||||||
|
of `repr(C)` where it is more correct.
|
||||||
|
|
||||||
|
## [0.16.4] - 2020-10-09
|
||||||
|
### Fixed
|
||||||
|
- Correctly implement `ExactSizeIterator` on the `AudioFormat` and
|
||||||
|
`VideoFormat` iterators. Previously they returned the overall size instead
|
||||||
|
of the remaining size, and they didn't implement `Iterator::size_hint()`.
|
||||||
|
- Don't implement `ExactSizeIterator` on the buffer `gst::Meta` iterator. The
|
||||||
|
overall length is not known easily and the implementation would've simply
|
||||||
|
panicked in the past.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::ClockID::wait_async_stream()` for async integration for clock waiting.
|
||||||
|
- `From` / `TryFrom` impls for converting between `gst::ClockTime` and
|
||||||
|
`std::time::Duration`.
|
||||||
|
|
||||||
|
## [0.16.3] - 2020-09-08
|
||||||
|
### Fixed
|
||||||
|
- Reset vfuncs if calling `BaseTransformClass::configure()` multiple times.
|
||||||
|
- Fix `gst::debug_remove_default_log_function()` to actually remove the
|
||||||
|
default log function.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Some more new APIs added in 1.18.
|
||||||
|
- API for getting an owned buffer from a readable `gst_video::VideoFrame` /
|
||||||
|
`VideoFrameRef`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Updated bindings to 1.18.0. This stabilized GStreamer 1.18 support and any
|
||||||
|
API behind the "v1_18" feature is considered stable now.
|
||||||
|
- Factor out some common code from `gst::Pad::ProbeInfo` code. This reduces
|
||||||
|
the code generated for each pad probe considerably.
|
||||||
|
- Update paste dependency to 1.0 and pretty-hex to 0.2.
|
||||||
|
|
||||||
|
## [0.16.2] - 2020-07-27
|
||||||
|
### Fixed
|
||||||
|
- Use correct pointer for the plane data in `gst_audio::AudioBuffer`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add `gst::GhostPad` convenience constructors that take a target pad, similar
|
||||||
|
to the ones that existed in 0.15 and before.
|
||||||
|
- Add `gst::parse_bin_from_description_with_name` that allows setting a name
|
||||||
|
for the created bin without having to use unsafe code in application code.
|
||||||
|
|
||||||
|
## [0.16.1] - 2020-07-10
|
||||||
|
### Fixed
|
||||||
|
- Allow calling `gst::DebugCategory::new()` before `gst::init()` again.
|
||||||
|
|
||||||
|
## [0.16.0] - 2020-07-06
|
||||||
|
### Added
|
||||||
|
- Updated bindings to 1.17.2, adding experimental 1.18 support. This can be
|
||||||
|
opted-in via the "v1_18" feature flag but there might still be API changes
|
||||||
|
in the newly added API.
|
||||||
|
- `gst::MemoryRef::dump()` for dumping contents of a memory.
|
||||||
|
- `gst::Bus::stream()` instead of a custom constructor on the `BusStream`.
|
||||||
|
- Use more accurate types for `Seqnum`, `GroupId` and `MetaSeqnum`. These are
|
||||||
|
now proper wrapper types instead of plain integers, which makes mis-use
|
||||||
|
harder.
|
||||||
|
- Provide `TryFrom` impls for conversion between `glib::DateTime` and
|
||||||
|
`gst::DateTime`.
|
||||||
|
- Add `get_allocator()` functions to `gst_base::{Aggregator, BaseTransform,
|
||||||
|
BaseSrc}`, and allow overriding `BaseSrc::alloc()`.
|
||||||
|
- Add subclassing bindings for `gst_base::PushSrc`.
|
||||||
|
- Add new `gst::BufferCursor` API that allows to handle a buffer as `Read`,
|
||||||
|
`Write` and `Seek` and accesses the underlying memories of the buffer
|
||||||
|
individually without mapping them all together.
|
||||||
|
- Add `gst::Plugin::get_plugin_name()`.
|
||||||
|
- Support for `gst_video::VideoAFDMeta` and `VideoBarMeta`.
|
||||||
|
- API for getting all / iterating over all `gst_audio::AudioFormat` and
|
||||||
|
`gst_video::VideoFormat`.
|
||||||
|
- Bindings and subclassing bindings for `gst_video::VideoSink`.
|
||||||
|
- `gst::Pad` can be constructed via the builder pattern and `gst::PadBuilder`
|
||||||
|
now, which allows to safely set the pad functions and various other fields
|
||||||
|
during construction. The `PadBuilder` works on any `gst::Pad` subclass and
|
||||||
|
also has special support for `GhostPad`s by allowing to set pad functions of
|
||||||
|
the proxy pad.
|
||||||
|
- `gst::Message`, `gst::Event` and `gst::Query` type constructors are now on
|
||||||
|
the specific target type instead of various `new_XXX()` functions on the
|
||||||
|
basic type. E.g. `gst::message::Eos::new()`.
|
||||||
|
- Support for overriding `gst_audio::AudioSrc/Sink::reset()`.
|
||||||
|
- Support for overriding `gst_base::BaseParse::stop()`.
|
||||||
|
- Support for overriding `gst::Element::post_message()`.
|
||||||
|
- Added bindings for `gst::BufferList::foreach()` and `foreach_mut()`.
|
||||||
|
- Added bindings for `gst::Buffer::foreach_meta()` and `foreach_meta_mut()`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Allow using any `glib::Object` as target object for logging instead of just
|
||||||
|
`gst::Object`.
|
||||||
|
- Remove restriction API from `gst_pbutils::EncodingContainerProfile`. They
|
||||||
|
are supposed to be used only with the other encoding profiles.
|
||||||
|
- Return `&'static str` for various `gst::StructureRef` functions where the
|
||||||
|
string is backed by a `glib::Quark`.
|
||||||
|
- Fix various `gst::DateTime` functions to actually return `Option`s.
|
||||||
|
- Add support for filling in a buffer passed to the `gst::Pad` getrange
|
||||||
|
function, allow passing one in into `get_range()` and `pull_range()` and
|
||||||
|
provide the corresponding API on `gst_base::BaseSrc` too.
|
||||||
|
- Allocator in audio/video `Decoder` base classes is optional and can return
|
||||||
|
`None`.
|
||||||
|
- `gst_video::ValidVideoTimeCode::add_interval()` always returns a valid
|
||||||
|
timecode again.
|
||||||
|
- Allow resolving a `gst::Promise` with `None` and also handle that correctly
|
||||||
|
in the callback. This is allowed by the API.
|
||||||
|
- Allow calling various debugging related functions before `gst::init()`.
|
||||||
|
- Various enum/function versions were fixed to only show up if the
|
||||||
|
corresponding version feature is enabled.
|
||||||
|
- `gst::Pad` function setters are marked unsafe now as changing the functions
|
||||||
|
is not thread-safe.
|
||||||
|
- Remove `gst::Object::set_name()` as changing the name after construction
|
||||||
|
generally causes problems and is potentially unsafe.
|
||||||
|
- Remove `gst::Pad::set_pad_template()` as changing the pad template after
|
||||||
|
construction is generally unsafe.
|
||||||
|
- `gst::Pad::stream_lock()` borrows the pad now instead of taking a new
|
||||||
|
reference.
|
||||||
|
- Unimplemented `Jitter` and `Buffer` queries were removed from the bindings.
|
||||||
|
These are not implemented in C and only have a type registered.
|
||||||
|
- Various `LAST`, `NONE` variants of enums and flags were removed as these
|
||||||
|
only make sense in C.
|
||||||
|
- Call the parent impl of various vfuncs that were omitted before to not
|
||||||
|
require further subclasses of them to implement them but automatically call
|
||||||
|
the parent ones.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Use `NonZeroU64/U32` for various ID types to allow further optimizations.
|
||||||
|
- Use `thiserror` crate for deriving error types.
|
||||||
|
- Switch from `lazy_static` to `once_cell`.
|
||||||
|
- Change various miniobject functions like `gst::Caps::append()` from taking
|
||||||
|
the object by value to modifying it internally. This makes them easier to
|
||||||
|
use and only applies to functions that are defined on the non-reference type
|
||||||
|
and take ownership of the values passed in.
|
||||||
|
- Use `mem::ManuallyDrop` instead of `mem::forget()` everywhere.
|
||||||
|
- Replace most `mem::transmute()` calls with safer alternatives.
|
||||||
|
- `gst:StreamCollection` API was changed to the builder pattern for
|
||||||
|
construction as the collection must not be changed after construction.
|
||||||
|
- `gst::ProxyPad` default functions are plain functions on `ProxyPad` now
|
||||||
|
instead of trait functions to allow easier usage of them.
|
||||||
|
- Use proper error types in various `TryFrom` impls.
|
||||||
|
- `gst_video::VideoMeta::add()` returns a `Result` now instead of panicking.
|
||||||
|
- Various constructors were renamed from `new_with_XXX()` and `new_from_XXX()`
|
||||||
|
to the more idiomatic `with_XXX()` and `from_XXX()`.
|
||||||
|
- Miniobject bindings are simplified now and there is no `gst::GstRc` type
|
||||||
|
anymore, instead everything is directly implemented on the concrete types.
|
||||||
|
As part of this the `gst::MiniObject` trait was also removed as it was
|
||||||
|
unneeded now.
|
||||||
|
|
||||||
## [0.15.7] - 2020-06-08
|
## [0.15.7] - 2020-06-08
|
||||||
### Fixed
|
### Fixed
|
||||||
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
||||||
|
@ -746,7 +935,14 @@ specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-v
|
||||||
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
||||||
The API of the two is incompatible.
|
The API of the two is incompatible.
|
||||||
|
|
||||||
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...HEAD
|
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.6...HEAD
|
||||||
|
[0.16.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.5...0.16.6
|
||||||
|
[0.16.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.4...0.16.5
|
||||||
|
[0.16.4]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.3...0.16.4
|
||||||
|
[0.16.3]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.2...0.16.3
|
||||||
|
[0.16.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.1...0.16.2
|
||||||
|
[0.16.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.0...0.16.1
|
||||||
|
[0.16.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...0.16.0
|
||||||
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
||||||
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
||||||
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "gstreamer-gl"
|
name = "gstreamer-gl"
|
||||||
version = "0.16.0"
|
version = "0.16.7"
|
||||||
authors = ["Sebastian Dröge <sebastian@centricular.com>",
|
authors = ["Sebastian Dröge <sebastian@centricular.com>",
|
||||||
"Víctor M. Jáquez L. <vjaquez@igalia.com>"]
|
"Víctor M. Jáquez L. <vjaquez@igalia.com>"]
|
||||||
categories = ["api-bindings", "multimedia"]
|
categories = ["api-bindings", "multimedia"]
|
||||||
|
@ -18,22 +18,22 @@ bitflags = "1.0"
|
||||||
byteorder = "1"
|
byteorder = "1"
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
once_cell = "1.0"
|
once_cell = "1.0"
|
||||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
glib-sys = "0.10"
|
||||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
gobject-sys = "0.10"
|
||||||
gstreamer-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_14"] }
|
gstreamer-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_14"] }
|
||||||
gstreamer-video-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_14"] }
|
gstreamer-video-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_14"] }
|
||||||
gstreamer-gl-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys" }
|
gstreamer-gl-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9" }
|
||||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
glib = "0.10"
|
||||||
gstreamer = { path = "../gstreamer", features = ["v1_14"] }
|
gstreamer = { version = "0.16", path = "../gstreamer", features = ["v1_14"] }
|
||||||
gstreamer-base = { path = "../gstreamer-base", features = ["v1_14"] }
|
gstreamer-base = { version = "0.16", path = "../gstreamer-base", features = ["v1_14"] }
|
||||||
gstreamer-video = { path = "../gstreamer-video", features = ["v1_14"] }
|
gstreamer-video = { version = "0.16", path = "../gstreamer-video", features = ["v1_14"] }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
gstreamer-rs-lgpl-docs = { path = "../docs", optional = true }
|
gstreamer-rs-lgpl-docs = { version = "0.16", path = "../docs", optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
dox = ["v1_18", "gstreamer-gl-sys/dox", "glib/dox", "gstreamer/dox", "gstreamer-base/dox"]
|
dox = ["v1_18", "gstreamer-gl-sys/dox", "glib/dox", "gstreamer/dox", "gstreamer-base/dox", "gstreamer-video/dox"]
|
||||||
egl = ["gstreamer-gl-sys/egl"]
|
egl = ["gstreamer-gl-sys/egl"]
|
||||||
x11 = ["gstreamer-gl-sys/x11"]
|
x11 = ["gstreamer-gl-sys/x11"]
|
||||||
wayland = ["gstreamer-gl-sys/wayland"]
|
wayland = ["gstreamer-gl-sys/wayland"]
|
||||||
|
|
|
@ -128,7 +128,7 @@ $ export PKG_CONFIG_PATH="c:\\gstreamer\\1.0\\x86_64\\lib\\pkgconfig${PKG_CONFIG
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
The API reference can be found
|
The API reference can be found
|
||||||
[here](https://slomo.pages.freedesktop.org/rustdocs/gstreamer/gstreamer/), however it is
|
[here](https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer/index.html), however it is
|
||||||
only the Rust API reference and does not explain any of the concepts.
|
only the Rust API reference and does not explain any of the concepts.
|
||||||
|
|
||||||
For getting started with GStreamer development, the best would be to follow
|
For getting started with GStreamer development, the best would be to follow
|
||||||
|
|
|
@ -57,9 +57,6 @@ pub trait GLDisplayExt: 'static {
|
||||||
|
|
||||||
fn filter_gl_api(&self, gl_api: GLAPI);
|
fn filter_gl_api(&self, gl_api: GLAPI);
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
|
||||||
fn get_foreign_display(&self) -> bool;
|
|
||||||
|
|
||||||
fn get_gl_api(&self) -> GLAPI;
|
fn get_gl_api(&self) -> GLAPI;
|
||||||
|
|
||||||
fn get_gl_api_unlocked(&self) -> GLAPI;
|
fn get_gl_api_unlocked(&self) -> GLAPI;
|
||||||
|
@ -132,15 +129,6 @@ impl<O: IsA<GLDisplay>> GLDisplayExt for O {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
|
||||||
fn get_foreign_display(&self) -> bool {
|
|
||||||
unsafe {
|
|
||||||
from_glib(gst_gl_sys::gst_gl_display_get_foreign_display(
|
|
||||||
self.as_ref().to_glib_none().0,
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_gl_api(&self) -> GLAPI {
|
fn get_gl_api(&self) -> GLAPI {
|
||||||
unsafe {
|
unsafe {
|
||||||
from_glib(gst_gl_sys::gst_gl_display_get_gl_api(
|
from_glib(gst_gl_sys::gst_gl_display_get_gl_api(
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
// from gir-files (https://github.com/gtk-rs/gir-files)
|
// from gir-files (https://github.com/gtk-rs/gir-files)
|
||||||
// DO NOT EDIT
|
// DO NOT EDIT
|
||||||
|
|
||||||
|
use glib::object::IsA;
|
||||||
use glib::translate::*;
|
use glib::translate::*;
|
||||||
use gst;
|
use gst;
|
||||||
use gst_gl_sys;
|
use gst_gl_sys;
|
||||||
|
@ -25,6 +26,15 @@ impl GLDisplayEGL {
|
||||||
// unsafe { TODO: call gst_gl_sys:gst_gl_display_egl_new_with_egl_display() }
|
// unsafe { TODO: call gst_gl_sys:gst_gl_display_egl_new_with_egl_display() }
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
pub fn from_gl_display<P: IsA<GLDisplay>>(display: &P) -> Option<GLDisplayEGL> {
|
||||||
|
skip_assert_initialized!();
|
||||||
|
unsafe {
|
||||||
|
from_glib_full(gst_gl_sys::gst_gl_display_egl_from_gl_display(
|
||||||
|
display.as_ref().to_glib_none().0,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//pub fn get_from_native(type_: GLDisplayType, display: /*Unimplemented*/Fundamental: UIntPtr) -> /*Unimplemented*/Option<Fundamental: Pointer> {
|
//pub fn get_from_native(type_: GLDisplayType, display: /*Unimplemented*/Fundamental: UIntPtr) -> /*Unimplemented*/Option<Fundamental: Pointer> {
|
||||||
// unsafe { TODO: call gst_gl_sys:gst_gl_display_egl_get_from_native() }
|
// unsafe { TODO: call gst_gl_sys:gst_gl_display_egl_get_from_native() }
|
||||||
//}
|
//}
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
||||||
from gir-files (https://github.com/gtk-rs/gir-files @ 2d4abeba)
|
from gir-files (https://github.com/gtk-rs/gir-files @ 8f334830)
|
||||||
|
|
|
@ -8,7 +8,7 @@ use gst_gl_sys;
|
||||||
|
|
||||||
use GLContext;
|
use GLContext;
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(transparent)]
|
||||||
pub struct GLSyncMeta(gst_gl_sys::GstGLSyncMeta);
|
pub struct GLSyncMeta(gst_gl_sys::GstGLSyncMeta);
|
||||||
|
|
||||||
unsafe impl Send for GLSyncMeta {}
|
unsafe impl Send for GLSyncMeta {}
|
||||||
|
|
|
@ -5,6 +5,195 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||||
|
|
||||||
|
## [0.16.7] - 2021-02-13
|
||||||
|
### Fixed
|
||||||
|
- Usage of the logging system with a GStreamer library with the logging system
|
||||||
|
compiled out does not crash any longer.
|
||||||
|
- Double-free in `gst_video::VideoTimeCode` API when converting between
|
||||||
|
validated and unvalidated timecodes.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::Element::get_current_state()` and `get_pending_state()` convenience APIs.
|
||||||
|
- `gst_audio::AudioConverterConfig` for setting the configuration on e.g. the
|
||||||
|
`audiomixer` element. The low-level `AudioConverter` API is still not
|
||||||
|
included in the bindings.
|
||||||
|
|
||||||
|
## [0.16.6] - 2020-12-20
|
||||||
|
### Fixed
|
||||||
|
- `VideoTimeCodeInterval`'s `Ord` and `PartialEq` implementations compare
|
||||||
|
against the correct fields now.
|
||||||
|
- `SDPMessage::medias_mut()` iterator does not crash any longer.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `PartialEq` and `Eq` implementations on `VideoAlignment`.
|
||||||
|
- Alignment API for `VideoMeta` and `get_plane_height()` / `get_plane_size()`.
|
||||||
|
- `VideoInfo::align_full()`.
|
||||||
|
|
||||||
|
## [0.16.5] - 2020-11-23
|
||||||
|
### Fixed
|
||||||
|
- Make sure to use `$crate` in more macros to allow them to work without
|
||||||
|
anything special in scope already.
|
||||||
|
- Update documentation location.
|
||||||
|
- Don't panic if C code stores invalid seqnums in events and the seqnum is
|
||||||
|
used directly or via the `Display` impl.
|
||||||
|
- Fix docs build for some crates on docs.rs.
|
||||||
|
- Fix `Debug` impl for `gst_video::VideoTimeCode` to print the correct type
|
||||||
|
name.
|
||||||
|
- Fix plugin version to be 1.18 instead of 1.17 when compiling a plugin with
|
||||||
|
`v1_18`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Event handling support in pad probes, that is returning
|
||||||
|
`PadProbeReturn::Handled` for events.
|
||||||
|
- `EventRef::get_structure_mut()` getter that allows changing the events'
|
||||||
|
structures.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Remove unnecessary `PhantomData` markers and use `repr(transparent)` instead
|
||||||
|
of `repr(C)` where it is more correct.
|
||||||
|
|
||||||
|
## [0.16.4] - 2020-10-09
|
||||||
|
### Fixed
|
||||||
|
- Correctly implement `ExactSizeIterator` on the `AudioFormat` and
|
||||||
|
`VideoFormat` iterators. Previously they returned the overall size instead
|
||||||
|
of the remaining size, and they didn't implement `Iterator::size_hint()`.
|
||||||
|
- Don't implement `ExactSizeIterator` on the buffer `gst::Meta` iterator. The
|
||||||
|
overall length is not known easily and the implementation would've simply
|
||||||
|
panicked in the past.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::ClockID::wait_async_stream()` for async integration for clock waiting.
|
||||||
|
- `From` / `TryFrom` impls for converting between `gst::ClockTime` and
|
||||||
|
`std::time::Duration`.
|
||||||
|
|
||||||
|
## [0.16.3] - 2020-09-08
|
||||||
|
### Fixed
|
||||||
|
- Reset vfuncs if calling `BaseTransformClass::configure()` multiple times.
|
||||||
|
- Fix `gst::debug_remove_default_log_function()` to actually remove the
|
||||||
|
default log function.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Some more new APIs added in 1.18.
|
||||||
|
- API for getting an owned buffer from a readable `gst_video::VideoFrame` /
|
||||||
|
`VideoFrameRef`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Updated bindings to 1.18.0. This stabilized GStreamer 1.18 support and any
|
||||||
|
API behind the "v1_18" feature is considered stable now.
|
||||||
|
- Factor out some common code from `gst::Pad::ProbeInfo` code. This reduces
|
||||||
|
the code generated for each pad probe considerably.
|
||||||
|
- Update paste dependency to 1.0 and pretty-hex to 0.2.
|
||||||
|
|
||||||
|
## [0.16.2] - 2020-07-27
|
||||||
|
### Fixed
|
||||||
|
- Use correct pointer for the plane data in `gst_audio::AudioBuffer`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add `gst::GhostPad` convenience constructors that take a target pad, similar
|
||||||
|
to the ones that existed in 0.15 and before.
|
||||||
|
- Add `gst::parse_bin_from_description_with_name` that allows setting a name
|
||||||
|
for the created bin without having to use unsafe code in application code.
|
||||||
|
|
||||||
|
## [0.16.1] - 2020-07-10
|
||||||
|
### Fixed
|
||||||
|
- Allow calling `gst::DebugCategory::new()` before `gst::init()` again.
|
||||||
|
|
||||||
|
## [0.16.0] - 2020-07-06
|
||||||
|
### Added
|
||||||
|
- Updated bindings to 1.17.2, adding experimental 1.18 support. This can be
|
||||||
|
opted-in via the "v1_18" feature flag but there might still be API changes
|
||||||
|
in the newly added API.
|
||||||
|
- `gst::MemoryRef::dump()` for dumping contents of a memory.
|
||||||
|
- `gst::Bus::stream()` instead of a custom constructor on the `BusStream`.
|
||||||
|
- Use more accurate types for `Seqnum`, `GroupId` and `MetaSeqnum`. These are
|
||||||
|
now proper wrapper types instead of plain integers, which makes mis-use
|
||||||
|
harder.
|
||||||
|
- Provide `TryFrom` impls for conversion between `glib::DateTime` and
|
||||||
|
`gst::DateTime`.
|
||||||
|
- Add `get_allocator()` functions to `gst_base::{Aggregator, BaseTransform,
|
||||||
|
BaseSrc}`, and allow overriding `BaseSrc::alloc()`.
|
||||||
|
- Add subclassing bindings for `gst_base::PushSrc`.
|
||||||
|
- Add new `gst::BufferCursor` API that allows to handle a buffer as `Read`,
|
||||||
|
`Write` and `Seek` and accesses the underlying memories of the buffer
|
||||||
|
individually without mapping them all together.
|
||||||
|
- Add `gst::Plugin::get_plugin_name()`.
|
||||||
|
- Support for `gst_video::VideoAFDMeta` and `VideoBarMeta`.
|
||||||
|
- API for getting all / iterating over all `gst_audio::AudioFormat` and
|
||||||
|
`gst_video::VideoFormat`.
|
||||||
|
- Bindings and subclassing bindings for `gst_video::VideoSink`.
|
||||||
|
- `gst::Pad` can be constructed via the builder pattern and `gst::PadBuilder`
|
||||||
|
now, which allows to safely set the pad functions and various other fields
|
||||||
|
during construction. The `PadBuilder` works on any `gst::Pad` subclass and
|
||||||
|
also has special support for `GhostPad`s by allowing to set pad functions of
|
||||||
|
the proxy pad.
|
||||||
|
- `gst::Message`, `gst::Event` and `gst::Query` type constructors are now on
|
||||||
|
the specific target type instead of various `new_XXX()` functions on the
|
||||||
|
basic type. E.g. `gst::message::Eos::new()`.
|
||||||
|
- Support for overriding `gst_audio::AudioSrc/Sink::reset()`.
|
||||||
|
- Support for overriding `gst_base::BaseParse::stop()`.
|
||||||
|
- Support for overriding `gst::Element::post_message()`.
|
||||||
|
- Added bindings for `gst::BufferList::foreach()` and `foreach_mut()`.
|
||||||
|
- Added bindings for `gst::Buffer::foreach_meta()` and `foreach_meta_mut()`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Allow using any `glib::Object` as target object for logging instead of just
|
||||||
|
`gst::Object`.
|
||||||
|
- Remove restriction API from `gst_pbutils::EncodingContainerProfile`. They
|
||||||
|
are supposed to be used only with the other encoding profiles.
|
||||||
|
- Return `&'static str` for various `gst::StructureRef` functions where the
|
||||||
|
string is backed by a `glib::Quark`.
|
||||||
|
- Fix various `gst::DateTime` functions to actually return `Option`s.
|
||||||
|
- Add support for filling in a buffer passed to the `gst::Pad` getrange
|
||||||
|
function, allow passing one in into `get_range()` and `pull_range()` and
|
||||||
|
provide the corresponding API on `gst_base::BaseSrc` too.
|
||||||
|
- Allocator in audio/video `Decoder` base classes is optional and can return
|
||||||
|
`None`.
|
||||||
|
- `gst_video::ValidVideoTimeCode::add_interval()` always returns a valid
|
||||||
|
timecode again.
|
||||||
|
- Allow resolving a `gst::Promise` with `None` and also handle that correctly
|
||||||
|
in the callback. This is allowed by the API.
|
||||||
|
- Allow calling various debugging related functions before `gst::init()`.
|
||||||
|
- Various enum/function versions were fixed to only show up if the
|
||||||
|
corresponding version feature is enabled.
|
||||||
|
- `gst::Pad` function setters are marked unsafe now as changing the functions
|
||||||
|
is not thread-safe.
|
||||||
|
- Remove `gst::Object::set_name()` as changing the name after construction
|
||||||
|
generally causes problems and is potentially unsafe.
|
||||||
|
- Remove `gst::Pad::set_pad_template()` as changing the pad template after
|
||||||
|
construction is generally unsafe.
|
||||||
|
- `gst::Pad::stream_lock()` borrows the pad now instead of taking a new
|
||||||
|
reference.
|
||||||
|
- Unimplemented `Jitter` and `Buffer` queries were removed from the bindings.
|
||||||
|
These are not implemented in C and only have a type registered.
|
||||||
|
- Various `LAST`, `NONE` variants of enums and flags were removed as these
|
||||||
|
only make sense in C.
|
||||||
|
- Call the parent impl of various vfuncs that were omitted before to not
|
||||||
|
require further subclasses of them to implement them but automatically call
|
||||||
|
the parent ones.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Use `NonZeroU64/U32` for various ID types to allow further optimizations.
|
||||||
|
- Use `thiserror` crate for deriving error types.
|
||||||
|
- Switch from `lazy_static` to `once_cell`.
|
||||||
|
- Change various miniobject functions like `gst::Caps::append()` from taking
|
||||||
|
the object by value to modifying it internally. This makes them easier to
|
||||||
|
use and only applies to functions that are defined on the non-reference type
|
||||||
|
and take ownership of the values passed in.
|
||||||
|
- Use `mem::ManuallyDrop` instead of `mem::forget()` everywhere.
|
||||||
|
- Replace most `mem::transmute()` calls with safer alternatives.
|
||||||
|
- `gst:StreamCollection` API was changed to the builder pattern for
|
||||||
|
construction as the collection must not be changed after construction.
|
||||||
|
- `gst::ProxyPad` default functions are plain functions on `ProxyPad` now
|
||||||
|
instead of trait functions to allow easier usage of them.
|
||||||
|
- Use proper error types in various `TryFrom` impls.
|
||||||
|
- `gst_video::VideoMeta::add()` returns a `Result` now instead of panicking.
|
||||||
|
- Various constructors were renamed from `new_with_XXX()` and `new_from_XXX()`
|
||||||
|
to the more idiomatic `with_XXX()` and `from_XXX()`.
|
||||||
|
- Miniobject bindings are simplified now and there is no `gst::GstRc` type
|
||||||
|
anymore, instead everything is directly implemented on the concrete types.
|
||||||
|
As part of this the `gst::MiniObject` trait was also removed as it was
|
||||||
|
unneeded now.
|
||||||
|
|
||||||
## [0.15.7] - 2020-06-08
|
## [0.15.7] - 2020-06-08
|
||||||
### Fixed
|
### Fixed
|
||||||
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
||||||
|
@ -746,7 +935,14 @@ specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-v
|
||||||
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
||||||
The API of the two is incompatible.
|
The API of the two is incompatible.
|
||||||
|
|
||||||
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...HEAD
|
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.6...HEAD
|
||||||
|
[0.16.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.5...0.16.6
|
||||||
|
[0.16.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.4...0.16.5
|
||||||
|
[0.16.4]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.3...0.16.4
|
||||||
|
[0.16.3]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.2...0.16.3
|
||||||
|
[0.16.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.1...0.16.2
|
||||||
|
[0.16.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.0...0.16.1
|
||||||
|
[0.16.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...0.16.0
|
||||||
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
||||||
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
||||||
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "gstreamer-net"
|
name = "gstreamer-net"
|
||||||
version = "0.16.0"
|
version = "0.16.7"
|
||||||
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
||||||
categories = ["api-bindings", "multimedia"]
|
categories = ["api-bindings", "multimedia"]
|
||||||
description = "Rust bindings for GStreamer Net library"
|
description = "Rust bindings for GStreamer Net library"
|
||||||
|
@ -13,16 +13,16 @@ keywords = ["gstreamer", "multimedia", "audio", "video", "gnome"]
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
glib-sys = "0.10"
|
||||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
gobject-sys = "0.10"
|
||||||
gstreamer-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
gstreamer-net-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-net-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
glib = "0.10"
|
||||||
gstreamer = { path = "../gstreamer" }
|
gstreamer = { version = "0.16", path = "../gstreamer" }
|
||||||
gio = { git = "https://github.com/gtk-rs/gio" }
|
gio = "0.9"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
gstreamer-rs-lgpl-docs = { path = "../docs", optional = true }
|
gstreamer-rs-lgpl-docs = { version = "0.16", path = "../docs", optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
|
@ -33,7 +33,7 @@ v1_16 = ["gstreamer/v1_16", "gstreamer-net-sys/v1_16", "v1_14"]
|
||||||
v1_18 = ["gstreamer/v1_18", "gstreamer-net-sys/v1_18", "v1_16"]
|
v1_18 = ["gstreamer/v1_18", "gstreamer-net-sys/v1_18", "v1_16"]
|
||||||
embed-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
embed-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
||||||
purge-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
purge-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
||||||
dox = ["v1_18", "gstreamer-net-sys/dox", "glib/dox", "gstreamer/dox"]
|
dox = ["v1_18", "gstreamer-net-sys/dox", "glib/dox", "gio/dox", "gstreamer/dox"]
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
features = ["dox", "embed-lgpl-docs"]
|
features = ["dox", "embed-lgpl-docs"]
|
||||||
|
|
|
@ -140,7 +140,7 @@ $ export PKG_CONFIG_PATH="c:\\gstreamer\\1.0\\x86_64\\lib\\pkgconfig${PKG_CONFIG
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
The API reference can be found
|
The API reference can be found
|
||||||
[here](https://slomo.pages.freedesktop.org/rustdocs/gstreamer/gstreamer/), however it is
|
[here](https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer/index.html), however it is
|
||||||
only the Rust API reference and does not explain any of the concepts.
|
only the Rust API reference and does not explain any of the concepts.
|
||||||
|
|
||||||
For getting started with GStreamer development, the best would be to follow
|
For getting started with GStreamer development, the best would be to follow
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
// This file was generated by gir (https://github.com/gtk-rs/gir)
|
|
||||||
// from gir-files (https://github.com/gtk-rs/gir-files)
|
|
||||||
// DO NOT EDIT
|
|
||||||
|
|
||||||
use gst_net_sys;
|
|
||||||
use glib::translate::*;
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
// This file was generated by gir (https://github.com/gtk-rs/gir)
|
|
||||||
// from gir-files (https://github.com/gtk-rs/gir-files)
|
|
||||||
// DO NOT EDIT
|
|
||||||
|
|
||||||
use gst_net_sys;
|
|
||||||
use glib::translate::*;
|
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
||||||
from gir-files (https://github.com/gtk-rs/gir-files @ 2d4abeba)
|
from gir-files (https://github.com/gtk-rs/gir-files @ 8f334830)
|
||||||
|
|
|
@ -7,7 +7,7 @@ use gst;
|
||||||
use gst::prelude::*;
|
use gst::prelude::*;
|
||||||
use gst_net_sys;
|
use gst_net_sys;
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(transparent)]
|
||||||
pub struct NetAddressMeta(gst_net_sys::GstNetAddressMeta);
|
pub struct NetAddressMeta(gst_net_sys::GstNetAddressMeta);
|
||||||
|
|
||||||
unsafe impl Send for NetAddressMeta {}
|
unsafe impl Send for NetAddressMeta {}
|
||||||
|
|
|
@ -5,6 +5,195 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||||
|
|
||||||
|
## [0.16.7] - 2021-02-13
|
||||||
|
### Fixed
|
||||||
|
- Usage of the logging system with a GStreamer library with the logging system
|
||||||
|
compiled out does not crash any longer.
|
||||||
|
- Double-free in `gst_video::VideoTimeCode` API when converting between
|
||||||
|
validated and unvalidated timecodes.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::Element::get_current_state()` and `get_pending_state()` convenience APIs.
|
||||||
|
- `gst_audio::AudioConverterConfig` for setting the configuration on e.g. the
|
||||||
|
`audiomixer` element. The low-level `AudioConverter` API is still not
|
||||||
|
included in the bindings.
|
||||||
|
|
||||||
|
## [0.16.6] - 2020-12-20
|
||||||
|
### Fixed
|
||||||
|
- `VideoTimeCodeInterval`'s `Ord` and `PartialEq` implementations compare
|
||||||
|
against the correct fields now.
|
||||||
|
- `SDPMessage::medias_mut()` iterator does not crash any longer.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `PartialEq` and `Eq` implementations on `VideoAlignment`.
|
||||||
|
- Alignment API for `VideoMeta` and `get_plane_height()` / `get_plane_size()`.
|
||||||
|
- `VideoInfo::align_full()`.
|
||||||
|
|
||||||
|
## [0.16.5] - 2020-11-23
|
||||||
|
### Fixed
|
||||||
|
- Make sure to use `$crate` in more macros to allow them to work without
|
||||||
|
anything special in scope already.
|
||||||
|
- Update documentation location.
|
||||||
|
- Don't panic if C code stores invalid seqnums in events and the seqnum is
|
||||||
|
used directly or via the `Display` impl.
|
||||||
|
- Fix docs build for some crates on docs.rs.
|
||||||
|
- Fix `Debug` impl for `gst_video::VideoTimeCode` to print the correct type
|
||||||
|
name.
|
||||||
|
- Fix plugin version to be 1.18 instead of 1.17 when compiling a plugin with
|
||||||
|
`v1_18`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Event handling support in pad probes, that is returning
|
||||||
|
`PadProbeReturn::Handled` for events.
|
||||||
|
- `EventRef::get_structure_mut()` getter that allows changing the events'
|
||||||
|
structures.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Remove unnecessary `PhantomData` markers and use `repr(transparent)` instead
|
||||||
|
of `repr(C)` where it is more correct.
|
||||||
|
|
||||||
|
## [0.16.4] - 2020-10-09
|
||||||
|
### Fixed
|
||||||
|
- Correctly implement `ExactSizeIterator` on the `AudioFormat` and
|
||||||
|
`VideoFormat` iterators. Previously they returned the overall size instead
|
||||||
|
of the remaining size, and they didn't implement `Iterator::size_hint()`.
|
||||||
|
- Don't implement `ExactSizeIterator` on the buffer `gst::Meta` iterator. The
|
||||||
|
overall length is not known easily and the implementation would've simply
|
||||||
|
panicked in the past.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::ClockID::wait_async_stream()` for async integration for clock waiting.
|
||||||
|
- `From` / `TryFrom` impls for converting between `gst::ClockTime` and
|
||||||
|
`std::time::Duration`.
|
||||||
|
|
||||||
|
## [0.16.3] - 2020-09-08
|
||||||
|
### Fixed
|
||||||
|
- Reset vfuncs if calling `BaseTransformClass::configure()` multiple times.
|
||||||
|
- Fix `gst::debug_remove_default_log_function()` to actually remove the
|
||||||
|
default log function.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Some more new APIs added in 1.18.
|
||||||
|
- API for getting an owned buffer from a readable `gst_video::VideoFrame` /
|
||||||
|
`VideoFrameRef`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Updated bindings to 1.18.0. This stabilized GStreamer 1.18 support and any
|
||||||
|
API behind the "v1_18" feature is considered stable now.
|
||||||
|
- Factor out some common code from `gst::Pad::ProbeInfo` code. This reduces
|
||||||
|
the code generated for each pad probe considerably.
|
||||||
|
- Update paste dependency to 1.0 and pretty-hex to 0.2.
|
||||||
|
|
||||||
|
## [0.16.2] - 2020-07-27
|
||||||
|
### Fixed
|
||||||
|
- Use correct pointer for the plane data in `gst_audio::AudioBuffer`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add `gst::GhostPad` convenience constructors that take a target pad, similar
|
||||||
|
to the ones that existed in 0.15 and before.
|
||||||
|
- Add `gst::parse_bin_from_description_with_name` that allows setting a name
|
||||||
|
for the created bin without having to use unsafe code in application code.
|
||||||
|
|
||||||
|
## [0.16.1] - 2020-07-10
|
||||||
|
### Fixed
|
||||||
|
- Allow calling `gst::DebugCategory::new()` before `gst::init()` again.
|
||||||
|
|
||||||
|
## [0.16.0] - 2020-07-06
|
||||||
|
### Added
|
||||||
|
- Updated bindings to 1.17.2, adding experimental 1.18 support. This can be
|
||||||
|
opted-in via the "v1_18" feature flag but there might still be API changes
|
||||||
|
in the newly added API.
|
||||||
|
- `gst::MemoryRef::dump()` for dumping contents of a memory.
|
||||||
|
- `gst::Bus::stream()` instead of a custom constructor on the `BusStream`.
|
||||||
|
- Use more accurate types for `Seqnum`, `GroupId` and `MetaSeqnum`. These are
|
||||||
|
now proper wrapper types instead of plain integers, which makes mis-use
|
||||||
|
harder.
|
||||||
|
- Provide `TryFrom` impls for conversion between `glib::DateTime` and
|
||||||
|
`gst::DateTime`.
|
||||||
|
- Add `get_allocator()` functions to `gst_base::{Aggregator, BaseTransform,
|
||||||
|
BaseSrc}`, and allow overriding `BaseSrc::alloc()`.
|
||||||
|
- Add subclassing bindings for `gst_base::PushSrc`.
|
||||||
|
- Add new `gst::BufferCursor` API that allows to handle a buffer as `Read`,
|
||||||
|
`Write` and `Seek` and accesses the underlying memories of the buffer
|
||||||
|
individually without mapping them all together.
|
||||||
|
- Add `gst::Plugin::get_plugin_name()`.
|
||||||
|
- Support for `gst_video::VideoAFDMeta` and `VideoBarMeta`.
|
||||||
|
- API for getting all / iterating over all `gst_audio::AudioFormat` and
|
||||||
|
`gst_video::VideoFormat`.
|
||||||
|
- Bindings and subclassing bindings for `gst_video::VideoSink`.
|
||||||
|
- `gst::Pad` can be constructed via the builder pattern and `gst::PadBuilder`
|
||||||
|
now, which allows to safely set the pad functions and various other fields
|
||||||
|
during construction. The `PadBuilder` works on any `gst::Pad` subclass and
|
||||||
|
also has special support for `GhostPad`s by allowing to set pad functions of
|
||||||
|
the proxy pad.
|
||||||
|
- `gst::Message`, `gst::Event` and `gst::Query` type constructors are now on
|
||||||
|
the specific target type instead of various `new_XXX()` functions on the
|
||||||
|
basic type. E.g. `gst::message::Eos::new()`.
|
||||||
|
- Support for overriding `gst_audio::AudioSrc/Sink::reset()`.
|
||||||
|
- Support for overriding `gst_base::BaseParse::stop()`.
|
||||||
|
- Support for overriding `gst::Element::post_message()`.
|
||||||
|
- Added bindings for `gst::BufferList::foreach()` and `foreach_mut()`.
|
||||||
|
- Added bindings for `gst::Buffer::foreach_meta()` and `foreach_meta_mut()`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Allow using any `glib::Object` as target object for logging instead of just
|
||||||
|
`gst::Object`.
|
||||||
|
- Remove restriction API from `gst_pbutils::EncodingContainerProfile`. They
|
||||||
|
are supposed to be used only with the other encoding profiles.
|
||||||
|
- Return `&'static str` for various `gst::StructureRef` functions where the
|
||||||
|
string is backed by a `glib::Quark`.
|
||||||
|
- Fix various `gst::DateTime` functions to actually return `Option`s.
|
||||||
|
- Add support for filling in a buffer passed to the `gst::Pad` getrange
|
||||||
|
function, allow passing one in into `get_range()` and `pull_range()` and
|
||||||
|
provide the corresponding API on `gst_base::BaseSrc` too.
|
||||||
|
- Allocator in audio/video `Decoder` base classes is optional and can return
|
||||||
|
`None`.
|
||||||
|
- `gst_video::ValidVideoTimeCode::add_interval()` always returns a valid
|
||||||
|
timecode again.
|
||||||
|
- Allow resolving a `gst::Promise` with `None` and also handle that correctly
|
||||||
|
in the callback. This is allowed by the API.
|
||||||
|
- Allow calling various debugging related functions before `gst::init()`.
|
||||||
|
- Various enum/function versions were fixed to only show up if the
|
||||||
|
corresponding version feature is enabled.
|
||||||
|
- `gst::Pad` function setters are marked unsafe now as changing the functions
|
||||||
|
is not thread-safe.
|
||||||
|
- Remove `gst::Object::set_name()` as changing the name after construction
|
||||||
|
generally causes problems and is potentially unsafe.
|
||||||
|
- Remove `gst::Pad::set_pad_template()` as changing the pad template after
|
||||||
|
construction is generally unsafe.
|
||||||
|
- `gst::Pad::stream_lock()` borrows the pad now instead of taking a new
|
||||||
|
reference.
|
||||||
|
- Unimplemented `Jitter` and `Buffer` queries were removed from the bindings.
|
||||||
|
These are not implemented in C and only have a type registered.
|
||||||
|
- Various `LAST`, `NONE` variants of enums and flags were removed as these
|
||||||
|
only make sense in C.
|
||||||
|
- Call the parent impl of various vfuncs that were omitted before to not
|
||||||
|
require further subclasses of them to implement them but automatically call
|
||||||
|
the parent ones.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Use `NonZeroU64/U32` for various ID types to allow further optimizations.
|
||||||
|
- Use `thiserror` crate for deriving error types.
|
||||||
|
- Switch from `lazy_static` to `once_cell`.
|
||||||
|
- Change various miniobject functions like `gst::Caps::append()` from taking
|
||||||
|
the object by value to modifying it internally. This makes them easier to
|
||||||
|
use and only applies to functions that are defined on the non-reference type
|
||||||
|
and take ownership of the values passed in.
|
||||||
|
- Use `mem::ManuallyDrop` instead of `mem::forget()` everywhere.
|
||||||
|
- Replace most `mem::transmute()` calls with safer alternatives.
|
||||||
|
- `gst:StreamCollection` API was changed to the builder pattern for
|
||||||
|
construction as the collection must not be changed after construction.
|
||||||
|
- `gst::ProxyPad` default functions are plain functions on `ProxyPad` now
|
||||||
|
instead of trait functions to allow easier usage of them.
|
||||||
|
- Use proper error types in various `TryFrom` impls.
|
||||||
|
- `gst_video::VideoMeta::add()` returns a `Result` now instead of panicking.
|
||||||
|
- Various constructors were renamed from `new_with_XXX()` and `new_from_XXX()`
|
||||||
|
to the more idiomatic `with_XXX()` and `from_XXX()`.
|
||||||
|
- Miniobject bindings are simplified now and there is no `gst::GstRc` type
|
||||||
|
anymore, instead everything is directly implemented on the concrete types.
|
||||||
|
As part of this the `gst::MiniObject` trait was also removed as it was
|
||||||
|
unneeded now.
|
||||||
|
|
||||||
## [0.15.7] - 2020-06-08
|
## [0.15.7] - 2020-06-08
|
||||||
### Fixed
|
### Fixed
|
||||||
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
||||||
|
@ -746,7 +935,14 @@ specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-v
|
||||||
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
||||||
The API of the two is incompatible.
|
The API of the two is incompatible.
|
||||||
|
|
||||||
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...HEAD
|
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.6...HEAD
|
||||||
|
[0.16.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.5...0.16.6
|
||||||
|
[0.16.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.4...0.16.5
|
||||||
|
[0.16.4]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.3...0.16.4
|
||||||
|
[0.16.3]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.2...0.16.3
|
||||||
|
[0.16.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.1...0.16.2
|
||||||
|
[0.16.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.0...0.16.1
|
||||||
|
[0.16.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...0.16.0
|
||||||
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
||||||
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
||||||
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "gstreamer-pbutils"
|
name = "gstreamer-pbutils"
|
||||||
version = "0.16.0"
|
version = "0.16.7"
|
||||||
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
||||||
categories = ["api-bindings", "multimedia"]
|
categories = ["api-bindings", "multimedia"]
|
||||||
description = "Rust bindings for GStreamer Base Utils library"
|
description = "Rust bindings for GStreamer Base Utils library"
|
||||||
|
@ -15,16 +15,16 @@ build = "build.rs"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bitflags = "1.0"
|
bitflags = "1.0"
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
glib-sys = "0.10"
|
||||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
gobject-sys = "0.10"
|
||||||
gstreamer-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
gstreamer-pbutils-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys", features = ["v1_8"] }
|
gstreamer-pbutils-sys = { version = "0.9", git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys.git", branch = "0.9", features = ["v1_8"] }
|
||||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
glib = "0.10"
|
||||||
gstreamer = { path = "../gstreamer" }
|
gstreamer = { version = "0.16", path = "../gstreamer" }
|
||||||
thiserror = "1.0"
|
thiserror = "1.0"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
gstreamer-rs-lgpl-docs = { path = "../docs", optional = true }
|
gstreamer-rs-lgpl-docs = { version = "0.16", path = "../docs", optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
|
@ -35,7 +35,7 @@ v1_16 = ["gstreamer/v1_16", "gstreamer-pbutils-sys/v1_16", "v1_14"]
|
||||||
v1_18 = ["gstreamer/v1_18", "gstreamer-pbutils-sys/v1_18", "v1_16"]
|
v1_18 = ["gstreamer/v1_18", "gstreamer-pbutils-sys/v1_18", "v1_16"]
|
||||||
embed-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
embed-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
||||||
purge-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
purge-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
|
||||||
dox = ["v1_18", "gstreamer-pbutils-sys/dox"]
|
dox = ["v1_18", "gstreamer-pbutils-sys/dox", "glib/dox", "gstreamer/dox"]
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
features = ["dox", "embed-lgpl-docs"]
|
features = ["dox", "embed-lgpl-docs"]
|
||||||
|
|
|
@ -140,7 +140,7 @@ $ export PKG_CONFIG_PATH="c:\\gstreamer\\1.0\\x86_64\\lib\\pkgconfig${PKG_CONFIG
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
The API reference can be found
|
The API reference can be found
|
||||||
[here](https://slomo.pages.freedesktop.org/rustdocs/gstreamer/gstreamer/), however it is
|
[here](https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer/index.html), however it is
|
||||||
only the Rust API reference and does not explain any of the concepts.
|
only the Rust API reference and does not explain any of the concepts.
|
||||||
|
|
||||||
For getting started with GStreamer development, the best would be to follow
|
For getting started with GStreamer development, the best would be to follow
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
Generated by gir (https://github.com/gtk-rs/gir @ 60cbef0)
|
||||||
from gir-files (https://github.com/gtk-rs/gir-files @ 2d4abeba)
|
from gir-files (https://github.com/gtk-rs/gir-files @ 8f334830)
|
||||||
|
|
|
@ -5,6 +5,195 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||||
|
|
||||||
|
## [0.16.7] - 2021-02-13
|
||||||
|
### Fixed
|
||||||
|
- Usage of the logging system with a GStreamer library with the logging system
|
||||||
|
compiled out does not crash any longer.
|
||||||
|
- Double-free in `gst_video::VideoTimeCode` API when converting between
|
||||||
|
validated and unvalidated timecodes.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::Element::get_current_state()` and `get_pending_state()` convenience APIs.
|
||||||
|
- `gst_audio::AudioConverterConfig` for setting the configuration on e.g. the
|
||||||
|
`audiomixer` element. The low-level `AudioConverter` API is still not
|
||||||
|
included in the bindings.
|
||||||
|
|
||||||
|
## [0.16.6] - 2020-12-20
|
||||||
|
### Fixed
|
||||||
|
- `VideoTimeCodeInterval`'s `Ord` and `PartialEq` implementations compare
|
||||||
|
against the correct fields now.
|
||||||
|
- `SDPMessage::medias_mut()` iterator does not crash any longer.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `PartialEq` and `Eq` implementations on `VideoAlignment`.
|
||||||
|
- Alignment API for `VideoMeta` and `get_plane_height()` / `get_plane_size()`.
|
||||||
|
- `VideoInfo::align_full()`.
|
||||||
|
|
||||||
|
## [0.16.5] - 2020-11-23
|
||||||
|
### Fixed
|
||||||
|
- Make sure to use `$crate` in more macros to allow them to work without
|
||||||
|
anything special in scope already.
|
||||||
|
- Update documentation location.
|
||||||
|
- Don't panic if C code stores invalid seqnums in events and the seqnum is
|
||||||
|
used directly or via the `Display` impl.
|
||||||
|
- Fix docs build for some crates on docs.rs.
|
||||||
|
- Fix `Debug` impl for `gst_video::VideoTimeCode` to print the correct type
|
||||||
|
name.
|
||||||
|
- Fix plugin version to be 1.18 instead of 1.17 when compiling a plugin with
|
||||||
|
`v1_18`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Event handling support in pad probes, that is returning
|
||||||
|
`PadProbeReturn::Handled` for events.
|
||||||
|
- `EventRef::get_structure_mut()` getter that allows changing the events'
|
||||||
|
structures.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Remove unnecessary `PhantomData` markers and use `repr(transparent)` instead
|
||||||
|
of `repr(C)` where it is more correct.
|
||||||
|
|
||||||
|
## [0.16.4] - 2020-10-09
|
||||||
|
### Fixed
|
||||||
|
- Correctly implement `ExactSizeIterator` on the `AudioFormat` and
|
||||||
|
`VideoFormat` iterators. Previously they returned the overall size instead
|
||||||
|
of the remaining size, and they didn't implement `Iterator::size_hint()`.
|
||||||
|
- Don't implement `ExactSizeIterator` on the buffer `gst::Meta` iterator. The
|
||||||
|
overall length is not known easily and the implementation would've simply
|
||||||
|
panicked in the past.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `gst::ClockID::wait_async_stream()` for async integration for clock waiting.
|
||||||
|
- `From` / `TryFrom` impls for converting between `gst::ClockTime` and
|
||||||
|
`std::time::Duration`.
|
||||||
|
|
||||||
|
## [0.16.3] - 2020-09-08
|
||||||
|
### Fixed
|
||||||
|
- Reset vfuncs if calling `BaseTransformClass::configure()` multiple times.
|
||||||
|
- Fix `gst::debug_remove_default_log_function()` to actually remove the
|
||||||
|
default log function.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Some more new APIs added in 1.18.
|
||||||
|
- API for getting an owned buffer from a readable `gst_video::VideoFrame` /
|
||||||
|
`VideoFrameRef`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Updated bindings to 1.18.0. This stabilized GStreamer 1.18 support and any
|
||||||
|
API behind the "v1_18" feature is considered stable now.
|
||||||
|
- Factor out some common code from `gst::Pad::ProbeInfo` code. This reduces
|
||||||
|
the code generated for each pad probe considerably.
|
||||||
|
- Update paste dependency to 1.0 and pretty-hex to 0.2.
|
||||||
|
|
||||||
|
## [0.16.2] - 2020-07-27
|
||||||
|
### Fixed
|
||||||
|
- Use correct pointer for the plane data in `gst_audio::AudioBuffer`.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Add `gst::GhostPad` convenience constructors that take a target pad, similar
|
||||||
|
to the ones that existed in 0.15 and before.
|
||||||
|
- Add `gst::parse_bin_from_description_with_name` that allows setting a name
|
||||||
|
for the created bin without having to use unsafe code in application code.
|
||||||
|
|
||||||
|
## [0.16.1] - 2020-07-10
|
||||||
|
### Fixed
|
||||||
|
- Allow calling `gst::DebugCategory::new()` before `gst::init()` again.
|
||||||
|
|
||||||
|
## [0.16.0] - 2020-07-06
|
||||||
|
### Added
|
||||||
|
- Updated bindings to 1.17.2, adding experimental 1.18 support. This can be
|
||||||
|
opted-in via the "v1_18" feature flag but there might still be API changes
|
||||||
|
in the newly added API.
|
||||||
|
- `gst::MemoryRef::dump()` for dumping contents of a memory.
|
||||||
|
- `gst::Bus::stream()` instead of a custom constructor on the `BusStream`.
|
||||||
|
- Use more accurate types for `Seqnum`, `GroupId` and `MetaSeqnum`. These are
|
||||||
|
now proper wrapper types instead of plain integers, which makes mis-use
|
||||||
|
harder.
|
||||||
|
- Provide `TryFrom` impls for conversion between `glib::DateTime` and
|
||||||
|
`gst::DateTime`.
|
||||||
|
- Add `get_allocator()` functions to `gst_base::{Aggregator, BaseTransform,
|
||||||
|
BaseSrc}`, and allow overriding `BaseSrc::alloc()`.
|
||||||
|
- Add subclassing bindings for `gst_base::PushSrc`.
|
||||||
|
- Add new `gst::BufferCursor` API that allows to handle a buffer as `Read`,
|
||||||
|
`Write` and `Seek` and accesses the underlying memories of the buffer
|
||||||
|
individually without mapping them all together.
|
||||||
|
- Add `gst::Plugin::get_plugin_name()`.
|
||||||
|
- Support for `gst_video::VideoAFDMeta` and `VideoBarMeta`.
|
||||||
|
- API for getting all / iterating over all `gst_audio::AudioFormat` and
|
||||||
|
`gst_video::VideoFormat`.
|
||||||
|
- Bindings and subclassing bindings for `gst_video::VideoSink`.
|
||||||
|
- `gst::Pad` can be constructed via the builder pattern and `gst::PadBuilder`
|
||||||
|
now, which allows to safely set the pad functions and various other fields
|
||||||
|
during construction. The `PadBuilder` works on any `gst::Pad` subclass and
|
||||||
|
also has special support for `GhostPad`s by allowing to set pad functions of
|
||||||
|
the proxy pad.
|
||||||
|
- `gst::Message`, `gst::Event` and `gst::Query` type constructors are now on
|
||||||
|
the specific target type instead of various `new_XXX()` functions on the
|
||||||
|
basic type. E.g. `gst::message::Eos::new()`.
|
||||||
|
- Support for overriding `gst_audio::AudioSrc/Sink::reset()`.
|
||||||
|
- Support for overriding `gst_base::BaseParse::stop()`.
|
||||||
|
- Support for overriding `gst::Element::post_message()`.
|
||||||
|
- Added bindings for `gst::BufferList::foreach()` and `foreach_mut()`.
|
||||||
|
- Added bindings for `gst::Buffer::foreach_meta()` and `foreach_meta_mut()`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Allow using any `glib::Object` as target object for logging instead of just
|
||||||
|
`gst::Object`.
|
||||||
|
- Remove restriction API from `gst_pbutils::EncodingContainerProfile`. They
|
||||||
|
are supposed to be used only with the other encoding profiles.
|
||||||
|
- Return `&'static str` for various `gst::StructureRef` functions where the
|
||||||
|
string is backed by a `glib::Quark`.
|
||||||
|
- Fix various `gst::DateTime` functions to actually return `Option`s.
|
||||||
|
- Add support for filling in a buffer passed to the `gst::Pad` getrange
|
||||||
|
function, allow passing one in into `get_range()` and `pull_range()` and
|
||||||
|
provide the corresponding API on `gst_base::BaseSrc` too.
|
||||||
|
- Allocator in audio/video `Decoder` base classes is optional and can return
|
||||||
|
`None`.
|
||||||
|
- `gst_video::ValidVideoTimeCode::add_interval()` always returns a valid
|
||||||
|
timecode again.
|
||||||
|
- Allow resolving a `gst::Promise` with `None` and also handle that correctly
|
||||||
|
in the callback. This is allowed by the API.
|
||||||
|
- Allow calling various debugging related functions before `gst::init()`.
|
||||||
|
- Various enum/function versions were fixed to only show up if the
|
||||||
|
corresponding version feature is enabled.
|
||||||
|
- `gst::Pad` function setters are marked unsafe now as changing the functions
|
||||||
|
is not thread-safe.
|
||||||
|
- Remove `gst::Object::set_name()` as changing the name after construction
|
||||||
|
generally causes problems and is potentially unsafe.
|
||||||
|
- Remove `gst::Pad::set_pad_template()` as changing the pad template after
|
||||||
|
construction is generally unsafe.
|
||||||
|
- `gst::Pad::stream_lock()` borrows the pad now instead of taking a new
|
||||||
|
reference.
|
||||||
|
- Unimplemented `Jitter` and `Buffer` queries were removed from the bindings.
|
||||||
|
These are not implemented in C and only have a type registered.
|
||||||
|
- Various `LAST`, `NONE` variants of enums and flags were removed as these
|
||||||
|
only make sense in C.
|
||||||
|
- Call the parent impl of various vfuncs that were omitted before to not
|
||||||
|
require further subclasses of them to implement them but automatically call
|
||||||
|
the parent ones.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Use `NonZeroU64/U32` for various ID types to allow further optimizations.
|
||||||
|
- Use `thiserror` crate for deriving error types.
|
||||||
|
- Switch from `lazy_static` to `once_cell`.
|
||||||
|
- Change various miniobject functions like `gst::Caps::append()` from taking
|
||||||
|
the object by value to modifying it internally. This makes them easier to
|
||||||
|
use and only applies to functions that are defined on the non-reference type
|
||||||
|
and take ownership of the values passed in.
|
||||||
|
- Use `mem::ManuallyDrop` instead of `mem::forget()` everywhere.
|
||||||
|
- Replace most `mem::transmute()` calls with safer alternatives.
|
||||||
|
- `gst:StreamCollection` API was changed to the builder pattern for
|
||||||
|
construction as the collection must not be changed after construction.
|
||||||
|
- `gst::ProxyPad` default functions are plain functions on `ProxyPad` now
|
||||||
|
instead of trait functions to allow easier usage of them.
|
||||||
|
- Use proper error types in various `TryFrom` impls.
|
||||||
|
- `gst_video::VideoMeta::add()` returns a `Result` now instead of panicking.
|
||||||
|
- Various constructors were renamed from `new_with_XXX()` and `new_from_XXX()`
|
||||||
|
to the more idiomatic `with_XXX()` and `from_XXX()`.
|
||||||
|
- Miniobject bindings are simplified now and there is no `gst::GstRc` type
|
||||||
|
anymore, instead everything is directly implemented on the concrete types.
|
||||||
|
As part of this the `gst::MiniObject` trait was also removed as it was
|
||||||
|
unneeded now.
|
||||||
|
|
||||||
## [0.15.7] - 2020-06-08
|
## [0.15.7] - 2020-06-08
|
||||||
### Fixed
|
### Fixed
|
||||||
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
- Allow multiple filter types per process with `gst::Iterator::filter()`.
|
||||||
|
@ -746,7 +935,14 @@ specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-v
|
||||||
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
||||||
The API of the two is incompatible.
|
The API of the two is incompatible.
|
||||||
|
|
||||||
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...HEAD
|
[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.6...HEAD
|
||||||
|
[0.16.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.5...0.16.6
|
||||||
|
[0.16.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.4...0.16.5
|
||||||
|
[0.16.4]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.3...0.16.4
|
||||||
|
[0.16.3]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.2...0.16.3
|
||||||
|
[0.16.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.1...0.16.2
|
||||||
|
[0.16.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.0...0.16.1
|
||||||
|
[0.16.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...0.16.0
|
||||||
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
|
||||||
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
|
||||||
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue