playa_ffmpeg/codec/
threading.rs

1use crate::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 { kind: value, ..Default::default() }
15    }
16
17    pub fn count(value: usize) -> Self {
18        Config { count: value, ..Default::default() }
19    }
20
21    #[cfg(not(feature = "ffmpeg_6_0"))]
22    pub fn safe(value: bool) -> Self {
23        Config { safe: value, ..Default::default() }
24    }
25}
26
27impl Default for Config {
28    fn default() -> Self {
29        Config {
30            kind: Type::None,
31            count: 0,
32            #[cfg(not(feature = "ffmpeg_6_0"))]
33            safe: false,
34        }
35    }
36}
37
38#[derive(Eq, PartialEq, Clone, Copy, Debug)]
39pub enum Type {
40    None,
41    Frame,
42    Slice,
43}
44
45impl From<c_int> for Type {
46    fn from(value: c_int) -> Type {
47        match value {
48            FF_THREAD_FRAME => Type::Frame,
49            FF_THREAD_SLICE => Type::Slice,
50
51            _ => Type::None,
52        }
53    }
54}
55
56impl From<Type> for c_int {
57    fn from(value: Type) -> c_int {
58        match value {
59            Type::None => 0,
60            Type::Frame => FF_THREAD_FRAME,
61            Type::Slice => FF_THREAD_SLICE,
62        }
63    }
64}