libobs_wrapper\encoders/
enums.rs1use std::{convert::Infallible, str::FromStr};
2
3use crate::utils::ObsString;
4
5macro_rules! encoder_enum {
6 ($name:ident, { $($plugin:literal: [ $($(#[$attr:meta])* $variant:ident,)* ],)* }) => { paste::paste! {
7 #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
8 #[allow(non_camel_case_types)]
9 pub enum $name {
10 $(
11 $(
12 #[doc = "From plugin: `" $plugin "`"]
13 $(#[$attr])*
14 [<$variant:upper>],
15 )*
16 )*
17 Other(String),
18 }
19
20 impl FromStr for $name {
21 type Err = Infallible;
22 fn from_str(s: &str) -> Result<Self, Self::Err> {
23 #[allow(deprecated)]
24 return Ok(match s {
25 $( $( stringify!($variant) => Self::[<$variant:upper>], )* )*
26 e => Self::Other(e.to_string()),
27 });
28 }
29 }
30 impl From<$name> for ObsString {
31 fn from(v: $name) -> ObsString {
32 #[allow(deprecated)]
33 return match v {
34 $( $( $name::[<$variant:upper>] => ObsString::new(stringify!($variant)), )* )*
35 $name::Other(e) => ObsString::new(&e),
36 };
37 }
38 }
39 } };
40}
41
42encoder_enum!(
48 ObsVideoEncoderType,
49 {
50 "obs-ffmpeg": [
51 h264_texture_amf,
52 h265_texture_amf,
53 av1_texture_amf,
54 ffmpeg_vaapi,
55 ffmpeg_vaapi_tex,
56 av1_ffmpeg_vaapi,
57 av1_ffmpeg_vaapi_tex,
58 hevc_ffmpeg_vaapi,
59 hevc_ffmpeg_vaapi_tex,
60 ffmpeg_openh264,
61 #[deprecated]
62 ffmpeg_nvenc,
63 #[deprecated]
64 ffmpeg_hevc_nvenc,
65 ffmpeg_svt_av1,
66 ffmpeg_aom_av1,
67 ],
68 "obs-nvenc": [
69 #[deprecated]
70 obs_nvenc_h264_cuda,
71 #[deprecated]
72 obs_nvenc_hevc_cuda,
73 #[deprecated]
74 obs_nvenc_av1_cuda,
75 obs_nvenc_h264_tex,
76 obs_nvenc_hevc_tex,
77 obs_nvenc_av1_tex,
78 #[deprecated]
79 jim_nvenc,
80 #[deprecated]
81 jim_hevc_nvenc,
82 #[deprecated]
83 jim_av1_nvenc,
84 obs_nvenc_h264_soft,
85 obs_nvenc_hevc_soft,
86 obs_nvenc_av1_soft,
87 ],
88 "obs-qsv11": [
89 obs_qsv11,
90 obs_qsv11_soft,
91 obs_qsv11_v2,
92 obs_qsv11_soft_v2,
93 obs_qsv11_av1,
94 obs_qsv11_av1_soft,
95 obs_qsv11_hevc,
96 obs_qsv11_hevc_soft,
97 ],
98 "obs-x264": [
99 obs_x264,
100 ],
101 }
102);
103
104encoder_enum!(
105 ObsAudioEncoderType,
106 {
107 "obs-ffmpeg": [
108 ffmpeg_aac,
109 ffmpeg_opus,
110 ffmpeg_pcm_s16le,
111 ffmpeg_pcm_s24le,
112 ffmpeg_pcm_f32le,
113 ffmpeg_alac,
114 ffmpeg_flac,
115 ],
116 "obs-libfdk": [
117 libfdk_aac,
118 ],
119 }
120);