ffmpeg_next/filter/
pad.rs

1use std::ffi::CStr;
2use std::marker::PhantomData;
3use std::str::from_utf8_unchecked;
4
5use ffi::*;
6use media;
7
8pub struct Pad<'a> {
9    ptr: *const AVFilterPad,
10    idx: isize,
11
12    _marker: PhantomData<&'a ()>,
13}
14
15impl<'a> Pad<'a> {
16    pub unsafe fn wrap(ptr: *const AVFilterPad, idx: isize) -> Self {
17        Pad {
18            ptr,
19            idx,
20            _marker: PhantomData,
21        }
22    }
23
24    pub unsafe fn as_ptr(&self) -> *const AVFilterPad {
25        self.ptr
26    }
27
28    pub unsafe fn as_mut_ptr(&mut self) -> *mut AVFilterPad {
29        self.ptr as *mut _
30    }
31}
32
33impl<'a> Pad<'a> {
34    pub fn name(&self) -> Option<&str> {
35        unsafe {
36            let ptr = avfilter_pad_get_name(self.ptr, self.idx as i32);
37
38            if ptr.is_null() {
39                None
40            } else {
41                Some(from_utf8_unchecked(CStr::from_ptr(ptr).to_bytes()))
42            }
43        }
44    }
45
46    pub fn medium(&self) -> media::Type {
47        unsafe { media::Type::from(avfilter_pad_get_type(self.ptr, self.idx as i32)) }
48    }
49}