playa_ffmpeg/filter/
pad.rs

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