1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
use ffi; use glib; use glib::translate::*; use glib::value::ToSendValue; use glib::StaticType; use gst; use gst_ffi; use gst::miniobject::{GstRc, MiniObject}; pub trait GstRcRTSPTokenExt<T: MiniObject> { fn new_empty() -> Self; fn new(values: &[(&str, &ToSendValue)]) -> Self; } pub type RTSPToken = GstRc<RTSPTokenRef>; pub struct RTSPTokenRef(ffi::GstRTSPToken); unsafe impl MiniObject for RTSPTokenRef { type GstType = ffi::GstRTSPToken; } impl GstRcRTSPTokenExt<RTSPTokenRef> for GstRc<RTSPTokenRef> { fn new_empty() -> Self { assert_initialized_main_thread!(); unsafe { from_glib_full(ffi::gst_rtsp_token_new_empty()) } } fn new(values: &[(&str, &ToSendValue)]) -> Self { let mut token = RTSPToken::new_empty(); { let token = token.get_mut().unwrap(); let structure = token.get_mut_structure().unwrap(); for &(f, v) in values { structure.set_value(f, v.to_send_value()); } } token } } impl RTSPTokenRef { pub fn get_string(&self, field: &str) -> Option<String> { unsafe { from_glib_none(ffi::gst_rtsp_token_get_string( self.as_mut_ptr(), field.to_glib_none().0, )) } } pub fn get_structure(&self) -> Option<gst::Structure> { unsafe { from_glib_none(ffi::gst_rtsp_token_get_structure(self.as_mut_ptr())) } } pub fn is_allowed(&self, field: &str) -> bool { unsafe { from_glib(ffi::gst_rtsp_token_is_allowed( self.as_mut_ptr(), field.to_glib_none().0, )) } } pub fn get_mut_structure(&mut self) -> Option<&mut gst::StructureRef> { unsafe { let structure = ffi::gst_rtsp_token_writable_structure(self.as_mut_ptr()); if structure.is_null() { None } else { Some(gst::StructureRef::from_glib_borrow_mut(structure)) } } } } impl ToOwned for RTSPTokenRef { type Owned = GstRc<RTSPTokenRef>; fn to_owned(&self) -> GstRc<RTSPTokenRef> { unsafe { from_glib_full(gst_ffi::gst_mini_object_copy(self.as_ptr() as *const _) as *mut _) } } } impl StaticType for RTSPTokenRef { fn static_type() -> glib::Type { unsafe { from_glib(ffi::gst_rtsp_token_get_type()) } } }