diff --git a/lib/ffmpeg_api/src/api.rs b/lib/ffmpeg_api/src/api.rs index d84f9bc500588e5a3147ce8689065549a889ff54..233eb320c9f8683ef205748f35648c5f92c0f137 100644 --- a/lib/ffmpeg_api/src/api.rs +++ b/lib/ffmpeg_api/src/api.rs @@ -60,27 +60,13 @@ impl AVFormatContext { Ok(AVInputFormat::new(base)) } - pub fn streams(&self) -> Vec<AVStream> { - Vec::from(unsafe { - std::slice::from_raw_parts((*self.base).streams, (*self.base).nb_streams as usize) - }) - .iter() - .filter_map(|stream: &*mut ffi::AVStream| unsafe { (*stream).as_mut() }) - .map(|stream| AVStream::new(stream)) - .collect() - } - - pub fn find_stream<P>(&self, predicate: P) -> Option<AVStream> - where - P: FnMut(&AVStream) -> bool, - { - Vec::from(unsafe { + pub fn streams(&self) -> impl Iterator<Item = AVStream> { + unsafe { std::slice::from_raw_parts((*self.base).streams, (*self.base).nb_streams as usize) - }) + } .iter() .filter_map(|stream: &*mut ffi::AVStream| unsafe { (*stream).as_mut() }) .map(|stream| AVStream::new(stream)) - .find(predicate) } pub fn read_frame(&mut self, packet: &mut AVPacket) -> Result<(), Error> { diff --git a/src/lib.rs b/src/lib.rs index e86963fa641ee114fb3658646c7c93939ea2f0db..9a3461804a10e89c1e759c8fd13a9f52992d9d3d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,5 @@ #![allow(dead_code)] + pub mod spritesheet; pub mod stream_metadata; @@ -40,7 +41,8 @@ pub fn extract( ); let mut stream: AVStream = avformat_context - .find_stream(|stream| { + .streams() + .find(|stream| { if let Ok(codec_parameters) = stream.codec_parameters() { return codec_parameters.codec_type() == AVMediaType::Video; }