Compare commits

...

91 commits
main ... 0.16

Author SHA1 Message Date
Sophie Herold
c1b6e1535d Adapt gir-docs -> gir-rustdoc script rename 2021-05-30 12:58:40 +02:00
Sophie Herold
56f6b9e727 Generate docs artifact for gir-doc 2021-05-25 19:07:31 +02:00
Luke McGartland
4ef15e5499 Update GES generated docs and add bindings for OperationClip, TransitionClip, BaseTransitionClip, and VideoStandardTransitionType 2021-04-13 09:41:18 -07:00
Sebastian Dröge
30a323e24c Update CHANGELOG.md for 0.16.7 2021-02-13 13:35:55 +02:00
Sebastian Dröge
f459d0d5f1 Update versions to 0.16.7 2021-02-13 13:35:55 +02:00
Vivia Nikolaidou
6ab1632741 audio/audio_converter: mix-matrix contains floats, not doubles 2021-02-13 13:35:55 +02:00
Jan Alexander Steffens (heftig)
caadaab184 audio: Make AudioConverterConfig::set_mix_matrix generic
So that we can set the mix matrix using both `&[&[f64]]` and
`&[Vec<f64>]`.
2021-02-13 13:35:55 +02:00
Vivia Nikolaidou
cebc7456ce audio/audio_converter: Fix typo 2021-02-13 13:35:55 +02:00
Vivia Nikolaidou
4655fecbe9 gstreamer-audio: Add AudioConverterConfig 2021-02-13 13:35:55 +02:00
Sebastian Dröge
fdd21b9a2a video/timecode: Fix compilation of tests with target API < 1.16 2021-02-13 13:35:55 +02:00
Sebastian Dröge
50cffb0f7a video/timecode: Use mem::ManuallyDrop to prevent a double unref of the daily jam
As ffi::GstVideoTimeCode implements Copy, assignments don't move it out
of the passed in value but just copy it. This doesn't increase the
reference count of the daily jam, still runs the Drop impl of the passed
in value to decrease the daily jam and then causes a second unref of it
later when the returned value is dropped.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/310
2021-02-13 13:35:55 +02:00
Sebastian Dröge
fb412d0cfb gstreamer/log: Handle compiled out GStreamer debug system properly
By mirroring the no-op behaviour of the C code instead of failing
because of a NULL debug category.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/306
2021-02-13 12:51:47 +02:00
Zeeshan Ali
bad30dbbda Add get_current_state & get_pending_state to ElementExtManual
Convenient API to simply get the current or pending state of the
element.
2021-02-13 12:47:50 +02:00
Sebastian Dröge
57650dd0a2 Update versions to 0.16.6 2020-12-20 20:46:17 +02:00
Sebastian Dröge
abc39b8f08 Update CHANGELOG.md for 0.16.6 2020-12-20 20:15:48 +02:00
Sebastian Dröge
d914967ce4 ci: Use a specific version of the gir checker 2020-12-20 20:15:48 +02:00
Sebastian Dröge
002958f0b4 gstreamer/sdp: Fix SDPMessage::medias_mut() iterator
The raw pointer manipulation code was adding one indirection too many.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/304
2020-12-20 19:56:16 +02:00
Marijn Suijten
ae51a2f49c video/time_code_interval: Correct set_frames parameter name
Aesthetics.
2020-12-20 19:56:06 +02:00
Marijn Suijten
26bfd5b98c video/time_code_interval: Ord cmp minutes to other.minutes, not hours
Same mistake as the previous commit. Clipppy didn't find this one though
:)
2020-12-20 19:55:59 +02:00
Marijn Suijten
4157bb6c16 video/time_code_interval: Do not compare minutes to hours in PartialEq
Clippy nightly is becoming surprisingly smart these days:

    warning: This sequence of operators looks suspiciously like a bug.
      --> gstreamer-video/src/video_time_code_interval.rs:66:16
       |
    66 |             && self.0.minutes == other.0.hours
       |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: I think you meant: `self.0.minutes == other.0.minutes`
       |
       = note: `#[warn(clippy::suspicious_operation_groupings)]` on by default
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_operation_groupings
2020-12-20 19:55:44 +02:00
Guillaume Desmottes
409608a7fb video: implement Eq and PartialEq on VideoAlignment 2020-12-20 19:53:53 +02:00
Guillaume Desmottes
18af63beac video: add alignment API to VideoMeta 2020-12-20 19:53:53 +02:00
Guillaume Desmottes
87dc92ff4a video: add VideoInfo::align_full() 2020-12-20 19:51:43 +02:00
Guillaume Desmottes
b7bfcb2094 video: add VideoMeta::get_plane_{height,size}
Fix #299
2020-12-20 19:49:42 +02:00
Sebastian Dröge
b55d01bdc5 Update CHANGELOG.md for 0.16.5 2020-11-23 13:37:13 +02:00
Sebastian Dröge
9cd670277b Update versions to 0.16.5 2020-11-23 13:24:07 +02:00
Sebastian Dröge
7fcccf6821 Remove unused files 2020-11-23 12:22:01 +02:00
Sebastian Dröge
aa79e8603f gstreamer: Fix plugin version for v1_18 2020-11-23 12:22:01 +02:00
François Laignel
6d30078c89 Event: impl structure_mut getter 2020-11-23 12:22:01 +02:00
François Laignel
3e8ecf4806 Pad: allow handling Events in PadProbes 2020-11-23 12:22:01 +02:00
Sebastian Dröge
7d8f95971c video/timecode: Use stringify!($name) instead of "$name" in Debug impl
Otherwise it would output a literal "$name" string.
2020-11-23 12:22:01 +02:00
François Laignel
3bf946ed11 Use fully qualified path for plugin_desc in gst_plugin_define
This is required when gst_plugin_define is used from a a submodule
mod.rs (not from the crate's lib.rs).
2020-11-23 12:22:01 +02:00
Sebastian Dröge
8c4ebdec1e Use repr(transparent) where it is more correct and get rid of some unneeded repr(C) 2020-11-23 12:22:01 +02:00
Sebastian Dröge
5f63ee9912 Remove unneeded PhantomData markers
And as a side-effect also get rid of the lifetime parameter of
gst::TypeFind that was completely unused anyway.
2020-11-23 12:22:01 +02:00
Sebastian Dröge
ef3cd6fc37 audio: Update array-init dependency to 1.0 2020-11-23 12:22:01 +02:00
Jonas Platte
249918b189 Fix missing dox feature passthrough 2020-11-23 12:22:01 +02:00
Jonas Platte
8bb3db2209 Remove unused dependencies
found by cargo-udeps
2020-11-23 12:22:01 +02:00
François Laignel
59dbed69ad gstreamer/message: enhance Debug impl for Message[Ref]
When "{:?}" printing a Message[Ref], the following issues lower the
experience:

- If the Message seqnum is GST_SEQNUM_INVALID (0), a panic occurs due
  to an assertion failure in MessageRef::get_seqnum.
- The src of the Message displays the GString address.

Origin issue for an occurrence of the first case above fixed in
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/860
2020-11-23 12:06:17 +02:00
François Laignel
fac1234351 message: get_seqnum: return next seqnum if Message seqnum is invalid
See https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/601
2020-11-23 12:06:01 +02:00
raytiley
629579c04d Update location of documentation. 2020-11-23 12:05:46 +02:00
Marijn Suijten
e6a0063165 gstreamer: plugin: Prefix glib:: with $crate:: in gst_plugin_define
Crates using gst_plugin_define might not (need to) import `glib`
directly into their scope; use the one imported in `gstreamer`s root
to make this macro more portable.
Besides, `glib` is prefixed with `$crate::` just below.
2020-11-23 12:05:22 +02:00
Marijn Suijten
787954eab9 gstreamer: error: Prefix gst_error_msg with $crate
This macro might not have been imported in the surrounding scope where
gst_panic_to_error is used, thus reference it directly by the full
namespace.
2020-11-23 12:05:10 +02:00
Nathan Widmyer
5a28412fef Switch dependency resolution option from rev to branch 2020-11-10 10:57:05 -05:00
Sebastian Dröge
b687b60144 Update CHANGELOG.md for 0.16.4 2020-10-09 13:16:58 +03:00
Sebastian Dröge
dde1941722 Update versions to 0.16.4 2020-10-09 13:10:33 +03:00
Sebastian Dröge
6e2ad23e26 ci: Allow unused imports in the examples
It was needed with an older version of glib because of a bug.
2020-10-09 12:38:13 +03:00
Sebastian Dröge
b32fc568da gstreamer/audio/video: Correctly implement ExactSizeIterator
len() is optional but size_hint() must return the correct values. Also
this shouldn't return the overall length but the remaining length.
2020-10-09 12:03:21 +03:00
Sebastian Dröge
b7b29ee55a gstreamer/meta: Don't collect iterators just to check their length in the tests 2020-10-09 12:03:21 +03:00
Sebastian Dröge
f5752546fd gstreamer/buffer: Don't implement ExactSizeIterator on meta iterator
We don't actually know the number of items and using the trait would
panic.
2020-10-09 12:03:21 +03:00
Sebastian Dröge
80cd448340 gstreamer: Update to cfg-if 1.0 2020-10-09 12:03:21 +03:00
Sebastian Dröge
2b87e5f51d gstreamer/clock: Unschedule clock ID when the receiver end of the channel is disconnected 2020-10-09 12:03:21 +03:00
Sebastian Dröge
b4e8ace192 gstreamer/clock_time: Add From/TryFrom impls to convert between ClockTime and std::time::Duration 2020-10-09 12:03:21 +03:00
Sebastian Dröge
5d80372dd3 gstreamer/clock: Add ClockID::wait_async_stream()
This provides an async stream with the values of each timeout.
2020-10-09 12:03:21 +03:00
Sebastian Dröge
f65efb41e8 Update versions to 0.16.3 2020-09-08 21:48:15 +03:00
Sebastian Dröge
12c3a90661 Update CHANGELOG.md for 0.16.3 2020-09-08 21:47:52 +03:00
Sebastian Dröge
68c2b19680 video: Rename VideoTransferFunction functions 2020-09-08 17:14:37 +03:00
Sebastian Dröge
6b6fae51cd Regenerate everything 2020-09-08 17:14:37 +03:00
Sebastian Dröge
61e9f208f4 Update gir-files to 1.18.0 2020-09-08 17:13:07 +03:00
Sebastian Dröge
c754a95810 ci: Switch to cargo-outdated release 2020-09-08 17:11:09 +03:00
Sebastian Dröge
326167470a ci: Rebuild GStreamer to update to 1.18.0 2020-09-08 17:10:20 +03:00
Sebastian Dröge
080f6a3906 gstreamer/log: Fix debug_remove_default_log_function() to actually work
We have to pass `NULL` / `None` instead of the actual default log
function as because of `-Bsymbolic` or how DLLs work on Windows the
external function pointer is different to the internal one.
2020-09-07 14:26:08 +03:00
Marijn Suijten
09792ce90a base_transform: Reset unused vfuncs on consecutive configure calls
If a user ends up changing the configured mode later on previously
registered vfuncs are not reset meaning the object is effectively stuck
in mode `Both`.
2020-09-07 14:26:02 +03:00
Sebastian Dröge
730500b09f gstreamer: Update pretty-hex dependency to 0.2 2020-09-07 14:25:55 +03:00
Sebastian Dröge
4cc6c0d19e Use glib::timeout_add_local() instead of removed gtk::timeout_add() 2020-09-07 14:25:36 +03:00
Sebastian Dröge
3fef3a607f base/aggregator: "samples-selected" signal handler only has to be Send, not Sync
It can only be emitted from the aggregate thread.
2020-09-07 14:25:21 +03:00
Ruben Gonzalez
c68b68f37f gstreamer: Delete duplicated assert_initialized_main_thread 2020-09-07 14:25:05 +03:00
Sebastian Dröge
a6253a1f77 video/video_frame: Allow getting an owned buffer from readable video frames
In all other variations this is not possible as it would allow to
circumvent the mini object writability rules.
2020-08-11 13:36:54 +03:00
Sebastian Dröge
fc21a2d9a3 Add git locations for gstreamer-sys in addition to the version
Otherwise we'd always use the version from crates.io.
2020-08-11 12:43:57 +03:00
Sebastian Dröge
c93ade0920 gstreamer: Update paste dependency from 0.1 to 1.0 2020-08-11 12:43:57 +03:00
Sebastian Dröge
272022bdac gstreamer/pad: Factor out PadProbeInfo handling from pad probe trampoline into separate functions
This makes that part of the code non-generic and thus allows the
compiler to not put a copy of it into every caller with a different
closure.

For a test with 3 pad probes this overall reduced the number of LLVM IR
lines needed for the pad probes to about 8.5% of what it was before
(4485 -> 381 lines).
2020-08-11 12:43:57 +03:00
Jacob Teplitsky
c613697e8b rtp/rtp_buffer: Wrap set_marker() and get_marker() methods 2020-08-11 12:43:57 +03:00
Sebastian Dröge
a0887f197f Add various new 1.18 APIs 2020-08-11 12:43:57 +03:00
Sebastian Dröge
2624e2a6d1 Regenerate everything 2020-08-11 12:43:57 +03:00
Sebastian Dröge
62fe400582 generator: Switch to Python 3
It's 2020.
2020-08-11 11:47:47 +03:00
Sebastian Dröge
afc4581ff8 gir-files: Update to 1.17.2.1
This should be approximately the same as 1.17.90.

This is the version from gstreamer-sys 0.16 which merged the GL
platforms back into the main gir file for backwards compatibility.
2020-08-11 11:47:47 +03:00
Sebastian Dröge
512f5b52fc ci: Use Rust 1.44.1 explicitly for the 0.16 branch 2020-08-11 11:06:15 +03:00
Sebastian Dröge
cc34b34455 ci: Update GStreamer version 2020-08-11 10:36:56 +03:00
Sebastian Dröge
f69a2226be ci: set -e in all shell scripts
Otherwise errors are silently ignored.
2020-08-11 10:36:38 +03:00
Sebastian Dröge
4e57412fa3 Update versions to 0.16.2 2020-07-27 12:19:10 +03:00
Sebastian Dröge
3f58306e3b Update CHANGELOG.md for 0.16.2 2020-07-27 12:18:44 +03:00
Sebastian Dröge
4afd47a8a8 gstreamer: Add parse_bin_from_description_with_name_full()
The non-full variant existed already.
2020-07-27 11:14:01 +03:00
Sebastian Dröge
04c29d3b08 audio/audio-buffer: Use correct pointer for the audio buffer plane data 2020-07-27 11:13:56 +03:00
Philippe Normand
4e9ee99c88 functions: Add new parse_bin_from_description_with_name utility
This is basically `parse_bin_from_description()` but additionally the returned
bin has the passed name. It is sometimes convenient to name those bins so they
can later be easily retrieved by name from the pipeline they belong to.
2020-07-27 11:13:48 +03:00
Sebastian Dröge
7517a50834 gstreamer/ghost_pad: Add convenience constructors with target pad
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/issues/275
2020-07-21 09:37:28 +02:00
Sebastian Dröge
af15dafc14 gstreamer/ghost_pad: Move GhostPad specific code into the ghost_pad module 2020-07-21 09:37:21 +02:00
Sebastian Dröge
f95ca85a27 Update CHANGELOG.md for 0.16.1 2020-07-10 10:42:47 +03:00
Sebastian Dröge
3643f3ea80 Update version to 0.16.1 2020-07-10 10:42:44 +03:00
Jan Alexander Steffens (heftig)
7e7d74af1e log: Allow calling DebugCategory::new before gstreamer::init
This is safe.
2020-07-10 10:18:20 +03:00
Sebastian Dröge
f266e6cefc Update docs 2020-07-06 14:38:47 +03:00
Sebastian Dröge
9511b19c0a Update versions from git to releases 2020-07-06 14:37:02 +03:00
Sebastian Dröge
2f69fe81f2 Update CHANGELOG.md for 0.16.0 2020-07-06 14:03:45 +03:00
176 changed files with 8690 additions and 1487 deletions

View file

@ -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'

View file

@ -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",

View file

@ -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"

View file

@ -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]]

View file

@ -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"

View file

@ -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

View file

@ -1,2 +1,2 @@
variables: variables:
GST_RS_IMG_TAG: '2020-07-05.0' GST_RS_IMG_TAG: '2020-09-08.0-0.16'

View file

@ -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

View file

@ -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

View file

@ -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"

View file

@ -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 -->

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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 -->

View file

@ -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 &lt;glib.h&gt; #include <glib.h>;
#include &lt;gst/gst.h&gt; #include <gst/gst.h>;
#include &lt;gst/video/videooverlay.h&gt; #include <gst/video/videooverlay.h>;
#include &lt;QApplication&gt; #include <QApplication>;
#include &lt;QTimer&gt; #include <QTimer>;
#include &lt;QWidget&gt; #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)

View file

@ -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`

View file

@ -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"

View file

@ -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.

View file

@ -84,7 +84,7 @@ fn create_ui(app: &gtk::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() {

View file

@ -195,7 +195,7 @@ fn create_ui(app: &gtk::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() {

View file

@ -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")]

View file

@ -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

View file

@ -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).
&gt; NOTE: Smart rendering can not work in tracks where #GESTrack:mixing
&gt; 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.
&gt; **NOTE**: Restriction caps are **not** taken into account when
&gt; 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">

View file

@ -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

View file

@ -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>

View file

@ -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">

View file

@ -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

View file

@ -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>

View file

@ -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>

View file

@ -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.
&gt; *NOTE*: Single segment is not property supported when using
&gt; #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">&gt; *NOTE*: Fixed framerate won't be enforced when #encodebin:avoid-reencoding
&gt; 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"/>

View file

@ -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>

View file

@ -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 &amp; 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 &amp;
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>

View file

@ -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

View file

@ -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"] }

View file

@ -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

View file

@ -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,

View file

@ -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::*;

View file

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

View file

@ -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

View file

@ -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"]

View file

@ -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

View file

@ -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(),
)) ))
} }

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

View file

@ -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 {

View file

@ -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"))]

View file

@ -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 {

View file

@ -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 {

View file

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

View file

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

View file

@ -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 {

View file

@ -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

View file

@ -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 = []

View file

@ -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

View file

@ -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"))]

View file

@ -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,

View file

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

View file

@ -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"))]

View file

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

View file

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

View file

@ -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"))
}
}
}
} }

View file

@ -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()
}

View file

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

View file

@ -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

View file

@ -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 = []

View file

@ -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

View file

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

View file

@ -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,
)) ))
} }

View file

@ -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

View file

@ -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"]

View file

@ -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

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

View file

@ -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())
}
}

View file

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

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

View file

@ -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 }
//} //}

View 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),
)
}
}
}

View file

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

View file

@ -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

View file

@ -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"]

View file

@ -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

View file

@ -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(

View file

@ -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() }
//} //}

View file

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

View file

@ -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 {}

View file

@ -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

View file

@ -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"]

View file

@ -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

View file

@ -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::*;

View file

@ -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::*;

View file

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

View file

@ -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 {}

View file

@ -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

View file

@ -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"]

View file

@ -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

View file

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

View file

@ -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