1use super::Id;
2use crate::ffi::*;
3use libc::c_int;
4#[cfg(feature = "serialize")]
5use serde::{Deserialize, Serialize};
6
7#[allow(non_camel_case_types)]
8#[derive(Eq, PartialEq, Clone, Copy, Debug)]
9#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
10pub enum Profile {
11 Unknown,
12 Reserved,
13
14 AAC(AAC),
15 DNXHD(DNXHD),
16 DTS(DTS),
17 EAC3_DDP_Atmos,
18 TrueHD_Atmos,
19 MPEG2(MPEG2),
20 H264(H264),
21 VC1(VC1),
22 MPEG4(MPEG4),
23 JPEG2000(JPEG2000),
24 HEVC(HEVC),
25 VP9(VP9),
26 VVC(VVC),
27 AV1(AV1),
28 MJPEG(MJPEG),
29 SBC_MSBC,
30 ProRes(ProRes),
31 #[cfg(feature = "ffmpeg_8_0")]
32 ProResRAW(ProResRAW),
33 ARIB(ARIB),
34 KLVA(KLVA),
35 EVC(EVC),
36 #[cfg(feature = "ffmpeg_8_0")]
37 APV(APV),
38}
39
40#[allow(non_camel_case_types)]
41#[derive(Eq, PartialEq, Clone, Copy, Debug)]
42#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
43pub enum AAC {
44 Main,
45 Low,
46 SSR,
47 LTP,
48 HE,
49 HEv2,
50 LD,
51 ELD,
52
53 MPEG2Low,
54 MPEG2HE,
55}
56
57#[allow(non_camel_case_types)]
58#[derive(Eq, PartialEq, Clone, Copy, Debug)]
59#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
60pub enum DNXHD {
61 HD,
62 HR_LB,
63 HR_SQ,
64 HR_HQ,
65 HR_HQX,
66 HR_444,
67}
68
69#[allow(non_camel_case_types)]
70#[derive(Eq, PartialEq, Clone, Copy, Debug)]
71#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
72pub enum DTS {
73 Default,
74 ES,
75 _96_24,
76 HD_HRA,
77 HD_MA,
78 Express,
79 HD_MA_X,
80 HD_MA_X_IMAX,
81}
82
83#[allow(non_camel_case_types)]
84#[derive(Eq, PartialEq, Clone, Copy, Debug)]
85#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
86pub enum MPEG2 {
87 _422,
88 High,
89 SS,
90 SNRScalable,
91 Main,
92 Simple,
93}
94
95#[allow(non_camel_case_types)]
96#[derive(Eq, PartialEq, Clone, Copy, Debug)]
97#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
98pub enum H264 {
99 Constrained,
100 Intra,
101 Baseline,
102 ConstrainedBaseline,
103 Main,
104 Extended,
105 High,
106 High10,
107 High10Intra,
108 High422,
109 High422Intra,
110 High444,
111 High444Predictive,
112 High444Intra,
113 CAVLC444,
114}
115
116#[allow(non_camel_case_types)]
117#[derive(Eq, PartialEq, Clone, Copy, Debug)]
118#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
119pub enum VC1 {
120 Simple,
121 Main,
122 Complex,
123 Advanced,
124}
125
126#[allow(non_camel_case_types)]
127#[derive(Eq, PartialEq, Clone, Copy, Debug)]
128#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
129pub enum MPEG4 {
130 Simple,
131 SimpleScalable,
132 Core,
133 Main,
134 NBit,
135 ScalableTexture,
136 SimpleFaceAnimation,
137 BasicAnimatedTexture,
138 Hybrid,
139 AdvancedRealTime,
140 CoreScalable,
141 AdvancedCoding,
142 AdvancedCore,
143 AdvancedScalableTexture,
144 SimpleStudio,
145 AdvancedSimple,
146}
147
148#[allow(non_camel_case_types)]
149#[derive(Eq, PartialEq, Clone, Copy, Debug)]
150#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
151pub enum JPEG2000 {
152 CStreamRestriction0,
153 CStreamRestriction1,
154 CStreamNoRestriction,
155 DCinema2K,
156 DCinema4K,
157}
158
159#[allow(non_camel_case_types)]
160#[derive(Eq, PartialEq, Clone, Copy, Debug)]
161#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
162pub enum VP9 {
163 _0,
164 _1,
165 _2,
166 _3,
167}
168
169#[allow(non_camel_case_types)]
170#[derive(Eq, PartialEq, Clone, Copy, Debug)]
171#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
172pub enum HEVC {
173 Main,
174 Main10,
175 MainStillPicture,
176 Rext,
177}
178
179#[allow(non_camel_case_types)]
180#[derive(Eq, PartialEq, Clone, Copy, Debug)]
181#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
182pub enum VVC {
183 Main10,
184 Main10_444,
185}
186
187#[allow(non_camel_case_types)]
188#[derive(Eq, PartialEq, Clone, Copy, Debug)]
189#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
190pub enum AV1 {
191 Main,
192 High,
193 Professional,
194}
195
196#[allow(non_camel_case_types)]
197#[derive(Eq, PartialEq, Clone, Copy, Debug)]
198#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
199pub enum MJPEG {
200 HuffmanBaselineDCT,
201 HuffmanExtendedSequentialDCT,
202 HuffmanProgressiveDCT,
203 HuffmanLossless,
204 JPEG_LS,
205}
206
207#[allow(non_camel_case_types)]
208#[derive(Eq, PartialEq, Clone, Copy, Debug)]
209#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
210pub enum ProRes {
211 Proxy,
212 LT,
213 Standard,
214 HQ,
215 _4444,
216 XQ,
217}
218
219#[cfg(feature = "ffmpeg_8_0")]
220#[allow(non_camel_case_types)]
221#[derive(Eq, PartialEq, Clone, Copy, Debug)]
222#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
223pub enum ProResRAW {
224 Default,
225 HQ,
226}
227
228#[allow(non_camel_case_types)]
229#[derive(Eq, PartialEq, Clone, Copy, Debug)]
230#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
231pub enum ARIB {
232 ProfileA,
233 ProfileC,
234}
235
236#[allow(non_camel_case_types)]
237#[derive(Eq, PartialEq, Clone, Copy, Debug)]
238#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
239pub enum KLVA {
240 Sync,
241 Async,
242}
243
244#[allow(non_camel_case_types)]
245#[derive(Eq, PartialEq, Clone, Copy, Debug)]
246#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
247pub enum EVC {
248 Baseline,
249 Main,
250}
251
252#[cfg(feature = "ffmpeg_8_0")]
253#[allow(non_camel_case_types)]
254#[derive(Eq, PartialEq, Clone, Copy, Debug)]
255#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
256pub enum APV {
257 _422_10,
258 _422_12,
259 _444_10,
260 _444_12,
261 _4444_10,
262 _4444_12,
263 _400_10,
264}
265
266impl From<(Id, c_int)> for Profile {
267 fn from((id, value): (Id, c_int)) -> Profile {
268 if value == AV_PROFILE_UNKNOWN {
269 return Profile::Unknown;
270 }
271
272 if value == AV_PROFILE_RESERVED {
273 return Profile::Reserved;
274 }
275
276 match id {
277 Id::AAC => match value {
278 AV_PROFILE_AAC_MAIN => Profile::AAC(AAC::Main),
279 AV_PROFILE_AAC_LOW => Profile::AAC(AAC::Low),
280 AV_PROFILE_AAC_SSR => Profile::AAC(AAC::SSR),
281 AV_PROFILE_AAC_LTP => Profile::AAC(AAC::LTP),
282 AV_PROFILE_AAC_HE => Profile::AAC(AAC::HE),
283 AV_PROFILE_AAC_HE_V2 => Profile::AAC(AAC::HEv2),
284 AV_PROFILE_AAC_LD => Profile::AAC(AAC::LD),
285 AV_PROFILE_AAC_ELD => Profile::AAC(AAC::ELD),
286
287 AV_PROFILE_MPEG2_AAC_LOW => Profile::AAC(AAC::MPEG2Low),
288 AV_PROFILE_MPEG2_AAC_HE => Profile::AAC(AAC::MPEG2HE),
289
290 _ => Profile::Unknown,
291 },
292
293 Id::DNXHD => Profile::DNXHD(match value {
294 AV_PROFILE_DNXHD => DNXHD::HD,
295 AV_PROFILE_DNXHR_LB => DNXHD::HR_LB,
296 AV_PROFILE_DNXHR_SQ => DNXHD::HR_SQ,
297 AV_PROFILE_DNXHR_HQ => DNXHD::HR_HQ,
298 AV_PROFILE_DNXHR_HQX => DNXHD::HR_HQX,
299 AV_PROFILE_DNXHR_444 => DNXHD::HR_444,
300
301 _ => return Profile::Unknown,
302 }),
303
304 Id::DTS => match value {
305 AV_PROFILE_DTS => Profile::DTS(DTS::Default),
306 AV_PROFILE_DTS_ES => Profile::DTS(DTS::ES),
307 AV_PROFILE_DTS_96_24 => Profile::DTS(DTS::_96_24),
308 AV_PROFILE_DTS_HD_HRA => Profile::DTS(DTS::HD_HRA),
309 AV_PROFILE_DTS_HD_MA => Profile::DTS(DTS::HD_MA),
310 AV_PROFILE_DTS_EXPRESS => Profile::DTS(DTS::Express),
311
312 _ => Profile::Unknown,
313 },
314
315 Id::MPEG2VIDEO => match value {
316 AV_PROFILE_MPEG2_422 => Profile::MPEG2(MPEG2::_422),
317 AV_PROFILE_MPEG2_HIGH => Profile::MPEG2(MPEG2::High),
318 AV_PROFILE_MPEG2_SS => Profile::MPEG2(MPEG2::SS),
319 AV_PROFILE_MPEG2_SNR_SCALABLE => Profile::MPEG2(MPEG2::SNRScalable),
320 AV_PROFILE_MPEG2_MAIN => Profile::MPEG2(MPEG2::Main),
321 AV_PROFILE_MPEG2_SIMPLE => Profile::MPEG2(MPEG2::Simple),
322
323 _ => Profile::Unknown,
324 },
325
326 Id::H264 => match value {
327 AV_PROFILE_H264_CONSTRAINED => Profile::H264(H264::Constrained),
328 AV_PROFILE_H264_INTRA => Profile::H264(H264::Intra),
329 AV_PROFILE_H264_BASELINE => Profile::H264(H264::Baseline),
330 AV_PROFILE_H264_CONSTRAINED_BASELINE => Profile::H264(H264::ConstrainedBaseline),
331 AV_PROFILE_H264_MAIN => Profile::H264(H264::Main),
332 AV_PROFILE_H264_EXTENDED => Profile::H264(H264::Extended),
333 AV_PROFILE_H264_HIGH => Profile::H264(H264::High),
334 AV_PROFILE_H264_HIGH_10 => Profile::H264(H264::High10),
335 AV_PROFILE_H264_HIGH_10_INTRA => Profile::H264(H264::High10Intra),
336 AV_PROFILE_H264_HIGH_422 => Profile::H264(H264::High422),
337 AV_PROFILE_H264_HIGH_422_INTRA => Profile::H264(H264::High422Intra),
338 AV_PROFILE_H264_HIGH_444 => Profile::H264(H264::High444),
339 AV_PROFILE_H264_HIGH_444_PREDICTIVE => Profile::H264(H264::High444Predictive),
340 AV_PROFILE_H264_HIGH_444_INTRA => Profile::H264(H264::High444Intra),
341 AV_PROFILE_H264_CAVLC_444 => Profile::H264(H264::CAVLC444),
342
343 _ => Profile::Unknown,
344 },
345
346 Id::VC1 => match value {
347 AV_PROFILE_VC1_SIMPLE => Profile::VC1(VC1::Simple),
348 AV_PROFILE_VC1_MAIN => Profile::VC1(VC1::Main),
349 AV_PROFILE_VC1_COMPLEX => Profile::VC1(VC1::Complex),
350 AV_PROFILE_VC1_ADVANCED => Profile::VC1(VC1::Advanced),
351
352 _ => Profile::Unknown,
353 },
354
355 Id::MPEG4 => match value {
356 AV_PROFILE_MPEG4_SIMPLE => Profile::MPEG4(MPEG4::Simple),
357 AV_PROFILE_MPEG4_SIMPLE_SCALABLE => Profile::MPEG4(MPEG4::SimpleScalable),
358 AV_PROFILE_MPEG4_CORE => Profile::MPEG4(MPEG4::Core),
359 AV_PROFILE_MPEG4_MAIN => Profile::MPEG4(MPEG4::Main),
360 AV_PROFILE_MPEG4_N_BIT => Profile::MPEG4(MPEG4::NBit),
361 AV_PROFILE_MPEG4_SCALABLE_TEXTURE => Profile::MPEG4(MPEG4::ScalableTexture),
362 AV_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION => {
363 Profile::MPEG4(MPEG4::SimpleFaceAnimation)
364 }
365 AV_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE => {
366 Profile::MPEG4(MPEG4::BasicAnimatedTexture)
367 }
368 AV_PROFILE_MPEG4_HYBRID => Profile::MPEG4(MPEG4::Hybrid),
369 AV_PROFILE_MPEG4_ADVANCED_REAL_TIME => Profile::MPEG4(MPEG4::AdvancedRealTime),
370 AV_PROFILE_MPEG4_CORE_SCALABLE => Profile::MPEG4(MPEG4::CoreScalable),
371 AV_PROFILE_MPEG4_ADVANCED_CODING => Profile::MPEG4(MPEG4::AdvancedCoding),
372 AV_PROFILE_MPEG4_ADVANCED_CORE => Profile::MPEG4(MPEG4::AdvancedCore),
373 AV_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE => {
374 Profile::MPEG4(MPEG4::AdvancedScalableTexture)
375 }
376 AV_PROFILE_MPEG4_SIMPLE_STUDIO => Profile::MPEG4(MPEG4::SimpleStudio),
377 AV_PROFILE_MPEG4_ADVANCED_SIMPLE => Profile::MPEG4(MPEG4::AdvancedSimple),
378
379 _ => Profile::Unknown,
380 },
381
382 Id::JPEG2000 => match value {
383 AV_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 => {
384 Profile::JPEG2000(JPEG2000::CStreamRestriction0)
385 }
386 AV_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 => {
387 Profile::JPEG2000(JPEG2000::CStreamRestriction1)
388 }
389 AV_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION => {
390 Profile::JPEG2000(JPEG2000::CStreamNoRestriction)
391 }
392 AV_PROFILE_JPEG2000_DCINEMA_2K => Profile::JPEG2000(JPEG2000::DCinema2K),
393 AV_PROFILE_JPEG2000_DCINEMA_4K => Profile::JPEG2000(JPEG2000::DCinema4K),
394
395 _ => Profile::Unknown,
396 },
397
398 Id::VP9 => match value {
399 AV_PROFILE_VP9_0 => Profile::VP9(VP9::_0),
400 AV_PROFILE_VP9_1 => Profile::VP9(VP9::_1),
401 AV_PROFILE_VP9_2 => Profile::VP9(VP9::_2),
402 AV_PROFILE_VP9_3 => Profile::VP9(VP9::_3),
403
404 _ => Profile::Unknown,
405 },
406
407 Id::HEVC => match value {
408 AV_PROFILE_HEVC_MAIN => Profile::HEVC(HEVC::Main),
409 AV_PROFILE_HEVC_MAIN_10 => Profile::HEVC(HEVC::Main10),
410 AV_PROFILE_HEVC_MAIN_STILL_PICTURE => Profile::HEVC(HEVC::MainStillPicture),
411 AV_PROFILE_HEVC_REXT => Profile::HEVC(HEVC::Rext),
412
413 _ => Profile::Unknown,
414 },
415
416 Id::VVC => Profile::VVC(match value {
417 AV_PROFILE_VVC_MAIN_10 => VVC::Main10,
418 AV_PROFILE_VVC_MAIN_10_444 => VVC::Main10_444,
419
420 _ => return Profile::Unknown,
421 }),
422
423 Id::AV1 => Profile::AV1(match value {
424 AV_PROFILE_AV1_MAIN => AV1::Main,
425 AV_PROFILE_AV1_HIGH => AV1::High,
426 AV_PROFILE_AV1_PROFESSIONAL => AV1::Professional,
427
428 _ => return Profile::Unknown,
429 }),
430
431 Id::MJPEG => Profile::MJPEG(match value {
432 AV_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT => MJPEG::HuffmanBaselineDCT,
433 AV_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT => {
434 MJPEG::HuffmanExtendedSequentialDCT
435 }
436 AV_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT => MJPEG::HuffmanProgressiveDCT,
437 AV_PROFILE_MJPEG_HUFFMAN_LOSSLESS => MJPEG::HuffmanLossless,
438 AV_PROFILE_MJPEG_JPEG_LS => MJPEG::JPEG_LS,
439
440 _ => return Profile::Unknown,
441 }),
442
443 Id::PRORES => Profile::ProRes(match value {
444 AV_PROFILE_PRORES_PROXY => ProRes::Proxy,
445 AV_PROFILE_PRORES_LT => ProRes::LT,
446 AV_PROFILE_PRORES_STANDARD => ProRes::Standard,
447 AV_PROFILE_PRORES_HQ => ProRes::HQ,
448 AV_PROFILE_PRORES_4444 => ProRes::_4444,
449 AV_PROFILE_PRORES_XQ => ProRes::XQ,
450
451 _ => return Profile::Unknown,
452 }),
453
454 #[cfg(feature = "ffmpeg_8_0")]
455 Id::PRORES_RAW => Profile::ProResRAW(match value {
456 AV_PROFILE_PRORES_RAW => ProResRAW::Default,
457 AV_PROFILE_PRORES_RAW_HQ => ProResRAW::HQ,
458
459 _ => return Profile::Unknown,
460 }),
461
462 Id::ARIB_CAPTION => Profile::ARIB(match value {
463 AV_PROFILE_ARIB_PROFILE_A => ARIB::ProfileA,
464 AV_PROFILE_ARIB_PROFILE_C => ARIB::ProfileC,
465
466 _ => return Profile::Unknown,
467 }),
468
469 Id::SMPTE_KLV => Profile::KLVA(match value {
470 AV_PROFILE_KLVA_SYNC => KLVA::Sync,
471 AV_PROFILE_KLVA_ASYNC => KLVA::Async,
472
473 _ => return Profile::Unknown,
474 }),
475
476 Id::EVC => Profile::EVC(match value {
477 AV_PROFILE_EVC_BASELINE => EVC::Baseline,
478 AV_PROFILE_EVC_MAIN => EVC::Main,
479
480 _ => return Profile::Unknown,
481 }),
482
483 #[cfg(feature = "ffmpeg_8_0")]
484 Id::APV => Profile::APV(match value {
485 AV_PROFILE_APV_422_10 => APV::_422_10,
486 AV_PROFILE_APV_422_12 => APV::_422_12,
487 AV_PROFILE_APV_444_10 => APV::_444_10,
488 AV_PROFILE_APV_444_12 => APV::_444_12,
489 AV_PROFILE_APV_4444_10 => APV::_4444_10,
490 AV_PROFILE_APV_4444_12 => APV::_4444_12,
491 AV_PROFILE_APV_400_10 => APV::_400_10,
492
493 _ => return Profile::Unknown,
494 }),
495
496 _ => Profile::Unknown,
497 }
498 }
499}
500
501impl From<Profile> for c_int {
502 fn from(value: Profile) -> c_int {
503 match value {
504 Profile::Unknown => AV_PROFILE_UNKNOWN,
505 Profile::Reserved => AV_PROFILE_RESERVED,
506
507 Profile::AAC(AAC::Main) => AV_PROFILE_AAC_MAIN,
508 Profile::AAC(AAC::Low) => AV_PROFILE_AAC_LOW,
509 Profile::AAC(AAC::SSR) => AV_PROFILE_AAC_SSR,
510 Profile::AAC(AAC::LTP) => AV_PROFILE_AAC_LTP,
511 Profile::AAC(AAC::HE) => AV_PROFILE_AAC_HE,
512 Profile::AAC(AAC::HEv2) => AV_PROFILE_AAC_HE_V2,
513 Profile::AAC(AAC::LD) => AV_PROFILE_AAC_LD,
514 Profile::AAC(AAC::ELD) => AV_PROFILE_AAC_ELD,
515
516 Profile::AAC(AAC::MPEG2Low) => AV_PROFILE_MPEG2_AAC_LOW,
517 Profile::AAC(AAC::MPEG2HE) => AV_PROFILE_MPEG2_AAC_HE,
518
519 Profile::DNXHD(DNXHD::HD) => AV_PROFILE_DNXHD,
520 Profile::DNXHD(DNXHD::HR_LB) => AV_PROFILE_DNXHR_LB,
521 Profile::DNXHD(DNXHD::HR_SQ) => AV_PROFILE_DNXHR_SQ,
522 Profile::DNXHD(DNXHD::HR_HQ) => AV_PROFILE_DNXHR_HQ,
523 Profile::DNXHD(DNXHD::HR_HQX) => AV_PROFILE_DNXHR_HQX,
524 Profile::DNXHD(DNXHD::HR_444) => AV_PROFILE_DNXHR_444,
525
526 Profile::DTS(DTS::Default) => AV_PROFILE_DTS,
527 Profile::DTS(DTS::ES) => AV_PROFILE_DTS_ES,
528 Profile::DTS(DTS::_96_24) => AV_PROFILE_DTS_96_24,
529 Profile::DTS(DTS::HD_HRA) => AV_PROFILE_DTS_HD_HRA,
530 Profile::DTS(DTS::HD_MA) => AV_PROFILE_DTS_HD_MA,
531 Profile::DTS(DTS::Express) => AV_PROFILE_DTS_EXPRESS,
532 Profile::DTS(DTS::HD_MA_X) => AV_PROFILE_DTS_HD_MA_X,
533 Profile::DTS(DTS::HD_MA_X_IMAX) => AV_PROFILE_DTS_HD_MA_X_IMAX,
534
535 Profile::EAC3_DDP_Atmos => AV_PROFILE_EAC3_DDP_ATMOS,
536
537 Profile::TrueHD_Atmos => AV_PROFILE_TRUEHD_ATMOS,
538
539 Profile::MPEG2(MPEG2::_422) => AV_PROFILE_MPEG2_422,
540 Profile::MPEG2(MPEG2::High) => AV_PROFILE_MPEG2_HIGH,
541 Profile::MPEG2(MPEG2::SS) => AV_PROFILE_MPEG2_SS,
542 Profile::MPEG2(MPEG2::SNRScalable) => AV_PROFILE_MPEG2_SNR_SCALABLE,
543 Profile::MPEG2(MPEG2::Main) => AV_PROFILE_MPEG2_MAIN,
544 Profile::MPEG2(MPEG2::Simple) => AV_PROFILE_MPEG2_SIMPLE,
545
546 Profile::H264(H264::Constrained) => AV_PROFILE_H264_CONSTRAINED,
547 Profile::H264(H264::Intra) => AV_PROFILE_H264_INTRA,
548 Profile::H264(H264::Baseline) => AV_PROFILE_H264_BASELINE,
549 Profile::H264(H264::ConstrainedBaseline) => AV_PROFILE_H264_CONSTRAINED_BASELINE,
550 Profile::H264(H264::Main) => AV_PROFILE_H264_MAIN,
551 Profile::H264(H264::Extended) => AV_PROFILE_H264_EXTENDED,
552 Profile::H264(H264::High) => AV_PROFILE_H264_HIGH,
553 Profile::H264(H264::High10) => AV_PROFILE_H264_HIGH_10,
554 Profile::H264(H264::High10Intra) => AV_PROFILE_H264_HIGH_10_INTRA,
555 Profile::H264(H264::High422) => AV_PROFILE_H264_HIGH_422,
556 Profile::H264(H264::High422Intra) => AV_PROFILE_H264_HIGH_422_INTRA,
557 Profile::H264(H264::High444) => AV_PROFILE_H264_HIGH_444,
558 Profile::H264(H264::High444Predictive) => AV_PROFILE_H264_HIGH_444_PREDICTIVE,
559 Profile::H264(H264::High444Intra) => AV_PROFILE_H264_HIGH_444_INTRA,
560 Profile::H264(H264::CAVLC444) => AV_PROFILE_H264_CAVLC_444,
561
562 Profile::VC1(VC1::Simple) => AV_PROFILE_VC1_SIMPLE,
563 Profile::VC1(VC1::Main) => AV_PROFILE_VC1_MAIN,
564 Profile::VC1(VC1::Complex) => AV_PROFILE_VC1_COMPLEX,
565 Profile::VC1(VC1::Advanced) => AV_PROFILE_VC1_ADVANCED,
566
567 Profile::MPEG4(MPEG4::Simple) => AV_PROFILE_MPEG4_SIMPLE,
568 Profile::MPEG4(MPEG4::SimpleScalable) => AV_PROFILE_MPEG4_SIMPLE_SCALABLE,
569 Profile::MPEG4(MPEG4::Core) => AV_PROFILE_MPEG4_CORE,
570 Profile::MPEG4(MPEG4::Main) => AV_PROFILE_MPEG4_MAIN,
571 Profile::MPEG4(MPEG4::NBit) => AV_PROFILE_MPEG4_N_BIT,
572 Profile::MPEG4(MPEG4::ScalableTexture) => AV_PROFILE_MPEG4_SCALABLE_TEXTURE,
573 Profile::MPEG4(MPEG4::SimpleFaceAnimation) => AV_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION,
574 Profile::MPEG4(MPEG4::BasicAnimatedTexture) => AV_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE,
575 Profile::MPEG4(MPEG4::Hybrid) => AV_PROFILE_MPEG4_HYBRID,
576 Profile::MPEG4(MPEG4::AdvancedRealTime) => AV_PROFILE_MPEG4_ADVANCED_REAL_TIME,
577 Profile::MPEG4(MPEG4::CoreScalable) => AV_PROFILE_MPEG4_CORE_SCALABLE,
578 Profile::MPEG4(MPEG4::AdvancedCoding) => AV_PROFILE_MPEG4_ADVANCED_CODING,
579 Profile::MPEG4(MPEG4::AdvancedCore) => AV_PROFILE_MPEG4_ADVANCED_CORE,
580 Profile::MPEG4(MPEG4::AdvancedScalableTexture) => {
581 AV_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE
582 }
583 Profile::MPEG4(MPEG4::SimpleStudio) => AV_PROFILE_MPEG4_SIMPLE_STUDIO,
584 Profile::MPEG4(MPEG4::AdvancedSimple) => AV_PROFILE_MPEG4_ADVANCED_SIMPLE,
585
586 Profile::JPEG2000(JPEG2000::CStreamRestriction0) => {
587 AV_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0
588 }
589 Profile::JPEG2000(JPEG2000::CStreamRestriction1) => {
590 AV_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1
591 }
592 Profile::JPEG2000(JPEG2000::CStreamNoRestriction) => {
593 AV_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION
594 }
595 Profile::JPEG2000(JPEG2000::DCinema2K) => AV_PROFILE_JPEG2000_DCINEMA_2K,
596 Profile::JPEG2000(JPEG2000::DCinema4K) => AV_PROFILE_JPEG2000_DCINEMA_4K,
597
598 Profile::VP9(VP9::_0) => AV_PROFILE_VP9_0,
599 Profile::VP9(VP9::_1) => AV_PROFILE_VP9_1,
600 Profile::VP9(VP9::_2) => AV_PROFILE_VP9_2,
601 Profile::VP9(VP9::_3) => AV_PROFILE_VP9_3,
602
603 Profile::HEVC(HEVC::Main) => AV_PROFILE_HEVC_MAIN,
604 Profile::HEVC(HEVC::Main10) => AV_PROFILE_HEVC_MAIN_10,
605 Profile::HEVC(HEVC::MainStillPicture) => AV_PROFILE_HEVC_MAIN_STILL_PICTURE,
606 Profile::HEVC(HEVC::Rext) => AV_PROFILE_HEVC_REXT,
607
608 Profile::VVC(VVC::Main10) => AV_PROFILE_VVC_MAIN_10,
609 Profile::VVC(VVC::Main10_444) => AV_PROFILE_VVC_MAIN_10_444,
610
611 Profile::AV1(AV1::Main) => AV_PROFILE_AV1_MAIN,
612 Profile::AV1(AV1::High) => AV_PROFILE_AV1_HIGH,
613 Profile::AV1(AV1::Professional) => AV_PROFILE_AV1_PROFESSIONAL,
614
615 Profile::MJPEG(MJPEG::HuffmanBaselineDCT) => AV_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT,
616 Profile::MJPEG(MJPEG::HuffmanExtendedSequentialDCT) => {
617 AV_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT
618 }
619 Profile::MJPEG(MJPEG::HuffmanProgressiveDCT) => {
620 AV_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT
621 }
622 Profile::MJPEG(MJPEG::HuffmanLossless) => AV_PROFILE_MJPEG_HUFFMAN_LOSSLESS,
623 Profile::MJPEG(MJPEG::JPEG_LS) => AV_PROFILE_MJPEG_JPEG_LS,
624
625 Profile::SBC_MSBC => AV_PROFILE_SBC_MSBC,
626
627 Profile::ProRes(ProRes::Proxy) => AV_PROFILE_PRORES_PROXY,
628 Profile::ProRes(ProRes::LT) => AV_PROFILE_PRORES_LT,
629 Profile::ProRes(ProRes::Standard) => AV_PROFILE_PRORES_STANDARD,
630 Profile::ProRes(ProRes::HQ) => AV_PROFILE_PRORES_HQ,
631 Profile::ProRes(ProRes::_4444) => AV_PROFILE_PRORES_4444,
632 Profile::ProRes(ProRes::XQ) => AV_PROFILE_PRORES_XQ,
633
634 #[cfg(feature = "ffmpeg_8_0")]
635 Profile::ProResRAW(ProResRAW::Default) => AV_PROFILE_PRORES_RAW,
636 #[cfg(feature = "ffmpeg_8_0")]
637 Profile::ProResRAW(ProResRAW::HQ) => AV_PROFILE_PRORES_RAW_HQ,
638
639 Profile::ARIB(ARIB::ProfileA) => AV_PROFILE_ARIB_PROFILE_A,
640 Profile::ARIB(ARIB::ProfileC) => AV_PROFILE_ARIB_PROFILE_C,
641
642 Profile::KLVA(KLVA::Sync) => AV_PROFILE_KLVA_SYNC,
643 Profile::KLVA(KLVA::Async) => AV_PROFILE_KLVA_ASYNC,
644
645 Profile::EVC(EVC::Baseline) => AV_PROFILE_EVC_BASELINE,
646 Profile::EVC(EVC::Main) => AV_PROFILE_EVC_MAIN,
647
648 #[cfg(feature = "ffmpeg_8_0")]
649 Profile::APV(APV::_422_10) => AV_PROFILE_APV_422_10,
650 #[cfg(feature = "ffmpeg_8_0")]
651 Profile::APV(APV::_422_12) => AV_PROFILE_APV_422_12,
652 #[cfg(feature = "ffmpeg_8_0")]
653 Profile::APV(APV::_444_10) => AV_PROFILE_APV_444_10,
654 #[cfg(feature = "ffmpeg_8_0")]
655 Profile::APV(APV::_444_12) => AV_PROFILE_APV_444_12,
656 #[cfg(feature = "ffmpeg_8_0")]
657 Profile::APV(APV::_4444_10) => AV_PROFILE_APV_4444_10,
658 #[cfg(feature = "ffmpeg_8_0")]
659 Profile::APV(APV::_4444_12) => AV_PROFILE_APV_4444_12,
660 #[cfg(feature = "ffmpeg_8_0")]
661 Profile::APV(APV::_400_10) => AV_PROFILE_APV_400_10,
662 }
663 }
664}
665
666pub struct ProfileIter {
667 id: Id,
668 ptr: *const AVProfile,
669}
670
671impl ProfileIter {
672 pub fn new(id: Id, ptr: *const AVProfile) -> Self {
673 ProfileIter { id, ptr }
674 }
675}
676
677impl Iterator for ProfileIter {
678 type Item = Profile;
679
680 fn next(&mut self) -> Option<<Self as Iterator>::Item> {
681 unsafe {
682 if (*self.ptr).profile == AV_PROFILE_UNKNOWN {
683 return None;
684 }
685
686 let profile = Profile::from((self.id, (*self.ptr).profile));
687 self.ptr = self.ptr.offset(1);
688
689 Some(profile)
690 }
691 }
692}