1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
use std::ptr; use ffi::*; use format; use Format; pub struct AudioIter(*mut AVOutputFormat); impl Iterator for AudioIter { type Item = Format; fn next(&mut self) -> Option<<Self as Iterator>::Item> { unsafe { let ptr = av_output_audio_device_next(self.0); if ptr.is_null() && !self.0.is_null() { None } else { self.0 = ptr; Some(Format::Output(format::Output::wrap(ptr))) } } } } pub fn audio() -> AudioIter { AudioIter(ptr::null_mut()) } pub struct VideoIter(*mut AVOutputFormat); impl Iterator for VideoIter { type Item = Format; fn next(&mut self) -> Option<<Self as Iterator>::Item> { unsafe { let ptr = av_output_video_device_next(self.0); if ptr.is_null() && !self.0.is_null() { None } else { self.0 = ptr; Some(Format::Output(format::Output::wrap(ptr))) } } } } pub fn video() -> VideoIter { VideoIter(ptr::null_mut()) }