1#![cfg_attr(docsrs, feature(doc_cfg))]
4#![allow(clippy::missing_safety_doc)]
5#![allow(clippy::manual_range_contains)]
6#![allow(clippy::manual_c_str_literals)]
7#![doc = include_str!("../README.md")]
8
9pub use glib;
11pub use gstreamer_sys as ffi;
12#[deprecated = "Use `gst::pastey` instead"]
13pub use pastey as paste;
14pub use pastey;
15
16#[doc(hidden)]
17pub static INITIALIZED: std::sync::atomic::AtomicBool = std::sync::atomic::AtomicBool::new(false);
18
19#[cold]
20#[inline(never)]
21#[track_caller]
22pub fn assert_initialized() {
23 #[allow(unused_unsafe)]
24 if unsafe { ffi::gst_is_initialized() } != glib::ffi::GTRUE {
25 panic!("GStreamer has not been initialized. Call `gst::init` first.");
26 } else {
27 crate::INITIALIZED.store(true, std::sync::atomic::Ordering::SeqCst);
28 }
29}
30
31macro_rules! assert_initialized_main_thread {
32 () => {
33 if !crate::INITIALIZED.load(std::sync::atomic::Ordering::SeqCst) {
34 $crate::assert_initialized();
35 }
36 };
37}
38
39macro_rules! skip_assert_initialized {
40 () => {};
41}
42
43#[allow(clippy::needless_borrow)]
44#[allow(clippy::let_unit_value)]
45#[allow(unused_imports)]
46mod auto;
47pub use crate::auto::*;
48
49#[macro_use]
50#[cfg(feature = "serde")]
51mod serde_macros;
52
53#[macro_use]
54pub mod log;
55#[cfg(feature = "v1_28")]
56#[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
57pub mod log_context;
58#[cfg(feature = "log")]
59pub use crate::log::DebugCategoryLogger;
60pub use crate::log::{
61 DebugCategory, DebugLogFunction, DebugLogger, DebugMessage, LoggedObject, CAT_BUFFER,
62 CAT_BUFFER_LIST, CAT_BUS, CAT_CALL_TRACE, CAT_CAPS, CAT_CLOCK, CAT_CONTEXT, CAT_DEFAULT,
63 CAT_ELEMENT_PADS, CAT_ERROR_SYSTEM, CAT_EVENT, CAT_GST_INIT, CAT_LOCKING, CAT_MEMORY,
64 CAT_MESSAGE, CAT_META, CAT_NEGOTIATION, CAT_PADS, CAT_PARAMS, CAT_PARENTAGE, CAT_PERFORMANCE,
65 CAT_PIPELINE, CAT_PLUGIN_INFO, CAT_PLUGIN_LOADING, CAT_PROBE, CAT_PROPERTIES, CAT_QOS,
66 CAT_REFCOUNTING, CAT_REGISTRY, CAT_RUST, CAT_SCHEDULING, CAT_SIGNAL, CAT_STATES,
67};
68
69#[cfg(feature = "v1_28")]
70#[cfg_attr(docsrs, doc(cfg(feature = "v1_28")))]
71pub use crate::log_context::{LogContext, LogContextBuilder};
72
73#[cfg(target_os = "macos")]
74mod macos;
75#[cfg(target_os = "macos")]
76pub use crate::macos::*;
77
78#[macro_use]
79mod error;
80pub use crate::error::*;
81
82#[macro_use]
83pub mod miniobject;
84pub use miniobject::{MiniObject, MiniObjectRef};
85
86#[macro_use]
87mod value;
88pub use crate::value::{
89 Array, ArrayRef, Bitmask, Fraction, FractionRange, IntRange, List, ListRef,
90};
91#[cfg(feature = "serde")]
92#[macro_use]
93mod value_serde;
94
95#[macro_use]
96mod id_str;
97pub use crate::id_str::IdStr;
98
99#[cfg(feature = "serde")]
100mod flag_serde;
101
102pub mod message;
103pub use crate::message::{Message, MessageErrorDomain, MessageRef, MessageView, MessageViewMut};
104
105pub mod structure;
106pub use crate::structure::{Structure, StructureRef};
107#[cfg(feature = "serde")]
108mod structure_serde;
109
110pub mod caps;
111pub use crate::caps::{Caps, CapsFilterMapAction, CapsRef};
112mod caps_features;
113#[cfg(feature = "serde")]
114mod caps_serde;
115pub use crate::caps_features::{
116 CapsFeatures, CapsFeaturesRef, CAPS_FEATURES_MEMORY_SYSTEM_MEMORY,
117 CAPS_FEATURE_MEMORY_SYSTEM_MEMORY,
118};
119#[cfg(feature = "serde")]
120mod caps_features_serde;
121
122pub mod tags;
123pub use crate::tags::{
124 tag_exists, tag_get_description, tag_get_flag, tag_get_nick, tag_get_type, Tag, TagList,
125 TagListRef,
126};
127#[cfg(feature = "serde")]
128mod tags_serde;
129
130#[macro_use]
131pub mod meta;
132#[cfg(feature = "v1_16")]
133#[cfg_attr(docsrs, doc(cfg(feature = "v1_16")))]
134pub use crate::meta::MetaSeqnum;
135pub use crate::meta::{
136 Meta, MetaAPI, MetaAPIExt, MetaRef, MetaRefMut, ParentBufferMeta, ProtectionMeta,
137 ReferenceTimestampMeta,
138};
139pub mod buffer;
140pub use crate::buffer::{
141 Buffer, BufferMap, BufferRef, MappedBuffer, BUFFER_COPY_ALL, BUFFER_COPY_METADATA,
142};
143mod buffer_cursor;
144pub use crate::buffer_cursor::{BufferCursor, BufferRefCursor};
145pub mod memory;
146mod memory_wrapped;
147#[cfg(feature = "v1_26")]
148#[cfg_attr(docsrs, doc(cfg(feature = "v1_26")))]
149pub use crate::memory::MemoryRefTrace;
150pub use crate::memory::{MappedMemory, Memory, MemoryMap, MemoryRef};
151#[cfg(feature = "serde")]
152mod buffer_serde;
153pub mod slice;
154
155pub mod sample;
156pub use crate::sample::{Sample, SampleRef};
157#[cfg(feature = "serde")]
158mod sample_serde;
159
160pub mod bufferlist;
161pub use crate::bufferlist::{BufferList, BufferListRef};
162#[cfg(feature = "serde")]
163mod bufferlist_serde;
164
165pub mod query;
166pub use crate::query::{Query, QueryRef, QueryView, QueryViewMut};
167pub mod event;
168pub use crate::event::{Event, EventRef, EventView, EventViewMut, GroupId, Seqnum};
169pub mod context;
170pub use crate::context::{Context, ContextRef};
171mod rank;
172pub use crate::rank::Rank;
173mod static_caps;
174pub use crate::static_caps::*;
175mod static_pad_template;
176pub use crate::static_pad_template::*;
177
178pub mod promise;
179pub use promise::{Promise, PromiseError};
180
181pub mod bus;
182mod element;
183pub mod element_factory;
184
185mod bin;
186pub use bin::BinBuilder;
187
188mod pipeline;
189pub use pipeline::PipelineBuilder;
190
191mod allocation_params;
192pub use self::allocation_params::AllocationParams;
193mod allocator;
194
195mod element_factory_type;
196pub use element_factory_type::*;
197
198mod tracer;
199mod tracer_factory;
200
201#[cfg(any(unix, docsrs))]
203mod bus_unix;
204#[cfg(any(windows, docsrs))]
205mod bus_windows;
206
207mod child_proxy;
208mod date_time;
209#[cfg(feature = "serde")]
210mod date_time_serde;
211mod device_monitor;
212mod device_provider;
213mod device_provider_factory;
214mod enums;
215mod ghost_pad;
216pub mod gobject;
217mod iterator;
218mod object;
219mod pad;
220pub use pad::{
221 EventForeachAction, PadBuilder, PadGetRangeSuccess, PadProbeData, PadProbeId, PadProbeInfo,
222 StreamLock,
223};
224mod control_binding;
225mod control_source;
226mod parse_context;
227mod proxy_pad;
228mod registry;
229mod tag_setter;
230pub mod task;
231pub use task::{TaskLock, TaskLockGuard};
232mod task_pool;
233pub use self::iterator::{Iterator, IteratorError, IteratorImpl, StdIterator};
234pub use crate::{
235 device_monitor::DeviceMonitorFilterId,
236 element::{
237 ElementMessageType, NotifyWatchId, ELEMENT_METADATA_AUTHOR, ELEMENT_METADATA_DESCRIPTION,
238 ELEMENT_METADATA_DOC_URI, ELEMENT_METADATA_ICON_NAME, ELEMENT_METADATA_KLASS,
239 ELEMENT_METADATA_LONGNAME,
240 },
241 enums::{
242 ClockError, ClockSuccess, FlowError, FlowReturn, FlowSuccess, MessageType, PadLinkError,
243 PadLinkReturn, PadLinkSuccess, StateChangeError, StateChangeSuccess, TagError,
244 },
245 parse_context::ParseContext,
246 task_pool::{TaskHandle, TaskPoolTaskHandle},
247};
248mod plugin_feature;
249
250mod plugin;
251pub mod stream;
252pub mod stream_collection;
253
254mod typefind;
255pub use crate::typefind::*;
256mod typefind_factory;
257
258pub mod format;
259pub use crate::format::{ClockTime, GenericFormattedValue, GenericSignedFormattedValue, Signed};
260
261mod segment;
262pub use crate::segment::*;
263#[cfg(feature = "serde")]
264mod segment_serde;
265
266pub mod toc;
267pub use crate::toc::{Toc, TocEntry, TocEntryRef, TocRef};
268#[cfg(feature = "serde")]
269mod toc_serde;
270
271mod clock;
272pub use crate::clock::{AtomicClockReturn, ClockId, PeriodicClockId, SingleShotClockId};
273
274mod buffer_pool;
275pub use crate::buffer_pool::{BufferPoolAcquireParams, BufferPoolConfig, BufferPoolConfigRef};
276
277mod pad_template;
278pub use pad_template::PadTemplateBuilder;
279
280pub mod param_spec;
281pub use crate::param_spec::{ParamSpecArray, ParamSpecFraction};
282
283mod functions;
284pub use crate::functions::*;
285
286mod utils;
287pub use crate::utils::ObjectLockGuard;
288
289pub mod parse;
290
291#[cfg(feature = "v1_18")]
292mod gtype;
293
294use std::ptr;
295
296#[doc(alias = "gst_init_check")]
297pub fn init() -> Result<(), glib::Error> {
298 unsafe {
299 use glib::translate::*;
300
301 let mut error = ptr::null_mut();
302 if from_glib(ffi::gst_init_check(
303 ptr::null_mut(),
304 ptr::null_mut(),
305 &mut error,
306 )) {
307 crate::INITIALIZED.store(true, std::sync::atomic::Ordering::SeqCst);
308 Ok(())
309 } else {
310 Err(from_glib_full(error))
311 }
312 }
313}
314
315pub unsafe fn deinit() {
323 crate::INITIALIZED.store(false, std::sync::atomic::Ordering::SeqCst);
324 ffi::gst_deinit();
325}
326
327pub const PARAM_FLAG_CONTROLLABLE: glib::ParamFlags = glib::ParamFlags::USER_1;
328pub const PARAM_FLAG_MUTABLE_READY: glib::ParamFlags = glib::ParamFlags::USER_2;
329pub const PARAM_FLAG_MUTABLE_PAUSED: glib::ParamFlags = glib::ParamFlags::USER_3;
330pub const PARAM_FLAG_MUTABLE_PLAYING: glib::ParamFlags = glib::ParamFlags::USER_4;
331#[cfg(feature = "v1_18")]
332pub const PARAM_FLAG_DOC_SHOW_DEFAULT: glib::ParamFlags = glib::ParamFlags::USER_5;
333#[cfg(feature = "v1_18")]
334pub const PARAM_FLAG_CONDITIONALLY_AVAILABLE: glib::ParamFlags = glib::ParamFlags::USER_6;
335
336pub mod prelude {
339 #[doc(hidden)]
340 pub use glib::prelude::*;
341 pub use muldiv::MulDiv;
342 pub use opt_ops::prelude::*;
343
344 #[cfg(any(unix, docsrs))]
346 pub use crate::bus_unix::UnixBusExtManual;
347 #[cfg(any(windows, docsrs))]
348 pub use crate::bus_windows::WindowsBusExtManual;
349 #[cfg(feature = "v1_18")]
350 pub use crate::gtype::PluginApiExt;
351 pub use crate::{
352 auto::traits::*,
353 bin::GstBinExtManual,
354 buffer_pool::BufferPoolExtManual,
355 child_proxy::ChildProxyExtManual,
356 clock::ClockExtManual,
357 control_binding::ControlBindingExtManual,
358 control_source::ControlSourceExtManual,
359 device_monitor::DeviceMonitorExtManual,
360 device_provider::{DeviceProviderClassExt, DeviceProviderExtManual},
361 element::{ElementClassExt, ElementExtManual},
362 format::prelude::*,
363 gobject::GObjectExtManualGst,
364 log::DebugLogger,
365 memory::MemoryType,
366 message::MessageErrorDomain,
367 meta::{MetaAPI, MetaAPIExt, MetaTag},
368 miniobject::IsMiniObject,
369 object::GstObjectExtManual,
370 pad::PadExtManual,
371 param_spec::GstParamSpecBuilderExt,
372 pipeline::GstPipelineExtManual,
373 plugin_feature::PluginFeatureExtManual,
374 slice::ByteSliceExt,
375 tag_setter::TagSetterExtManual,
376 tags::{CustomTag, Tag},
377 task_pool::{TaskHandle, TaskPoolExtManual},
378 typefind::TypeFindImpl,
379 utils::Displayable,
380 value::GstValueExt,
381 };
382}
383
384#[macro_use]
385pub mod subclass;