playa_ffmpeg/codec/
threading.rs1use 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}