Skip to main content

ffmpeg_the_third/device/
input.rs

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