ffmpeg_next/codec/
threading.rs

1use ffi::*;
2use libc::c_int;
3
4#[derive(Eq, PartialEq, Clone, Copy, Debug)]
5pub struct Config {
6    pub kind: Type,
7    pub count: usize,
8    #[cfg(not(feature = "ffmpeg_6_0"))]
9    pub safe: bool,
10}
11
12impl Config {
13    pub fn kind(value: Type) -> Self {
14        Config {
15            kind: value,
16            ..Default::default()
17        }
18    }
19
20    pub fn count(value: usize) -> Self {
21        Config {
22            count: value,
23            ..Default::default()
24        }
25    }
26
27    #[cfg(not(feature = "ffmpeg_6_0"))]
28    pub fn safe(value: bool) -> Self {
29        Config {
30            safe: value,
31            ..Default::default()
32        }
33    }
34}
35
36impl Default for Config {
37    fn default() -> Self {
38        Config {
39            kind: Type::None,
40            count: 0,
41            #[cfg(not(feature = "ffmpeg_6_0"))]
42            safe: false,
43        }
44    }
45}
46
47#[derive(Eq, PartialEq, Clone, Copy, Debug)]
48pub enum Type {
49    None,
50    Frame,
51    Slice,
52}
53
54impl From<c_int> for Type {
55    fn from(value: c_int) -> Type {
56        match value {
57            FF_THREAD_FRAME => Type::Frame,
58            FF_THREAD_SLICE => Type::Slice,
59
60            _ => Type::None,
61        }
62    }
63}
64
65impl From<Type> for c_int {
66    fn from(value: Type) -> c_int {
67        match value {
68            Type::None => 0,
69            Type::Frame => FF_THREAD_FRAME,
70            Type::Slice => FF_THREAD_SLICE,
71        }
72    }
73}