From 7cf88b0756c4dc1bec660ed1a58cf82c26a2354a Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Wed, 11 Mar 2020 16:11:06 +0100 Subject: [PATCH] reduce duplicated code --- lib/ffmpeg_api/src/api.rs | 20 +++----------------- src/lib.rs | 4 +++- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/lib/ffmpeg_api/src/api.rs b/lib/ffmpeg_api/src/api.rs index d84f9bc..233eb32 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 e86963f..9a34618 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; } -- GitLab