mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2024-11-25 19:11:06 +00:00
regenerate
This commit is contained in:
parent
c417ee8a56
commit
1b0a20e52f
35 changed files with 1432 additions and 38 deletions
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -52,7 +52,7 @@ pub trait AggregatorExt: 'static {
|
|||
fn simple_get_next_time(&self) -> gst::ClockTime;
|
||||
|
||||
//#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
//fn update_segment(&self, segment: /*Ignored*/&mut gst::Segment);
|
||||
//fn update_segment(&self, segment: /*Ignored*/&gst::Segment);
|
||||
|
||||
fn get_property_start_time(&self) -> u64;
|
||||
|
||||
|
@ -134,7 +134,7 @@ impl<O: IsA<Aggregator>> AggregatorExt for O {
|
|||
}
|
||||
|
||||
//#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
//fn update_segment(&self, segment: /*Ignored*/&mut gst::Segment) {
|
||||
//fn update_segment(&self, segment: /*Ignored*/&gst::Segment) {
|
||||
// unsafe { TODO: call gst_base_sys:gst_aggregator_update_segment() }
|
||||
//}
|
||||
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
// DO NOT EDIT
|
||||
|
||||
use ges_sys;
|
||||
use glib::object::IsA;
|
||||
use glib::translate::*;
|
||||
use Extractable;
|
||||
use TimelineElement;
|
||||
|
@ -16,6 +17,41 @@ glib_wrapper! {
|
|||
}
|
||||
}
|
||||
|
||||
impl BaseEffect {}
|
||||
|
||||
pub const NONE_BASE_EFFECT: Option<&BaseEffect> = None;
|
||||
|
||||
pub trait BaseEffectExt: 'static {
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn is_time_effect(&self) -> bool;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn register_time_property(&self, child_property_name: &str) -> bool;
|
||||
|
||||
//#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
//fn set_time_translation_funcs(&self, source_to_sink_func: /*Unimplemented*/Fn(&BaseEffect, gst::ClockTime, /*Unimplemented*/HashTable TypeId { ns_id: 0, id: 28 }/TypeId { ns_id: 3, id: 11 }) -> gst::ClockTime, sink_to_source_func: /*Unimplemented*/Fn(&BaseEffect, gst::ClockTime, /*Unimplemented*/HashTable TypeId { ns_id: 0, id: 28 }/TypeId { ns_id: 3, id: 11 }) -> gst::ClockTime, user_data: /*Unimplemented*/Option<Fundamental: Pointer>) -> bool;
|
||||
}
|
||||
|
||||
impl<O: IsA<BaseEffect>> BaseEffectExt for O {
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn is_time_effect(&self) -> bool {
|
||||
unsafe {
|
||||
from_glib(ges_sys::ges_base_effect_is_time_effect(
|
||||
self.as_ref().to_glib_none().0,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn register_time_property(&self, child_property_name: &str) -> bool {
|
||||
unsafe {
|
||||
from_glib(ges_sys::ges_base_effect_register_time_property(
|
||||
self.as_ref().to_glib_none().0,
|
||||
child_property_name.to_glib_none().0,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
//#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
//fn set_time_translation_funcs(&self, source_to_sink_func: /*Unimplemented*/Fn(&BaseEffect, gst::ClockTime, /*Unimplemented*/HashTable TypeId { ns_id: 0, id: 28 }/TypeId { ns_id: 3, id: 11 }) -> gst::ClockTime, sink_to_source_func: /*Unimplemented*/Fn(&BaseEffect, gst::ClockTime, /*Unimplemented*/HashTable TypeId { ns_id: 0, id: 28 }/TypeId { ns_id: 3, id: 11 }) -> gst::ClockTime, user_data: /*Unimplemented*/Option<Fundamental: Pointer>) -> bool {
|
||||
// unsafe { TODO: call ges_sys:ges_base_effect_set_time_translation_funcs() }
|
||||
//}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,10 @@ 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 gst;
|
||||
use std::boxed::Box as Box_;
|
||||
use std::mem::transmute;
|
||||
|
@ -18,6 +21,7 @@ use Asset;
|
|||
use BaseEffect;
|
||||
use Container;
|
||||
use Extractable;
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
use FrameNumber;
|
||||
use Layer;
|
||||
use TimelineElement;
|
||||
|
@ -44,6 +48,10 @@ pub trait ClipExt: 'static {
|
|||
track: &Q,
|
||||
) -> Result<TrackElement, glib::Error>;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn add_top_effect<P: IsA<BaseEffect>>(&self, effect: &P, index: i32)
|
||||
-> Result<(), glib::Error>;
|
||||
|
||||
fn find_track_element<P: IsA<Track>>(
|
||||
&self,
|
||||
track: Option<&P>,
|
||||
|
@ -57,10 +65,27 @@ pub trait ClipExt: 'static {
|
|||
type_: glib::types::Type,
|
||||
) -> Vec<TrackElement>;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn get_duration_limit(&self) -> gst::ClockTime;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn get_internal_time_from_timeline_time<P: IsA<TrackElement>>(
|
||||
&self,
|
||||
child: &P,
|
||||
timeline_time: gst::ClockTime,
|
||||
) -> Result<gst::ClockTime, glib::Error>;
|
||||
|
||||
fn get_layer(&self) -> Option<Layer>;
|
||||
|
||||
fn get_supported_formats(&self) -> TrackType;
|
||||
|
||||
fn get_timeline_time_from_internal_time<P: IsA<TrackElement>>(
|
||||
&self,
|
||||
child: &P,
|
||||
internal_time: gst::ClockTime,
|
||||
) -> Result<gst::ClockTime, glib::Error>;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn get_timeline_time_from_source_frame(
|
||||
&self,
|
||||
frame_number: FrameNumber,
|
||||
|
@ -74,6 +99,12 @@ pub trait ClipExt: 'static {
|
|||
|
||||
fn move_to_layer<P: IsA<Layer>>(&self, layer: &P) -> Result<(), glib::error::BoolError>;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn move_to_layer_full<P: IsA<Layer>>(&self, layer: &P) -> Result<(), glib::Error>;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn remove_top_effect<P: IsA<BaseEffect>>(&self, effect: &P) -> Result<(), glib::Error>;
|
||||
|
||||
fn set_supported_formats(&self, supportedformats: TrackType);
|
||||
|
||||
fn set_top_effect_index<P: IsA<BaseEffect>>(
|
||||
|
@ -82,6 +113,13 @@ pub trait ClipExt: 'static {
|
|||
newindex: u32,
|
||||
) -> Result<(), glib::error::BoolError>;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn set_top_effect_index_full<P: IsA<BaseEffect>>(
|
||||
&self,
|
||||
effect: &P,
|
||||
newindex: u32,
|
||||
) -> Result<(), glib::Error>;
|
||||
|
||||
fn set_top_effect_priority<P: IsA<BaseEffect>>(
|
||||
&self,
|
||||
effect: &P,
|
||||
|
@ -90,6 +128,16 @@ pub trait ClipExt: 'static {
|
|||
|
||||
fn split(&self, position: u64) -> Result<Clip, glib::BoolError>;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn split_full(&self, position: u64) -> Result<Option<Clip>, glib::Error>;
|
||||
|
||||
fn get_property_duration_limit(&self) -> u64;
|
||||
|
||||
fn connect_property_duration_limit_notify<F: Fn(&Self) + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId;
|
||||
|
||||
fn connect_property_layer_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
|
||||
|
||||
fn connect_property_supported_formats_notify<F: Fn(&Self) + 'static>(
|
||||
|
@ -130,6 +178,28 @@ impl<O: IsA<Clip>> ClipExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn add_top_effect<P: IsA<BaseEffect>>(
|
||||
&self,
|
||||
effect: &P,
|
||||
index: i32,
|
||||
) -> Result<(), glib::Error> {
|
||||
unsafe {
|
||||
let mut error = ptr::null_mut();
|
||||
let _ = ges_sys::ges_clip_add_top_effect(
|
||||
self.as_ref().to_glib_none().0,
|
||||
effect.as_ref().to_glib_none().0,
|
||||
index,
|
||||
&mut error,
|
||||
);
|
||||
if error.is_null() {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(from_glib_full(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn find_track_element<P: IsA<Track>>(
|
||||
&self,
|
||||
track: Option<&P>,
|
||||
|
@ -160,6 +230,37 @@ impl<O: IsA<Clip>> ClipExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn get_duration_limit(&self) -> gst::ClockTime {
|
||||
unsafe {
|
||||
from_glib(ges_sys::ges_clip_get_duration_limit(
|
||||
self.as_ref().to_glib_none().0,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn get_internal_time_from_timeline_time<P: IsA<TrackElement>>(
|
||||
&self,
|
||||
child: &P,
|
||||
timeline_time: gst::ClockTime,
|
||||
) -> Result<gst::ClockTime, glib::Error> {
|
||||
unsafe {
|
||||
let mut error = ptr::null_mut();
|
||||
let ret = ges_sys::ges_clip_get_internal_time_from_timeline_time(
|
||||
self.as_ref().to_glib_none().0,
|
||||
child.as_ref().to_glib_none().0,
|
||||
timeline_time.to_glib(),
|
||||
&mut error,
|
||||
);
|
||||
if error.is_null() {
|
||||
Ok(from_glib(ret))
|
||||
} else {
|
||||
Err(from_glib_full(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn get_layer(&self) -> Option<Layer> {
|
||||
unsafe { from_glib_full(ges_sys::ges_clip_get_layer(self.as_ref().to_glib_none().0)) }
|
||||
}
|
||||
|
@ -172,6 +273,28 @@ impl<O: IsA<Clip>> ClipExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
fn get_timeline_time_from_internal_time<P: IsA<TrackElement>>(
|
||||
&self,
|
||||
child: &P,
|
||||
internal_time: gst::ClockTime,
|
||||
) -> Result<gst::ClockTime, glib::Error> {
|
||||
unsafe {
|
||||
let mut error = ptr::null_mut();
|
||||
let ret = ges_sys::ges_clip_get_timeline_time_from_internal_time(
|
||||
self.as_ref().to_glib_none().0,
|
||||
child.as_ref().to_glib_none().0,
|
||||
internal_time.to_glib(),
|
||||
&mut error,
|
||||
);
|
||||
if error.is_null() {
|
||||
Ok(from_glib(ret))
|
||||
} else {
|
||||
Err(from_glib_full(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn get_timeline_time_from_source_frame(
|
||||
&self,
|
||||
frame_number: FrameNumber,
|
||||
|
@ -229,6 +352,40 @@ impl<O: IsA<Clip>> ClipExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn move_to_layer_full<P: IsA<Layer>>(&self, layer: &P) -> Result<(), glib::Error> {
|
||||
unsafe {
|
||||
let mut error = ptr::null_mut();
|
||||
let _ = ges_sys::ges_clip_move_to_layer_full(
|
||||
self.as_ref().to_glib_none().0,
|
||||
layer.as_ref().to_glib_none().0,
|
||||
&mut error,
|
||||
);
|
||||
if error.is_null() {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(from_glib_full(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn remove_top_effect<P: IsA<BaseEffect>>(&self, effect: &P) -> Result<(), glib::Error> {
|
||||
unsafe {
|
||||
let mut error = ptr::null_mut();
|
||||
let _ = ges_sys::ges_clip_remove_top_effect(
|
||||
self.as_ref().to_glib_none().0,
|
||||
effect.as_ref().to_glib_none().0,
|
||||
&mut error,
|
||||
);
|
||||
if error.is_null() {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(from_glib_full(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn set_supported_formats(&self, supportedformats: TrackType) {
|
||||
unsafe {
|
||||
ges_sys::ges_clip_set_supported_formats(
|
||||
|
@ -255,6 +412,28 @@ impl<O: IsA<Clip>> ClipExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn set_top_effect_index_full<P: IsA<BaseEffect>>(
|
||||
&self,
|
||||
effect: &P,
|
||||
newindex: u32,
|
||||
) -> Result<(), glib::Error> {
|
||||
unsafe {
|
||||
let mut error = ptr::null_mut();
|
||||
let _ = ges_sys::ges_clip_set_top_effect_index_full(
|
||||
self.as_ref().to_glib_none().0,
|
||||
effect.as_ref().to_glib_none().0,
|
||||
newindex,
|
||||
&mut error,
|
||||
);
|
||||
if error.is_null() {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(from_glib_full(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn set_top_effect_priority<P: IsA<BaseEffect>>(
|
||||
&self,
|
||||
effect: &P,
|
||||
|
@ -282,6 +461,62 @@ impl<O: IsA<Clip>> ClipExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn split_full(&self, position: u64) -> Result<Option<Clip>, glib::Error> {
|
||||
unsafe {
|
||||
let mut error = ptr::null_mut();
|
||||
let ret =
|
||||
ges_sys::ges_clip_split_full(self.as_ref().to_glib_none().0, position, &mut error);
|
||||
if error.is_null() {
|
||||
Ok(from_glib_none(ret))
|
||||
} else {
|
||||
Err(from_glib_full(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn get_property_duration_limit(&self) -> u64 {
|
||||
unsafe {
|
||||
let mut value = Value::from_type(<u64 as StaticType>::static_type());
|
||||
gobject_sys::g_object_get_property(
|
||||
self.to_glib_none().0 as *mut gobject_sys::GObject,
|
||||
b"duration-limit\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `duration-limit` getter")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
fn connect_property_duration_limit_notify<F: Fn(&Self) + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn notify_duration_limit_trampoline<P, F: Fn(&P) + 'static>(
|
||||
this: *mut ges_sys::GESClip,
|
||||
_param_spec: glib_sys::gpointer,
|
||||
f: glib_sys::gpointer,
|
||||
) where
|
||||
P: IsA<Clip>,
|
||||
{
|
||||
let f: &F = &*(f as *const F);
|
||||
f(&Clip::from_glib_borrow(this).unsafe_cast_ref())
|
||||
}
|
||||
unsafe {
|
||||
let f: Box_<F> = Box_::new(f);
|
||||
connect_raw(
|
||||
self.as_ptr() as *mut _,
|
||||
b"notify::duration-limit\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
notify_duration_limit_trampoline::<Self, F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fn connect_property_layer_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
|
||||
unsafe extern "C" fn notify_layer_trampoline<P, F: Fn(&P) + 'static>(
|
||||
this: *mut ges_sys::GESClip,
|
||||
|
|
|
@ -13,6 +13,8 @@ use glib_sys;
|
|||
use gst;
|
||||
use std::boxed::Box as Box_;
|
||||
use std::mem::transmute;
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
use std::ptr;
|
||||
use Asset;
|
||||
use Clip;
|
||||
use Extractable;
|
||||
|
@ -53,8 +55,21 @@ pub trait LayerExt: 'static {
|
|||
track_types: TrackType,
|
||||
) -> Result<Clip, glib::BoolError>;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn add_asset_full<P: IsA<Asset>>(
|
||||
&self,
|
||||
asset: &P,
|
||||
start: gst::ClockTime,
|
||||
inpoint: gst::ClockTime,
|
||||
duration: gst::ClockTime,
|
||||
track_types: TrackType,
|
||||
) -> Result<Clip, glib::Error>;
|
||||
|
||||
fn add_clip<P: IsA<Clip>>(&self, clip: &P) -> Result<(), glib::error::BoolError>;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn add_clip_full<P: IsA<Clip>>(&self, clip: &P) -> Result<(), glib::Error>;
|
||||
|
||||
fn get_active_for_track<P: IsA<Track>>(&self, track: &P) -> bool;
|
||||
|
||||
fn get_auto_transition(&self) -> bool;
|
||||
|
@ -119,6 +134,34 @@ impl<O: IsA<Layer>> LayerExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn add_asset_full<P: IsA<Asset>>(
|
||||
&self,
|
||||
asset: &P,
|
||||
start: gst::ClockTime,
|
||||
inpoint: gst::ClockTime,
|
||||
duration: gst::ClockTime,
|
||||
track_types: TrackType,
|
||||
) -> Result<Clip, glib::Error> {
|
||||
unsafe {
|
||||
let mut error = ptr::null_mut();
|
||||
let ret = ges_sys::ges_layer_add_asset_full(
|
||||
self.as_ref().to_glib_none().0,
|
||||
asset.as_ref().to_glib_none().0,
|
||||
start.to_glib(),
|
||||
inpoint.to_glib(),
|
||||
duration.to_glib(),
|
||||
track_types.to_glib(),
|
||||
&mut error,
|
||||
);
|
||||
if error.is_null() {
|
||||
Ok(from_glib_none(ret))
|
||||
} else {
|
||||
Err(from_glib_full(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn add_clip<P: IsA<Clip>>(&self, clip: &P) -> Result<(), glib::error::BoolError> {
|
||||
unsafe {
|
||||
glib_result_from_gboolean!(
|
||||
|
@ -131,6 +174,23 @@ impl<O: IsA<Layer>> LayerExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn add_clip_full<P: IsA<Clip>>(&self, clip: &P) -> Result<(), glib::Error> {
|
||||
unsafe {
|
||||
let mut error = ptr::null_mut();
|
||||
let _ = ges_sys::ges_layer_add_clip_full(
|
||||
self.as_ref().to_glib_none().0,
|
||||
clip.as_ref().to_glib_none().0,
|
||||
&mut error,
|
||||
);
|
||||
if error.is_null() {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(from_glib_full(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn get_active_for_track<P: IsA<Track>>(&self, track: &P) -> bool {
|
||||
unsafe {
|
||||
from_glib(ges_sys::ges_layer_get_active_for_track(
|
||||
|
|
|
@ -7,6 +7,7 @@ pub use self::asset::AssetExt;
|
|||
pub use self::asset::{Asset, AssetClass, NONE_ASSET};
|
||||
|
||||
mod base_effect;
|
||||
pub use self::base_effect::BaseEffectExt;
|
||||
pub use self::base_effect::{BaseEffect, BaseEffectClass, NONE_BASE_EFFECT};
|
||||
|
||||
mod clip;
|
||||
|
@ -83,6 +84,7 @@ pub use self::alias::FrameNumber;
|
|||
#[doc(hidden)]
|
||||
pub mod traits {
|
||||
pub use super::AssetExt;
|
||||
pub use super::BaseEffectExt;
|
||||
pub use super::ClipExt;
|
||||
pub use super::EffectExt;
|
||||
pub use super::ExtractableExt;
|
||||
|
|
|
@ -246,7 +246,7 @@ impl<O: IsA<Project>> ProjectExt for O {
|
|||
self.as_ref().to_glib_none().0,
|
||||
timeline.as_ref().to_glib_none().0,
|
||||
uri.to_glib_none().0,
|
||||
formatter_asset.map(|p| p.as_ref()).to_glib_none().0,
|
||||
formatter_asset.map(|p| p.as_ref()).to_glib_full(),
|
||||
overwrite.to_glib(),
|
||||
&mut error,
|
||||
);
|
||||
|
|
|
@ -490,7 +490,7 @@ impl<O: IsA<Timeline>> TimelineExt for O {
|
|||
}
|
||||
|
||||
//fn connect_group_removed<Unsupported or ignored types>(&self, f: F) -> SignalHandlerId {
|
||||
// Empty ctype children: *.PtrArray TypeId { ns_id: 1, id: 52 }
|
||||
// Empty ctype children: *.PtrArray TypeId { ns_id: 1, id: 53 }
|
||||
//}
|
||||
|
||||
fn connect_layer_added<F: Fn(&Self, &Layer) + 'static>(&self, f: F) -> SignalHandlerId {
|
||||
|
|
|
@ -20,6 +20,8 @@ use std::boxed::Box as Box_;
|
|||
use std::mem;
|
||||
use std::mem::transmute;
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
use std::ptr;
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
use Edge;
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
use EditMode;
|
||||
|
@ -54,6 +56,15 @@ pub trait TimelineElementExt: 'static {
|
|||
position: u64,
|
||||
) -> bool;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn edit_full(
|
||||
&self,
|
||||
new_layer_priority: i64,
|
||||
mode: EditMode,
|
||||
edge: Edge,
|
||||
position: u64,
|
||||
) -> Result<(), glib::Error>;
|
||||
|
||||
//fn get_child_properties(&self, first_property_name: &str, : /*Unknown conversion*//*Unimplemented*/Fundamental: VarArgs);
|
||||
|
||||
//fn get_child_property(&self, property_name: &str, value: /*Ignored*/glib::Value) -> bool;
|
||||
|
@ -110,6 +121,9 @@ pub trait TimelineElementExt: 'static {
|
|||
|
||||
//fn set_child_property_by_pspec(&self, pspec: /*Ignored*/&glib::ParamSpec, value: /*Ignored*/&glib::Value);
|
||||
|
||||
//#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
//fn set_child_property_full(&self, property_name: &str, value: /*Ignored*/&glib::Value) -> Result<(), glib::Error>;
|
||||
|
||||
//fn set_child_property_valist(&self, first_property_name: &str, var_args: /*Unknown conversion*//*Unimplemented*/Unsupported);
|
||||
|
||||
fn set_duration(&self, duration: gst::ClockTime) -> bool;
|
||||
|
@ -203,6 +217,32 @@ impl<O: IsA<TimelineElement>> TimelineElementExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn edit_full(
|
||||
&self,
|
||||
new_layer_priority: i64,
|
||||
mode: EditMode,
|
||||
edge: Edge,
|
||||
position: u64,
|
||||
) -> Result<(), glib::Error> {
|
||||
unsafe {
|
||||
let mut error = ptr::null_mut();
|
||||
let _ = ges_sys::ges_timeline_element_edit_full(
|
||||
self.as_ref().to_glib_none().0,
|
||||
new_layer_priority,
|
||||
mode.to_glib(),
|
||||
edge.to_glib(),
|
||||
position,
|
||||
&mut error,
|
||||
);
|
||||
if error.is_null() {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(from_glib_full(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//fn get_child_properties(&self, first_property_name: &str, : /*Unknown conversion*//*Unimplemented*/Fundamental: VarArgs) {
|
||||
// unsafe { TODO: call ges_sys:ges_timeline_element_get_child_properties() }
|
||||
//}
|
||||
|
@ -402,6 +442,11 @@ impl<O: IsA<TimelineElement>> TimelineElementExt for O {
|
|||
// unsafe { TODO: call ges_sys:ges_timeline_element_set_child_property_by_pspec() }
|
||||
//}
|
||||
|
||||
//#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
//fn set_child_property_full(&self, property_name: &str, value: /*Ignored*/&glib::Value) -> Result<(), glib::Error> {
|
||||
// unsafe { TODO: call ges_sys:ges_timeline_element_set_child_property_full() }
|
||||
//}
|
||||
|
||||
//fn set_child_property_valist(&self, first_property_name: &str, var_args: /*Unknown conversion*//*Unimplemented*/Unsupported) {
|
||||
// unsafe { TODO: call ges_sys:ges_timeline_element_set_child_property_valist() }
|
||||
//}
|
||||
|
|
|
@ -18,6 +18,8 @@ use gobject_sys;
|
|||
use gst;
|
||||
use std::boxed::Box as Box_;
|
||||
use std::mem::transmute;
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
use std::ptr;
|
||||
use Timeline;
|
||||
use TrackElement;
|
||||
use TrackType;
|
||||
|
@ -42,6 +44,9 @@ pub const NONE_TRACK: Option<&Track> = None;
|
|||
pub trait GESTrackExt: 'static {
|
||||
fn add_element<P: IsA<TrackElement>>(&self, object: &P) -> Result<(), glib::error::BoolError>;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn add_element_full<P: IsA<TrackElement>>(&self, object: &P) -> Result<(), glib::Error>;
|
||||
|
||||
fn commit(&self) -> bool;
|
||||
|
||||
fn get_caps(&self) -> Option<gst::Caps>;
|
||||
|
@ -60,6 +65,9 @@ pub trait GESTrackExt: 'static {
|
|||
object: &P,
|
||||
) -> Result<(), glib::error::BoolError>;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn remove_element_full<P: IsA<TrackElement>>(&self, object: &P) -> Result<(), glib::Error>;
|
||||
|
||||
//fn set_create_element_for_gap_func<P: Fn(&Track) -> gst::Element + 'static>(&self, func: P);
|
||||
|
||||
fn set_mixing(&self, mixing: bool);
|
||||
|
@ -120,6 +128,23 @@ impl<O: IsA<Track>> GESTrackExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn add_element_full<P: IsA<TrackElement>>(&self, object: &P) -> Result<(), glib::Error> {
|
||||
unsafe {
|
||||
let mut error = ptr::null_mut();
|
||||
let _ = ges_sys::ges_track_add_element_full(
|
||||
self.as_ref().to_glib_none().0,
|
||||
object.as_ref().to_glib_none().0,
|
||||
&mut error,
|
||||
);
|
||||
if error.is_null() {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(from_glib_full(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn commit(&self) -> bool {
|
||||
unsafe { from_glib(ges_sys::ges_track_commit(self.as_ref().to_glib_none().0)) }
|
||||
}
|
||||
|
@ -176,6 +201,23 @@ impl<O: IsA<Track>> GESTrackExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn remove_element_full<P: IsA<TrackElement>>(&self, object: &P) -> Result<(), glib::Error> {
|
||||
unsafe {
|
||||
let mut error = ptr::null_mut();
|
||||
let _ = ges_sys::ges_track_remove_element_full(
|
||||
self.as_ref().to_glib_none().0,
|
||||
object.as_ref().to_glib_none().0,
|
||||
&mut error,
|
||||
);
|
||||
if error.is_null() {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(from_glib_full(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//fn set_create_element_for_gap_func<P: Fn(&Track) -> gst::Element + 'static>(&self, func: P) {
|
||||
// unsafe { TODO: call ges_sys:ges_track_set_create_element_for_gap_func() }
|
||||
//}
|
||||
|
|
|
@ -43,6 +43,9 @@ pub trait TrackElementExt: 'static {
|
|||
whitelist: &[&str],
|
||||
);
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn clamp_control_source(&self, property_name: &str);
|
||||
|
||||
#[cfg_attr(feature = "v1_18", deprecated)]
|
||||
fn edit(
|
||||
&self,
|
||||
|
@ -54,6 +57,9 @@ pub trait TrackElementExt: 'static {
|
|||
|
||||
//fn get_all_control_bindings(&self) -> /*Unknown conversion*//*Unimplemented*/HashTable TypeId { ns_id: 0, id: 28 }/TypeId { ns_id: 6, id: 83 };
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn get_auto_clamp_control_sources(&self) -> bool;
|
||||
|
||||
//fn get_control_binding(&self, property_name: &str) -> /*Ignored*/Option<gst::ControlBinding>;
|
||||
|
||||
fn get_element(&self) -> Option<gst::Element>;
|
||||
|
@ -70,12 +76,18 @@ pub trait TrackElementExt: 'static {
|
|||
|
||||
fn is_active(&self) -> bool;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn is_core(&self) -> bool;
|
||||
|
||||
//fn lookup_child(&self, prop_name: &str, pspec: /*Ignored*/glib::ParamSpec) -> Option<gst::Element>;
|
||||
|
||||
fn remove_control_binding(&self, property_name: &str) -> Result<(), glib::error::BoolError>;
|
||||
|
||||
fn set_active(&self, active: bool) -> bool;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn set_auto_clamp_control_sources(&self, auto_clamp: bool);
|
||||
|
||||
//fn set_control_source(&self, source: /*Ignored*/&gst::ControlSource, property_name: &str, binding_type: &str) -> bool;
|
||||
|
||||
fn set_has_internal_source(&self, has_internal_source: bool);
|
||||
|
@ -84,6 +96,10 @@ pub trait TrackElementExt: 'static {
|
|||
|
||||
fn get_property_active(&self) -> bool;
|
||||
|
||||
fn get_property_auto_clamp_control_sources(&self) -> bool;
|
||||
|
||||
fn set_property_auto_clamp_control_sources(&self, auto_clamp_control_sources: bool);
|
||||
|
||||
fn get_property_has_internal_source(&self) -> bool;
|
||||
|
||||
//fn connect_control_binding_added<Unsupported or ignored types>(&self, f: F) -> SignalHandlerId;
|
||||
|
@ -92,6 +108,11 @@ pub trait TrackElementExt: 'static {
|
|||
|
||||
fn connect_property_active_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
|
||||
|
||||
fn connect_property_auto_clamp_control_sources_notify<F: Fn(&Self) + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId;
|
||||
|
||||
fn connect_property_has_internal_source_notify<F: Fn(&Self) + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
|
@ -121,6 +142,16 @@ impl<O: IsA<TrackElement>> TrackElementExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn clamp_control_source(&self, property_name: &str) {
|
||||
unsafe {
|
||||
ges_sys::ges_track_element_clamp_control_source(
|
||||
self.as_ref().to_glib_none().0,
|
||||
property_name.to_glib_none().0,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn edit(
|
||||
&self,
|
||||
layers: &[Layer],
|
||||
|
@ -146,6 +177,15 @@ impl<O: IsA<TrackElement>> TrackElementExt for O {
|
|||
// unsafe { TODO: call ges_sys:ges_track_element_get_all_control_bindings() }
|
||||
//}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn get_auto_clamp_control_sources(&self) -> bool {
|
||||
unsafe {
|
||||
from_glib(ges_sys::ges_track_element_get_auto_clamp_control_sources(
|
||||
self.as_ref().to_glib_none().0,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
//fn get_control_binding(&self, property_name: &str) -> /*Ignored*/Option<gst::ControlBinding> {
|
||||
// unsafe { TODO: call ges_sys:ges_track_element_get_control_binding() }
|
||||
//}
|
||||
|
@ -206,6 +246,15 @@ impl<O: IsA<TrackElement>> TrackElementExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn is_core(&self) -> bool {
|
||||
unsafe {
|
||||
from_glib(ges_sys::ges_track_element_is_core(
|
||||
self.as_ref().to_glib_none().0,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
//fn lookup_child(&self, prop_name: &str, pspec: /*Ignored*/glib::ParamSpec) -> Option<gst::Element> {
|
||||
// unsafe { TODO: call ges_sys:ges_track_element_lookup_child() }
|
||||
//}
|
||||
|
@ -231,6 +280,16 @@ impl<O: IsA<TrackElement>> TrackElementExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn set_auto_clamp_control_sources(&self, auto_clamp: bool) {
|
||||
unsafe {
|
||||
ges_sys::ges_track_element_set_auto_clamp_control_sources(
|
||||
self.as_ref().to_glib_none().0,
|
||||
auto_clamp.to_glib(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//fn set_control_source(&self, source: /*Ignored*/&gst::ControlSource, property_name: &str, binding_type: &str) -> bool {
|
||||
// unsafe { TODO: call ges_sys:ges_track_element_set_control_source() }
|
||||
//}
|
||||
|
@ -268,6 +327,31 @@ impl<O: IsA<TrackElement>> TrackElementExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
fn get_property_auto_clamp_control_sources(&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"auto-clamp-control-sources\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `auto-clamp-control-sources` getter")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
fn set_property_auto_clamp_control_sources(&self, auto_clamp_control_sources: bool) {
|
||||
unsafe {
|
||||
gobject_sys::g_object_set_property(
|
||||
self.to_glib_none().0 as *mut gobject_sys::GObject,
|
||||
b"auto-clamp-control-sources\0".as_ptr() as *const _,
|
||||
Value::from(&auto_clamp_control_sources).to_glib_none().0,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn get_property_has_internal_source(&self) -> bool {
|
||||
unsafe {
|
||||
let mut value = Value::from_type(<bool as StaticType>::static_type());
|
||||
|
@ -315,6 +399,33 @@ impl<O: IsA<TrackElement>> TrackElementExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
fn connect_property_auto_clamp_control_sources_notify<F: Fn(&Self) + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn notify_auto_clamp_control_sources_trampoline<P, F: Fn(&P) + 'static>(
|
||||
this: *mut ges_sys::GESTrackElement,
|
||||
_param_spec: glib_sys::gpointer,
|
||||
f: glib_sys::gpointer,
|
||||
) where
|
||||
P: IsA<TrackElement>,
|
||||
{
|
||||
let f: &F = &*(f as *const F);
|
||||
f(&TrackElement::from_glib_borrow(this).unsafe_cast_ref())
|
||||
}
|
||||
unsafe {
|
||||
let f: Box_<F> = Box_::new(f);
|
||||
connect_raw(
|
||||
self.as_ptr() as *mut _,
|
||||
b"notify::auto-clamp-control-sources\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
notify_auto_clamp_control_sources_trampoline::<Self, F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fn connect_property_has_internal_source_notify<F: Fn(&Self) + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -70,6 +70,7 @@ pub trait GLWindowExt: 'static {
|
|||
|
||||
fn send_mouse_event(&self, event_type: &str, button: i32, posx: f64, posy: f64);
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn send_scroll_event(&self, posx: f64, posy: f64, delta_x: f64, delta_y: f64);
|
||||
|
||||
fn set_preferred_size(&self, width: i32, height: i32);
|
||||
|
@ -204,6 +205,7 @@ impl<O: IsA<GLWindow>> GLWindowExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn send_scroll_event(&self, posx: f64, posy: f64, delta_x: f64, delta_y: f64) {
|
||||
unsafe {
|
||||
gst_gl_sys::gst_gl_window_send_scroll_event(
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -79,6 +79,9 @@ pub trait RTSPMediaExt: 'static {
|
|||
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
||||
fn get_do_retransmission(&self) -> bool;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn get_dscp_qos(&self) -> i32;
|
||||
|
||||
fn get_element(&self) -> Option<gst::Element>;
|
||||
|
||||
fn get_latency(&self) -> u32;
|
||||
|
@ -167,6 +170,9 @@ pub trait RTSPMediaExt: 'static {
|
|||
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
||||
fn set_do_retransmission(&self, do_retransmission: bool);
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn set_dscp_qos(&self, dscp_qos: i32);
|
||||
|
||||
fn set_eos_shutdown(&self, eos_shutdown: bool);
|
||||
|
||||
fn set_latency(&self, latency: u32);
|
||||
|
@ -220,6 +226,10 @@ pub trait RTSPMediaExt: 'static {
|
|||
|
||||
fn set_property_bind_mcast_address(&self, bind_mcast_address: bool);
|
||||
|
||||
fn get_property_dscp_qos(&self) -> i32;
|
||||
|
||||
fn set_property_dscp_qos(&self, dscp_qos: i32);
|
||||
|
||||
fn get_property_eos_shutdown(&self) -> bool;
|
||||
|
||||
fn get_property_max_mcast_ttl(&self) -> u32;
|
||||
|
@ -271,6 +281,11 @@ pub trait RTSPMediaExt: 'static {
|
|||
f: F,
|
||||
) -> SignalHandlerId;
|
||||
|
||||
fn connect_property_dscp_qos_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId;
|
||||
|
||||
fn connect_property_eos_shutdown_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
|
@ -401,6 +416,11 @@ impl<O: IsA<RTSPMedia>> RTSPMediaExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn get_dscp_qos(&self) -> i32 {
|
||||
unsafe { gst_rtsp_server_sys::gst_rtsp_media_get_dscp_qos(self.as_ref().to_glib_none().0) }
|
||||
}
|
||||
|
||||
fn get_element(&self) -> Option<gst::Element> {
|
||||
unsafe {
|
||||
from_glib_full(gst_rtsp_server_sys::gst_rtsp_media_get_element(
|
||||
|
@ -700,6 +720,16 @@ impl<O: IsA<RTSPMedia>> RTSPMediaExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn set_dscp_qos(&self, dscp_qos: i32) {
|
||||
unsafe {
|
||||
gst_rtsp_server_sys::gst_rtsp_media_set_dscp_qos(
|
||||
self.as_ref().to_glib_none().0,
|
||||
dscp_qos,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn set_eos_shutdown(&self, eos_shutdown: bool) {
|
||||
unsafe {
|
||||
gst_rtsp_server_sys::gst_rtsp_media_set_eos_shutdown(
|
||||
|
@ -923,6 +953,31 @@ impl<O: IsA<RTSPMedia>> RTSPMediaExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
fn get_property_dscp_qos(&self) -> i32 {
|
||||
unsafe {
|
||||
let mut value = Value::from_type(<i32 as StaticType>::static_type());
|
||||
gobject_sys::g_object_get_property(
|
||||
self.to_glib_none().0 as *mut gobject_sys::GObject,
|
||||
b"dscp-qos\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `dscp-qos` getter")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
fn set_property_dscp_qos(&self, dscp_qos: i32) {
|
||||
unsafe {
|
||||
gobject_sys::g_object_set_property(
|
||||
self.to_glib_none().0 as *mut gobject_sys::GObject,
|
||||
b"dscp-qos\0".as_ptr() as *const _,
|
||||
Value::from(&dscp_qos).to_glib_none().0,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn get_property_eos_shutdown(&self) -> bool {
|
||||
unsafe {
|
||||
let mut value = Value::from_type(<bool as StaticType>::static_type());
|
||||
|
@ -1268,6 +1323,33 @@ impl<O: IsA<RTSPMedia>> RTSPMediaExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
fn connect_property_dscp_qos_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn notify_dscp_qos_trampoline<P, F: Fn(&P) + Send + Sync + 'static>(
|
||||
this: *mut gst_rtsp_server_sys::GstRTSPMedia,
|
||||
_param_spec: glib_sys::gpointer,
|
||||
f: glib_sys::gpointer,
|
||||
) where
|
||||
P: IsA<RTSPMedia>,
|
||||
{
|
||||
let f: &F = &*(f as *const F);
|
||||
f(&RTSPMedia::from_glib_borrow(this).unsafe_cast_ref())
|
||||
}
|
||||
unsafe {
|
||||
let f: Box_<F> = Box_::new(f);
|
||||
connect_raw(
|
||||
self.as_ptr() as *mut _,
|
||||
b"notify::dscp-qos\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
notify_dscp_qos_trampoline::<Self, F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fn connect_property_eos_shutdown_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
|
|
|
@ -66,6 +66,9 @@ pub trait RTSPMediaFactoryExt: 'static {
|
|||
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
||||
fn get_do_retransmission(&self) -> bool;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn get_dscp_qos(&self) -> i32;
|
||||
|
||||
fn get_latency(&self) -> u32;
|
||||
|
||||
fn get_launch(&self) -> Option<GString>;
|
||||
|
@ -112,6 +115,9 @@ pub trait RTSPMediaFactoryExt: 'static {
|
|||
#[cfg(any(feature = "v1_16", feature = "dox"))]
|
||||
fn set_do_retransmission(&self, do_retransmission: bool);
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn set_dscp_qos(&self, dscp_qos: i32);
|
||||
|
||||
fn set_eos_shutdown(&self, eos_shutdown: bool);
|
||||
|
||||
fn set_latency(&self, latency: u32);
|
||||
|
@ -147,6 +153,10 @@ pub trait RTSPMediaFactoryExt: 'static {
|
|||
|
||||
fn set_property_bind_mcast_address(&self, bind_mcast_address: bool);
|
||||
|
||||
fn get_property_dscp_qos(&self) -> i32;
|
||||
|
||||
fn set_property_dscp_qos(&self, dscp_qos: i32);
|
||||
|
||||
fn get_property_eos_shutdown(&self) -> bool;
|
||||
|
||||
fn get_property_max_mcast_ttl(&self) -> u32;
|
||||
|
@ -182,6 +192,11 @@ pub trait RTSPMediaFactoryExt: 'static {
|
|||
f: F,
|
||||
) -> SignalHandlerId;
|
||||
|
||||
fn connect_property_dscp_qos_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId;
|
||||
|
||||
fn connect_property_eos_shutdown_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
|
@ -295,6 +310,13 @@ impl<O: IsA<RTSPMediaFactory>> RTSPMediaFactoryExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn get_dscp_qos(&self) -> i32 {
|
||||
unsafe {
|
||||
gst_rtsp_server_sys::gst_rtsp_media_factory_get_dscp_qos(self.as_ref().to_glib_none().0)
|
||||
}
|
||||
}
|
||||
|
||||
fn get_latency(&self) -> u32 {
|
||||
unsafe {
|
||||
gst_rtsp_server_sys::gst_rtsp_media_factory_get_latency(self.as_ref().to_glib_none().0)
|
||||
|
@ -480,6 +502,16 @@ impl<O: IsA<RTSPMediaFactory>> RTSPMediaFactoryExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn set_dscp_qos(&self, dscp_qos: i32) {
|
||||
unsafe {
|
||||
gst_rtsp_server_sys::gst_rtsp_media_factory_set_dscp_qos(
|
||||
self.as_ref().to_glib_none().0,
|
||||
dscp_qos,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn set_eos_shutdown(&self, eos_shutdown: bool) {
|
||||
unsafe {
|
||||
gst_rtsp_server_sys::gst_rtsp_media_factory_set_eos_shutdown(
|
||||
|
@ -638,6 +670,31 @@ impl<O: IsA<RTSPMediaFactory>> RTSPMediaFactoryExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
fn get_property_dscp_qos(&self) -> i32 {
|
||||
unsafe {
|
||||
let mut value = Value::from_type(<i32 as StaticType>::static_type());
|
||||
gobject_sys::g_object_get_property(
|
||||
self.to_glib_none().0 as *mut gobject_sys::GObject,
|
||||
b"dscp-qos\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `dscp-qos` getter")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
fn set_property_dscp_qos(&self, dscp_qos: i32) {
|
||||
unsafe {
|
||||
gobject_sys::g_object_set_property(
|
||||
self.to_glib_none().0 as *mut gobject_sys::GObject,
|
||||
b"dscp-qos\0".as_ptr() as *const _,
|
||||
Value::from(&dscp_qos).to_glib_none().0,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn get_property_eos_shutdown(&self) -> bool {
|
||||
unsafe {
|
||||
let mut value = Value::from_type(<bool as StaticType>::static_type());
|
||||
|
@ -858,6 +915,33 @@ impl<O: IsA<RTSPMediaFactory>> RTSPMediaFactoryExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
fn connect_property_dscp_qos_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn notify_dscp_qos_trampoline<P, F: Fn(&P) + Send + Sync + 'static>(
|
||||
this: *mut gst_rtsp_server_sys::GstRTSPMediaFactory,
|
||||
_param_spec: glib_sys::gpointer,
|
||||
f: glib_sys::gpointer,
|
||||
) where
|
||||
P: IsA<RTSPMediaFactory>,
|
||||
{
|
||||
let f: &F = &*(f as *const F);
|
||||
f(&RTSPMediaFactory::from_glib_borrow(this).unsafe_cast_ref())
|
||||
}
|
||||
unsafe {
|
||||
let f: Box_<F> = Box_::new(f);
|
||||
connect_raw(
|
||||
self.as_ptr() as *mut _,
|
||||
b"notify::dscp-qos\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
notify_dscp_qos_trampoline::<Self, F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fn connect_property_eos_shutdown_notify<F: Fn(&Self) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
|
|
|
@ -65,6 +65,9 @@ pub trait RTSPStreamTransportExt: 'static {
|
|||
|
||||
fn set_message_sent<P: Fn() + 'static>(&self, message_sent: P);
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn set_message_sent_full<P: Fn(&RTSPStreamTransport) + 'static>(&self, message_sent: P);
|
||||
|
||||
fn set_timed_out(&self, timedout: bool);
|
||||
|
||||
//fn set_transport(&self, tr: /*Ignored*/&mut gst_rtsp::RTSPTransport);
|
||||
|
@ -226,6 +229,35 @@ impl<O: IsA<RTSPStreamTransport>> RTSPStreamTransportExt for O {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
fn set_message_sent_full<P: Fn(&RTSPStreamTransport) + 'static>(&self, message_sent: P) {
|
||||
let message_sent_data: Box_<P> = Box_::new(message_sent);
|
||||
unsafe extern "C" fn message_sent_func<P: Fn(&RTSPStreamTransport) + 'static>(
|
||||
trans: *mut gst_rtsp_server_sys::GstRTSPStreamTransport,
|
||||
user_data: glib_sys::gpointer,
|
||||
) {
|
||||
let trans = from_glib_borrow(trans);
|
||||
let callback: &P = &*(user_data as *mut _);
|
||||
(*callback)(&trans);
|
||||
}
|
||||
let message_sent = Some(message_sent_func::<P> as _);
|
||||
unsafe extern "C" fn notify_func<P: Fn(&RTSPStreamTransport) + 'static>(
|
||||
data: glib_sys::gpointer,
|
||||
) {
|
||||
let _callback: Box_<P> = Box_::from_raw(data as *mut _);
|
||||
}
|
||||
let destroy_call3 = Some(notify_func::<P> as _);
|
||||
let super_callback0: Box_<P> = message_sent_data;
|
||||
unsafe {
|
||||
gst_rtsp_server_sys::gst_rtsp_stream_transport_set_message_sent_full(
|
||||
self.as_ref().to_glib_none().0,
|
||||
message_sent,
|
||||
Box_::into_raw(super_callback0) as *mut _,
|
||||
destroy_call3,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn set_timed_out(&self, timedout: bool) {
|
||||
unsafe {
|
||||
gst_rtsp_server_sys::gst_rtsp_stream_transport_set_timed_out(
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -36,6 +36,7 @@ impl RTSPUrl {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
pub fn get_request_uri_with_control(&self, control_path: &str) -> Option<GString> {
|
||||
unsafe {
|
||||
from_glib_full(gst_rtsp_sys::gst_rtsp_url_get_request_uri_with_control(
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -12,6 +12,7 @@ use glib::Type;
|
|||
use gobject_sys;
|
||||
use gst_video_sys;
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
|
||||
#[non_exhaustive]
|
||||
pub enum VideoAFDSpec {
|
||||
|
@ -22,6 +23,7 @@ pub enum VideoAFDSpec {
|
|||
__Unknown(i32),
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
#[doc(hidden)]
|
||||
impl ToGlib for VideoAFDSpec {
|
||||
type GlibType = gst_video_sys::GstVideoAFDSpec;
|
||||
|
@ -36,6 +38,7 @@ impl ToGlib for VideoAFDSpec {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
#[doc(hidden)]
|
||||
impl FromGlib<gst_video_sys::GstVideoAFDSpec> for VideoAFDSpec {
|
||||
fn from_glib(value: gst_video_sys::GstVideoAFDSpec) -> Self {
|
||||
|
@ -49,24 +52,28 @@ impl FromGlib<gst_video_sys::GstVideoAFDSpec> for VideoAFDSpec {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
impl StaticType for VideoAFDSpec {
|
||||
fn static_type() -> Type {
|
||||
unsafe { from_glib(gst_video_sys::gst_video_afd_spec_get_type()) }
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
impl<'a> FromValueOptional<'a> for VideoAFDSpec {
|
||||
unsafe fn from_value_optional(value: &Value) -> Option<Self> {
|
||||
Some(FromValue::from_value(value))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
impl<'a> FromValue<'a> for VideoAFDSpec {
|
||||
unsafe fn from_value(value: &Value) -> Self {
|
||||
from_glib(gobject_sys::g_value_get_enum(value.to_glib_none().0))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
impl SetValue for VideoAFDSpec {
|
||||
unsafe fn set_value(value: &mut Value, this: &Self) {
|
||||
gobject_sys::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
|
||||
|
|
|
@ -21,6 +21,7 @@ pub use self::video_overlay::VideoOverlayExt;
|
|||
pub use self::video_overlay::{VideoOverlay, NONE_VIDEO_OVERLAY};
|
||||
|
||||
mod enums;
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
pub use self::enums::VideoAFDSpec;
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
pub use self::enums::VideoAFDValue;
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
|
@ -5,6 +5,11 @@
|
|||
mod web_rtcdtls_transport;
|
||||
pub use self::web_rtcdtls_transport::{WebRTCDTLSTransport, WebRTCDTLSTransportClass};
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
mod web_rtc_data_channel;
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
pub use self::web_rtc_data_channel::{WebRTCDataChannel, WebRTCDataChannelClass};
|
||||
|
||||
mod web_rtcice_transport;
|
||||
pub use self::web_rtcice_transport::{WebRTCICETransport, WebRTCICETransportClass};
|
||||
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
649
gstreamer-webrtc/src/auto/web_rtc_data_channel.rs
Normal file
649
gstreamer-webrtc/src/auto/web_rtc_data_channel.rs
Normal file
|
@ -0,0 +1,649 @@
|
|||
// 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 glib;
|
||||
use glib::object::ObjectExt;
|
||||
use glib::object::ObjectType as ObjectType_;
|
||||
use glib::signal::connect_raw;
|
||||
use glib::signal::SignalHandlerId;
|
||||
use glib::translate::*;
|
||||
use glib::GString;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib_sys;
|
||||
use gobject_sys;
|
||||
use gst_web_rtc_sys;
|
||||
use libc;
|
||||
use std::boxed::Box as Box_;
|
||||
use std::mem::transmute;
|
||||
use WebRTCDataChannelState;
|
||||
use WebRTCPriorityType;
|
||||
|
||||
glib_wrapper! {
|
||||
pub struct WebRTCDataChannel(Object<gst_web_rtc_sys::GstWebRTCDataChannel, gst_web_rtc_sys::GstWebRTCDataChannelClass, WebRTCDataChannelClass>);
|
||||
|
||||
match fn {
|
||||
get_type => || gst_web_rtc_sys::gst_webrtc_data_channel_get_type(),
|
||||
}
|
||||
}
|
||||
|
||||
impl WebRTCDataChannel {
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
pub fn close(&self) {
|
||||
unsafe {
|
||||
gst_web_rtc_sys::gst_webrtc_data_channel_close(self.to_glib_none().0);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
pub fn on_buffered_amount_low(&self) {
|
||||
unsafe {
|
||||
gst_web_rtc_sys::gst_webrtc_data_channel_on_buffered_amount_low(self.to_glib_none().0);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
pub fn on_close(&self) {
|
||||
unsafe {
|
||||
gst_web_rtc_sys::gst_webrtc_data_channel_on_close(self.to_glib_none().0);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
pub fn on_message_data(&self, data: Option<&glib::Bytes>) {
|
||||
unsafe {
|
||||
gst_web_rtc_sys::gst_webrtc_data_channel_on_message_data(
|
||||
self.to_glib_none().0,
|
||||
data.to_glib_none().0,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
pub fn on_message_string(&self, str: Option<&str>) {
|
||||
unsafe {
|
||||
gst_web_rtc_sys::gst_webrtc_data_channel_on_message_string(
|
||||
self.to_glib_none().0,
|
||||
str.to_glib_none().0,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
pub fn on_open(&self) {
|
||||
unsafe {
|
||||
gst_web_rtc_sys::gst_webrtc_data_channel_on_open(self.to_glib_none().0);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
pub fn send_data(&self, data: Option<&glib::Bytes>) {
|
||||
unsafe {
|
||||
gst_web_rtc_sys::gst_webrtc_data_channel_send_data(
|
||||
self.to_glib_none().0,
|
||||
data.to_glib_none().0,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "v1_18", feature = "dox"))]
|
||||
pub fn send_string(&self, str: Option<&str>) {
|
||||
unsafe {
|
||||
gst_web_rtc_sys::gst_webrtc_data_channel_send_string(
|
||||
self.to_glib_none().0,
|
||||
str.to_glib_none().0,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_buffered_amount(&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"buffered-amount\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `buffered-amount` getter")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_buffered_amount_low_threshold(&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"buffered-amount-low-threshold\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `buffered-amount-low-threshold` getter")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_property_buffered_amount_low_threshold(&self, buffered_amount_low_threshold: u64) {
|
||||
unsafe {
|
||||
gobject_sys::g_object_set_property(
|
||||
self.as_ptr() as *mut gobject_sys::GObject,
|
||||
b"buffered-amount-low-threshold\0".as_ptr() as *const _,
|
||||
Value::from(&buffered_amount_low_threshold).to_glib_none().0,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_id(&self) -> i32 {
|
||||
unsafe {
|
||||
let mut value = Value::from_type(<i32 as StaticType>::static_type());
|
||||
gobject_sys::g_object_get_property(
|
||||
self.as_ptr() as *mut gobject_sys::GObject,
|
||||
b"id\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `id` getter")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_label(&self) -> Option<GString> {
|
||||
unsafe {
|
||||
let mut value = Value::from_type(<GString as StaticType>::static_type());
|
||||
gobject_sys::g_object_get_property(
|
||||
self.as_ptr() as *mut gobject_sys::GObject,
|
||||
b"label\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `label` getter")
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_max_packet_lifetime(&self) -> i32 {
|
||||
unsafe {
|
||||
let mut value = Value::from_type(<i32 as StaticType>::static_type());
|
||||
gobject_sys::g_object_get_property(
|
||||
self.as_ptr() as *mut gobject_sys::GObject,
|
||||
b"max-packet-lifetime\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `max-packet-lifetime` getter")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_max_retransmits(&self) -> i32 {
|
||||
unsafe {
|
||||
let mut value = Value::from_type(<i32 as StaticType>::static_type());
|
||||
gobject_sys::g_object_get_property(
|
||||
self.as_ptr() as *mut gobject_sys::GObject,
|
||||
b"max-retransmits\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `max-retransmits` getter")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_negotiated(&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"negotiated\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `negotiated` getter")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_ordered(&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"ordered\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `ordered` getter")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_priority(&self) -> WebRTCPriorityType {
|
||||
unsafe {
|
||||
let mut value = Value::from_type(<WebRTCPriorityType as StaticType>::static_type());
|
||||
gobject_sys::g_object_get_property(
|
||||
self.as_ptr() as *mut gobject_sys::GObject,
|
||||
b"priority\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `priority` getter")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_protocol(&self) -> Option<GString> {
|
||||
unsafe {
|
||||
let mut value = Value::from_type(<GString as StaticType>::static_type());
|
||||
gobject_sys::g_object_get_property(
|
||||
self.as_ptr() as *mut gobject_sys::GObject,
|
||||
b"protocol\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `protocol` getter")
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_ready_state(&self) -> WebRTCDataChannelState {
|
||||
unsafe {
|
||||
let mut value = Value::from_type(<WebRTCDataChannelState as StaticType>::static_type());
|
||||
gobject_sys::g_object_get_property(
|
||||
self.as_ptr() as *mut gobject_sys::GObject,
|
||||
b"ready-state\0".as_ptr() as *const _,
|
||||
value.to_glib_none_mut().0,
|
||||
);
|
||||
value
|
||||
.get()
|
||||
.expect("Return Value for property `ready-state` getter")
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn connect_close<F: Fn(&WebRTCDataChannel) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn close_trampoline<F: Fn(&WebRTCDataChannel) + Send + Sync + 'static>(
|
||||
this: *mut gst_web_rtc_sys::GstWebRTCDataChannel,
|
||||
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"close\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
close_trampoline::<F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn emit_close(&self) {
|
||||
let _ = unsafe {
|
||||
glib::Object::from_glib_borrow(self.as_ptr() as *mut gobject_sys::GObject)
|
||||
.emit("close", &[])
|
||||
.unwrap()
|
||||
};
|
||||
}
|
||||
|
||||
pub fn connect_on_buffered_amount_low<F: Fn(&WebRTCDataChannel) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn on_buffered_amount_low_trampoline<
|
||||
F: Fn(&WebRTCDataChannel) + Send + Sync + 'static,
|
||||
>(
|
||||
this: *mut gst_web_rtc_sys::GstWebRTCDataChannel,
|
||||
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"on-buffered-amount-low\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
on_buffered_amount_low_trampoline::<F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn connect_on_close<F: Fn(&WebRTCDataChannel) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn on_close_trampoline<
|
||||
F: Fn(&WebRTCDataChannel) + Send + Sync + 'static,
|
||||
>(
|
||||
this: *mut gst_web_rtc_sys::GstWebRTCDataChannel,
|
||||
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"on-close\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
on_close_trampoline::<F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn connect_on_error<F: Fn(&WebRTCDataChannel, &glib::Error) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn on_error_trampoline<
|
||||
F: Fn(&WebRTCDataChannel, &glib::Error) + Send + Sync + 'static,
|
||||
>(
|
||||
this: *mut gst_web_rtc_sys::GstWebRTCDataChannel,
|
||||
error: *mut glib_sys::GError,
|
||||
f: glib_sys::gpointer,
|
||||
) {
|
||||
let f: &F = &*(f as *const F);
|
||||
f(&from_glib_borrow(this), &from_glib_borrow(error))
|
||||
}
|
||||
unsafe {
|
||||
let f: Box_<F> = Box_::new(f);
|
||||
connect_raw(
|
||||
self.as_ptr() as *mut _,
|
||||
b"on-error\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
on_error_trampoline::<F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn connect_on_message_data<
|
||||
F: Fn(&WebRTCDataChannel, Option<&glib::Bytes>) + Send + Sync + 'static,
|
||||
>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn on_message_data_trampoline<
|
||||
F: Fn(&WebRTCDataChannel, Option<&glib::Bytes>) + Send + Sync + 'static,
|
||||
>(
|
||||
this: *mut gst_web_rtc_sys::GstWebRTCDataChannel,
|
||||
data: *mut glib_sys::GBytes,
|
||||
f: glib_sys::gpointer,
|
||||
) {
|
||||
let f: &F = &*(f as *const F);
|
||||
f(
|
||||
&from_glib_borrow(this),
|
||||
Option::<glib::Bytes>::from_glib_borrow(data)
|
||||
.as_ref()
|
||||
.as_ref(),
|
||||
)
|
||||
}
|
||||
unsafe {
|
||||
let f: Box_<F> = Box_::new(f);
|
||||
connect_raw(
|
||||
self.as_ptr() as *mut _,
|
||||
b"on-message-data\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
on_message_data_trampoline::<F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn connect_on_message_string<
|
||||
F: Fn(&WebRTCDataChannel, Option<&str>) + Send + Sync + 'static,
|
||||
>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn on_message_string_trampoline<
|
||||
F: Fn(&WebRTCDataChannel, Option<&str>) + Send + Sync + 'static,
|
||||
>(
|
||||
this: *mut gst_web_rtc_sys::GstWebRTCDataChannel,
|
||||
data: *mut libc::c_char,
|
||||
f: glib_sys::gpointer,
|
||||
) {
|
||||
let f: &F = &*(f as *const F);
|
||||
f(
|
||||
&from_glib_borrow(this),
|
||||
Option::<GString>::from_glib_borrow(data)
|
||||
.as_ref()
|
||||
.as_deref(),
|
||||
)
|
||||
}
|
||||
unsafe {
|
||||
let f: Box_<F> = Box_::new(f);
|
||||
connect_raw(
|
||||
self.as_ptr() as *mut _,
|
||||
b"on-message-string\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
on_message_string_trampoline::<F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn connect_on_open<F: Fn(&WebRTCDataChannel) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn on_open_trampoline<
|
||||
F: Fn(&WebRTCDataChannel) + Send + Sync + 'static,
|
||||
>(
|
||||
this: *mut gst_web_rtc_sys::GstWebRTCDataChannel,
|
||||
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"on-open\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
on_open_trampoline::<F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn connect_send_data<
|
||||
F: Fn(&WebRTCDataChannel, Option<&glib::Bytes>) + Send + Sync + 'static,
|
||||
>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn send_data_trampoline<
|
||||
F: Fn(&WebRTCDataChannel, Option<&glib::Bytes>) + Send + Sync + 'static,
|
||||
>(
|
||||
this: *mut gst_web_rtc_sys::GstWebRTCDataChannel,
|
||||
data: *mut glib_sys::GBytes,
|
||||
f: glib_sys::gpointer,
|
||||
) {
|
||||
let f: &F = &*(f as *const F);
|
||||
f(
|
||||
&from_glib_borrow(this),
|
||||
Option::<glib::Bytes>::from_glib_borrow(data)
|
||||
.as_ref()
|
||||
.as_ref(),
|
||||
)
|
||||
}
|
||||
unsafe {
|
||||
let f: Box_<F> = Box_::new(f);
|
||||
connect_raw(
|
||||
self.as_ptr() as *mut _,
|
||||
b"send-data\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
send_data_trampoline::<F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn emit_send_data(&self, data: Option<&glib::Bytes>) {
|
||||
let _ = unsafe {
|
||||
glib::Object::from_glib_borrow(self.as_ptr() as *mut gobject_sys::GObject)
|
||||
.emit("send-data", &[&data])
|
||||
.unwrap()
|
||||
};
|
||||
}
|
||||
|
||||
pub fn connect_send_string<F: Fn(&WebRTCDataChannel, Option<&str>) + Send + Sync + 'static>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn send_string_trampoline<
|
||||
F: Fn(&WebRTCDataChannel, Option<&str>) + Send + Sync + 'static,
|
||||
>(
|
||||
this: *mut gst_web_rtc_sys::GstWebRTCDataChannel,
|
||||
data: *mut libc::c_char,
|
||||
f: glib_sys::gpointer,
|
||||
) {
|
||||
let f: &F = &*(f as *const F);
|
||||
f(
|
||||
&from_glib_borrow(this),
|
||||
Option::<GString>::from_glib_borrow(data)
|
||||
.as_ref()
|
||||
.as_deref(),
|
||||
)
|
||||
}
|
||||
unsafe {
|
||||
let f: Box_<F> = Box_::new(f);
|
||||
connect_raw(
|
||||
self.as_ptr() as *mut _,
|
||||
b"send-string\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
send_string_trampoline::<F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn emit_send_string(&self, data: Option<&str>) {
|
||||
let _ = unsafe {
|
||||
glib::Object::from_glib_borrow(self.as_ptr() as *mut gobject_sys::GObject)
|
||||
.emit("send-string", &[&data])
|
||||
.unwrap()
|
||||
};
|
||||
}
|
||||
|
||||
pub fn connect_property_buffered_amount_notify<
|
||||
F: Fn(&WebRTCDataChannel) + Send + Sync + 'static,
|
||||
>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn notify_buffered_amount_trampoline<
|
||||
F: Fn(&WebRTCDataChannel) + Send + Sync + 'static,
|
||||
>(
|
||||
this: *mut gst_web_rtc_sys::GstWebRTCDataChannel,
|
||||
_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::buffered-amount\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
notify_buffered_amount_trampoline::<F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn connect_property_buffered_amount_low_threshold_notify<
|
||||
F: Fn(&WebRTCDataChannel) + Send + Sync + 'static,
|
||||
>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn notify_buffered_amount_low_threshold_trampoline<
|
||||
F: Fn(&WebRTCDataChannel) + Send + Sync + 'static,
|
||||
>(
|
||||
this: *mut gst_web_rtc_sys::GstWebRTCDataChannel,
|
||||
_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::buffered-amount-low-threshold\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
notify_buffered_amount_low_threshold_trampoline::<F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn connect_property_ready_state_notify<
|
||||
F: Fn(&WebRTCDataChannel) + Send + Sync + 'static,
|
||||
>(
|
||||
&self,
|
||||
f: F,
|
||||
) -> SignalHandlerId {
|
||||
unsafe extern "C" fn notify_ready_state_trampoline<
|
||||
F: Fn(&WebRTCDataChannel) + Send + Sync + 'static,
|
||||
>(
|
||||
this: *mut gst_web_rtc_sys::GstWebRTCDataChannel,
|
||||
_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::ready-state\0".as_ptr() as *const _,
|
||||
Some(transmute::<_, unsafe extern "C" fn()>(
|
||||
notify_ready_state_trampoline::<F> as *const (),
|
||||
)),
|
||||
Box_::into_raw(f),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsafe impl Send for WebRTCDataChannel {}
|
||||
unsafe impl Sync for WebRTCDataChannel {}
|
|
@ -1,2 +1,2 @@
|
|||
Generated by gir (https://github.com/gtk-rs/gir @ 1f84b54)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ e5698c4a)
|
||||
Generated by gir (https://github.com/gtk-rs/gir @ 2ec58ef)
|
||||
from gir-files (https://github.com/gtk-rs/gir-files @ 9cf46cf7)
|
||||
|
|
Loading…
Reference in a new issue