1 use super::Id; 2 use ffi::*; 3 use libc::c_int; 4 5 #[allow(non_camel_case_types)] 6 #[derive(Eq, PartialEq, Clone, Copy, Debug)] 7 pub enum Profile { 8 Unknown, 9 Reserved, 10 11 AAC(AAC), 12 MPEG2(MPEG2), 13 DTS(DTS), 14 H264(H264), 15 VC1(VC1), 16 MPEG4(MPEG4), 17 JPEG2000(JPEG2000), 18 HEVC(HEVC), 19 VP9(VP9), 20 } 21 22 #[allow(non_camel_case_types)] 23 #[derive(Eq, PartialEq, Clone, Copy, Debug)] 24 pub enum AAC { 25 Main, 26 Low, 27 SSR, 28 LTP, 29 HE, 30 HEv2, 31 LD, 32 ELD, 33 34 MPEG2Low, 35 MPEG2HE, 36 } 37 38 #[allow(non_camel_case_types)] 39 #[derive(Eq, PartialEq, Clone, Copy, Debug)] 40 pub enum DTS { 41 Default, 42 ES, 43 _96_24, 44 HD_HRA, 45 HD_MA, 46 Express, 47 } 48 49 #[allow(non_camel_case_types)] 50 #[derive(Eq, PartialEq, Clone, Copy, Debug)] 51 pub enum MPEG2 { 52 _422, 53 High, 54 SS, 55 SNRScalable, 56 Main, 57 Simple, 58 } 59 60 #[allow(non_camel_case_types)] 61 #[derive(Eq, PartialEq, Clone, Copy, Debug)] 62 pub enum H264 { 63 Constrained, 64 Intra, 65 Baseline, 66 ConstrainedBaseline, 67 Main, 68 Extended, 69 High, 70 High10, 71 High10Intra, 72 High422, 73 High422Intra, 74 High444, 75 High444Predictive, 76 High444Intra, 77 CAVLC444, 78 } 79 80 #[allow(non_camel_case_types)] 81 #[derive(Eq, PartialEq, Clone, Copy, Debug)] 82 pub enum VC1 { 83 Simple, 84 Main, 85 Complex, 86 Advanced, 87 } 88 89 #[allow(non_camel_case_types)] 90 #[derive(Eq, PartialEq, Clone, Copy, Debug)] 91 pub enum MPEG4 { 92 Simple, 93 SimpleScalable, 94 Core, 95 Main, 96 NBit, 97 ScalableTexture, 98 SimpleFaceAnimation, 99 BasicAnimatedTexture, 100 Hybrid, 101 AdvancedRealTime, 102 CoreScalable, 103 AdvancedCoding, 104 AdvancedCore, 105 AdvancedScalableTexture, 106 SimpleStudio, 107 AdvancedSimple, 108 } 109 110 #[allow(non_camel_case_types)] 111 #[derive(Eq, PartialEq, Clone, Copy, Debug)] 112 pub enum JPEG2000 { 113 CStreamRestriction0, 114 CStreamRestriction1, 115 CStreamNoRestriction, 116 DCinema2K, 117 DCinema4K, 118 } 119 120 #[allow(non_camel_case_types)] 121 #[derive(Eq, PartialEq, Clone, Copy, Debug)] 122 pub enum HEVC { 123 Main, 124 Main10, 125 MainStillPicture, 126 Rext, 127 } 128 129 #[allow(non_camel_case_types)] 130 #[derive(Eq, PartialEq, Clone, Copy, Debug)] 131 pub enum VP9 { 132 _0, 133 _1, 134 _2, 135 _3, 136 } 137 138 impl From<(Id, c_int)> for Profile { from((id, value): (Id, c_int)) -> Profile139 fn from((id, value): (Id, c_int)) -> Profile { 140 if value == FF_PROFILE_UNKNOWN { 141 return Profile::Unknown; 142 } 143 144 if value == FF_PROFILE_RESERVED { 145 return Profile::Reserved; 146 } 147 148 match id { 149 Id::AAC => match value { 150 FF_PROFILE_AAC_MAIN => Profile::AAC(AAC::Main), 151 FF_PROFILE_AAC_LOW => Profile::AAC(AAC::Low), 152 FF_PROFILE_AAC_SSR => Profile::AAC(AAC::SSR), 153 FF_PROFILE_AAC_LTP => Profile::AAC(AAC::LTP), 154 FF_PROFILE_AAC_HE => Profile::AAC(AAC::HE), 155 FF_PROFILE_AAC_HE_V2 => Profile::AAC(AAC::HEv2), 156 FF_PROFILE_AAC_LD => Profile::AAC(AAC::LD), 157 FF_PROFILE_AAC_ELD => Profile::AAC(AAC::ELD), 158 159 FF_PROFILE_MPEG2_AAC_LOW => Profile::AAC(AAC::MPEG2Low), 160 FF_PROFILE_MPEG2_AAC_HE => Profile::AAC(AAC::MPEG2HE), 161 162 _ => Profile::Unknown, 163 }, 164 165 Id::DTS => match value { 166 FF_PROFILE_DTS => Profile::DTS(DTS::Default), 167 FF_PROFILE_DTS_ES => Profile::DTS(DTS::ES), 168 FF_PROFILE_DTS_96_24 => Profile::DTS(DTS::_96_24), 169 FF_PROFILE_DTS_HD_HRA => Profile::DTS(DTS::HD_HRA), 170 FF_PROFILE_DTS_HD_MA => Profile::DTS(DTS::HD_MA), 171 FF_PROFILE_DTS_EXPRESS => Profile::DTS(DTS::Express), 172 173 _ => Profile::Unknown, 174 }, 175 176 Id::MPEG2VIDEO => match value { 177 FF_PROFILE_MPEG2_422 => Profile::MPEG2(MPEG2::_422), 178 FF_PROFILE_MPEG2_HIGH => Profile::MPEG2(MPEG2::High), 179 FF_PROFILE_MPEG2_SS => Profile::MPEG2(MPEG2::SS), 180 FF_PROFILE_MPEG2_SNR_SCALABLE => Profile::MPEG2(MPEG2::SNRScalable), 181 FF_PROFILE_MPEG2_MAIN => Profile::MPEG2(MPEG2::Main), 182 FF_PROFILE_MPEG2_SIMPLE => Profile::MPEG2(MPEG2::Simple), 183 184 _ => Profile::Unknown, 185 }, 186 187 Id::H264 => match value { 188 FF_PROFILE_H264_CONSTRAINED => Profile::H264(H264::Constrained), 189 FF_PROFILE_H264_INTRA => Profile::H264(H264::Intra), 190 FF_PROFILE_H264_BASELINE => Profile::H264(H264::Baseline), 191 FF_PROFILE_H264_CONSTRAINED_BASELINE => Profile::H264(H264::ConstrainedBaseline), 192 FF_PROFILE_H264_MAIN => Profile::H264(H264::Main), 193 FF_PROFILE_H264_EXTENDED => Profile::H264(H264::Extended), 194 FF_PROFILE_H264_HIGH => Profile::H264(H264::High), 195 FF_PROFILE_H264_HIGH_10 => Profile::H264(H264::High10), 196 FF_PROFILE_H264_HIGH_10_INTRA => Profile::H264(H264::High10Intra), 197 FF_PROFILE_H264_HIGH_422 => Profile::H264(H264::High422), 198 FF_PROFILE_H264_HIGH_422_INTRA => Profile::H264(H264::High422Intra), 199 FF_PROFILE_H264_HIGH_444 => Profile::H264(H264::High444), 200 FF_PROFILE_H264_HIGH_444_PREDICTIVE => Profile::H264(H264::High444Predictive), 201 FF_PROFILE_H264_HIGH_444_INTRA => Profile::H264(H264::High444Intra), 202 FF_PROFILE_H264_CAVLC_444 => Profile::H264(H264::CAVLC444), 203 204 _ => Profile::Unknown, 205 }, 206 207 Id::VC1 => match value { 208 FF_PROFILE_VC1_SIMPLE => Profile::VC1(VC1::Simple), 209 FF_PROFILE_VC1_MAIN => Profile::VC1(VC1::Main), 210 FF_PROFILE_VC1_COMPLEX => Profile::VC1(VC1::Complex), 211 FF_PROFILE_VC1_ADVANCED => Profile::VC1(VC1::Advanced), 212 213 _ => Profile::Unknown, 214 }, 215 216 Id::MPEG4 => match value { 217 FF_PROFILE_MPEG4_SIMPLE => Profile::MPEG4(MPEG4::Simple), 218 FF_PROFILE_MPEG4_SIMPLE_SCALABLE => Profile::MPEG4(MPEG4::SimpleScalable), 219 FF_PROFILE_MPEG4_CORE => Profile::MPEG4(MPEG4::Core), 220 FF_PROFILE_MPEG4_MAIN => Profile::MPEG4(MPEG4::Main), 221 FF_PROFILE_MPEG4_N_BIT => Profile::MPEG4(MPEG4::NBit), 222 FF_PROFILE_MPEG4_SCALABLE_TEXTURE => Profile::MPEG4(MPEG4::ScalableTexture), 223 FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION => { 224 Profile::MPEG4(MPEG4::SimpleFaceAnimation) 225 } 226 FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE => { 227 Profile::MPEG4(MPEG4::BasicAnimatedTexture) 228 } 229 FF_PROFILE_MPEG4_HYBRID => Profile::MPEG4(MPEG4::Hybrid), 230 FF_PROFILE_MPEG4_ADVANCED_REAL_TIME => Profile::MPEG4(MPEG4::AdvancedRealTime), 231 FF_PROFILE_MPEG4_CORE_SCALABLE => Profile::MPEG4(MPEG4::CoreScalable), 232 FF_PROFILE_MPEG4_ADVANCED_CODING => Profile::MPEG4(MPEG4::AdvancedCoding), 233 FF_PROFILE_MPEG4_ADVANCED_CORE => Profile::MPEG4(MPEG4::AdvancedCore), 234 FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE => { 235 Profile::MPEG4(MPEG4::AdvancedScalableTexture) 236 } 237 FF_PROFILE_MPEG4_SIMPLE_STUDIO => Profile::MPEG4(MPEG4::SimpleStudio), 238 FF_PROFILE_MPEG4_ADVANCED_SIMPLE => Profile::MPEG4(MPEG4::AdvancedSimple), 239 240 _ => Profile::Unknown, 241 }, 242 243 Id::JPEG2000 => match value { 244 FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 => { 245 Profile::JPEG2000(JPEG2000::CStreamRestriction0) 246 } 247 FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 => { 248 Profile::JPEG2000(JPEG2000::CStreamRestriction1) 249 } 250 FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION => { 251 Profile::JPEG2000(JPEG2000::CStreamNoRestriction) 252 } 253 FF_PROFILE_JPEG2000_DCINEMA_2K => Profile::JPEG2000(JPEG2000::DCinema2K), 254 FF_PROFILE_JPEG2000_DCINEMA_4K => Profile::JPEG2000(JPEG2000::DCinema4K), 255 256 _ => Profile::Unknown, 257 }, 258 259 Id::HEVC => match value { 260 FF_PROFILE_HEVC_MAIN => Profile::HEVC(HEVC::Main), 261 FF_PROFILE_HEVC_MAIN_10 => Profile::HEVC(HEVC::Main10), 262 FF_PROFILE_HEVC_MAIN_STILL_PICTURE => Profile::HEVC(HEVC::MainStillPicture), 263 FF_PROFILE_HEVC_REXT => Profile::HEVC(HEVC::Rext), 264 265 _ => Profile::Unknown, 266 }, 267 268 Id::VP9 => match value { 269 FF_PROFILE_VP9_0 => Profile::VP9(VP9::_0), 270 FF_PROFILE_VP9_1 => Profile::VP9(VP9::_1), 271 FF_PROFILE_VP9_2 => Profile::VP9(VP9::_2), 272 FF_PROFILE_VP9_3 => Profile::VP9(VP9::_3), 273 274 _ => Profile::Unknown, 275 }, 276 277 _ => Profile::Unknown, 278 } 279 } 280 } 281 282 impl From<Profile> for c_int { from(value: Profile) -> c_int283 fn from(value: Profile) -> c_int { 284 match value { 285 Profile::Unknown => FF_PROFILE_UNKNOWN, 286 Profile::Reserved => FF_PROFILE_RESERVED, 287 288 Profile::AAC(AAC::Main) => FF_PROFILE_AAC_MAIN, 289 Profile::AAC(AAC::Low) => FF_PROFILE_AAC_LOW, 290 Profile::AAC(AAC::SSR) => FF_PROFILE_AAC_SSR, 291 Profile::AAC(AAC::LTP) => FF_PROFILE_AAC_LTP, 292 Profile::AAC(AAC::HE) => FF_PROFILE_AAC_HE, 293 Profile::AAC(AAC::HEv2) => FF_PROFILE_AAC_HE_V2, 294 Profile::AAC(AAC::LD) => FF_PROFILE_AAC_LD, 295 Profile::AAC(AAC::ELD) => FF_PROFILE_AAC_ELD, 296 297 Profile::AAC(AAC::MPEG2Low) => FF_PROFILE_MPEG2_AAC_LOW, 298 Profile::AAC(AAC::MPEG2HE) => FF_PROFILE_MPEG2_AAC_HE, 299 300 Profile::DTS(DTS::Default) => FF_PROFILE_DTS, 301 Profile::DTS(DTS::ES) => FF_PROFILE_DTS_ES, 302 Profile::DTS(DTS::_96_24) => FF_PROFILE_DTS_96_24, 303 Profile::DTS(DTS::HD_HRA) => FF_PROFILE_DTS_HD_HRA, 304 Profile::DTS(DTS::HD_MA) => FF_PROFILE_DTS_HD_MA, 305 Profile::DTS(DTS::Express) => FF_PROFILE_DTS_EXPRESS, 306 307 Profile::MPEG2(MPEG2::_422) => FF_PROFILE_MPEG2_422, 308 Profile::MPEG2(MPEG2::High) => FF_PROFILE_MPEG2_HIGH, 309 Profile::MPEG2(MPEG2::SS) => FF_PROFILE_MPEG2_SS, 310 Profile::MPEG2(MPEG2::SNRScalable) => FF_PROFILE_MPEG2_SNR_SCALABLE, 311 Profile::MPEG2(MPEG2::Main) => FF_PROFILE_MPEG2_MAIN, 312 Profile::MPEG2(MPEG2::Simple) => FF_PROFILE_MPEG2_SIMPLE, 313 314 Profile::H264(H264::Constrained) => FF_PROFILE_H264_CONSTRAINED, 315 Profile::H264(H264::Intra) => FF_PROFILE_H264_INTRA, 316 Profile::H264(H264::Baseline) => FF_PROFILE_H264_BASELINE, 317 Profile::H264(H264::ConstrainedBaseline) => FF_PROFILE_H264_CONSTRAINED_BASELINE, 318 Profile::H264(H264::Main) => FF_PROFILE_H264_MAIN, 319 Profile::H264(H264::Extended) => FF_PROFILE_H264_EXTENDED, 320 Profile::H264(H264::High) => FF_PROFILE_H264_HIGH, 321 Profile::H264(H264::High10) => FF_PROFILE_H264_HIGH_10, 322 Profile::H264(H264::High10Intra) => FF_PROFILE_H264_HIGH_10_INTRA, 323 Profile::H264(H264::High422) => FF_PROFILE_H264_HIGH_422, 324 Profile::H264(H264::High422Intra) => FF_PROFILE_H264_HIGH_422_INTRA, 325 Profile::H264(H264::High444) => FF_PROFILE_H264_HIGH_444, 326 Profile::H264(H264::High444Predictive) => FF_PROFILE_H264_HIGH_444_PREDICTIVE, 327 Profile::H264(H264::High444Intra) => FF_PROFILE_H264_HIGH_444_INTRA, 328 Profile::H264(H264::CAVLC444) => FF_PROFILE_H264_CAVLC_444, 329 330 Profile::VC1(VC1::Simple) => FF_PROFILE_VC1_SIMPLE, 331 Profile::VC1(VC1::Main) => FF_PROFILE_VC1_MAIN, 332 Profile::VC1(VC1::Complex) => FF_PROFILE_VC1_COMPLEX, 333 Profile::VC1(VC1::Advanced) => FF_PROFILE_VC1_ADVANCED, 334 335 Profile::MPEG4(MPEG4::Simple) => FF_PROFILE_MPEG4_SIMPLE, 336 Profile::MPEG4(MPEG4::SimpleScalable) => FF_PROFILE_MPEG4_SIMPLE_SCALABLE, 337 Profile::MPEG4(MPEG4::Core) => FF_PROFILE_MPEG4_CORE, 338 Profile::MPEG4(MPEG4::Main) => FF_PROFILE_MPEG4_MAIN, 339 Profile::MPEG4(MPEG4::NBit) => FF_PROFILE_MPEG4_N_BIT, 340 Profile::MPEG4(MPEG4::ScalableTexture) => FF_PROFILE_MPEG4_SCALABLE_TEXTURE, 341 Profile::MPEG4(MPEG4::SimpleFaceAnimation) => FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION, 342 Profile::MPEG4(MPEG4::BasicAnimatedTexture) => FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE, 343 Profile::MPEG4(MPEG4::Hybrid) => FF_PROFILE_MPEG4_HYBRID, 344 Profile::MPEG4(MPEG4::AdvancedRealTime) => FF_PROFILE_MPEG4_ADVANCED_REAL_TIME, 345 Profile::MPEG4(MPEG4::CoreScalable) => FF_PROFILE_MPEG4_CORE_SCALABLE, 346 Profile::MPEG4(MPEG4::AdvancedCoding) => FF_PROFILE_MPEG4_ADVANCED_CODING, 347 Profile::MPEG4(MPEG4::AdvancedCore) => FF_PROFILE_MPEG4_ADVANCED_CORE, 348 Profile::MPEG4(MPEG4::AdvancedScalableTexture) => { 349 FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 350 } 351 Profile::MPEG4(MPEG4::SimpleStudio) => FF_PROFILE_MPEG4_SIMPLE_STUDIO, 352 Profile::MPEG4(MPEG4::AdvancedSimple) => FF_PROFILE_MPEG4_ADVANCED_SIMPLE, 353 354 Profile::JPEG2000(JPEG2000::CStreamRestriction0) => { 355 FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 356 } 357 Profile::JPEG2000(JPEG2000::CStreamRestriction1) => { 358 FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 359 } 360 Profile::JPEG2000(JPEG2000::CStreamNoRestriction) => { 361 FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 362 } 363 Profile::JPEG2000(JPEG2000::DCinema2K) => FF_PROFILE_JPEG2000_DCINEMA_2K, 364 Profile::JPEG2000(JPEG2000::DCinema4K) => FF_PROFILE_JPEG2000_DCINEMA_4K, 365 366 Profile::HEVC(HEVC::Main) => FF_PROFILE_HEVC_MAIN, 367 Profile::HEVC(HEVC::Main10) => FF_PROFILE_HEVC_MAIN_10, 368 Profile::HEVC(HEVC::MainStillPicture) => FF_PROFILE_HEVC_MAIN_STILL_PICTURE, 369 Profile::HEVC(HEVC::Rext) => FF_PROFILE_HEVC_REXT, 370 371 Profile::VP9(VP9::_0) => FF_PROFILE_VP9_0, 372 Profile::VP9(VP9::_1) => FF_PROFILE_VP9_1, 373 Profile::VP9(VP9::_2) => FF_PROFILE_VP9_2, 374 Profile::VP9(VP9::_3) => FF_PROFILE_VP9_3, 375 } 376 } 377 } 378