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