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