Fix filter::filter::PadIter to actually iterate
Bug caught by clippy: error: offset calculation on zero-sized value --> src/filter/filter.rs:98:33 | 98 | let pad = Pad::wrap(self.ptr.offset(self.cur)); | ^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[deny(clippy::zst_offset)]` on by default = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zst_offset The problem is that `AVFilterPad` is zero-sized: #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct AVFilterPad { _unused: [u8; 0], } which is in turn due to `AVFilterPad` being an opaque type in `libavfilter/avfilter.h`: typedef struct AVFilterContext AVFilterContext; typedef struct AVFilterLink AVFilterLink; typedef struct AVFilterPad AVFilterPad; typedef struct AVFilterFormats AVFilterFormats; Doing pointer arithmetic on an opaque (incomplete) type doesn't work. We have to use the proper FFI calls to obtain info on individual pads. The API has to be tweaked a bit; hopefully it doesn't break user programs (if it does it should only break bugged ones...). Fixes #20.
This commit is contained in:
@ -58,3 +58,21 @@ pub fn find(name: &str) -> Option<Filter> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[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<_>>(),
|
||||
vec!("main", "overlay")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user