diff --git a/src/filter/filter.rs b/src/filter/filter.rs index fa0ff92..804ab69 100644 --- a/src/filter/filter.rs +++ b/src/filter/filter.rs @@ -95,7 +95,7 @@ impl<'a> Iterator for PadIter<'a> { return None; } - let pad = Pad::wrap(self.ptr.offset(self.cur)); + let pad = Pad::wrap(self.ptr, self.cur); self.cur += 1; Some(pad) diff --git a/src/filter/mod.rs b/src/filter/mod.rs index 6b8b628..1513278 100644 --- a/src/filter/mod.rs +++ b/src/filter/mod.rs @@ -58,3 +58,21 @@ pub fn find(name: &str) -> Option { } } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_paditer() { + assert_eq!( + find("overlay") + .unwrap() + .inputs() + .unwrap() + .map(|input| input.name().unwrap().to_string()) + .collect::>(), + vec!("main", "overlay") + ); + } +} diff --git a/src/filter/pad.rs b/src/filter/pad.rs index 8491228..fce32a8 100644 --- a/src/filter/pad.rs +++ b/src/filter/pad.rs @@ -7,14 +7,16 @@ use media; pub struct Pad<'a> { ptr: *const AVFilterPad, + idx: isize, _marker: PhantomData<&'a ()>, } impl<'a> Pad<'a> { - pub unsafe fn wrap(ptr: *const AVFilterPad) -> Self { + pub unsafe fn wrap(ptr: *const AVFilterPad, idx: isize) -> Self { Pad { ptr: ptr, + idx: idx, _marker: PhantomData, } } @@ -31,7 +33,7 @@ impl<'a> Pad<'a> { impl<'a> Pad<'a> { pub fn name(&self) -> Option<&str> { unsafe { - let ptr = avfilter_pad_get_name(self.ptr, 0); + let ptr = avfilter_pad_get_name(self.ptr, self.idx as i32); if ptr.is_null() { None @@ -42,6 +44,6 @@ impl<'a> Pad<'a> { } pub fn medium(&self) -> media::Type { - unsafe { media::Type::from(avfilter_pad_get_type(self.ptr, 0)) } + unsafe { media::Type::from(avfilter_pad_get_type(self.ptr, self.idx as i32)) } } }