1#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub const FORMAT_MODIFIER_ARM_BCH_BIT: u64 = 2048;
12
13pub const FORMAT_MODIFIER_ARM_SPARSE_BIT: u64 = 64;
14
15pub const FORMAT_MODIFIER_ARM_SPLIT_BLOCK_BIT: u64 = 32;
16
17pub const FORMAT_MODIFIER_ARM_TE_BIT: u64 = 4096;
18
19pub const FORMAT_MODIFIER_ARM_TILED_HEADER_BIT: u64 = 8192;
20
21pub const FORMAT_MODIFIER_ARM_YUV_BIT: u64 = 16;
22
23pub const FORMAT_MODIFIER_INTEL_CCS_BIT: u64 = 16777216;
25
26pub const FORMAT_MODIFIER_VENDOR_ALLWINNER: u64 = 648518346341351424;
27
28pub const FORMAT_MODIFIER_VENDOR_AMD: u64 = 144115188075855872;
29
30pub const FORMAT_MODIFIER_VENDOR_AMLOGIC: u64 = 720575940379279360;
31
32pub const FORMAT_MODIFIER_VENDOR_ARM: u64 = 576460752303423488;
33
34pub const FORMAT_MODIFIER_VENDOR_BROADCOM: u64 = 504403158265495552;
35
36pub const FORMAT_MODIFIER_VENDOR_GOOGLE: u64 = 7421932185906577408;
37
38pub const FORMAT_MODIFIER_VENDOR_INTEL: u64 = 72057594037927936;
39
40pub const FORMAT_MODIFIER_VENDOR_NVIDIA: u64 = 216172782113783808;
41
42pub const FORMAT_MODIFIER_VENDOR_PVR: u64 = 10520408729537478656;
43
44pub const FORMAT_MODIFIER_VENDOR_QCOM: u64 = 360287970189639680;
45
46pub const FORMAT_MODIFIER_VENDOR_SAMSUNG: u64 = 288230376151711744;
47
48pub const FORMAT_MODIFIER_VENDOR_VIVANTE: u64 = 432345564227567616;
49
50#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
74pub enum ColorSpace {
75 Invalid,
77 Srgb,
79 Rec601Ntsc,
81 Rec601NtscFullRange,
83 Rec601Pal,
85 Rec601PalFullRange,
87 Rec709,
89 Rec2020,
93 Rec2100,
99 Passthrough,
103 DoNotCare,
106 #[doc(hidden)]
107 __SourceBreaking { unknown_ordinal: u32 },
108}
109
110#[macro_export]
112macro_rules! ColorSpaceUnknown {
113 () => {
114 _
115 };
116}
117
118impl ColorSpace {
119 #[inline]
120 pub fn from_primitive(prim: u32) -> Option<Self> {
121 match prim {
122 0 => Some(Self::Invalid),
123 1 => Some(Self::Srgb),
124 2 => Some(Self::Rec601Ntsc),
125 3 => Some(Self::Rec601NtscFullRange),
126 4 => Some(Self::Rec601Pal),
127 5 => Some(Self::Rec601PalFullRange),
128 6 => Some(Self::Rec709),
129 7 => Some(Self::Rec2020),
130 8 => Some(Self::Rec2100),
131 9 => Some(Self::Passthrough),
132 4294967294 => Some(Self::DoNotCare),
133 _ => None,
134 }
135 }
136
137 #[inline]
138 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
139 match prim {
140 0 => Self::Invalid,
141 1 => Self::Srgb,
142 2 => Self::Rec601Ntsc,
143 3 => Self::Rec601NtscFullRange,
144 4 => Self::Rec601Pal,
145 5 => Self::Rec601PalFullRange,
146 6 => Self::Rec709,
147 7 => Self::Rec2020,
148 8 => Self::Rec2100,
149 9 => Self::Passthrough,
150 4294967294 => Self::DoNotCare,
151 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
152 }
153 }
154
155 #[inline]
156 pub fn unknown() -> Self {
157 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
158 }
159
160 #[inline]
161 pub const fn into_primitive(self) -> u32 {
162 match self {
163 Self::Invalid => 0,
164 Self::Srgb => 1,
165 Self::Rec601Ntsc => 2,
166 Self::Rec601NtscFullRange => 3,
167 Self::Rec601Pal => 4,
168 Self::Rec601PalFullRange => 5,
169 Self::Rec709 => 6,
170 Self::Rec2020 => 7,
171 Self::Rec2100 => 8,
172 Self::Passthrough => 9,
173 Self::DoNotCare => 4294967294,
174 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
175 }
176 }
177
178 #[inline]
179 pub fn is_unknown(&self) -> bool {
180 match self {
181 Self::__SourceBreaking { unknown_ordinal: _ } => true,
182 _ => false,
183 }
184 }
185}
186
187#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
195pub enum PixelFormat {
196 Invalid,
197 R8G8B8A8,
209 R8G8B8X8,
217 B8G8R8A8,
231 B8G8R8X8,
239 I420,
243 M420,
247 Nv12,
251 Yuy2,
255 Mjpeg,
257 Yv12,
264 B8G8R8,
270 R5G6B5,
276 R3G3B2,
282 R2G2B2X2,
296 L8,
302 R8,
306 R8G8,
310 A2R10G10B10,
322 A2B10G10R10,
334 P010,
343 R8G8B8,
347 DoNotCare,
351 #[doc(hidden)]
352 __SourceBreaking {
353 unknown_ordinal: u32,
354 },
355}
356
357#[macro_export]
359macro_rules! PixelFormatUnknown {
360 () => {
361 _
362 };
363}
364
365impl PixelFormat {
366 #[inline]
367 pub fn from_primitive(prim: u32) -> Option<Self> {
368 match prim {
369 0 => Some(Self::Invalid),
370 1 => Some(Self::R8G8B8A8),
371 119 => Some(Self::R8G8B8X8),
372 101 => Some(Self::B8G8R8A8),
373 120 => Some(Self::B8G8R8X8),
374 102 => Some(Self::I420),
375 103 => Some(Self::M420),
376 104 => Some(Self::Nv12),
377 105 => Some(Self::Yuy2),
378 106 => Some(Self::Mjpeg),
379 107 => Some(Self::Yv12),
380 108 => Some(Self::B8G8R8),
381 109 => Some(Self::R5G6B5),
382 110 => Some(Self::R3G3B2),
383 111 => Some(Self::R2G2B2X2),
384 112 => Some(Self::L8),
385 113 => Some(Self::R8),
386 114 => Some(Self::R8G8),
387 115 => Some(Self::A2R10G10B10),
388 116 => Some(Self::A2B10G10R10),
389 117 => Some(Self::P010),
390 118 => Some(Self::R8G8B8),
391 4294967294 => Some(Self::DoNotCare),
392 _ => None,
393 }
394 }
395
396 #[inline]
397 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
398 match prim {
399 0 => Self::Invalid,
400 1 => Self::R8G8B8A8,
401 119 => Self::R8G8B8X8,
402 101 => Self::B8G8R8A8,
403 120 => Self::B8G8R8X8,
404 102 => Self::I420,
405 103 => Self::M420,
406 104 => Self::Nv12,
407 105 => Self::Yuy2,
408 106 => Self::Mjpeg,
409 107 => Self::Yv12,
410 108 => Self::B8G8R8,
411 109 => Self::R5G6B5,
412 110 => Self::R3G3B2,
413 111 => Self::R2G2B2X2,
414 112 => Self::L8,
415 113 => Self::R8,
416 114 => Self::R8G8,
417 115 => Self::A2R10G10B10,
418 116 => Self::A2B10G10R10,
419 117 => Self::P010,
420 118 => Self::R8G8B8,
421 4294967294 => Self::DoNotCare,
422 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
423 }
424 }
425
426 #[inline]
427 pub fn unknown() -> Self {
428 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
429 }
430
431 #[inline]
432 pub const fn into_primitive(self) -> u32 {
433 match self {
434 Self::Invalid => 0,
435 Self::R8G8B8A8 => 1,
436 Self::R8G8B8X8 => 119,
437 Self::B8G8R8A8 => 101,
438 Self::B8G8R8X8 => 120,
439 Self::I420 => 102,
440 Self::M420 => 103,
441 Self::Nv12 => 104,
442 Self::Yuy2 => 105,
443 Self::Mjpeg => 106,
444 Self::Yv12 => 107,
445 Self::B8G8R8 => 108,
446 Self::R5G6B5 => 109,
447 Self::R3G3B2 => 110,
448 Self::R2G2B2X2 => 111,
449 Self::L8 => 112,
450 Self::R8 => 113,
451 Self::R8G8 => 114,
452 Self::A2R10G10B10 => 115,
453 Self::A2B10G10R10 => 116,
454 Self::P010 => 117,
455 Self::R8G8B8 => 118,
456 Self::DoNotCare => 4294967294,
457 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
458 }
459 }
460
461 #[inline]
462 pub fn is_unknown(&self) -> bool {
463 match self {
464 Self::__SourceBreaking { unknown_ordinal: _ } => true,
465 _ => false,
466 }
467 }
468}
469
470#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
505pub enum PixelFormatModifier {
506 DoNotCare,
507 Invalid,
508 Linear,
509 IntelI915XTiled,
510 IntelI915YTiled,
511 IntelI915YfTiled,
512 IntelI915YTiledCcs,
513 IntelI915YfTiledCcs,
514 ArmAfbc16X16,
515 ArmAfbc32X8,
516 ArmLinearTe,
517 ArmAfbc16X16Te,
518 ArmAfbc32X8Te,
519 ArmAfbc16X16YuvTiledHeader,
520 ArmAfbc16X16SplitBlockSparseYuv,
521 ArmAfbc16X16SplitBlockSparseYuvTe,
522 ArmAfbc16X16SplitBlockSparseYuvTiledHeader,
523 ArmAfbc16X16SplitBlockSparseYuvTeTiledHeader,
524 GoogleGoldfishOptimal,
525 PvrFbcdc8X8V14,
527 PvrFbcdc16X4V14,
529 #[doc(hidden)]
530 __SourceBreaking {
531 unknown_ordinal: u64,
532 },
533}
534
535#[macro_export]
537macro_rules! PixelFormatModifierUnknown {
538 () => {
539 _
540 };
541}
542
543impl PixelFormatModifier {
544 #[inline]
545 pub fn from_primitive(prim: u64) -> Option<Self> {
546 match prim {
547 72057594037927934 => Some(Self::DoNotCare),
548 72057594037927935 => Some(Self::Invalid),
549 0 => Some(Self::Linear),
550 72057594037927937 => Some(Self::IntelI915XTiled),
551 72057594037927938 => Some(Self::IntelI915YTiled),
552 72057594037927939 => Some(Self::IntelI915YfTiled),
553 72057594054705154 => Some(Self::IntelI915YTiledCcs),
554 72057594054705155 => Some(Self::IntelI915YfTiledCcs),
555 576460752303423489 => Some(Self::ArmAfbc16X16),
556 576460752303423490 => Some(Self::ArmAfbc32X8),
557 576460752303427584 => Some(Self::ArmLinearTe),
558 576460752303427585 => Some(Self::ArmAfbc16X16Te),
559 576460752303427586 => Some(Self::ArmAfbc32X8Te),
560 576460752303431697 => Some(Self::ArmAfbc16X16YuvTiledHeader),
561 576460752303423601 => Some(Self::ArmAfbc16X16SplitBlockSparseYuv),
562 576460752303427697 => Some(Self::ArmAfbc16X16SplitBlockSparseYuvTe),
563 576460752303431793 => Some(Self::ArmAfbc16X16SplitBlockSparseYuvTiledHeader),
564 576460752303435889 => Some(Self::ArmAfbc16X16SplitBlockSparseYuvTeTiledHeader),
565 7421932185906577409 => Some(Self::GoogleGoldfishOptimal),
566 10520408729537478690 => Some(Self::PvrFbcdc8X8V14),
567 10520408729537478695 => Some(Self::PvrFbcdc16X4V14),
568 _ => None,
569 }
570 }
571
572 #[inline]
573 pub fn from_primitive_allow_unknown(prim: u64) -> Self {
574 match prim {
575 72057594037927934 => Self::DoNotCare,
576 72057594037927935 => Self::Invalid,
577 0 => Self::Linear,
578 72057594037927937 => Self::IntelI915XTiled,
579 72057594037927938 => Self::IntelI915YTiled,
580 72057594037927939 => Self::IntelI915YfTiled,
581 72057594054705154 => Self::IntelI915YTiledCcs,
582 72057594054705155 => Self::IntelI915YfTiledCcs,
583 576460752303423489 => Self::ArmAfbc16X16,
584 576460752303423490 => Self::ArmAfbc32X8,
585 576460752303427584 => Self::ArmLinearTe,
586 576460752303427585 => Self::ArmAfbc16X16Te,
587 576460752303427586 => Self::ArmAfbc32X8Te,
588 576460752303431697 => Self::ArmAfbc16X16YuvTiledHeader,
589 576460752303423601 => Self::ArmAfbc16X16SplitBlockSparseYuv,
590 576460752303427697 => Self::ArmAfbc16X16SplitBlockSparseYuvTe,
591 576460752303431793 => Self::ArmAfbc16X16SplitBlockSparseYuvTiledHeader,
592 576460752303435889 => Self::ArmAfbc16X16SplitBlockSparseYuvTeTiledHeader,
593 7421932185906577409 => Self::GoogleGoldfishOptimal,
594 10520408729537478690 => Self::PvrFbcdc8X8V14,
595 10520408729537478695 => Self::PvrFbcdc16X4V14,
596 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
597 }
598 }
599
600 #[inline]
601 pub fn unknown() -> Self {
602 Self::__SourceBreaking { unknown_ordinal: 0xffffffffffffffff }
603 }
604
605 #[inline]
606 pub const fn into_primitive(self) -> u64 {
607 match self {
608 Self::DoNotCare => 72057594037927934,
609 Self::Invalid => 72057594037927935,
610 Self::Linear => 0,
611 Self::IntelI915XTiled => 72057594037927937,
612 Self::IntelI915YTiled => 72057594037927938,
613 Self::IntelI915YfTiled => 72057594037927939,
614 Self::IntelI915YTiledCcs => 72057594054705154,
615 Self::IntelI915YfTiledCcs => 72057594054705155,
616 Self::ArmAfbc16X16 => 576460752303423489,
617 Self::ArmAfbc32X8 => 576460752303423490,
618 Self::ArmLinearTe => 576460752303427584,
619 Self::ArmAfbc16X16Te => 576460752303427585,
620 Self::ArmAfbc32X8Te => 576460752303427586,
621 Self::ArmAfbc16X16YuvTiledHeader => 576460752303431697,
622 Self::ArmAfbc16X16SplitBlockSparseYuv => 576460752303423601,
623 Self::ArmAfbc16X16SplitBlockSparseYuvTe => 576460752303427697,
624 Self::ArmAfbc16X16SplitBlockSparseYuvTiledHeader => 576460752303431793,
625 Self::ArmAfbc16X16SplitBlockSparseYuvTeTiledHeader => 576460752303435889,
626 Self::GoogleGoldfishOptimal => 7421932185906577409,
627 Self::PvrFbcdc8X8V14 => 10520408729537478690,
628 Self::PvrFbcdc16X4V14 => 10520408729537478695,
629 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
630 }
631 }
632
633 #[inline]
634 pub fn is_unknown(&self) -> bool {
635 match self {
636 Self::__SourceBreaking { unknown_ordinal: _ } => true,
637 _ => false,
638 }
639 }
640}
641
642#[derive(Clone, Debug, Default, PartialEq)]
644pub struct ImageFormat {
645 pub pixel_format: Option<PixelFormat>,
647 pub pixel_format_modifier: Option<PixelFormatModifier>,
649 pub color_space: Option<ColorSpace>,
651 pub size: Option<fidl_fuchsia_math_common::SizeU>,
663 pub bytes_per_row: Option<u32>,
705 pub display_rect: Option<fidl_fuchsia_math_common::RectU>,
741 pub valid_size: Option<fidl_fuchsia_math_common::SizeU>,
762 pub pixel_aspect_ratio: Option<fidl_fuchsia_math_common::SizeU>,
774 #[doc(hidden)]
775 pub __source_breaking: fidl::marker::SourceBreaking,
776}
777
778impl fidl::Persistable for ImageFormat {}
779
780mod internal {
781 use super::*;
782 unsafe impl fidl::encoding::TypeMarker for ColorSpace {
783 type Owned = Self;
784
785 #[inline(always)]
786 fn inline_align(_context: fidl::encoding::Context) -> usize {
787 std::mem::align_of::<u32>()
788 }
789
790 #[inline(always)]
791 fn inline_size(_context: fidl::encoding::Context) -> usize {
792 std::mem::size_of::<u32>()
793 }
794
795 #[inline(always)]
796 fn encode_is_copy() -> bool {
797 false
798 }
799
800 #[inline(always)]
801 fn decode_is_copy() -> bool {
802 false
803 }
804 }
805
806 impl fidl::encoding::ValueTypeMarker for ColorSpace {
807 type Borrowed<'a> = Self;
808 #[inline(always)]
809 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
810 *value
811 }
812 }
813
814 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ColorSpace {
815 #[inline]
816 unsafe fn encode(
817 self,
818 encoder: &mut fidl::encoding::Encoder<'_, D>,
819 offset: usize,
820 _depth: fidl::encoding::Depth,
821 ) -> fidl::Result<()> {
822 encoder.debug_check_bounds::<Self>(offset);
823 encoder.write_num(self.into_primitive(), offset);
824 Ok(())
825 }
826 }
827
828 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ColorSpace {
829 #[inline(always)]
830 fn new_empty() -> Self {
831 Self::unknown()
832 }
833
834 #[inline]
835 unsafe fn decode(
836 &mut self,
837 decoder: &mut fidl::encoding::Decoder<'_, D>,
838 offset: usize,
839 _depth: fidl::encoding::Depth,
840 ) -> fidl::Result<()> {
841 decoder.debug_check_bounds::<Self>(offset);
842 let prim = decoder.read_num::<u32>(offset);
843
844 *self = Self::from_primitive_allow_unknown(prim);
845 Ok(())
846 }
847 }
848 unsafe impl fidl::encoding::TypeMarker for PixelFormat {
849 type Owned = Self;
850
851 #[inline(always)]
852 fn inline_align(_context: fidl::encoding::Context) -> usize {
853 std::mem::align_of::<u32>()
854 }
855
856 #[inline(always)]
857 fn inline_size(_context: fidl::encoding::Context) -> usize {
858 std::mem::size_of::<u32>()
859 }
860
861 #[inline(always)]
862 fn encode_is_copy() -> bool {
863 false
864 }
865
866 #[inline(always)]
867 fn decode_is_copy() -> bool {
868 false
869 }
870 }
871
872 impl fidl::encoding::ValueTypeMarker for PixelFormat {
873 type Borrowed<'a> = Self;
874 #[inline(always)]
875 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
876 *value
877 }
878 }
879
880 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for PixelFormat {
881 #[inline]
882 unsafe fn encode(
883 self,
884 encoder: &mut fidl::encoding::Encoder<'_, D>,
885 offset: usize,
886 _depth: fidl::encoding::Depth,
887 ) -> fidl::Result<()> {
888 encoder.debug_check_bounds::<Self>(offset);
889 encoder.write_num(self.into_primitive(), offset);
890 Ok(())
891 }
892 }
893
894 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PixelFormat {
895 #[inline(always)]
896 fn new_empty() -> Self {
897 Self::unknown()
898 }
899
900 #[inline]
901 unsafe fn decode(
902 &mut self,
903 decoder: &mut fidl::encoding::Decoder<'_, D>,
904 offset: usize,
905 _depth: fidl::encoding::Depth,
906 ) -> fidl::Result<()> {
907 decoder.debug_check_bounds::<Self>(offset);
908 let prim = decoder.read_num::<u32>(offset);
909
910 *self = Self::from_primitive_allow_unknown(prim);
911 Ok(())
912 }
913 }
914 unsafe impl fidl::encoding::TypeMarker for PixelFormatModifier {
915 type Owned = Self;
916
917 #[inline(always)]
918 fn inline_align(_context: fidl::encoding::Context) -> usize {
919 std::mem::align_of::<u64>()
920 }
921
922 #[inline(always)]
923 fn inline_size(_context: fidl::encoding::Context) -> usize {
924 std::mem::size_of::<u64>()
925 }
926
927 #[inline(always)]
928 fn encode_is_copy() -> bool {
929 false
930 }
931
932 #[inline(always)]
933 fn decode_is_copy() -> bool {
934 false
935 }
936 }
937
938 impl fidl::encoding::ValueTypeMarker for PixelFormatModifier {
939 type Borrowed<'a> = Self;
940 #[inline(always)]
941 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
942 *value
943 }
944 }
945
946 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
947 for PixelFormatModifier
948 {
949 #[inline]
950 unsafe fn encode(
951 self,
952 encoder: &mut fidl::encoding::Encoder<'_, D>,
953 offset: usize,
954 _depth: fidl::encoding::Depth,
955 ) -> fidl::Result<()> {
956 encoder.debug_check_bounds::<Self>(offset);
957 encoder.write_num(self.into_primitive(), offset);
958 Ok(())
959 }
960 }
961
962 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PixelFormatModifier {
963 #[inline(always)]
964 fn new_empty() -> Self {
965 Self::unknown()
966 }
967
968 #[inline]
969 unsafe fn decode(
970 &mut self,
971 decoder: &mut fidl::encoding::Decoder<'_, D>,
972 offset: usize,
973 _depth: fidl::encoding::Depth,
974 ) -> fidl::Result<()> {
975 decoder.debug_check_bounds::<Self>(offset);
976 let prim = decoder.read_num::<u64>(offset);
977
978 *self = Self::from_primitive_allow_unknown(prim);
979 Ok(())
980 }
981 }
982
983 impl ImageFormat {
984 #[inline(always)]
985 fn max_ordinal_present(&self) -> u64 {
986 if let Some(_) = self.pixel_aspect_ratio {
987 return 8;
988 }
989 if let Some(_) = self.valid_size {
990 return 7;
991 }
992 if let Some(_) = self.display_rect {
993 return 6;
994 }
995 if let Some(_) = self.bytes_per_row {
996 return 5;
997 }
998 if let Some(_) = self.size {
999 return 4;
1000 }
1001 if let Some(_) = self.color_space {
1002 return 3;
1003 }
1004 if let Some(_) = self.pixel_format_modifier {
1005 return 2;
1006 }
1007 if let Some(_) = self.pixel_format {
1008 return 1;
1009 }
1010 0
1011 }
1012 }
1013
1014 impl fidl::encoding::ValueTypeMarker for ImageFormat {
1015 type Borrowed<'a> = &'a Self;
1016 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1017 value
1018 }
1019 }
1020
1021 unsafe impl fidl::encoding::TypeMarker for ImageFormat {
1022 type Owned = Self;
1023
1024 #[inline(always)]
1025 fn inline_align(_context: fidl::encoding::Context) -> usize {
1026 8
1027 }
1028
1029 #[inline(always)]
1030 fn inline_size(_context: fidl::encoding::Context) -> usize {
1031 16
1032 }
1033 }
1034
1035 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ImageFormat, D>
1036 for &ImageFormat
1037 {
1038 unsafe fn encode(
1039 self,
1040 encoder: &mut fidl::encoding::Encoder<'_, D>,
1041 offset: usize,
1042 mut depth: fidl::encoding::Depth,
1043 ) -> fidl::Result<()> {
1044 encoder.debug_check_bounds::<ImageFormat>(offset);
1045 let max_ordinal: u64 = self.max_ordinal_present();
1047 encoder.write_num(max_ordinal, offset);
1048 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1049 if max_ordinal == 0 {
1051 return Ok(());
1052 }
1053 depth.increment()?;
1054 let envelope_size = 8;
1055 let bytes_len = max_ordinal as usize * envelope_size;
1056 #[allow(unused_variables)]
1057 let offset = encoder.out_of_line_offset(bytes_len);
1058 let mut _prev_end_offset: usize = 0;
1059 if 1 > max_ordinal {
1060 return Ok(());
1061 }
1062
1063 let cur_offset: usize = (1 - 1) * envelope_size;
1066
1067 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1069
1070 fidl::encoding::encode_in_envelope_optional::<PixelFormat, D>(
1075 self.pixel_format
1076 .as_ref()
1077 .map(<PixelFormat as fidl::encoding::ValueTypeMarker>::borrow),
1078 encoder,
1079 offset + cur_offset,
1080 depth,
1081 )?;
1082
1083 _prev_end_offset = cur_offset + envelope_size;
1084 if 2 > max_ordinal {
1085 return Ok(());
1086 }
1087
1088 let cur_offset: usize = (2 - 1) * envelope_size;
1091
1092 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1094
1095 fidl::encoding::encode_in_envelope_optional::<PixelFormatModifier, D>(
1100 self.pixel_format_modifier
1101 .as_ref()
1102 .map(<PixelFormatModifier as fidl::encoding::ValueTypeMarker>::borrow),
1103 encoder,
1104 offset + cur_offset,
1105 depth,
1106 )?;
1107
1108 _prev_end_offset = cur_offset + envelope_size;
1109 if 3 > max_ordinal {
1110 return Ok(());
1111 }
1112
1113 let cur_offset: usize = (3 - 1) * envelope_size;
1116
1117 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1119
1120 fidl::encoding::encode_in_envelope_optional::<ColorSpace, D>(
1125 self.color_space
1126 .as_ref()
1127 .map(<ColorSpace as fidl::encoding::ValueTypeMarker>::borrow),
1128 encoder,
1129 offset + cur_offset,
1130 depth,
1131 )?;
1132
1133 _prev_end_offset = cur_offset + envelope_size;
1134 if 4 > max_ordinal {
1135 return Ok(());
1136 }
1137
1138 let cur_offset: usize = (4 - 1) * envelope_size;
1141
1142 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1144
1145 fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_math_common::SizeU, D>(
1150 self.size.as_ref().map(
1151 <fidl_fuchsia_math_common::SizeU as fidl::encoding::ValueTypeMarker>::borrow,
1152 ),
1153 encoder,
1154 offset + cur_offset,
1155 depth,
1156 )?;
1157
1158 _prev_end_offset = cur_offset + envelope_size;
1159 if 5 > max_ordinal {
1160 return Ok(());
1161 }
1162
1163 let cur_offset: usize = (5 - 1) * envelope_size;
1166
1167 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1169
1170 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1175 self.bytes_per_row.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1176 encoder,
1177 offset + cur_offset,
1178 depth,
1179 )?;
1180
1181 _prev_end_offset = cur_offset + envelope_size;
1182 if 6 > max_ordinal {
1183 return Ok(());
1184 }
1185
1186 let cur_offset: usize = (6 - 1) * envelope_size;
1189
1190 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1192
1193 fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_math_common::RectU, D>(
1198 self.display_rect.as_ref().map(
1199 <fidl_fuchsia_math_common::RectU as fidl::encoding::ValueTypeMarker>::borrow,
1200 ),
1201 encoder,
1202 offset + cur_offset,
1203 depth,
1204 )?;
1205
1206 _prev_end_offset = cur_offset + envelope_size;
1207 if 7 > max_ordinal {
1208 return Ok(());
1209 }
1210
1211 let cur_offset: usize = (7 - 1) * envelope_size;
1214
1215 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1217
1218 fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_math_common::SizeU, D>(
1223 self.valid_size.as_ref().map(
1224 <fidl_fuchsia_math_common::SizeU as fidl::encoding::ValueTypeMarker>::borrow,
1225 ),
1226 encoder,
1227 offset + cur_offset,
1228 depth,
1229 )?;
1230
1231 _prev_end_offset = cur_offset + envelope_size;
1232 if 8 > max_ordinal {
1233 return Ok(());
1234 }
1235
1236 let cur_offset: usize = (8 - 1) * envelope_size;
1239
1240 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1242
1243 fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_math_common::SizeU, D>(
1248 self.pixel_aspect_ratio.as_ref().map(
1249 <fidl_fuchsia_math_common::SizeU as fidl::encoding::ValueTypeMarker>::borrow,
1250 ),
1251 encoder,
1252 offset + cur_offset,
1253 depth,
1254 )?;
1255
1256 _prev_end_offset = cur_offset + envelope_size;
1257
1258 Ok(())
1259 }
1260 }
1261
1262 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ImageFormat {
1263 #[inline(always)]
1264 fn new_empty() -> Self {
1265 Self::default()
1266 }
1267
1268 unsafe fn decode(
1269 &mut self,
1270 decoder: &mut fidl::encoding::Decoder<'_, D>,
1271 offset: usize,
1272 mut depth: fidl::encoding::Depth,
1273 ) -> fidl::Result<()> {
1274 decoder.debug_check_bounds::<Self>(offset);
1275 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1276 None => return Err(fidl::Error::NotNullable),
1277 Some(len) => len,
1278 };
1279 if len == 0 {
1281 return Ok(());
1282 };
1283 depth.increment()?;
1284 let envelope_size = 8;
1285 let bytes_len = len * envelope_size;
1286 let offset = decoder.out_of_line_offset(bytes_len)?;
1287 let mut _next_ordinal_to_read = 0;
1289 let mut next_offset = offset;
1290 let end_offset = offset + bytes_len;
1291 _next_ordinal_to_read += 1;
1292 if next_offset >= end_offset {
1293 return Ok(());
1294 }
1295
1296 while _next_ordinal_to_read < 1 {
1298 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1299 _next_ordinal_to_read += 1;
1300 next_offset += envelope_size;
1301 }
1302
1303 let next_out_of_line = decoder.next_out_of_line();
1304 let handles_before = decoder.remaining_handles();
1305 if let Some((inlined, num_bytes, num_handles)) =
1306 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1307 {
1308 let member_inline_size =
1309 <PixelFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1310 if inlined != (member_inline_size <= 4) {
1311 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1312 }
1313 let inner_offset;
1314 let mut inner_depth = depth.clone();
1315 if inlined {
1316 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1317 inner_offset = next_offset;
1318 } else {
1319 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1320 inner_depth.increment()?;
1321 }
1322 let val_ref =
1323 self.pixel_format.get_or_insert_with(|| fidl::new_empty!(PixelFormat, D));
1324 fidl::decode!(PixelFormat, D, val_ref, decoder, inner_offset, inner_depth)?;
1325 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1326 {
1327 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1328 }
1329 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1330 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1331 }
1332 }
1333
1334 next_offset += envelope_size;
1335 _next_ordinal_to_read += 1;
1336 if next_offset >= end_offset {
1337 return Ok(());
1338 }
1339
1340 while _next_ordinal_to_read < 2 {
1342 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1343 _next_ordinal_to_read += 1;
1344 next_offset += envelope_size;
1345 }
1346
1347 let next_out_of_line = decoder.next_out_of_line();
1348 let handles_before = decoder.remaining_handles();
1349 if let Some((inlined, num_bytes, num_handles)) =
1350 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1351 {
1352 let member_inline_size =
1353 <PixelFormatModifier as fidl::encoding::TypeMarker>::inline_size(
1354 decoder.context,
1355 );
1356 if inlined != (member_inline_size <= 4) {
1357 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1358 }
1359 let inner_offset;
1360 let mut inner_depth = depth.clone();
1361 if inlined {
1362 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1363 inner_offset = next_offset;
1364 } else {
1365 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1366 inner_depth.increment()?;
1367 }
1368 let val_ref = self
1369 .pixel_format_modifier
1370 .get_or_insert_with(|| fidl::new_empty!(PixelFormatModifier, D));
1371 fidl::decode!(PixelFormatModifier, D, val_ref, decoder, inner_offset, inner_depth)?;
1372 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1373 {
1374 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1375 }
1376 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1377 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1378 }
1379 }
1380
1381 next_offset += envelope_size;
1382 _next_ordinal_to_read += 1;
1383 if next_offset >= end_offset {
1384 return Ok(());
1385 }
1386
1387 while _next_ordinal_to_read < 3 {
1389 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1390 _next_ordinal_to_read += 1;
1391 next_offset += envelope_size;
1392 }
1393
1394 let next_out_of_line = decoder.next_out_of_line();
1395 let handles_before = decoder.remaining_handles();
1396 if let Some((inlined, num_bytes, num_handles)) =
1397 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1398 {
1399 let member_inline_size =
1400 <ColorSpace as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1401 if inlined != (member_inline_size <= 4) {
1402 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1403 }
1404 let inner_offset;
1405 let mut inner_depth = depth.clone();
1406 if inlined {
1407 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1408 inner_offset = next_offset;
1409 } else {
1410 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1411 inner_depth.increment()?;
1412 }
1413 let val_ref =
1414 self.color_space.get_or_insert_with(|| fidl::new_empty!(ColorSpace, D));
1415 fidl::decode!(ColorSpace, D, val_ref, decoder, inner_offset, inner_depth)?;
1416 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1417 {
1418 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1419 }
1420 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1421 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1422 }
1423 }
1424
1425 next_offset += envelope_size;
1426 _next_ordinal_to_read += 1;
1427 if next_offset >= end_offset {
1428 return Ok(());
1429 }
1430
1431 while _next_ordinal_to_read < 4 {
1433 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1434 _next_ordinal_to_read += 1;
1435 next_offset += envelope_size;
1436 }
1437
1438 let next_out_of_line = decoder.next_out_of_line();
1439 let handles_before = decoder.remaining_handles();
1440 if let Some((inlined, num_bytes, num_handles)) =
1441 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1442 {
1443 let member_inline_size =
1444 <fidl_fuchsia_math_common::SizeU as fidl::encoding::TypeMarker>::inline_size(
1445 decoder.context,
1446 );
1447 if inlined != (member_inline_size <= 4) {
1448 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1449 }
1450 let inner_offset;
1451 let mut inner_depth = depth.clone();
1452 if inlined {
1453 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1454 inner_offset = next_offset;
1455 } else {
1456 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1457 inner_depth.increment()?;
1458 }
1459 let val_ref = self
1460 .size
1461 .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_math_common::SizeU, D));
1462 fidl::decode!(
1463 fidl_fuchsia_math_common::SizeU,
1464 D,
1465 val_ref,
1466 decoder,
1467 inner_offset,
1468 inner_depth
1469 )?;
1470 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1471 {
1472 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1473 }
1474 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1475 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1476 }
1477 }
1478
1479 next_offset += envelope_size;
1480 _next_ordinal_to_read += 1;
1481 if next_offset >= end_offset {
1482 return Ok(());
1483 }
1484
1485 while _next_ordinal_to_read < 5 {
1487 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1488 _next_ordinal_to_read += 1;
1489 next_offset += envelope_size;
1490 }
1491
1492 let next_out_of_line = decoder.next_out_of_line();
1493 let handles_before = decoder.remaining_handles();
1494 if let Some((inlined, num_bytes, num_handles)) =
1495 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1496 {
1497 let member_inline_size =
1498 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1499 if inlined != (member_inline_size <= 4) {
1500 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1501 }
1502 let inner_offset;
1503 let mut inner_depth = depth.clone();
1504 if inlined {
1505 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1506 inner_offset = next_offset;
1507 } else {
1508 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1509 inner_depth.increment()?;
1510 }
1511 let val_ref = self.bytes_per_row.get_or_insert_with(|| fidl::new_empty!(u32, D));
1512 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1513 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1514 {
1515 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1516 }
1517 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1518 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1519 }
1520 }
1521
1522 next_offset += envelope_size;
1523 _next_ordinal_to_read += 1;
1524 if next_offset >= end_offset {
1525 return Ok(());
1526 }
1527
1528 while _next_ordinal_to_read < 6 {
1530 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1531 _next_ordinal_to_read += 1;
1532 next_offset += envelope_size;
1533 }
1534
1535 let next_out_of_line = decoder.next_out_of_line();
1536 let handles_before = decoder.remaining_handles();
1537 if let Some((inlined, num_bytes, num_handles)) =
1538 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1539 {
1540 let member_inline_size =
1541 <fidl_fuchsia_math_common::RectU as fidl::encoding::TypeMarker>::inline_size(
1542 decoder.context,
1543 );
1544 if inlined != (member_inline_size <= 4) {
1545 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1546 }
1547 let inner_offset;
1548 let mut inner_depth = depth.clone();
1549 if inlined {
1550 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1551 inner_offset = next_offset;
1552 } else {
1553 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1554 inner_depth.increment()?;
1555 }
1556 let val_ref = self
1557 .display_rect
1558 .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_math_common::RectU, D));
1559 fidl::decode!(
1560 fidl_fuchsia_math_common::RectU,
1561 D,
1562 val_ref,
1563 decoder,
1564 inner_offset,
1565 inner_depth
1566 )?;
1567 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1568 {
1569 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1570 }
1571 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1572 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1573 }
1574 }
1575
1576 next_offset += envelope_size;
1577 _next_ordinal_to_read += 1;
1578 if next_offset >= end_offset {
1579 return Ok(());
1580 }
1581
1582 while _next_ordinal_to_read < 7 {
1584 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1585 _next_ordinal_to_read += 1;
1586 next_offset += envelope_size;
1587 }
1588
1589 let next_out_of_line = decoder.next_out_of_line();
1590 let handles_before = decoder.remaining_handles();
1591 if let Some((inlined, num_bytes, num_handles)) =
1592 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1593 {
1594 let member_inline_size =
1595 <fidl_fuchsia_math_common::SizeU as fidl::encoding::TypeMarker>::inline_size(
1596 decoder.context,
1597 );
1598 if inlined != (member_inline_size <= 4) {
1599 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1600 }
1601 let inner_offset;
1602 let mut inner_depth = depth.clone();
1603 if inlined {
1604 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1605 inner_offset = next_offset;
1606 } else {
1607 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1608 inner_depth.increment()?;
1609 }
1610 let val_ref = self
1611 .valid_size
1612 .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_math_common::SizeU, D));
1613 fidl::decode!(
1614 fidl_fuchsia_math_common::SizeU,
1615 D,
1616 val_ref,
1617 decoder,
1618 inner_offset,
1619 inner_depth
1620 )?;
1621 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1622 {
1623 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1624 }
1625 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1626 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1627 }
1628 }
1629
1630 next_offset += envelope_size;
1631 _next_ordinal_to_read += 1;
1632 if next_offset >= end_offset {
1633 return Ok(());
1634 }
1635
1636 while _next_ordinal_to_read < 8 {
1638 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1639 _next_ordinal_to_read += 1;
1640 next_offset += envelope_size;
1641 }
1642
1643 let next_out_of_line = decoder.next_out_of_line();
1644 let handles_before = decoder.remaining_handles();
1645 if let Some((inlined, num_bytes, num_handles)) =
1646 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1647 {
1648 let member_inline_size =
1649 <fidl_fuchsia_math_common::SizeU as fidl::encoding::TypeMarker>::inline_size(
1650 decoder.context,
1651 );
1652 if inlined != (member_inline_size <= 4) {
1653 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1654 }
1655 let inner_offset;
1656 let mut inner_depth = depth.clone();
1657 if inlined {
1658 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1659 inner_offset = next_offset;
1660 } else {
1661 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1662 inner_depth.increment()?;
1663 }
1664 let val_ref = self
1665 .pixel_aspect_ratio
1666 .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_math_common::SizeU, D));
1667 fidl::decode!(
1668 fidl_fuchsia_math_common::SizeU,
1669 D,
1670 val_ref,
1671 decoder,
1672 inner_offset,
1673 inner_depth
1674 )?;
1675 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1676 {
1677 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1678 }
1679 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1680 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1681 }
1682 }
1683
1684 next_offset += envelope_size;
1685
1686 while next_offset < end_offset {
1688 _next_ordinal_to_read += 1;
1689 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1690 next_offset += envelope_size;
1691 }
1692
1693 Ok(())
1694 }
1695 }
1696}