1 // Copyright (C) 2017 Sebastian Dröge <sebastian@centricular.com> 2 // 3 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or 4 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 5 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your 6 // option. This file may not be copied, modified, or distributed 7 // except according to those terms. 8 9 use std::ptr; 10 use Buffer; 11 use BufferList; 12 use FlowError; 13 use FlowReturn; 14 use FlowSuccess; 15 use Object; 16 use Pad; 17 use ProxyPad; 18 19 use glib::object::IsA; 20 use glib::translate::{from_glib, from_glib_full, ToGlibPtr}; 21 22 use gst_sys; 23 24 pub trait ProxyPadExtManual: 'static { proxy_pad_chain_default<P: IsA<Object>>( &self, parent: Option<&P>, buffer: Buffer, ) -> Result<FlowSuccess, FlowError>25 fn proxy_pad_chain_default<P: IsA<Object>>( 26 &self, 27 parent: Option<&P>, 28 buffer: Buffer, 29 ) -> Result<FlowSuccess, FlowError>; 30 proxy_pad_chain_list_default<P: IsA<Object>>( &self, parent: Option<&P>, list: BufferList, ) -> Result<FlowSuccess, FlowError>31 fn proxy_pad_chain_list_default<P: IsA<Object>>( 32 &self, 33 parent: Option<&P>, 34 list: BufferList, 35 ) -> Result<FlowSuccess, FlowError>; 36 proxy_pad_getrange_default<P: IsA<Object>>( &self, parent: Option<&P>, offset: u64, size: u32, ) -> Result<Buffer, FlowError>37 fn proxy_pad_getrange_default<P: IsA<Object>>( 38 &self, 39 parent: Option<&P>, 40 offset: u64, 41 size: u32, 42 ) -> Result<Buffer, FlowError>; 43 proxy_pad_iterate_internal_links_default<P: IsA<Object>>( &self, parent: Option<&P>, ) -> Option<::Iterator<Pad>>44 fn proxy_pad_iterate_internal_links_default<P: IsA<Object>>( 45 &self, 46 parent: Option<&P>, 47 ) -> Option<::Iterator<Pad>>; 48 } 49 50 impl<O: IsA<ProxyPad>> ProxyPadExtManual for O { proxy_pad_chain_default<P: IsA<Object>>( &self, parent: Option<&P>, buffer: Buffer, ) -> Result<FlowSuccess, FlowError>51 fn proxy_pad_chain_default<P: IsA<Object>>( 52 &self, 53 parent: Option<&P>, 54 buffer: Buffer, 55 ) -> Result<FlowSuccess, FlowError> { 56 skip_assert_initialized!(); 57 let ret: FlowReturn = unsafe { 58 from_glib(gst_sys::gst_proxy_pad_chain_default( 59 self.as_ptr() as *mut gst_sys::GstPad, 60 parent.map(|p| p.as_ref()).to_glib_none().0, 61 buffer.into_ptr(), 62 )) 63 }; 64 ret.into_result() 65 } 66 proxy_pad_chain_list_default<P: IsA<Object>>( &self, parent: Option<&P>, list: BufferList, ) -> Result<FlowSuccess, FlowError>67 fn proxy_pad_chain_list_default<P: IsA<Object>>( 68 &self, 69 parent: Option<&P>, 70 list: BufferList, 71 ) -> Result<FlowSuccess, FlowError> { 72 skip_assert_initialized!(); 73 let ret: FlowReturn = unsafe { 74 from_glib(gst_sys::gst_proxy_pad_chain_list_default( 75 self.as_ptr() as *mut gst_sys::GstPad, 76 parent.map(|p| p.as_ref()).to_glib_none().0, 77 list.into_ptr(), 78 )) 79 }; 80 ret.into_result() 81 } 82 proxy_pad_getrange_default<P: IsA<Object>>( &self, parent: Option<&P>, offset: u64, size: u32, ) -> Result<Buffer, FlowError>83 fn proxy_pad_getrange_default<P: IsA<Object>>( 84 &self, 85 parent: Option<&P>, 86 offset: u64, 87 size: u32, 88 ) -> Result<Buffer, FlowError> { 89 skip_assert_initialized!(); 90 unsafe { 91 let mut buffer = ptr::null_mut(); 92 let ret: FlowReturn = from_glib(gst_sys::gst_proxy_pad_getrange_default( 93 self.as_ptr() as *mut gst_sys::GstPad, 94 parent.map(|p| p.as_ref()).to_glib_none().0, 95 offset, 96 size, 97 &mut buffer, 98 )); 99 ret.into_result_value(|| from_glib_full(buffer)) 100 } 101 } 102 proxy_pad_iterate_internal_links_default<P: IsA<Object>>( &self, parent: Option<&P>, ) -> Option<::Iterator<Pad>>103 fn proxy_pad_iterate_internal_links_default<P: IsA<Object>>( 104 &self, 105 parent: Option<&P>, 106 ) -> Option<::Iterator<Pad>> { 107 skip_assert_initialized!(); 108 unsafe { 109 from_glib_full(gst_sys::gst_proxy_pad_iterate_internal_links_default( 110 self.as_ptr() as *mut gst_sys::GstPad, 111 parent.map(|p| p.as_ref()).to_glib_none().0, 112 )) 113 } 114 } 115 } 116