1#![cfg_attr(docsrs, feature(doc_cfg))]
4#![allow(clippy::missing_safety_doc)]
5#![allow(clippy::manual_c_str_literals)]
6#![doc = include_str!("../README.md")]
7
8use std::sync::Once;
9
10pub use glib;
11pub use gst;
12pub use gstreamer_pbutils_sys as ffi;
13
14static PBUTILS_INIT: Once = Once::new();
15
16macro_rules! assert_initialized_main_thread {
17 () => {
18 if !gst::INITIALIZED.load(std::sync::atomic::Ordering::SeqCst) {
19 gst::assert_initialized();
20 }
21 crate::PBUTILS_INIT.call_once(|| {
22 unsafe { crate::ffi::gst_pb_utils_init() };
23 });
24 };
25}
26
27macro_rules! skip_assert_initialized {
28 () => {};
29}
30
31#[allow(clippy::needless_borrow)]
32#[allow(unused_imports)]
33mod auto;
34pub use crate::auto::*;
35
36#[cfg(feature = "v1_20")]
37pub mod element_properties;
38#[cfg(feature = "v1_20")]
39pub use crate::element_properties::{ElementProperties, ElementPropertiesMapItem};
40
41#[cfg(feature = "serde")]
42mod flag_serde;
43
44mod discoverer;
45pub use crate::discoverer::*;
46
47mod discoverer_audio_info;
48mod discoverer_container_info;
49pub mod discoverer_stream_info;
50mod discoverer_subtitle_info;
51mod discoverer_video_info;
52pub mod missing_plugins;
53pub use missing_plugins::MissingPluginMessage;
54
55pub mod encoding_profile;
56
57pub mod functions;
58pub use crate::functions::*;
59
60pub mod subclass;
61
62pub mod audio_visualizer;
63
64pub mod prelude {
67 #[doc(hidden)]
68 pub use gst::prelude::*;
69
70 pub use crate::{
71 audio_visualizer::*,
72 auto::traits::*,
73 discoverer_stream_info::DiscovererStreamInfoExtManual,
74 encoding_profile::{
75 EncodingProfileBuilder, EncodingProfileExtManual, EncodingProfileHasRestrictionGetter,
76 },
77 functions::CodecTag,
78 };
79}