1#![allow(non_upper_case_globals)]
6
7use fidl_fuchsia_images2 as images2;
8use fidl_fuchsia_sysmem as sysmem;
9use std::{fmt, str};
10use thiserror::Error;
11
12#[derive(Debug, Clone, Copy, PartialEq)]
19pub enum PixelFormat {
20 Invalid,
23 R8G8B8A8,
28 Bgra32,
33 I420,
38 M420,
43 Nv12,
48 Yuy2,
53 Mjpeg,
58 Yv12,
63 Bgr24,
68 Rgb565,
73 Rgb332,
78 Rgb2220,
83 L8,
88 R8,
93 R8G8,
98 A2R10G10B10,
103 A2B10G10R10,
108 DoNotCare,
114}
115
116impl Default for PixelFormat {
117 fn default() -> PixelFormat {
118 PixelFormat::Invalid
119 }
120}
121
122impl From<images2::PixelFormat> for PixelFormat {
123 fn from(src: images2::PixelFormat) -> Self {
124 match src {
125 images2::PixelFormat::Invalid => Self::Invalid,
126 images2::PixelFormat::R8G8B8A8 => Self::R8G8B8A8,
127 images2::PixelFormat::B8G8R8A8 => Self::Bgra32,
128 images2::PixelFormat::I420 => Self::I420,
129 images2::PixelFormat::M420 => Self::M420,
130 images2::PixelFormat::Nv12 => Self::Nv12,
131 images2::PixelFormat::Yuy2 => Self::Yuy2,
132 images2::PixelFormat::Mjpeg => Self::Mjpeg,
133 images2::PixelFormat::Yv12 => Self::Yv12,
134 images2::PixelFormat::B8G8R8 => Self::Bgr24,
135 images2::PixelFormat::R5G6B5 => Self::Rgb565,
136 images2::PixelFormat::R3G3B2 => Self::Rgb332,
137 images2::PixelFormat::R2G2B2X2 => Self::Rgb2220,
138 images2::PixelFormat::L8 => Self::L8,
139 images2::PixelFormat::R8 => Self::R8,
140 images2::PixelFormat::R8G8 => Self::R8G8,
141 images2::PixelFormat::A2R10G10B10 => Self::A2R10G10B10,
142 images2::PixelFormat::A2B10G10R10 => Self::A2B10G10R10,
143 images2::PixelFormat::DoNotCare => Self::DoNotCare,
144 _ => Self::Invalid,
145 }
146 }
147}
148
149impl From<&images2::PixelFormat> for PixelFormat {
150 fn from(src: &images2::PixelFormat) -> Self {
151 Self::from(*src)
152 }
153}
154
155impl From<PixelFormat> for images2::PixelFormat {
156 fn from(src: PixelFormat) -> Self {
157 match src {
158 PixelFormat::Invalid => Self::Invalid,
159 PixelFormat::R8G8B8A8 => Self::R8G8B8A8,
160 PixelFormat::Bgra32 => Self::B8G8R8A8,
161 PixelFormat::I420 => Self::I420,
162 PixelFormat::M420 => Self::M420,
163 PixelFormat::Nv12 => Self::Nv12,
164 PixelFormat::Yuy2 => Self::Yuy2,
165 PixelFormat::Mjpeg => Self::Mjpeg,
166 PixelFormat::Yv12 => Self::Yv12,
167 PixelFormat::Bgr24 => Self::B8G8R8,
168 PixelFormat::Rgb565 => Self::R5G6B5,
169 PixelFormat::Rgb332 => Self::R3G3B2,
170 PixelFormat::Rgb2220 => Self::R2G2B2X2,
171 PixelFormat::L8 => Self::L8,
172 PixelFormat::R8 => Self::R8,
173 PixelFormat::R8G8 => Self::R8G8,
174 PixelFormat::A2R10G10B10 => Self::A2R10G10B10,
175 PixelFormat::A2B10G10R10 => Self::A2B10G10R10,
176 PixelFormat::DoNotCare => Self::DoNotCare,
177 }
178 }
179}
180
181impl From<&PixelFormat> for images2::PixelFormat {
182 fn from(src: &PixelFormat) -> Self {
183 Self::from(*src)
184 }
185}
186
187impl From<sysmem::PixelFormatType> for PixelFormat {
188 fn from(src: sysmem::PixelFormatType) -> Self {
189 match src {
190 sysmem::PixelFormatType::Invalid => Self::Invalid,
191 sysmem::PixelFormatType::R8G8B8A8 => Self::R8G8B8A8,
192 sysmem::PixelFormatType::Bgra32 => Self::Bgra32,
193 sysmem::PixelFormatType::I420 => Self::I420,
194 sysmem::PixelFormatType::M420 => Self::M420,
195 sysmem::PixelFormatType::Nv12 => Self::Nv12,
196 sysmem::PixelFormatType::Yuy2 => Self::Yuy2,
197 sysmem::PixelFormatType::Mjpeg => Self::Mjpeg,
198 sysmem::PixelFormatType::Yv12 => Self::Yv12,
199 sysmem::PixelFormatType::Bgr24 => Self::Bgr24,
200 sysmem::PixelFormatType::Rgb565 => Self::Rgb565,
201 sysmem::PixelFormatType::Rgb332 => Self::Rgb332,
202 sysmem::PixelFormatType::Rgb2220 => Self::Rgb2220,
203 sysmem::PixelFormatType::L8 => Self::L8,
204 sysmem::PixelFormatType::R8 => Self::R8,
205 sysmem::PixelFormatType::R8G8 => Self::R8G8,
206 sysmem::PixelFormatType::A2R10G10B10 => Self::A2R10G10B10,
207 sysmem::PixelFormatType::A2B10G10R10 => Self::A2B10G10R10,
208 sysmem::PixelFormatType::DoNotCare => Self::DoNotCare,
209 }
210 }
211}
212
213impl From<&sysmem::PixelFormatType> for PixelFormat {
214 fn from(src: &sysmem::PixelFormatType) -> Self {
215 Self::from(*src)
216 }
217}
218
219impl From<PixelFormat> for sysmem::PixelFormatType {
220 fn from(src: PixelFormat) -> Self {
221 match src {
222 PixelFormat::Invalid => Self::Invalid,
223 PixelFormat::R8G8B8A8 => Self::R8G8B8A8,
224 PixelFormat::Bgra32 => Self::Bgra32,
225 PixelFormat::I420 => Self::I420,
226 PixelFormat::M420 => Self::M420,
227 PixelFormat::Nv12 => Self::Nv12,
228 PixelFormat::Yuy2 => Self::Yuy2,
229 PixelFormat::Mjpeg => Self::Mjpeg,
230 PixelFormat::Yv12 => Self::Yv12,
231 PixelFormat::Bgr24 => Self::Bgr24,
232 PixelFormat::Rgb565 => Self::Rgb565,
233 PixelFormat::Rgb332 => Self::Rgb332,
234 PixelFormat::Rgb2220 => Self::Rgb2220,
235 PixelFormat::L8 => Self::L8,
236 PixelFormat::R8 => Self::R8,
237 PixelFormat::R8G8 => Self::R8G8,
238 PixelFormat::A2R10G10B10 => Self::A2R10G10B10,
239 PixelFormat::A2B10G10R10 => Self::A2B10G10R10,
240 PixelFormat::DoNotCare => Self::DoNotCare,
241 }
242 }
243}
244
245impl From<&PixelFormat> for sysmem::PixelFormatType {
246 fn from(src: &PixelFormat) -> Self {
247 Self::from(*src)
248 }
249}
250
251impl fmt::Display for PixelFormat {
252 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
253 let string: &str = match *self {
254 PixelFormat::Invalid => "(Invalid)",
255 PixelFormat::R8G8B8A8 => "RGBA 8888",
256 PixelFormat::Bgra32 => "BGRA 8888",
257 PixelFormat::I420 => "I420",
258 PixelFormat::M420 => "M420",
259 PixelFormat::Nv12 => "NV12",
260 PixelFormat::Yuy2 => "YUY2",
261 PixelFormat::Mjpeg => "MJPEG",
262 PixelFormat::Yv12 => "YV12",
263 PixelFormat::Bgr24 => "BGR 888",
264 PixelFormat::Rgb565 => "RGB 565",
265 PixelFormat::Rgb332 => "RGB 332",
266 PixelFormat::Rgb2220 => "RGB 2220",
267 PixelFormat::L8 => "Mono L8",
268 PixelFormat::R8 => "Mono R8",
269 PixelFormat::R8G8 => "R8G8",
270 PixelFormat::A2R10G10B10 => "A2 R10 G10 B10",
271 PixelFormat::A2B10G10R10 => "A2 B10 G10 R10",
272 PixelFormat::DoNotCare => "(Do not care)",
273 };
274 write!(f, "{}", string)
275 }
276}
277
278#[derive(Debug, PartialEq)]
279pub enum ParsePixelFormatError {
280 UnsupportedFormat(String),
281}
282
283impl fmt::Display for ParsePixelFormatError {
284 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
285 match self {
286 ParsePixelFormatError::UnsupportedFormat(s) => write!(f, "Unsupported format {}", s),
287 }
288 }
289}
290
291impl str::FromStr for PixelFormat {
292 type Err = ParsePixelFormatError;
293
294 fn from_str(s: &str) -> Result<Self, Self::Err> {
295 match s.to_ascii_lowercase().as_str() {
296 "invalid" => Ok(PixelFormat::Invalid),
297 "rgba8888" | "r8g8b8a8" | "rgba32" => Ok(PixelFormat::R8G8B8A8),
298 "bgra8888" | "b8g8r8a8" | "bgra32" => Ok(PixelFormat::Bgra32),
299 "i420" => Ok(PixelFormat::I420),
300 "m420" => Ok(PixelFormat::M420),
301 "nv12" => Ok(PixelFormat::Nv12),
302 "yuy2" => Ok(PixelFormat::Yuy2),
303 "mjpeg" => Ok(PixelFormat::Mjpeg),
304 "yv12" => Ok(PixelFormat::Yv12),
305 "bgr888" | "bgr24" => Ok(PixelFormat::Bgr24),
306 "rgb565" => Ok(PixelFormat::Rgb565),
307 "rgb332" => Ok(PixelFormat::Rgb332),
308 "rgb2220" => Ok(PixelFormat::Rgb2220),
309 "monol8" => Ok(PixelFormat::L8),
310 "monor8" => Ok(PixelFormat::R8),
311 "r8g8" => Ok(PixelFormat::R8G8),
312 "a2r10g10b10" => Ok(PixelFormat::A2R10G10B10),
313 "a2b10g10r10" => Ok(PixelFormat::A2B10G10R10),
314 "donotcare" => Ok(PixelFormat::DoNotCare),
315 _ => Err(ParsePixelFormatError::UnsupportedFormat(s.to_string())),
316 }
317 }
318}
319
320#[derive(Debug, Error, PartialEq)]
321pub enum GetBytesPerPixelError {
322 #[error("Unsupported format: {0}")]
323 UnsupportedFormat(PixelFormat),
324}
325
326pub fn get_bytes_per_pixel(pixel_format: PixelFormat) -> Result<usize, GetBytesPerPixelError> {
330 match pixel_format {
331 PixelFormat::R8G8B8A8
332 | PixelFormat::Bgra32
333 | PixelFormat::A2R10G10B10
334 | PixelFormat::A2B10G10R10 => Ok(4),
335 PixelFormat::Bgr24 => Ok(3),
336 PixelFormat::Rgb565 | PixelFormat::R8G8 => Ok(2),
337 PixelFormat::Rgb332 | PixelFormat::Rgb2220 | PixelFormat::L8 | PixelFormat::R8 => Ok(1),
338 _ => Err(GetBytesPerPixelError::UnsupportedFormat(pixel_format)),
339 }
340}
341
342#[cfg(test)]
343mod tests {
344 use super::*;
345 use googletest::{expect_eq, expect_that, gtest, matchers};
346 use std::str::FromStr;
347
348 #[gtest]
349 #[fuchsia::test]
350 fn pixel_format_from_str_invalid() {
351 expect_that!(
352 &PixelFormat::from_str("bad"),
353 matchers::err(matchers::eq(&ParsePixelFormatError::UnsupportedFormat(
354 "bad".to_string()
355 )))
356 );
357 }
358
359 #[gtest]
360 #[fuchsia::test]
361 fn pixel_format_from_str_valid() {
362 expect_that!(
363 &PixelFormat::from_str("invalid"),
364 matchers::ok(matchers::eq(&PixelFormat::Invalid))
365 );
366 expect_that!(
367 &PixelFormat::from_str("rgba8888"),
368 matchers::ok(matchers::eq(&PixelFormat::R8G8B8A8))
369 );
370 expect_that!(
371 &PixelFormat::from_str("r8g8b8a8"),
372 matchers::ok(matchers::eq(&PixelFormat::R8G8B8A8))
373 );
374 expect_that!(
375 &PixelFormat::from_str("rgba32"),
376 matchers::ok(matchers::eq(&PixelFormat::R8G8B8A8))
377 );
378 expect_that!(
379 &PixelFormat::from_str("bgra8888"),
380 matchers::ok(matchers::eq(&PixelFormat::Bgra32))
381 );
382 expect_that!(
383 &PixelFormat::from_str("b8g8r8a8"),
384 matchers::ok(matchers::eq(&PixelFormat::Bgra32))
385 );
386 expect_that!(
387 &PixelFormat::from_str("bgra32"),
388 matchers::ok(matchers::eq(&PixelFormat::Bgra32))
389 );
390 expect_that!(
391 &PixelFormat::from_str("i420"),
392 matchers::ok(matchers::eq(&PixelFormat::I420))
393 );
394 expect_that!(
395 &PixelFormat::from_str("m420"),
396 matchers::ok(matchers::eq(&PixelFormat::M420))
397 );
398 expect_that!(
399 &PixelFormat::from_str("nv12"),
400 matchers::ok(matchers::eq(&PixelFormat::Nv12))
401 );
402 expect_that!(
403 &PixelFormat::from_str("yuy2"),
404 matchers::ok(matchers::eq(&PixelFormat::Yuy2))
405 );
406 expect_that!(
407 &PixelFormat::from_str("mjpeg"),
408 matchers::ok(matchers::eq(&PixelFormat::Mjpeg))
409 );
410 expect_that!(
411 &PixelFormat::from_str("yv12"),
412 matchers::ok(matchers::eq(&PixelFormat::Yv12))
413 );
414 expect_that!(
415 &PixelFormat::from_str("bgr888"),
416 matchers::ok(matchers::eq(&PixelFormat::Bgr24))
417 );
418 expect_that!(
419 &PixelFormat::from_str("bgr24"),
420 matchers::ok(matchers::eq(&PixelFormat::Bgr24))
421 );
422 expect_that!(
423 &PixelFormat::from_str("rgb565"),
424 matchers::ok(matchers::eq(&PixelFormat::Rgb565))
425 );
426 expect_that!(
427 &PixelFormat::from_str("rgb332"),
428 matchers::ok(matchers::eq(&PixelFormat::Rgb332))
429 );
430 expect_that!(
431 &PixelFormat::from_str("rgb2220"),
432 matchers::ok(matchers::eq(&PixelFormat::Rgb2220))
433 );
434 expect_that!(
435 &PixelFormat::from_str("monol8"),
436 matchers::ok(matchers::eq(&PixelFormat::L8))
437 );
438 expect_that!(
439 &PixelFormat::from_str("monor8"),
440 matchers::ok(matchers::eq(&PixelFormat::R8))
441 );
442 expect_that!(
443 &PixelFormat::from_str("r8g8"),
444 matchers::ok(matchers::eq(&PixelFormat::R8G8))
445 );
446 expect_that!(
447 &PixelFormat::from_str("a2r10g10b10"),
448 matchers::ok(matchers::eq(&PixelFormat::A2R10G10B10))
449 );
450 expect_that!(
451 &PixelFormat::from_str("a2b10g10r10"),
452 matchers::ok(matchers::eq(&PixelFormat::A2B10G10R10))
453 );
454 expect_that!(
455 &PixelFormat::from_str("donotcare"),
456 matchers::ok(matchers::eq(&PixelFormat::DoNotCare))
457 );
458
459 expect_that!(
460 &PixelFormat::from_str("INVALID"),
461 matchers::ok(matchers::eq(&PixelFormat::Invalid))
462 );
463 expect_that!(
464 &PixelFormat::from_str("RGBA8888"),
465 matchers::ok(matchers::eq(&PixelFormat::R8G8B8A8))
466 );
467 expect_that!(
468 &PixelFormat::from_str("R8G8B8A8"),
469 matchers::ok(matchers::eq(&PixelFormat::R8G8B8A8))
470 );
471 expect_that!(
472 &PixelFormat::from_str("RGBA32"),
473 matchers::ok(matchers::eq(&PixelFormat::R8G8B8A8))
474 );
475 expect_that!(
476 &PixelFormat::from_str("BGRA8888"),
477 matchers::ok(matchers::eq(&PixelFormat::Bgra32))
478 );
479 expect_that!(
480 &PixelFormat::from_str("B8G8R8A8"),
481 matchers::ok(matchers::eq(&PixelFormat::Bgra32))
482 );
483 expect_that!(
484 &PixelFormat::from_str("BGRA32"),
485 matchers::ok(matchers::eq(&PixelFormat::Bgra32))
486 );
487 expect_that!(
488 &PixelFormat::from_str("I420"),
489 matchers::ok(matchers::eq(&PixelFormat::I420))
490 );
491 expect_that!(
492 &PixelFormat::from_str("M420"),
493 matchers::ok(matchers::eq(&PixelFormat::M420))
494 );
495 expect_that!(
496 &PixelFormat::from_str("NV12"),
497 matchers::ok(matchers::eq(&PixelFormat::Nv12))
498 );
499 expect_that!(
500 &PixelFormat::from_str("YUY2"),
501 matchers::ok(matchers::eq(&PixelFormat::Yuy2))
502 );
503 expect_that!(
504 &PixelFormat::from_str("MJPEG"),
505 matchers::ok(matchers::eq(&PixelFormat::Mjpeg))
506 );
507 expect_that!(
508 &PixelFormat::from_str("YV12"),
509 matchers::ok(matchers::eq(&PixelFormat::Yv12))
510 );
511 expect_that!(
512 &PixelFormat::from_str("BGR888"),
513 matchers::ok(matchers::eq(&PixelFormat::Bgr24))
514 );
515 expect_that!(
516 &PixelFormat::from_str("BGR24"),
517 matchers::ok(matchers::eq(&PixelFormat::Bgr24))
518 );
519 expect_that!(
520 &PixelFormat::from_str("RGB565"),
521 matchers::ok(matchers::eq(&PixelFormat::Rgb565))
522 );
523 expect_that!(
524 &PixelFormat::from_str("RGB332"),
525 matchers::ok(matchers::eq(&PixelFormat::Rgb332))
526 );
527 expect_that!(
528 &PixelFormat::from_str("RGB2220"),
529 matchers::ok(matchers::eq(&PixelFormat::Rgb2220))
530 );
531 expect_that!(
532 &PixelFormat::from_str("MONOL8"),
533 matchers::ok(matchers::eq(&PixelFormat::L8))
534 );
535 expect_that!(
536 &PixelFormat::from_str("MONOR8"),
537 matchers::ok(matchers::eq(&PixelFormat::R8))
538 );
539 expect_that!(
540 &PixelFormat::from_str("R8G8"),
541 matchers::ok(matchers::eq(&PixelFormat::R8G8))
542 );
543 expect_that!(
544 &PixelFormat::from_str("A2R10G10B10"),
545 matchers::ok(matchers::eq(&PixelFormat::A2R10G10B10))
546 );
547 expect_that!(
548 &PixelFormat::from_str("A2B10G10R10"),
549 matchers::ok(matchers::eq(&PixelFormat::A2B10G10R10))
550 );
551 expect_that!(
552 &PixelFormat::from_str("DONOTCARE"),
553 matchers::ok(matchers::eq(&PixelFormat::DoNotCare))
554 );
555
556 expect_that!(
557 &PixelFormat::from_str("Invalid"),
558 matchers::ok(matchers::eq(&PixelFormat::Invalid))
559 );
560 expect_that!(
561 &PixelFormat::from_str("Rgba8888"),
562 matchers::ok(matchers::eq(&PixelFormat::R8G8B8A8))
563 );
564 expect_that!(
565 &PixelFormat::from_str("R8g8b8a8"),
566 matchers::ok(matchers::eq(&PixelFormat::R8G8B8A8))
567 );
568 expect_that!(
569 &PixelFormat::from_str("Rgba32"),
570 matchers::ok(matchers::eq(&PixelFormat::R8G8B8A8))
571 );
572 expect_that!(
573 &PixelFormat::from_str("Bgra8888"),
574 matchers::ok(matchers::eq(&PixelFormat::Bgra32))
575 );
576 expect_that!(
577 &PixelFormat::from_str("B8g8r8a8"),
578 matchers::ok(matchers::eq(&PixelFormat::Bgra32))
579 );
580 expect_that!(
581 &PixelFormat::from_str("Bgra32"),
582 matchers::ok(matchers::eq(&PixelFormat::Bgra32))
583 );
584 expect_that!(
585 &PixelFormat::from_str("I420"),
586 matchers::ok(matchers::eq(&PixelFormat::I420))
587 );
588 expect_that!(
589 &PixelFormat::from_str("M420"),
590 matchers::ok(matchers::eq(&PixelFormat::M420))
591 );
592 expect_that!(
593 &PixelFormat::from_str("Nv12"),
594 matchers::ok(matchers::eq(&PixelFormat::Nv12))
595 );
596 expect_that!(
597 &PixelFormat::from_str("Yuy2"),
598 matchers::ok(matchers::eq(&PixelFormat::Yuy2))
599 );
600 expect_that!(
601 &PixelFormat::from_str("Mjpeg"),
602 matchers::ok(matchers::eq(&PixelFormat::Mjpeg))
603 );
604 expect_that!(
605 &PixelFormat::from_str("Yv12"),
606 matchers::ok(matchers::eq(&PixelFormat::Yv12))
607 );
608 expect_that!(
609 &PixelFormat::from_str("Bgr888"),
610 matchers::ok(matchers::eq(&PixelFormat::Bgr24))
611 );
612 expect_that!(
613 &PixelFormat::from_str("Bgr24"),
614 matchers::ok(matchers::eq(&PixelFormat::Bgr24))
615 );
616 expect_that!(
617 &PixelFormat::from_str("Rgb565"),
618 matchers::ok(matchers::eq(&PixelFormat::Rgb565))
619 );
620 expect_that!(
621 &PixelFormat::from_str("Rgb332"),
622 matchers::ok(matchers::eq(&PixelFormat::Rgb332))
623 );
624 expect_that!(
625 &PixelFormat::from_str("Rgb2220"),
626 matchers::ok(matchers::eq(&PixelFormat::Rgb2220))
627 );
628 expect_that!(
629 &PixelFormat::from_str("Monol8"),
630 matchers::ok(matchers::eq(&PixelFormat::L8))
631 );
632 expect_that!(
633 &PixelFormat::from_str("Monor8"),
634 matchers::ok(matchers::eq(&PixelFormat::R8))
635 );
636 expect_that!(
637 &PixelFormat::from_str("R8g8"),
638 matchers::ok(matchers::eq(&PixelFormat::R8G8))
639 );
640 expect_that!(
641 &PixelFormat::from_str("A2r10g10b10"),
642 matchers::ok(matchers::eq(&PixelFormat::A2R10G10B10))
643 );
644 expect_that!(
645 &PixelFormat::from_str("A2b10g10r10"),
646 matchers::ok(matchers::eq(&PixelFormat::A2B10G10R10))
647 );
648 expect_that!(
649 &PixelFormat::from_str("DoNotCare"),
650 matchers::ok(matchers::eq(&PixelFormat::DoNotCare))
651 );
652 }
653
654 #[gtest]
655 #[fuchsia::test]
656 fn get_bytes_per_pixel_valid() {
657 expect_that!(&get_bytes_per_pixel(PixelFormat::R8G8B8A8), matchers::ok(matchers::eq(&4)));
658 expect_that!(&get_bytes_per_pixel(PixelFormat::Bgra32), matchers::ok(matchers::eq(&4)));
659 expect_that!(&get_bytes_per_pixel(PixelFormat::Bgr24), matchers::ok(matchers::eq(&3)));
660 expect_that!(&get_bytes_per_pixel(PixelFormat::Rgb565), matchers::ok(matchers::eq(&2)));
661 expect_that!(&get_bytes_per_pixel(PixelFormat::Rgb332), matchers::ok(matchers::eq(&1)));
662 expect_that!(&get_bytes_per_pixel(PixelFormat::Rgb2220), matchers::ok(matchers::eq(&1)));
663 expect_that!(&get_bytes_per_pixel(PixelFormat::L8), matchers::ok(matchers::eq(&1)));
664 expect_that!(&get_bytes_per_pixel(PixelFormat::R8), matchers::ok(matchers::eq(&1)));
665 expect_that!(&get_bytes_per_pixel(PixelFormat::R8G8), matchers::ok(matchers::eq(&2)));
666 expect_that!(
667 &get_bytes_per_pixel(PixelFormat::A2R10G10B10),
668 matchers::ok(matchers::eq(&4))
669 );
670 expect_that!(
671 &get_bytes_per_pixel(PixelFormat::A2B10G10R10),
672 matchers::ok(matchers::eq(&4))
673 );
674 }
675
676 #[gtest]
677 #[fuchsia::test]
678 fn get_bytes_per_pixel_invalid() {
679 expect_that!(
680 &get_bytes_per_pixel(PixelFormat::Invalid),
681 matchers::err(matchers::eq(&GetBytesPerPixelError::UnsupportedFormat(
682 PixelFormat::Invalid
683 )))
684 );
685 expect_that!(
686 &get_bytes_per_pixel(PixelFormat::I420),
687 matchers::err(matchers::eq(&GetBytesPerPixelError::UnsupportedFormat(
688 PixelFormat::I420
689 )))
690 );
691 expect_that!(
692 &get_bytes_per_pixel(PixelFormat::M420),
693 matchers::err(matchers::eq(&GetBytesPerPixelError::UnsupportedFormat(
694 PixelFormat::M420
695 )))
696 );
697 expect_that!(
698 &get_bytes_per_pixel(PixelFormat::Nv12),
699 matchers::err(matchers::eq(&GetBytesPerPixelError::UnsupportedFormat(
700 PixelFormat::Nv12
701 )))
702 );
703 expect_that!(
704 &get_bytes_per_pixel(PixelFormat::Yuy2),
705 matchers::err(matchers::eq(&GetBytesPerPixelError::UnsupportedFormat(
706 PixelFormat::Yuy2
707 )))
708 );
709 expect_that!(
710 &get_bytes_per_pixel(PixelFormat::Mjpeg),
711 matchers::err(matchers::eq(&GetBytesPerPixelError::UnsupportedFormat(
712 PixelFormat::Mjpeg
713 )))
714 );
715 expect_that!(
716 &get_bytes_per_pixel(PixelFormat::Yv12),
717 matchers::err(matchers::eq(&GetBytesPerPixelError::UnsupportedFormat(
718 PixelFormat::Yv12
719 )))
720 );
721 expect_that!(
722 &get_bytes_per_pixel(PixelFormat::DoNotCare),
723 matchers::err(matchers::eq(&GetBytesPerPixelError::UnsupportedFormat(
724 PixelFormat::DoNotCare
725 )))
726 );
727 }
728
729 #[gtest]
730 #[fuchsia::test]
731 fn sysmem2_pixel_format_conversion() {
732 expect_eq!(
733 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::Invalid)),
734 images2::PixelFormat::Invalid
735 );
736 expect_eq!(
737 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::R8G8B8A8)),
738 images2::PixelFormat::R8G8B8A8
739 );
740 expect_eq!(
741 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::B8G8R8A8)),
742 images2::PixelFormat::B8G8R8A8
743 );
744 expect_eq!(
745 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::I420)),
746 images2::PixelFormat::I420
747 );
748 expect_eq!(
749 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::M420)),
750 images2::PixelFormat::M420
751 );
752 expect_eq!(
753 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::Nv12)),
754 images2::PixelFormat::Nv12
755 );
756 expect_eq!(
757 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::Yuy2)),
758 images2::PixelFormat::Yuy2
759 );
760 expect_eq!(
761 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::Mjpeg)),
762 images2::PixelFormat::Mjpeg
763 );
764 expect_eq!(
765 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::Yv12)),
766 images2::PixelFormat::Yv12
767 );
768 expect_eq!(
769 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::B8G8R8)),
770 images2::PixelFormat::B8G8R8
771 );
772 expect_eq!(
773 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::R5G6B5)),
774 images2::PixelFormat::R5G6B5
775 );
776 expect_eq!(
777 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::R3G3B2)),
778 images2::PixelFormat::R3G3B2
779 );
780 expect_eq!(
781 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::R2G2B2X2)),
782 images2::PixelFormat::R2G2B2X2
783 );
784 expect_eq!(
785 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::L8)),
786 images2::PixelFormat::L8
787 );
788 expect_eq!(
789 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::R8)),
790 images2::PixelFormat::R8
791 );
792 expect_eq!(
793 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::R8G8)),
794 images2::PixelFormat::R8G8
795 );
796 expect_eq!(
797 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::A2R10G10B10)),
798 images2::PixelFormat::A2R10G10B10
799 );
800 expect_eq!(
801 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::A2B10G10R10)),
802 images2::PixelFormat::A2B10G10R10
803 );
804 expect_eq!(
805 images2::PixelFormat::from(PixelFormat::from(images2::PixelFormat::DoNotCare)),
806 images2::PixelFormat::DoNotCare
807 );
808 }
809
810 #[gtest]
811 #[fuchsia::test]
812 fn sysmem_pixel_format_conversion() {
813 expect_eq!(
814 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::Invalid)),
815 sysmem::PixelFormatType::Invalid
816 );
817 expect_eq!(
818 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::R8G8B8A8)),
819 sysmem::PixelFormatType::R8G8B8A8
820 );
821 expect_eq!(
822 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::Bgra32)),
823 sysmem::PixelFormatType::Bgra32
824 );
825 expect_eq!(
826 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::I420)),
827 sysmem::PixelFormatType::I420
828 );
829 expect_eq!(
830 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::M420)),
831 sysmem::PixelFormatType::M420
832 );
833 expect_eq!(
834 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::Nv12)),
835 sysmem::PixelFormatType::Nv12
836 );
837 expect_eq!(
838 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::Yuy2)),
839 sysmem::PixelFormatType::Yuy2
840 );
841 expect_eq!(
842 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::Mjpeg)),
843 sysmem::PixelFormatType::Mjpeg
844 );
845 expect_eq!(
846 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::Yv12)),
847 sysmem::PixelFormatType::Yv12
848 );
849 expect_eq!(
850 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::Bgr24)),
851 sysmem::PixelFormatType::Bgr24
852 );
853 expect_eq!(
854 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::Rgb565)),
855 sysmem::PixelFormatType::Rgb565
856 );
857 expect_eq!(
858 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::Rgb332)),
859 sysmem::PixelFormatType::Rgb332
860 );
861 expect_eq!(
862 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::Rgb2220)),
863 sysmem::PixelFormatType::Rgb2220
864 );
865 expect_eq!(
866 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::L8)),
867 sysmem::PixelFormatType::L8
868 );
869 expect_eq!(
870 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::R8)),
871 sysmem::PixelFormatType::R8
872 );
873 expect_eq!(
874 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::R8G8)),
875 sysmem::PixelFormatType::R8G8
876 );
877 expect_eq!(
878 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::A2R10G10B10)),
879 sysmem::PixelFormatType::A2R10G10B10
880 );
881 expect_eq!(
882 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::A2B10G10R10)),
883 sysmem::PixelFormatType::A2B10G10R10
884 );
885 expect_eq!(
886 sysmem::PixelFormatType::from(PixelFormat::from(sysmem::PixelFormatType::DoNotCare)),
887 sysmem::PixelFormatType::DoNotCare
888 );
889 }
890
891 #[gtest]
892 #[fuchsia::test]
893 fn sysmem2_to_sysmem_pixel_format_conversion() {
894 expect_eq!(
895 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::Invalid)),
896 sysmem::PixelFormatType::Invalid
897 );
898 expect_eq!(
899 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::R8G8B8A8)),
900 sysmem::PixelFormatType::R8G8B8A8
901 );
902 expect_eq!(
903 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::B8G8R8A8)),
904 sysmem::PixelFormatType::Bgra32
905 );
906 expect_eq!(
907 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::I420)),
908 sysmem::PixelFormatType::I420
909 );
910 expect_eq!(
911 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::M420)),
912 sysmem::PixelFormatType::M420
913 );
914 expect_eq!(
915 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::Nv12)),
916 sysmem::PixelFormatType::Nv12
917 );
918 expect_eq!(
919 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::Yuy2)),
920 sysmem::PixelFormatType::Yuy2
921 );
922 expect_eq!(
923 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::Mjpeg)),
924 sysmem::PixelFormatType::Mjpeg
925 );
926 expect_eq!(
927 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::Yv12)),
928 sysmem::PixelFormatType::Yv12
929 );
930 expect_eq!(
931 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::B8G8R8)),
932 sysmem::PixelFormatType::Bgr24
933 );
934 expect_eq!(
935 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::R5G6B5)),
936 sysmem::PixelFormatType::Rgb565
937 );
938 expect_eq!(
939 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::R3G3B2)),
940 sysmem::PixelFormatType::Rgb332
941 );
942 expect_eq!(
943 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::R2G2B2X2)),
944 sysmem::PixelFormatType::Rgb2220
945 );
946 expect_eq!(
947 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::L8)),
948 sysmem::PixelFormatType::L8
949 );
950 expect_eq!(
951 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::R8)),
952 sysmem::PixelFormatType::R8
953 );
954 expect_eq!(
955 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::R8G8)),
956 sysmem::PixelFormatType::R8G8
957 );
958 expect_eq!(
959 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::A2R10G10B10)),
960 sysmem::PixelFormatType::A2R10G10B10
961 );
962 expect_eq!(
963 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::A2B10G10R10)),
964 sysmem::PixelFormatType::A2B10G10R10
965 );
966 expect_eq!(
967 sysmem::PixelFormatType::from(PixelFormat::from(images2::PixelFormat::DoNotCare)),
968 sysmem::PixelFormatType::DoNotCare
969 );
970 }
971
972 #[gtest]
973 #[fuchsia::test]
974 fn sysmem_to_sysmem2_pixel_format_conversion() {
975 expect_eq!(
976 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::Invalid)),
977 images2::PixelFormat::Invalid
978 );
979 expect_eq!(
980 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::R8G8B8A8)),
981 images2::PixelFormat::R8G8B8A8
982 );
983 expect_eq!(
984 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::Bgra32)),
985 images2::PixelFormat::B8G8R8A8
986 );
987 expect_eq!(
988 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::I420)),
989 images2::PixelFormat::I420
990 );
991 expect_eq!(
992 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::M420)),
993 images2::PixelFormat::M420
994 );
995 expect_eq!(
996 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::Nv12)),
997 images2::PixelFormat::Nv12
998 );
999 expect_eq!(
1000 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::Yuy2)),
1001 images2::PixelFormat::Yuy2
1002 );
1003 expect_eq!(
1004 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::Mjpeg)),
1005 images2::PixelFormat::Mjpeg
1006 );
1007 expect_eq!(
1008 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::Yv12)),
1009 images2::PixelFormat::Yv12
1010 );
1011 expect_eq!(
1012 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::Bgr24)),
1013 images2::PixelFormat::B8G8R8
1014 );
1015 expect_eq!(
1016 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::Rgb565)),
1017 images2::PixelFormat::R5G6B5
1018 );
1019 expect_eq!(
1020 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::Rgb332)),
1021 images2::PixelFormat::R3G3B2
1022 );
1023 expect_eq!(
1024 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::Rgb2220)),
1025 images2::PixelFormat::R2G2B2X2
1026 );
1027 expect_eq!(
1028 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::L8)),
1029 images2::PixelFormat::L8
1030 );
1031 expect_eq!(
1032 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::R8)),
1033 images2::PixelFormat::R8
1034 );
1035 expect_eq!(
1036 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::R8G8)),
1037 images2::PixelFormat::R8G8
1038 );
1039 expect_eq!(
1040 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::A2R10G10B10)),
1041 images2::PixelFormat::A2R10G10B10
1042 );
1043 expect_eq!(
1044 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::A2B10G10R10)),
1045 images2::PixelFormat::A2B10G10R10
1046 );
1047 expect_eq!(
1048 images2::PixelFormat::from(PixelFormat::from(sysmem::PixelFormatType::DoNotCare)),
1049 images2::PixelFormat::DoNotCare
1050 );
1051 }
1052}