1 use std::error; 2 use std::ffi::{CStr, CString, NulError}; 3 use std::fmt; 4 use std::str::{from_utf8_unchecked, FromStr}; 5 6 use ffi::AVPixelFormat::*; 7 use ffi::*; 8 9 #[derive(Eq, PartialEq, Copy, Clone, Debug)] 10 pub enum Pixel { 11 None, 12 13 YUV420P, 14 YUYV422, 15 RGB24, 16 BGR24, 17 YUV422P, 18 YUV444P, 19 YUV410P, 20 YUV411P, 21 GRAY8, 22 MonoWhite, 23 MonoBlack, 24 PAL8, 25 YUVJ420P, 26 YUVJ422P, 27 YUVJ444P, 28 #[cfg(feature = "ff_api_xvmc")] 29 XVMC_MPEG2_MC, 30 #[cfg(feature = "ff_api_xvmc")] 31 XVMC_MPEG2_IDCT, 32 UYVY422, 33 UYYVYY411, 34 BGR8, 35 BGR4, 36 BGR4_BYTE, 37 RGB8, 38 RGB4, 39 RGB4_BYTE, 40 NV12, 41 NV21, 42 43 ARGB, 44 RGBA, 45 ABGR, 46 BGRA, 47 48 GRAY16BE, 49 GRAY16LE, 50 YUV440P, 51 YUVJ440P, 52 YUVA420P, 53 #[cfg(feature = "ff_api_vdpau")] 54 VDPAU_H264, 55 #[cfg(feature = "ff_api_vdpau")] 56 VDPAU_MPEG1, 57 #[cfg(feature = "ff_api_vdpau")] 58 VDPAU_MPEG2, 59 #[cfg(feature = "ff_api_vdpau")] 60 VDPAU_WMV3, 61 #[cfg(feature = "ff_api_vdpau")] 62 VDPAU_VC1, 63 RGB48BE, 64 RGB48LE, 65 66 RGB565BE, 67 RGB565LE, 68 RGB555BE, 69 RGB555LE, 70 71 BGR565BE, 72 BGR565LE, 73 BGR555BE, 74 BGR555LE, 75 76 #[cfg(feature = "ff_api_vaapi")] 77 VAAPI_MOCO, 78 #[cfg(feature = "ff_api_vaapi")] 79 VAAPI_IDCT, 80 #[cfg(feature = "ff_api_vaapi")] 81 VAAPI_VLD, 82 #[cfg(not(feature = "ff_api_vaapi"))] 83 VAAPI, 84 85 YUV420P16LE, 86 YUV420P16BE, 87 YUV422P16LE, 88 YUV422P16BE, 89 YUV444P16LE, 90 YUV444P16BE, 91 #[cfg(feature = "ff_api_vdpau")] 92 VDPAU_MPEG4, 93 DXVA2_VLD, 94 95 RGB444LE, 96 RGB444BE, 97 BGR444LE, 98 BGR444BE, 99 YA8, 100 101 BGR48BE, 102 BGR48LE, 103 104 YUV420P9BE, 105 YUV420P9LE, 106 YUV420P10BE, 107 YUV420P10LE, 108 YUV422P10BE, 109 YUV422P10LE, 110 YUV444P9BE, 111 YUV444P9LE, 112 YUV444P10BE, 113 YUV444P10LE, 114 YUV422P9BE, 115 YUV422P9LE, 116 #[cfg(not(feature = "ffmpeg_4_0"))] 117 VDA_VLD, 118 119 GBRP, 120 GBRP9BE, 121 GBRP9LE, 122 GBRP10BE, 123 GBRP10LE, 124 GBRP16BE, 125 GBRP16LE, 126 127 YUVA420P9BE, 128 YUVA420P9LE, 129 YUVA422P9BE, 130 YUVA422P9LE, 131 YUVA444P9BE, 132 YUVA444P9LE, 133 YUVA420P10BE, 134 YUVA420P10LE, 135 YUVA422P10BE, 136 YUVA422P10LE, 137 YUVA444P10BE, 138 YUVA444P10LE, 139 YUVA420P16BE, 140 YUVA420P16LE, 141 YUVA422P16BE, 142 YUVA422P16LE, 143 YUVA444P16BE, 144 YUVA444P16LE, 145 146 VDPAU, 147 148 XYZ12LE, 149 XYZ12BE, 150 NV16, 151 NV20LE, 152 NV20BE, 153 154 RGBA64BE, 155 RGBA64LE, 156 BGRA64BE, 157 BGRA64LE, 158 159 YVYU422, 160 161 #[cfg(not(feature = "ffmpeg_4_0"))] 162 VDA, 163 164 YA16BE, 165 YA16LE, 166 167 QSV, 168 MMAL, 169 170 D3D11VA_VLD, 171 172 CUDA, 173 174 ZRGB, 175 RGBZ, 176 ZBGR, 177 BGRZ, 178 YUVA444P, 179 YUVA422P, 180 181 YUV420P12BE, 182 YUV420P12LE, 183 YUV420P14BE, 184 YUV420P14LE, 185 YUV422P12BE, 186 YUV422P12LE, 187 YUV422P14BE, 188 YUV422P14LE, 189 YUV444P12BE, 190 YUV444P12LE, 191 YUV444P14BE, 192 YUV444P14LE, 193 GBRP12BE, 194 GBRP12LE, 195 GBRP14BE, 196 GBRP14LE, 197 GBRAP, 198 GBRAP16BE, 199 GBRAP16LE, 200 YUVJ411P, 201 202 BAYER_BGGR8, 203 BAYER_RGGB8, 204 BAYER_GBRG8, 205 BAYER_GRBG8, 206 BAYER_BGGR16LE, 207 BAYER_BGGR16BE, 208 BAYER_RGGB16LE, 209 BAYER_RGGB16BE, 210 BAYER_GBRG16LE, 211 BAYER_GBRG16BE, 212 BAYER_GRBG16LE, 213 BAYER_GRBG16BE, 214 215 YUV440P10LE, 216 YUV440P10BE, 217 YUV440P12LE, 218 YUV440P12BE, 219 AYUV64LE, 220 AYUV64BE, 221 222 VIDEOTOOLBOX, 223 224 // --- defaults 225 #[cfg(not(feature = "ff_api_xvmc"))] 226 XVMC, 227 228 RGB32, 229 RGB32_1, 230 BGR32, 231 BGR32_1, 232 ZRGB32, 233 ZBGR32, 234 235 GRAY16, 236 YA16, 237 RGB48, 238 RGB565, 239 RGB555, 240 RGB444, 241 BGR48, 242 BGR565, 243 BGR555, 244 BGR444, 245 246 YUV420P9, 247 YUV422P9, 248 YUV444P9, 249 YUV420P10, 250 YUV422P10, 251 YUV440P10, 252 YUV444P10, 253 YUV420P12, 254 YUV422P12, 255 YUV440P12, 256 YUV444P12, 257 YUV420P14, 258 YUV422P14, 259 YUV444P14, 260 YUV420P16, 261 YUV422P16, 262 YUV444P16, 263 264 GBRP9, 265 GBRP10, 266 GBRP12, 267 GBRP14, 268 GBRP16, 269 GBRAP16, 270 271 BAYER_BGGR16, 272 BAYER_RGGB16, 273 BAYER_GBRG16, 274 BAYER_GRBG16, 275 276 YUVA420P9, 277 YUVA422P9, 278 YUVA444P9, 279 YUVA420P10, 280 YUVA422P10, 281 YUVA444P10, 282 YUVA420P16, 283 YUVA422P16, 284 YUVA444P16, 285 286 XYZ12, 287 NV20, 288 AYUV64, 289 290 P010LE, 291 P010BE, 292 GBRAP12BE, 293 GBRAP12LE, 294 GBRAP10LE, 295 GBRAP10BE, 296 MEDIACODEC, 297 GRAY12BE, 298 GRAY12LE, 299 GRAY10BE, 300 GRAY10LE, 301 P016LE, 302 P016BE, 303 304 D3D11, 305 GRAY9BE, 306 GRAY9LE, 307 GBRPF32BE, 308 GBRPF32LE, 309 GBRAPF32BE, 310 GBRAPF32LE, 311 DRM_PRIME, 312 313 #[cfg(feature = "ffmpeg_4_0")] 314 OPENCL, 315 316 #[cfg(feature = "ffmpeg_4_1")] 317 GRAY14BE, 318 #[cfg(feature = "ffmpeg_4_1")] 319 GRAY14LE, 320 #[cfg(feature = "ffmpeg_4_1")] 321 GRAYF32BE, 322 #[cfg(feature = "ffmpeg_4_1")] 323 GRAYF32LE, 324 325 #[cfg(feature = "ffmpeg_4_2")] 326 YUVA422P12BE, 327 #[cfg(feature = "ffmpeg_4_2")] 328 YUVA422P12LE, 329 #[cfg(feature = "ffmpeg_4_2")] 330 YUVA444P12BE, 331 #[cfg(feature = "ffmpeg_4_2")] 332 YUVA444P12LE, 333 #[cfg(feature = "ffmpeg_4_2")] 334 NV24, 335 #[cfg(feature = "ffmpeg_4_2")] 336 NV42, 337 338 #[cfg(feature = "ffmpeg_4_3")] 339 VULKAN, 340 #[cfg(feature = "ffmpeg_4_3")] 341 Y210BE, 342 #[cfg(feature = "ffmpeg_4_3")] 343 Y210LE, 344 345 #[cfg(feature = "ffmpeg_4_4")] 346 X2RGB10LE, 347 #[cfg(feature = "ffmpeg_4_4")] 348 X2RGB10BE, 349 350 #[cfg(feature = "rpi")] 351 RPI, 352 #[cfg(feature = "rpi")] 353 SAND128, 354 #[cfg(feature = "rpi")] 355 SAND64_10, 356 #[cfg(feature = "rpi")] 357 SAND64_16, 358 #[cfg(feature = "rpi")] 359 RPI4_8, 360 #[cfg(feature = "rpi")] 361 RPI4_10, 362 } 363 364 #[derive(Clone, Copy, PartialEq, Eq)] 365 pub struct Descriptor { 366 ptr: *const AVPixFmtDescriptor, 367 } 368 369 unsafe impl Send for Descriptor {} 370 unsafe impl Sync for Descriptor {} 371 372 impl Pixel { 373 pub const Y400A: Pixel = Pixel::YA8; 374 pub const GRAY8A: Pixel = Pixel::YA8; 375 pub const GBR24P: Pixel = Pixel::GBRP; 376 #[cfg(feature = "ff_api_xvmc")] 377 pub const XVMC: Pixel = Pixel::XVMC_MPEG2_IDCT; 378 descriptor(self) -> Option<Descriptor>379 pub fn descriptor(self) -> Option<Descriptor> { 380 unsafe { 381 let ptr = av_pix_fmt_desc_get(self.into()); 382 383 ptr.as_ref().map(|ptr| Descriptor { ptr }) 384 } 385 } 386 } 387 388 impl Descriptor { as_ptr(self) -> *const AVPixFmtDescriptor389 pub fn as_ptr(self) -> *const AVPixFmtDescriptor { 390 self.ptr 391 } 392 name(self) -> &'static str393 pub fn name(self) -> &'static str { 394 unsafe { from_utf8_unchecked(CStr::from_ptr((*self.as_ptr()).name).to_bytes()) } 395 } 396 nb_components(self) -> u8397 pub fn nb_components(self) -> u8 { 398 unsafe { (*self.as_ptr()).nb_components } 399 } 400 log2_chroma_w(self) -> u8401 pub fn log2_chroma_w(self) -> u8 { 402 unsafe { (*self.as_ptr()).log2_chroma_w } 403 } 404 log2_chroma_h(self) -> u8405 pub fn log2_chroma_h(self) -> u8 { 406 unsafe { (*self.as_ptr()).log2_chroma_h } 407 } 408 } 409 410 impl From<AVPixelFormat> for Pixel { 411 #[inline] from(value: AVPixelFormat) -> Self412 fn from(value: AVPixelFormat) -> Self { 413 match value { 414 AV_PIX_FMT_NONE => Pixel::None, 415 416 AV_PIX_FMT_YUV420P => Pixel::YUV420P, 417 AV_PIX_FMT_YUYV422 => Pixel::YUYV422, 418 AV_PIX_FMT_RGB24 => Pixel::RGB24, 419 AV_PIX_FMT_BGR24 => Pixel::BGR24, 420 AV_PIX_FMT_YUV422P => Pixel::YUV422P, 421 AV_PIX_FMT_YUV444P => Pixel::YUV444P, 422 AV_PIX_FMT_YUV410P => Pixel::YUV410P, 423 AV_PIX_FMT_YUV411P => Pixel::YUV411P, 424 AV_PIX_FMT_GRAY8 => Pixel::GRAY8, 425 AV_PIX_FMT_MONOWHITE => Pixel::MonoWhite, 426 AV_PIX_FMT_MONOBLACK => Pixel::MonoBlack, 427 AV_PIX_FMT_PAL8 => Pixel::PAL8, 428 AV_PIX_FMT_YUVJ420P => Pixel::YUVJ420P, 429 AV_PIX_FMT_YUVJ422P => Pixel::YUVJ422P, 430 AV_PIX_FMT_YUVJ444P => Pixel::YUVJ444P, 431 #[cfg(not(feature = "ff_api_xvmc"))] 432 AV_PIX_FMT_XVMC => Pixel::XVMC, 433 #[cfg(feature = "ff_api_xvmc")] 434 AV_PIX_FMT_XVMC_MPEG2_MC => Pixel::XVMC_MPEG2_MC, 435 #[cfg(feature = "ff_api_xvmc")] 436 AV_PIX_FMT_XVMC_MPEG2_IDCT => Pixel::XVMC_MPEG2_IDCT, 437 AV_PIX_FMT_UYVY422 => Pixel::UYVY422, 438 AV_PIX_FMT_UYYVYY411 => Pixel::UYYVYY411, 439 AV_PIX_FMT_BGR8 => Pixel::BGR8, 440 AV_PIX_FMT_BGR4 => Pixel::BGR4, 441 AV_PIX_FMT_BGR4_BYTE => Pixel::BGR4_BYTE, 442 AV_PIX_FMT_RGB8 => Pixel::RGB8, 443 AV_PIX_FMT_RGB4 => Pixel::RGB4, 444 AV_PIX_FMT_RGB4_BYTE => Pixel::RGB4_BYTE, 445 AV_PIX_FMT_NV12 => Pixel::NV12, 446 AV_PIX_FMT_NV21 => Pixel::NV21, 447 448 AV_PIX_FMT_ARGB => Pixel::ARGB, 449 AV_PIX_FMT_RGBA => Pixel::RGBA, 450 AV_PIX_FMT_ABGR => Pixel::ABGR, 451 AV_PIX_FMT_BGRA => Pixel::BGRA, 452 453 AV_PIX_FMT_GRAY16BE => Pixel::GRAY16BE, 454 AV_PIX_FMT_GRAY16LE => Pixel::GRAY16LE, 455 AV_PIX_FMT_YUV440P => Pixel::YUV440P, 456 AV_PIX_FMT_YUVJ440P => Pixel::YUVJ440P, 457 AV_PIX_FMT_YUVA420P => Pixel::YUVA420P, 458 #[cfg(feature = "ff_api_vdpau")] 459 AV_PIX_FMT_VDPAU_H264 => Pixel::VDPAU_H264, 460 #[cfg(feature = "ff_api_vdpau")] 461 AV_PIX_FMT_VDPAU_MPEG1 => Pixel::VDPAU_MPEG1, 462 #[cfg(feature = "ff_api_vdpau")] 463 AV_PIX_FMT_VDPAU_MPEG2 => Pixel::VDPAU_MPEG2, 464 #[cfg(feature = "ff_api_vdpau")] 465 AV_PIX_FMT_VDPAU_WMV3 => Pixel::VDPAU_WMV3, 466 #[cfg(feature = "ff_api_vdpau")] 467 AV_PIX_FMT_VDPAU_VC1 => Pixel::VDPAU_VC1, 468 AV_PIX_FMT_RGB48BE => Pixel::RGB48BE, 469 AV_PIX_FMT_RGB48LE => Pixel::RGB48LE, 470 471 AV_PIX_FMT_RGB565BE => Pixel::RGB565BE, 472 AV_PIX_FMT_RGB565LE => Pixel::RGB565LE, 473 AV_PIX_FMT_RGB555BE => Pixel::RGB555BE, 474 AV_PIX_FMT_RGB555LE => Pixel::RGB555LE, 475 476 AV_PIX_FMT_BGR565BE => Pixel::BGR565BE, 477 AV_PIX_FMT_BGR565LE => Pixel::BGR565LE, 478 AV_PIX_FMT_BGR555BE => Pixel::BGR555BE, 479 AV_PIX_FMT_BGR555LE => Pixel::BGR555LE, 480 481 #[cfg(feature = "ff_api_vaapi")] 482 AV_PIX_FMT_VAAPI_MOCO => Pixel::VAAPI_MOCO, 483 #[cfg(feature = "ff_api_vaapi")] 484 AV_PIX_FMT_VAAPI_IDCT => Pixel::VAAPI_IDCT, 485 #[cfg(feature = "ff_api_vaapi")] 486 AV_PIX_FMT_VAAPI_VLD => Pixel::VAAPI_VLD, 487 488 AV_PIX_FMT_YUV420P16LE => Pixel::YUV420P16LE, 489 AV_PIX_FMT_YUV420P16BE => Pixel::YUV420P16BE, 490 AV_PIX_FMT_YUV422P16LE => Pixel::YUV422P16LE, 491 AV_PIX_FMT_YUV422P16BE => Pixel::YUV422P16BE, 492 AV_PIX_FMT_YUV444P16LE => Pixel::YUV444P16LE, 493 AV_PIX_FMT_YUV444P16BE => Pixel::YUV444P16BE, 494 #[cfg(feature = "ff_api_vdpau")] 495 AV_PIX_FMT_VDPAU_MPEG4 => Pixel::VDPAU_MPEG4, 496 AV_PIX_FMT_DXVA2_VLD => Pixel::DXVA2_VLD, 497 498 AV_PIX_FMT_RGB444LE => Pixel::RGB444LE, 499 AV_PIX_FMT_RGB444BE => Pixel::RGB444BE, 500 AV_PIX_FMT_BGR444LE => Pixel::BGR444LE, 501 AV_PIX_FMT_BGR444BE => Pixel::BGR444BE, 502 AV_PIX_FMT_YA8 => Pixel::YA8, 503 504 AV_PIX_FMT_BGR48BE => Pixel::BGR48BE, 505 AV_PIX_FMT_BGR48LE => Pixel::BGR48LE, 506 507 AV_PIX_FMT_YUV420P9BE => Pixel::YUV420P9BE, 508 AV_PIX_FMT_YUV420P9LE => Pixel::YUV420P9LE, 509 AV_PIX_FMT_YUV420P10BE => Pixel::YUV420P10BE, 510 AV_PIX_FMT_YUV420P10LE => Pixel::YUV420P10LE, 511 AV_PIX_FMT_YUV422P10BE => Pixel::YUV422P10BE, 512 AV_PIX_FMT_YUV422P10LE => Pixel::YUV422P10LE, 513 AV_PIX_FMT_YUV444P9BE => Pixel::YUV444P9BE, 514 AV_PIX_FMT_YUV444P9LE => Pixel::YUV444P9LE, 515 AV_PIX_FMT_YUV444P10BE => Pixel::YUV444P10BE, 516 AV_PIX_FMT_YUV444P10LE => Pixel::YUV444P10LE, 517 AV_PIX_FMT_YUV422P9BE => Pixel::YUV422P9BE, 518 AV_PIX_FMT_YUV422P9LE => Pixel::YUV422P9LE, 519 #[cfg(not(feature = "ffmpeg_4_0"))] 520 AV_PIX_FMT_VDA_VLD => Pixel::VDA_VLD, 521 522 AV_PIX_FMT_GBRP => Pixel::GBRP, 523 AV_PIX_FMT_GBRP9BE => Pixel::GBRP9BE, 524 AV_PIX_FMT_GBRP9LE => Pixel::GBRP9LE, 525 AV_PIX_FMT_GBRP10BE => Pixel::GBRP10BE, 526 AV_PIX_FMT_GBRP10LE => Pixel::GBRP10LE, 527 AV_PIX_FMT_GBRP16BE => Pixel::GBRP16BE, 528 AV_PIX_FMT_GBRP16LE => Pixel::GBRP16LE, 529 530 AV_PIX_FMT_YUVA420P9BE => Pixel::YUVA420P9BE, 531 AV_PIX_FMT_YUVA420P9LE => Pixel::YUVA420P9LE, 532 AV_PIX_FMT_YUVA422P9BE => Pixel::YUVA422P9BE, 533 AV_PIX_FMT_YUVA422P9LE => Pixel::YUVA422P9LE, 534 AV_PIX_FMT_YUVA444P9BE => Pixel::YUVA444P9BE, 535 AV_PIX_FMT_YUVA444P9LE => Pixel::YUVA444P9LE, 536 AV_PIX_FMT_YUVA420P10BE => Pixel::YUVA420P10BE, 537 AV_PIX_FMT_YUVA420P10LE => Pixel::YUVA420P10LE, 538 AV_PIX_FMT_YUVA422P10BE => Pixel::YUVA422P10BE, 539 AV_PIX_FMT_YUVA422P10LE => Pixel::YUVA422P10LE, 540 AV_PIX_FMT_YUVA444P10BE => Pixel::YUVA444P10BE, 541 AV_PIX_FMT_YUVA444P10LE => Pixel::YUVA444P10LE, 542 AV_PIX_FMT_YUVA420P16BE => Pixel::YUVA420P16BE, 543 AV_PIX_FMT_YUVA420P16LE => Pixel::YUVA420P16LE, 544 AV_PIX_FMT_YUVA422P16BE => Pixel::YUVA422P16BE, 545 AV_PIX_FMT_YUVA422P16LE => Pixel::YUVA422P16LE, 546 AV_PIX_FMT_YUVA444P16BE => Pixel::YUVA444P16BE, 547 AV_PIX_FMT_YUVA444P16LE => Pixel::YUVA444P16LE, 548 549 AV_PIX_FMT_VDPAU => Pixel::VDPAU, 550 551 AV_PIX_FMT_XYZ12LE => Pixel::XYZ12LE, 552 AV_PIX_FMT_XYZ12BE => Pixel::XYZ12BE, 553 AV_PIX_FMT_NV16 => Pixel::NV16, 554 AV_PIX_FMT_NV20LE => Pixel::NV20LE, 555 AV_PIX_FMT_NV20BE => Pixel::NV20BE, 556 557 AV_PIX_FMT_RGBA64BE => Pixel::RGBA64BE, 558 AV_PIX_FMT_RGBA64LE => Pixel::RGBA64LE, 559 AV_PIX_FMT_BGRA64BE => Pixel::BGRA64BE, 560 AV_PIX_FMT_BGRA64LE => Pixel::BGRA64LE, 561 562 AV_PIX_FMT_YVYU422 => Pixel::YVYU422, 563 564 #[cfg(not(feature = "ffmpeg_4_0"))] 565 AV_PIX_FMT_VDA => Pixel::VDA, 566 567 AV_PIX_FMT_YA16BE => Pixel::YA16BE, 568 AV_PIX_FMT_YA16LE => Pixel::YA16LE, 569 570 AV_PIX_FMT_QSV => Pixel::QSV, 571 AV_PIX_FMT_MMAL => Pixel::MMAL, 572 573 AV_PIX_FMT_D3D11VA_VLD => Pixel::D3D11VA_VLD, 574 575 AV_PIX_FMT_CUDA => Pixel::CUDA, 576 577 AV_PIX_FMT_0RGB => Pixel::ZRGB, 578 AV_PIX_FMT_RGB0 => Pixel::RGBZ, 579 AV_PIX_FMT_0BGR => Pixel::ZBGR, 580 AV_PIX_FMT_BGR0 => Pixel::BGRZ, 581 AV_PIX_FMT_YUVA444P => Pixel::YUVA444P, 582 AV_PIX_FMT_YUVA422P => Pixel::YUVA422P, 583 584 AV_PIX_FMT_YUV420P12BE => Pixel::YUV420P12BE, 585 AV_PIX_FMT_YUV420P12LE => Pixel::YUV420P12LE, 586 AV_PIX_FMT_YUV420P14BE => Pixel::YUV420P14BE, 587 AV_PIX_FMT_YUV420P14LE => Pixel::YUV420P14LE, 588 AV_PIX_FMT_YUV422P12BE => Pixel::YUV422P12BE, 589 AV_PIX_FMT_YUV422P12LE => Pixel::YUV422P12LE, 590 AV_PIX_FMT_YUV422P14BE => Pixel::YUV422P14BE, 591 AV_PIX_FMT_YUV422P14LE => Pixel::YUV422P14LE, 592 AV_PIX_FMT_YUV444P12BE => Pixel::YUV444P12BE, 593 AV_PIX_FMT_YUV444P12LE => Pixel::YUV444P12LE, 594 AV_PIX_FMT_YUV444P14BE => Pixel::YUV444P14BE, 595 AV_PIX_FMT_YUV444P14LE => Pixel::YUV444P14LE, 596 AV_PIX_FMT_GBRP12BE => Pixel::GBRP12BE, 597 AV_PIX_FMT_GBRP12LE => Pixel::GBRP12LE, 598 AV_PIX_FMT_GBRP14BE => Pixel::GBRP14BE, 599 AV_PIX_FMT_GBRP14LE => Pixel::GBRP14LE, 600 AV_PIX_FMT_GBRAP => Pixel::GBRAP, 601 AV_PIX_FMT_GBRAP16BE => Pixel::GBRAP16BE, 602 AV_PIX_FMT_GBRAP16LE => Pixel::GBRAP16LE, 603 AV_PIX_FMT_YUVJ411P => Pixel::YUVJ411P, 604 605 AV_PIX_FMT_BAYER_BGGR8 => Pixel::BAYER_BGGR8, 606 AV_PIX_FMT_BAYER_RGGB8 => Pixel::BAYER_RGGB8, 607 AV_PIX_FMT_BAYER_GBRG8 => Pixel::BAYER_GBRG8, 608 AV_PIX_FMT_BAYER_GRBG8 => Pixel::BAYER_GRBG8, 609 AV_PIX_FMT_BAYER_BGGR16LE => Pixel::BAYER_BGGR16LE, 610 AV_PIX_FMT_BAYER_BGGR16BE => Pixel::BAYER_BGGR16BE, 611 AV_PIX_FMT_BAYER_RGGB16LE => Pixel::BAYER_RGGB16LE, 612 AV_PIX_FMT_BAYER_RGGB16BE => Pixel::BAYER_RGGB16BE, 613 AV_PIX_FMT_BAYER_GBRG16LE => Pixel::BAYER_GBRG16LE, 614 AV_PIX_FMT_BAYER_GBRG16BE => Pixel::BAYER_GBRG16BE, 615 AV_PIX_FMT_BAYER_GRBG16LE => Pixel::BAYER_GRBG16LE, 616 AV_PIX_FMT_BAYER_GRBG16BE => Pixel::BAYER_GRBG16BE, 617 618 AV_PIX_FMT_YUV440P10LE => Pixel::YUV440P10LE, 619 AV_PIX_FMT_YUV440P10BE => Pixel::YUV440P10BE, 620 AV_PIX_FMT_YUV440P12LE => Pixel::YUV440P12LE, 621 AV_PIX_FMT_YUV440P12BE => Pixel::YUV440P12BE, 622 AV_PIX_FMT_AYUV64LE => Pixel::AYUV64LE, 623 AV_PIX_FMT_AYUV64BE => Pixel::AYUV64BE, 624 625 AV_PIX_FMT_VIDEOTOOLBOX => Pixel::VIDEOTOOLBOX, 626 627 AV_PIX_FMT_P010LE => Pixel::P010LE, 628 AV_PIX_FMT_P010BE => Pixel::P010BE, 629 AV_PIX_FMT_GBRAP12BE => Pixel::GBRAP12BE, 630 AV_PIX_FMT_GBRAP12LE => Pixel::GBRAP12LE, 631 AV_PIX_FMT_GBRAP10LE => Pixel::GBRAP10LE, 632 AV_PIX_FMT_GBRAP10BE => Pixel::GBRAP10BE, 633 AV_PIX_FMT_MEDIACODEC => Pixel::MEDIACODEC, 634 AV_PIX_FMT_GRAY12BE => Pixel::GRAY12BE, 635 AV_PIX_FMT_GRAY12LE => Pixel::GRAY12LE, 636 AV_PIX_FMT_GRAY10BE => Pixel::GRAY10BE, 637 AV_PIX_FMT_GRAY10LE => Pixel::GRAY10LE, 638 AV_PIX_FMT_P016LE => Pixel::P016LE, 639 AV_PIX_FMT_P016BE => Pixel::P016BE, 640 641 AV_PIX_FMT_NB => Pixel::None, 642 643 AV_PIX_FMT_D3D11 => Pixel::D3D11, 644 AV_PIX_FMT_GRAY9BE => Pixel::GRAY9BE, 645 AV_PIX_FMT_GRAY9LE => Pixel::GRAY9LE, 646 AV_PIX_FMT_GBRPF32BE => Pixel::GBRPF32BE, 647 AV_PIX_FMT_GBRPF32LE => Pixel::GBRPF32LE, 648 AV_PIX_FMT_GBRAPF32BE => Pixel::GBRAPF32BE, 649 AV_PIX_FMT_GBRAPF32LE => Pixel::GBRAPF32LE, 650 AV_PIX_FMT_DRM_PRIME => Pixel::DRM_PRIME, 651 652 #[cfg(feature = "ffmpeg_4_0")] 653 AV_PIX_FMT_OPENCL => Pixel::OPENCL, 654 655 #[cfg(feature = "ffmpeg_4_1")] 656 AV_PIX_FMT_GRAY14BE => Pixel::GRAY14BE, 657 #[cfg(feature = "ffmpeg_4_1")] 658 AV_PIX_FMT_GRAY14LE => Pixel::GRAY14LE, 659 #[cfg(feature = "ffmpeg_4_1")] 660 AV_PIX_FMT_GRAYF32BE => Pixel::GRAYF32BE, 661 #[cfg(feature = "ffmpeg_4_1")] 662 AV_PIX_FMT_GRAYF32LE => Pixel::GRAYF32LE, 663 664 #[cfg(feature = "ffmpeg_4_2")] 665 AV_PIX_FMT_YUVA422P12BE => Pixel::YUVA422P12BE, 666 #[cfg(feature = "ffmpeg_4_2")] 667 AV_PIX_FMT_YUVA422P12LE => Pixel::YUVA422P12LE, 668 #[cfg(feature = "ffmpeg_4_2")] 669 AV_PIX_FMT_YUVA444P12BE => Pixel::YUVA444P12BE, 670 #[cfg(feature = "ffmpeg_4_2")] 671 AV_PIX_FMT_YUVA444P12LE => Pixel::YUVA444P12LE, 672 #[cfg(feature = "ffmpeg_4_2")] 673 AV_PIX_FMT_NV24 => Pixel::NV24, 674 #[cfg(feature = "ffmpeg_4_2")] 675 AV_PIX_FMT_NV42 => Pixel::NV42, 676 677 #[cfg(feature = "ffmpeg_4_3")] 678 AV_PIX_FMT_VULKAN => Pixel::VULKAN, 679 #[cfg(feature = "ffmpeg_4_3")] 680 AV_PIX_FMT_Y210BE => Pixel::Y210BE, 681 #[cfg(feature = "ffmpeg_4_3")] 682 AV_PIX_FMT_Y210LE => Pixel::Y210LE, 683 684 #[cfg(feature = "ffmpeg_4_4")] 685 AV_PIX_FMT_X2RGB10LE => Pixel::X2RGB10LE, 686 #[cfg(feature = "ffmpeg_4_4")] 687 AV_PIX_FMT_X2RGB10BE => Pixel::X2RGB10BE, 688 689 #[cfg(feature = "rpi")] 690 AV_PIX_FMT_RPI => Pixel::RPI, 691 #[cfg(feature = "rpi")] 692 AV_PIX_FMT_SAND128 => Pixel::SAND128, 693 #[cfg(feature = "rpi")] 694 AV_PIX_FMT_SAND64_10 => Pixel::SAND64_10, 695 #[cfg(feature = "rpi")] 696 AV_PIX_FMT_SAND64_16 => Pixel::SAND64_16, 697 #[cfg(feature = "rpi")] 698 AV_PIX_FMT_RPI4_8 => Pixel::RPI4_8, 699 #[cfg(feature = "rpi")] 700 AV_PIX_FMT_RPI4_10 => Pixel::RPI4_10, 701 } 702 } 703 } 704 705 impl From<Pixel> for AVPixelFormat { 706 #[inline] from(value: Pixel) -> AVPixelFormat707 fn from(value: Pixel) -> AVPixelFormat { 708 match value { 709 Pixel::None => AV_PIX_FMT_NONE, 710 711 Pixel::YUV420P => AV_PIX_FMT_YUV420P, 712 Pixel::YUYV422 => AV_PIX_FMT_YUYV422, 713 Pixel::RGB24 => AV_PIX_FMT_RGB24, 714 Pixel::BGR24 => AV_PIX_FMT_BGR24, 715 Pixel::YUV422P => AV_PIX_FMT_YUV422P, 716 Pixel::YUV444P => AV_PIX_FMT_YUV444P, 717 Pixel::YUV410P => AV_PIX_FMT_YUV410P, 718 Pixel::YUV411P => AV_PIX_FMT_YUV411P, 719 Pixel::GRAY8 => AV_PIX_FMT_GRAY8, 720 Pixel::MonoWhite => AV_PIX_FMT_MONOWHITE, 721 Pixel::MonoBlack => AV_PIX_FMT_MONOBLACK, 722 Pixel::PAL8 => AV_PIX_FMT_PAL8, 723 Pixel::YUVJ420P => AV_PIX_FMT_YUVJ420P, 724 Pixel::YUVJ422P => AV_PIX_FMT_YUVJ422P, 725 Pixel::YUVJ444P => AV_PIX_FMT_YUVJ444P, 726 #[cfg(feature = "ff_api_xvmc")] 727 Pixel::XVMC_MPEG2_MC => AV_PIX_FMT_XVMC_MPEG2_MC, 728 #[cfg(feature = "ff_api_xvmc")] 729 Pixel::XVMC_MPEG2_IDCT => AV_PIX_FMT_XVMC_MPEG2_IDCT, 730 Pixel::UYVY422 => AV_PIX_FMT_UYVY422, 731 Pixel::UYYVYY411 => AV_PIX_FMT_UYYVYY411, 732 Pixel::BGR8 => AV_PIX_FMT_BGR8, 733 Pixel::BGR4 => AV_PIX_FMT_BGR4, 734 Pixel::BGR4_BYTE => AV_PIX_FMT_BGR4_BYTE, 735 Pixel::RGB8 => AV_PIX_FMT_RGB8, 736 Pixel::RGB4 => AV_PIX_FMT_RGB4, 737 Pixel::RGB4_BYTE => AV_PIX_FMT_RGB4_BYTE, 738 Pixel::NV12 => AV_PIX_FMT_NV12, 739 Pixel::NV21 => AV_PIX_FMT_NV21, 740 741 Pixel::ARGB => AV_PIX_FMT_ARGB, 742 Pixel::RGBA => AV_PIX_FMT_RGBA, 743 Pixel::ABGR => AV_PIX_FMT_ABGR, 744 Pixel::BGRA => AV_PIX_FMT_BGRA, 745 746 Pixel::GRAY16BE => AV_PIX_FMT_GRAY16BE, 747 Pixel::GRAY16LE => AV_PIX_FMT_GRAY16LE, 748 Pixel::YUV440P => AV_PIX_FMT_YUV440P, 749 Pixel::YUVJ440P => AV_PIX_FMT_YUVJ440P, 750 Pixel::YUVA420P => AV_PIX_FMT_YUVA420P, 751 #[cfg(feature = "ff_api_vdpau")] 752 Pixel::VDPAU_H264 => AV_PIX_FMT_VDPAU_H264, 753 #[cfg(feature = "ff_api_vdpau")] 754 Pixel::VDPAU_MPEG1 => AV_PIX_FMT_VDPAU_MPEG1, 755 #[cfg(feature = "ff_api_vdpau")] 756 Pixel::VDPAU_MPEG2 => AV_PIX_FMT_VDPAU_MPEG2, 757 #[cfg(feature = "ff_api_vdpau")] 758 Pixel::VDPAU_WMV3 => AV_PIX_FMT_VDPAU_WMV3, 759 #[cfg(feature = "ff_api_vdpau")] 760 Pixel::VDPAU_VC1 => AV_PIX_FMT_VDPAU_VC1, 761 Pixel::RGB48BE => AV_PIX_FMT_RGB48BE, 762 Pixel::RGB48LE => AV_PIX_FMT_RGB48LE, 763 764 Pixel::RGB565BE => AV_PIX_FMT_RGB565BE, 765 Pixel::RGB565LE => AV_PIX_FMT_RGB565LE, 766 Pixel::RGB555BE => AV_PIX_FMT_RGB555BE, 767 Pixel::RGB555LE => AV_PIX_FMT_RGB555LE, 768 769 Pixel::BGR565BE => AV_PIX_FMT_BGR565BE, 770 Pixel::BGR565LE => AV_PIX_FMT_BGR565LE, 771 Pixel::BGR555BE => AV_PIX_FMT_BGR555BE, 772 Pixel::BGR555LE => AV_PIX_FMT_BGR555LE, 773 774 #[cfg(feature = "ff_api_vaapi")] 775 Pixel::VAAPI_MOCO => AV_PIX_FMT_VAAPI_MOCO, 776 #[cfg(feature = "ff_api_vaapi")] 777 Pixel::VAAPI_IDCT => AV_PIX_FMT_VAAPI_IDCT, 778 #[cfg(feature = "ff_api_vaapi")] 779 Pixel::VAAPI_VLD => AV_PIX_FMT_VAAPI_VLD, 780 #[cfg(not(feature = "ff_api_vaapi"))] 781 Pixel::VAAPI => AV_PIX_FMT_VAAPI, 782 783 Pixel::YUV420P16LE => AV_PIX_FMT_YUV420P16LE, 784 Pixel::YUV420P16BE => AV_PIX_FMT_YUV420P16BE, 785 Pixel::YUV422P16LE => AV_PIX_FMT_YUV422P16LE, 786 Pixel::YUV422P16BE => AV_PIX_FMT_YUV422P16BE, 787 Pixel::YUV444P16LE => AV_PIX_FMT_YUV444P16LE, 788 Pixel::YUV444P16BE => AV_PIX_FMT_YUV444P16BE, 789 #[cfg(feature = "ff_api_vdpau")] 790 Pixel::VDPAU_MPEG4 => AV_PIX_FMT_VDPAU_MPEG4, 791 Pixel::DXVA2_VLD => AV_PIX_FMT_DXVA2_VLD, 792 793 Pixel::RGB444LE => AV_PIX_FMT_RGB444LE, 794 Pixel::RGB444BE => AV_PIX_FMT_RGB444BE, 795 Pixel::BGR444LE => AV_PIX_FMT_BGR444LE, 796 Pixel::BGR444BE => AV_PIX_FMT_BGR444BE, 797 Pixel::YA8 => AV_PIX_FMT_YA8, 798 799 Pixel::BGR48BE => AV_PIX_FMT_BGR48BE, 800 Pixel::BGR48LE => AV_PIX_FMT_BGR48LE, 801 802 Pixel::YUV420P9BE => AV_PIX_FMT_YUV420P9BE, 803 Pixel::YUV420P9LE => AV_PIX_FMT_YUV420P9LE, 804 Pixel::YUV420P10BE => AV_PIX_FMT_YUV420P10BE, 805 Pixel::YUV420P10LE => AV_PIX_FMT_YUV420P10LE, 806 Pixel::YUV422P10BE => AV_PIX_FMT_YUV422P10BE, 807 Pixel::YUV422P10LE => AV_PIX_FMT_YUV422P10LE, 808 Pixel::YUV444P9BE => AV_PIX_FMT_YUV444P9BE, 809 Pixel::YUV444P9LE => AV_PIX_FMT_YUV444P9LE, 810 Pixel::YUV444P10BE => AV_PIX_FMT_YUV444P10BE, 811 Pixel::YUV444P10LE => AV_PIX_FMT_YUV444P10LE, 812 Pixel::YUV422P9BE => AV_PIX_FMT_YUV422P9BE, 813 Pixel::YUV422P9LE => AV_PIX_FMT_YUV422P9LE, 814 #[cfg(not(feature = "ffmpeg_4_0"))] 815 Pixel::VDA_VLD => AV_PIX_FMT_VDA_VLD, 816 817 Pixel::GBRP => AV_PIX_FMT_GBRP, 818 Pixel::GBRP9BE => AV_PIX_FMT_GBRP9BE, 819 Pixel::GBRP9LE => AV_PIX_FMT_GBRP9LE, 820 Pixel::GBRP10BE => AV_PIX_FMT_GBRP10BE, 821 Pixel::GBRP10LE => AV_PIX_FMT_GBRP10LE, 822 Pixel::GBRP16BE => AV_PIX_FMT_GBRP16BE, 823 Pixel::GBRP16LE => AV_PIX_FMT_GBRP16LE, 824 825 Pixel::YUVA420P9BE => AV_PIX_FMT_YUVA420P9BE, 826 Pixel::YUVA420P9LE => AV_PIX_FMT_YUVA420P9LE, 827 Pixel::YUVA422P9BE => AV_PIX_FMT_YUVA422P9BE, 828 Pixel::YUVA422P9LE => AV_PIX_FMT_YUVA422P9LE, 829 Pixel::YUVA444P9BE => AV_PIX_FMT_YUVA444P9BE, 830 Pixel::YUVA444P9LE => AV_PIX_FMT_YUVA444P9LE, 831 Pixel::YUVA420P10BE => AV_PIX_FMT_YUVA420P10BE, 832 Pixel::YUVA420P10LE => AV_PIX_FMT_YUVA420P10LE, 833 Pixel::YUVA422P10BE => AV_PIX_FMT_YUVA422P10BE, 834 Pixel::YUVA422P10LE => AV_PIX_FMT_YUVA422P10LE, 835 Pixel::YUVA444P10BE => AV_PIX_FMT_YUVA444P10BE, 836 Pixel::YUVA444P10LE => AV_PIX_FMT_YUVA444P10LE, 837 Pixel::YUVA420P16BE => AV_PIX_FMT_YUVA420P16BE, 838 Pixel::YUVA420P16LE => AV_PIX_FMT_YUVA420P16LE, 839 Pixel::YUVA422P16BE => AV_PIX_FMT_YUVA422P16BE, 840 Pixel::YUVA422P16LE => AV_PIX_FMT_YUVA422P16LE, 841 Pixel::YUVA444P16BE => AV_PIX_FMT_YUVA444P16BE, 842 Pixel::YUVA444P16LE => AV_PIX_FMT_YUVA444P16LE, 843 844 Pixel::VDPAU => AV_PIX_FMT_VDPAU, 845 846 Pixel::XYZ12LE => AV_PIX_FMT_XYZ12LE, 847 Pixel::XYZ12BE => AV_PIX_FMT_XYZ12BE, 848 Pixel::NV16 => AV_PIX_FMT_NV16, 849 Pixel::NV20LE => AV_PIX_FMT_NV20LE, 850 Pixel::NV20BE => AV_PIX_FMT_NV20BE, 851 852 Pixel::RGBA64BE => AV_PIX_FMT_RGBA64BE, 853 Pixel::RGBA64LE => AV_PIX_FMT_RGBA64LE, 854 Pixel::BGRA64BE => AV_PIX_FMT_BGRA64BE, 855 Pixel::BGRA64LE => AV_PIX_FMT_BGRA64LE, 856 857 Pixel::YVYU422 => AV_PIX_FMT_YVYU422, 858 859 #[cfg(not(feature = "ffmpeg_4_0"))] 860 Pixel::VDA => AV_PIX_FMT_VDA, 861 862 Pixel::YA16BE => AV_PIX_FMT_YA16BE, 863 Pixel::YA16LE => AV_PIX_FMT_YA16LE, 864 865 Pixel::QSV => AV_PIX_FMT_QSV, 866 Pixel::MMAL => AV_PIX_FMT_MMAL, 867 868 Pixel::D3D11VA_VLD => AV_PIX_FMT_D3D11VA_VLD, 869 870 Pixel::CUDA => AV_PIX_FMT_CUDA, 871 872 Pixel::ZRGB => AV_PIX_FMT_0RGB, 873 Pixel::RGBZ => AV_PIX_FMT_RGB0, 874 Pixel::ZBGR => AV_PIX_FMT_0BGR, 875 Pixel::BGRZ => AV_PIX_FMT_BGR0, 876 Pixel::YUVA444P => AV_PIX_FMT_YUVA444P, 877 Pixel::YUVA422P => AV_PIX_FMT_YUVA422P, 878 879 Pixel::YUV420P12BE => AV_PIX_FMT_YUV420P12BE, 880 Pixel::YUV420P12LE => AV_PIX_FMT_YUV420P12LE, 881 Pixel::YUV420P14BE => AV_PIX_FMT_YUV420P14BE, 882 Pixel::YUV420P14LE => AV_PIX_FMT_YUV420P14LE, 883 Pixel::YUV422P12BE => AV_PIX_FMT_YUV422P12BE, 884 Pixel::YUV422P12LE => AV_PIX_FMT_YUV422P12LE, 885 Pixel::YUV422P14BE => AV_PIX_FMT_YUV422P14BE, 886 Pixel::YUV422P14LE => AV_PIX_FMT_YUV422P14LE, 887 Pixel::YUV444P12BE => AV_PIX_FMT_YUV444P12BE, 888 Pixel::YUV444P12LE => AV_PIX_FMT_YUV444P12LE, 889 Pixel::YUV444P14BE => AV_PIX_FMT_YUV444P14BE, 890 Pixel::YUV444P14LE => AV_PIX_FMT_YUV444P14LE, 891 Pixel::GBRP12BE => AV_PIX_FMT_GBRP12BE, 892 Pixel::GBRP12LE => AV_PIX_FMT_GBRP12LE, 893 Pixel::GBRP14BE => AV_PIX_FMT_GBRP14BE, 894 Pixel::GBRP14LE => AV_PIX_FMT_GBRP14LE, 895 Pixel::GBRAP => AV_PIX_FMT_GBRAP, 896 Pixel::GBRAP16BE => AV_PIX_FMT_GBRAP16BE, 897 Pixel::GBRAP16LE => AV_PIX_FMT_GBRAP16LE, 898 Pixel::YUVJ411P => AV_PIX_FMT_YUVJ411P, 899 900 Pixel::BAYER_BGGR8 => AV_PIX_FMT_BAYER_BGGR8, 901 Pixel::BAYER_RGGB8 => AV_PIX_FMT_BAYER_RGGB8, 902 Pixel::BAYER_GBRG8 => AV_PIX_FMT_BAYER_GBRG8, 903 Pixel::BAYER_GRBG8 => AV_PIX_FMT_BAYER_GRBG8, 904 Pixel::BAYER_BGGR16LE => AV_PIX_FMT_BAYER_BGGR16LE, 905 Pixel::BAYER_BGGR16BE => AV_PIX_FMT_BAYER_BGGR16BE, 906 Pixel::BAYER_RGGB16LE => AV_PIX_FMT_BAYER_RGGB16LE, 907 Pixel::BAYER_RGGB16BE => AV_PIX_FMT_BAYER_RGGB16BE, 908 Pixel::BAYER_GBRG16LE => AV_PIX_FMT_BAYER_GBRG16LE, 909 Pixel::BAYER_GBRG16BE => AV_PIX_FMT_BAYER_GBRG16BE, 910 Pixel::BAYER_GRBG16LE => AV_PIX_FMT_BAYER_GRBG16LE, 911 Pixel::BAYER_GRBG16BE => AV_PIX_FMT_BAYER_GRBG16BE, 912 913 Pixel::YUV440P10LE => AV_PIX_FMT_YUV440P10LE, 914 Pixel::YUV440P10BE => AV_PIX_FMT_YUV440P10BE, 915 Pixel::YUV440P12LE => AV_PIX_FMT_YUV440P12LE, 916 Pixel::YUV440P12BE => AV_PIX_FMT_YUV440P12BE, 917 Pixel::AYUV64LE => AV_PIX_FMT_AYUV64LE, 918 Pixel::AYUV64BE => AV_PIX_FMT_AYUV64BE, 919 920 Pixel::VIDEOTOOLBOX => AV_PIX_FMT_VIDEOTOOLBOX, 921 922 // --- defaults 923 #[cfg(not(feature = "ff_api_xvmc"))] 924 Pixel::XVMC => AV_PIX_FMT_XVMC, 925 926 Pixel::RGB32 => AV_PIX_FMT_RGB32, 927 Pixel::RGB32_1 => AV_PIX_FMT_RGB32_1, 928 Pixel::BGR32 => AV_PIX_FMT_BGR32, 929 Pixel::BGR32_1 => AV_PIX_FMT_BGR32_1, 930 Pixel::ZRGB32 => AV_PIX_FMT_0RGB32, 931 Pixel::ZBGR32 => AV_PIX_FMT_0BGR32, 932 933 Pixel::GRAY16 => AV_PIX_FMT_GRAY16, 934 Pixel::YA16 => AV_PIX_FMT_YA16, 935 Pixel::RGB48 => AV_PIX_FMT_RGB48, 936 Pixel::RGB565 => AV_PIX_FMT_RGB565, 937 Pixel::RGB555 => AV_PIX_FMT_RGB555, 938 Pixel::RGB444 => AV_PIX_FMT_RGB444, 939 Pixel::BGR48 => AV_PIX_FMT_BGR48, 940 Pixel::BGR565 => AV_PIX_FMT_BGR565, 941 Pixel::BGR555 => AV_PIX_FMT_BGR555, 942 Pixel::BGR444 => AV_PIX_FMT_BGR444, 943 944 Pixel::YUV420P9 => AV_PIX_FMT_YUV420P9, 945 Pixel::YUV422P9 => AV_PIX_FMT_YUV422P9, 946 Pixel::YUV444P9 => AV_PIX_FMT_YUV444P9, 947 Pixel::YUV420P10 => AV_PIX_FMT_YUV420P10, 948 Pixel::YUV422P10 => AV_PIX_FMT_YUV422P10, 949 Pixel::YUV440P10 => AV_PIX_FMT_YUV440P10, 950 Pixel::YUV444P10 => AV_PIX_FMT_YUV444P10, 951 Pixel::YUV420P12 => AV_PIX_FMT_YUV420P12, 952 Pixel::YUV422P12 => AV_PIX_FMT_YUV422P12, 953 Pixel::YUV440P12 => AV_PIX_FMT_YUV440P12, 954 Pixel::YUV444P12 => AV_PIX_FMT_YUV444P12, 955 Pixel::YUV420P14 => AV_PIX_FMT_YUV420P14, 956 Pixel::YUV422P14 => AV_PIX_FMT_YUV422P14, 957 Pixel::YUV444P14 => AV_PIX_FMT_YUV444P14, 958 Pixel::YUV420P16 => AV_PIX_FMT_YUV420P16, 959 Pixel::YUV422P16 => AV_PIX_FMT_YUV422P16, 960 Pixel::YUV444P16 => AV_PIX_FMT_YUV444P16, 961 962 Pixel::GBRP9 => AV_PIX_FMT_GBRP9, 963 Pixel::GBRP10 => AV_PIX_FMT_GBRP10, 964 Pixel::GBRP12 => AV_PIX_FMT_GBRP12, 965 Pixel::GBRP14 => AV_PIX_FMT_GBRP14, 966 Pixel::GBRP16 => AV_PIX_FMT_GBRP16, 967 Pixel::GBRAP16 => AV_PIX_FMT_GBRAP16, 968 969 Pixel::BAYER_BGGR16 => AV_PIX_FMT_BAYER_BGGR16, 970 Pixel::BAYER_RGGB16 => AV_PIX_FMT_BAYER_RGGB16, 971 Pixel::BAYER_GBRG16 => AV_PIX_FMT_BAYER_GBRG16, 972 Pixel::BAYER_GRBG16 => AV_PIX_FMT_BAYER_GRBG16, 973 974 Pixel::YUVA420P9 => AV_PIX_FMT_YUVA420P9, 975 Pixel::YUVA422P9 => AV_PIX_FMT_YUVA422P9, 976 Pixel::YUVA444P9 => AV_PIX_FMT_YUVA444P9, 977 Pixel::YUVA420P10 => AV_PIX_FMT_YUVA420P10, 978 Pixel::YUVA422P10 => AV_PIX_FMT_YUVA422P10, 979 Pixel::YUVA444P10 => AV_PIX_FMT_YUVA444P10, 980 Pixel::YUVA420P16 => AV_PIX_FMT_YUVA420P16, 981 Pixel::YUVA422P16 => AV_PIX_FMT_YUVA422P16, 982 Pixel::YUVA444P16 => AV_PIX_FMT_YUVA444P16, 983 984 Pixel::XYZ12 => AV_PIX_FMT_XYZ12, 985 Pixel::NV20 => AV_PIX_FMT_NV20, 986 Pixel::AYUV64 => AV_PIX_FMT_AYUV64, 987 988 Pixel::P010LE => AV_PIX_FMT_P010LE, 989 Pixel::P010BE => AV_PIX_FMT_P010BE, 990 Pixel::GBRAP12BE => AV_PIX_FMT_GBRAP12BE, 991 Pixel::GBRAP12LE => AV_PIX_FMT_GBRAP12LE, 992 Pixel::GBRAP10LE => AV_PIX_FMT_GBRAP10LE, 993 Pixel::GBRAP10BE => AV_PIX_FMT_GBRAP10BE, 994 Pixel::MEDIACODEC => AV_PIX_FMT_MEDIACODEC, 995 Pixel::GRAY12BE => AV_PIX_FMT_GRAY12BE, 996 Pixel::GRAY12LE => AV_PIX_FMT_GRAY12LE, 997 Pixel::GRAY10BE => AV_PIX_FMT_GRAY10BE, 998 Pixel::GRAY10LE => AV_PIX_FMT_GRAY10LE, 999 Pixel::P016LE => AV_PIX_FMT_P016LE, 1000 Pixel::P016BE => AV_PIX_FMT_P016BE, 1001 1002 Pixel::D3D11 => AV_PIX_FMT_D3D11, 1003 Pixel::GRAY9BE => AV_PIX_FMT_GRAY9BE, 1004 Pixel::GRAY9LE => AV_PIX_FMT_GRAY9LE, 1005 Pixel::GBRPF32BE => AV_PIX_FMT_GBRPF32BE, 1006 Pixel::GBRPF32LE => AV_PIX_FMT_GBRPF32LE, 1007 Pixel::GBRAPF32BE => AV_PIX_FMT_GBRAPF32BE, 1008 Pixel::GBRAPF32LE => AV_PIX_FMT_GBRAPF32LE, 1009 Pixel::DRM_PRIME => AV_PIX_FMT_DRM_PRIME, 1010 1011 #[cfg(feature = "ffmpeg_4_0")] 1012 Pixel::OPENCL => AV_PIX_FMT_OPENCL, 1013 1014 #[cfg(feature = "ffmpeg_4_1")] 1015 Pixel::GRAY14BE => AV_PIX_FMT_GRAY14BE, 1016 #[cfg(feature = "ffmpeg_4_1")] 1017 Pixel::GRAY14LE => AV_PIX_FMT_GRAY14LE, 1018 #[cfg(feature = "ffmpeg_4_1")] 1019 Pixel::GRAYF32BE => AV_PIX_FMT_GRAYF32BE, 1020 #[cfg(feature = "ffmpeg_4_1")] 1021 Pixel::GRAYF32LE => AV_PIX_FMT_GRAYF32LE, 1022 1023 #[cfg(feature = "ffmpeg_4_2")] 1024 Pixel::YUVA422P12BE => AV_PIX_FMT_YUVA422P12BE, 1025 #[cfg(feature = "ffmpeg_4_2")] 1026 Pixel::YUVA422P12LE => AV_PIX_FMT_YUVA422P12LE, 1027 #[cfg(feature = "ffmpeg_4_2")] 1028 Pixel::YUVA444P12BE => AV_PIX_FMT_YUVA444P12BE, 1029 #[cfg(feature = "ffmpeg_4_2")] 1030 Pixel::YUVA444P12LE => AV_PIX_FMT_YUVA444P12LE, 1031 #[cfg(feature = "ffmpeg_4_2")] 1032 Pixel::NV24 => AV_PIX_FMT_NV24, 1033 #[cfg(feature = "ffmpeg_4_2")] 1034 Pixel::NV42 => AV_PIX_FMT_NV42, 1035 1036 #[cfg(feature = "ffmpeg_4_3")] 1037 Pixel::VULKAN => AV_PIX_FMT_VULKAN, 1038 #[cfg(feature = "ffmpeg_4_3")] 1039 Pixel::Y210BE => AV_PIX_FMT_Y210BE, 1040 #[cfg(feature = "ffmpeg_4_3")] 1041 Pixel::Y210LE => AV_PIX_FMT_Y210LE, 1042 1043 #[cfg(feature = "ffmpeg_4_4")] 1044 Pixel::X2RGB10LE => AV_PIX_FMT_X2RGB10LE, 1045 #[cfg(feature = "ffmpeg_4_4")] 1046 Pixel::X2RGB10BE => AV_PIX_FMT_X2RGB10BE, 1047 1048 #[cfg(feature = "rpi")] 1049 Pixel::RPI => AV_PIX_FMT_RPI, 1050 #[cfg(feature = "rpi")] 1051 Pixel::SAND128 => AV_PIX_FMT_SAND128, 1052 #[cfg(feature = "rpi")] 1053 Pixel::SAND64_10 => AV_PIX_FMT_SAND64_10, 1054 #[cfg(feature = "rpi")] 1055 Pixel::SAND64_16 => AV_PIX_FMT_SAND64_16, 1056 #[cfg(feature = "rpi")] 1057 Pixel::RPI4_8 => AV_PIX_FMT_RPI4_8, 1058 #[cfg(feature = "rpi")] 1059 Pixel::RPI4_10 => AV_PIX_FMT_RPI4_10, 1060 } 1061 } 1062 } 1063 1064 #[derive(Debug)] 1065 pub enum ParsePixelError { 1066 NulError(NulError), 1067 UnknownFormat, 1068 } 1069 1070 impl fmt::Display for ParsePixelError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result1071 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 1072 match *self { 1073 ParsePixelError::NulError(ref e) => e.fmt(f), 1074 ParsePixelError::UnknownFormat => write!(f, "unknown pixel format"), 1075 } 1076 } 1077 } 1078 1079 impl error::Error for ParsePixelError { cause(&self) -> Option<&dyn error::Error>1080 fn cause(&self) -> Option<&dyn error::Error> { 1081 match *self { 1082 ParsePixelError::NulError(ref e) => Some(e), 1083 ParsePixelError::UnknownFormat => None, 1084 } 1085 } 1086 } 1087 1088 impl From<NulError> for ParsePixelError { from(x: NulError) -> ParsePixelError1089 fn from(x: NulError) -> ParsePixelError { 1090 ParsePixelError::NulError(x) 1091 } 1092 } 1093 1094 impl FromStr for Pixel { 1095 type Err = ParsePixelError; 1096 1097 #[inline(always)] from_str(s: &str) -> Result<Pixel, ParsePixelError>1098 fn from_str(s: &str) -> Result<Pixel, ParsePixelError> { 1099 let cstring = CString::new(s)?; 1100 let format = unsafe { av_get_pix_fmt(cstring.as_ptr()) }.into(); 1101 1102 if format == Pixel::None { 1103 Err(ParsePixelError::UnknownFormat) 1104 } else { 1105 Ok(format) 1106 } 1107 } 1108 } 1109