1use crate::{ext, AtomExt, Buf, BufMut, Encode, Error, Ext, FourCC, Result};
2
3#[derive(Debug, Clone, PartialEq, Eq, Default)]
10#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
11pub enum SencBoxVersion {
12 #[default]
13 V0,
14 V1,
15 V2,
16}
17
18ext! {
19 name: Senc,
20 versions: [0, 1, 2],
21 flags: {senc_use_subsamples = 1,}
22}
23
24#[derive(Debug, Clone, PartialEq, Eq, Default)]
25#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
26pub struct Senc {
27 pub version: SencBoxVersion,
28 pub use_subsamples: bool,
29 pub data: Vec<u8>,
30}
31
32impl AtomExt for Senc {
33 const KIND_EXT: FourCC = FourCC::new(b"senc");
34
35 type Ext = SencExt;
36
37 fn decode_body_ext<B: Buf>(buf: &mut B, ext: SencExt) -> Result<Self> {
38 let bytes_remaining = buf.remaining();
39 let bytes = buf.slice(bytes_remaining).to_vec();
40 buf.advance(bytes_remaining);
41 Ok(Senc {
42 version: match ext.version {
43 SencVersion::V0 => SencBoxVersion::V0,
44 SencVersion::V1 => SencBoxVersion::V1,
45 SencVersion::V2 => SencBoxVersion::V2,
46 },
47 use_subsamples: ext.senc_use_subsamples,
48 data: bytes,
49 })
50 }
51
52 fn encode_body_ext<B: BufMut>(&self, buf: &mut B) -> Result<SencExt> {
53 self.data.encode(buf)?;
54 Ok(SencExt {
55 version: match self.version {
56 SencBoxVersion::V0 => SencVersion::V0,
57 SencBoxVersion::V1 => SencVersion::V1,
58 SencBoxVersion::V2 => SencVersion::V2,
59 },
60 senc_use_subsamples: self.use_subsamples,
61 })
62 }
63}
64
65#[cfg(test)]
66mod tests {
67
68 use super::*;
69 use crate::Decode;
70
71 const ENCODED_SENC: &[u8] = &[
73 0x00, 0x00, 0x05, 0x80, 0x73, 0x65, 0x6e, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74 0x57, 0x0a, 0x61, 0x06, 0x76, 0xcb, 0x88, 0xf3, 0x02, 0xd1, 0x0a, 0xc8, 0xbc, 0x66, 0xe0,
75 0x39, 0xed, 0xf9, 0xe3, 0x83, 0xca, 0x83, 0xd4, 0xa5, 0xe1, 0xe2, 0x74, 0xc5, 0x38, 0x9e,
76 0xd9, 0xa1, 0x0a, 0xf4, 0x79, 0xbc, 0xb4, 0x97, 0xe5, 0xa6, 0xeb, 0x06, 0xf8, 0x85, 0xa3,
77 0xe8, 0xf5, 0xa6, 0x2c, 0xe7, 0xd8, 0xdd, 0x62, 0x75, 0x6a, 0x71, 0x89, 0xb8, 0x82, 0xe6,
78 0xd6, 0x23, 0x3d, 0x40, 0x95, 0x1a, 0x50, 0x2b, 0x5f, 0xa4, 0xb1, 0x15, 0x6d, 0xa2, 0x48,
79 0xbe, 0x3f, 0x8b, 0xfb, 0x71, 0x8a, 0x85, 0xe6, 0xd6, 0x27, 0x02, 0xca, 0xee, 0xd0, 0x23,
80 0x6f, 0x72, 0x30, 0x62, 0x42, 0xdd, 0x9c, 0xb0, 0x03, 0xb0, 0x0f, 0xf6, 0x9c, 0x99, 0x6b,
81 0x56, 0x53, 0xf4, 0x02, 0xad, 0x89, 0x50, 0x61, 0xd0, 0xac, 0x12, 0x52, 0xa6, 0xc3, 0x88,
82 0xd9, 0xc2, 0x3a, 0x5b, 0x4b, 0x2d, 0xa5, 0x32, 0xa0, 0x31, 0x20, 0x03, 0x00, 0x9c, 0x6b,
83 0xf3, 0xa4, 0x6e, 0xee, 0x81, 0x18, 0xfe, 0x78, 0xce, 0xf0, 0x9e, 0x96, 0xde, 0x07, 0x90,
84 0xa6, 0x6c, 0xac, 0x84, 0x34, 0x26, 0x62, 0x0d, 0xa2, 0xc1, 0xdd, 0xdd, 0xf0, 0x01, 0x72,
85 0x68, 0x6b, 0x29, 0x4f, 0xc3, 0xaa, 0xc0, 0xaa, 0x08, 0xf5, 0x3b, 0x83, 0x04, 0xa5, 0x4d,
86 0x1d, 0x15, 0xa2, 0x64, 0x5e, 0xfa, 0xe0, 0xbc, 0x17, 0x31, 0x31, 0x8e, 0xa0, 0x9f, 0xc2,
87 0xcb, 0x15, 0x66, 0x30, 0xea, 0xa1, 0x31, 0x2d, 0xac, 0xbe, 0x5f, 0x3f, 0xcf, 0xa4, 0x8c,
88 0x7b, 0x21, 0x1a, 0xe4, 0xb4, 0x11, 0xf7, 0xeb, 0x25, 0xdf, 0xf8, 0x85, 0xcd, 0xd1, 0xe6,
89 0x3c, 0xaa, 0x5d, 0xa1, 0x72, 0x39, 0x93, 0x26, 0xb0, 0xfd, 0x63, 0x15, 0xca, 0xea, 0xbd,
90 0xd3, 0x8a, 0x02, 0x99, 0x23, 0x5e, 0x3c, 0xe6, 0x24, 0x52, 0x2a, 0x81, 0xe4, 0xc8, 0x65,
91 0x49, 0x1d, 0x50, 0x23, 0x66, 0x3e, 0x7e, 0x94, 0x9f, 0x53, 0xa5, 0x66, 0xde, 0x6a, 0x2f,
92 0x18, 0x48, 0x45, 0x0d, 0x7d, 0x87, 0xb8, 0xa6, 0x00, 0x5d, 0x66, 0xd5, 0x7f, 0x8e, 0x9c,
93 0x12, 0x87, 0x3a, 0x72, 0x98, 0xb8, 0x9e, 0x05, 0x2e, 0x10, 0x6c, 0xf7, 0x13, 0x0e, 0xf5,
94 0xcc, 0x32, 0x9f, 0x8e, 0x5e, 0xb3, 0xa9, 0xb5, 0x6b, 0xa0, 0xef, 0xd8, 0xb5, 0x22, 0x94,
95 0xb8, 0x48, 0x8c, 0x7f, 0xdb, 0x9d, 0xb1, 0x57, 0x05, 0x7a, 0x6e, 0x4b, 0x46, 0x89, 0x01,
96 0x75, 0xae, 0xc8, 0x9c, 0xaf, 0x29, 0x7e, 0xfb, 0x3c, 0xc7, 0xa0, 0x76, 0xe8, 0x9f, 0xcd,
97 0xe0, 0xce, 0xb6, 0x5b, 0x57, 0xb9, 0xa9, 0x4a, 0xa4, 0x21, 0xd6, 0x3e, 0x99, 0x5a, 0xf1,
98 0x74, 0xa5, 0xf7, 0xa5, 0xb2, 0xb8, 0x79, 0x81, 0x06, 0x79, 0xdb, 0x30, 0x71, 0x06, 0x9d,
99 0xfc, 0xdb, 0x09, 0x40, 0x29, 0x8e, 0x89, 0x3d, 0xe6, 0x88, 0x01, 0x43, 0x8e, 0xf8, 0x4e,
100 0xa0, 0x1b, 0xd8, 0xd8, 0x7e, 0xc4, 0xce, 0x1f, 0x1e, 0x81, 0x4a, 0xb2, 0x7f, 0x43, 0x7b,
101 0xf5, 0x19, 0x23, 0xe9, 0x46, 0xfd, 0x7a, 0x14, 0x25, 0xb9, 0xaa, 0x14, 0x78, 0x16, 0x38,
102 0x55, 0xdb, 0x12, 0xea, 0xc3, 0xc3, 0xb0, 0x21, 0x37, 0x86, 0x9a, 0xe9, 0xd7, 0xd6, 0x53,
103 0x3c, 0x4e, 0xf1, 0xee, 0xb8, 0xbd, 0xda, 0xc5, 0xaf, 0x80, 0x77, 0x8d, 0xf1, 0x7d, 0x7f,
104 0x3f, 0xdc, 0x07, 0xdc, 0xc9, 0x29, 0xc1, 0x9d, 0x38, 0x23, 0x8d, 0x85, 0x3a, 0x53, 0xef,
105 0xd0, 0xd5, 0xb8, 0x2e, 0xe6, 0x28, 0xae, 0x2a, 0x26, 0x8e, 0x9d, 0x64, 0x86, 0xb3, 0x0f,
106 0xe9, 0xb0, 0xc1, 0x99, 0x56, 0x9b, 0x19, 0xe1, 0x9e, 0x26, 0xfa, 0x51, 0x60, 0xda, 0x04,
107 0x2f, 0x4f, 0x7b, 0x68, 0xbf, 0xe5, 0x66, 0x11, 0x3b, 0xbf, 0xfd, 0x2d, 0x61, 0x92, 0x7b,
108 0x19, 0x92, 0x94, 0x06, 0xde, 0xa3, 0xea, 0xc3, 0x25, 0x27, 0x17, 0x9b, 0x3b, 0xcc, 0xfe,
109 0x7e, 0x28, 0x39, 0x0e, 0x0d, 0x2e, 0x64, 0xc0, 0x32, 0xa2, 0x6d, 0x3a, 0x69, 0x46, 0xf8,
110 0x9a, 0x6f, 0x87, 0x9b, 0xbf, 0x7a, 0xd7, 0x02, 0x15, 0xa8, 0x3b, 0x17, 0x22, 0x87, 0xdc,
111 0xf6, 0xb8, 0x9b, 0x5e, 0xd3, 0xdd, 0xf3, 0x61, 0x7a, 0x7b, 0x16, 0x0c, 0x5f, 0x6f, 0xf6,
112 0x01, 0xe6, 0x90, 0xbe, 0x2d, 0x94, 0x55, 0xb0, 0x7d, 0x08, 0xf8, 0x67, 0x1f, 0x22, 0x57,
113 0x75, 0xeb, 0xa3, 0x98, 0x9d, 0x3a, 0x0f, 0xce, 0x3f, 0x64, 0x83, 0x2d, 0x9c, 0x27, 0xbc,
114 0x3e, 0xe4, 0xf4, 0x25, 0xd7, 0xc6, 0xba, 0xaa, 0xe9, 0xf0, 0xb1, 0xeb, 0xcc, 0x8f, 0xaf,
115 0x10, 0x26, 0xa3, 0x2c, 0x6c, 0xfe, 0x2d, 0xd3, 0x4b, 0xfb, 0x0d, 0x4f, 0x01, 0x4a, 0x34,
116 0x94, 0x7a, 0x5e, 0xca, 0xcf, 0x31, 0x8e, 0x4c, 0x18, 0x64, 0xeb, 0x8c, 0x05, 0x21, 0x5f,
117 0xdb, 0xe4, 0x95, 0xe5, 0x93, 0xb6, 0x32, 0xd7, 0x09, 0x61, 0x4f, 0x26, 0x88, 0x93, 0x2d,
118 0x16, 0xa3, 0xbf, 0x1c, 0x12, 0xb2, 0x6f, 0xfc, 0x03, 0x73, 0x46, 0xb8, 0xe1, 0x54, 0x45,
119 0xbc, 0x34, 0x79, 0x14, 0xd9, 0x6d, 0xf4, 0xa0, 0x22, 0x06, 0x30, 0x45, 0x14, 0xe3, 0xe7,
120 0x2a, 0xae, 0xa4, 0xc2, 0xab, 0x4f, 0x82, 0x02, 0x52, 0xe5, 0x28, 0x18, 0x9b, 0x1c, 0x71,
121 0x66, 0x80, 0x0b, 0x01, 0xc8, 0x55, 0x4b, 0x9c, 0xe7, 0xa3, 0xad, 0x87, 0xd2, 0x23, 0x17,
122 0x0f, 0x85, 0x8d, 0x79, 0x0e, 0x59, 0x24, 0xa1, 0xbb, 0x39, 0x88, 0x8f, 0xeb, 0x3c, 0xce,
123 0x47, 0x98, 0x6d, 0xc2, 0xeb, 0xb8, 0xd0, 0x9c, 0x12, 0x63, 0x68, 0x91, 0xa0, 0x03, 0x63,
124 0x64, 0xe9, 0x3a, 0x59, 0x44, 0x2d, 0xe5, 0xdf, 0x7d, 0xd9, 0xad, 0x60, 0x63, 0x7c, 0xd4,
125 0xca, 0x94, 0x94, 0xcd, 0x2d, 0x1e, 0x9c, 0xa6, 0x4b, 0x09, 0xee, 0x87, 0x81, 0xfe, 0xa7,
126 0x27, 0x27, 0xb0, 0xcf, 0xb7, 0x3e, 0x14, 0x62, 0x87, 0xba, 0x35, 0x75, 0xe0, 0xf6, 0x33,
127 0x88, 0x26, 0x15, 0x5f, 0xab, 0x10, 0xb7, 0xd2, 0x98, 0x8c, 0xf0, 0x9e, 0x39, 0xd7, 0x73,
128 0x9e, 0x22, 0x92, 0x56, 0x0a, 0x3b, 0x53, 0xa4, 0x18, 0xe8, 0x5f, 0x25, 0x5c, 0x12, 0xa0,
129 0x54, 0xe3, 0xfb, 0x89, 0xad, 0x27, 0xef, 0xd4, 0x56, 0xf4, 0xfc, 0xb5, 0x27, 0xec, 0x99,
130 0xe3, 0x4b, 0xbe, 0x33, 0xea, 0x9a, 0xdc, 0xa2, 0x3a, 0x1a, 0x85, 0xb8, 0xc0, 0x4e, 0xc0,
131 0x0d, 0x44, 0x92, 0xe3, 0xe6, 0x45, 0x0e, 0xe9, 0xbd, 0x19, 0x91, 0xc9, 0x07, 0xf3, 0x55,
132 0xe6, 0x83, 0xb2, 0x42, 0x2f, 0x2c, 0x53, 0xb0, 0x2c, 0xc1, 0x78, 0x2c, 0x80, 0xda, 0xfe,
133 0x5c, 0x46, 0x2a, 0xc1, 0xaa, 0xa8, 0xd8, 0xd2, 0x5c, 0x3a, 0x6d, 0xdd, 0xe9, 0x0a, 0xf1,
134 0xa4, 0x36, 0xec, 0x74, 0xf8, 0xee, 0x28, 0x73, 0xf2, 0x01, 0xc9, 0xf2, 0xcd, 0x2a, 0x7b,
135 0x57, 0x6a, 0x9f, 0x8d, 0xeb, 0x74, 0xac, 0xd2, 0x49, 0x88, 0xa8, 0xeb, 0x44, 0x1b, 0xc9,
136 0x2f, 0xb4, 0x1b, 0x62, 0x5c, 0x01, 0xa8, 0x46, 0x96, 0xf4, 0x7c, 0x46, 0x1b, 0x2d, 0xc2,
137 0x34, 0x93, 0x3e, 0x72, 0x03, 0xbe, 0xeb, 0x61, 0x84, 0x65, 0x3d, 0x02, 0x12, 0x90, 0x3d,
138 0xbb, 0x1d, 0xa4, 0x7e, 0xbd, 0x2e, 0x39, 0x4d, 0x6d, 0xe2, 0x5b, 0xf7, 0x36, 0x33, 0x85,
139 0xe8, 0x45, 0xee, 0x42, 0x1f, 0x02, 0x44, 0x66, 0x5d, 0x69, 0x60, 0xaf, 0x9f, 0x63, 0xe0,
140 0x47, 0xd9, 0xfe, 0xff, 0x3d, 0xa0, 0x83, 0xab, 0x96, 0x7e, 0xcd, 0xbd, 0x6f, 0x76, 0x7e,
141 0x65, 0x3a, 0x22, 0x0d, 0x1f, 0xc4, 0x10, 0xbc, 0xab, 0x67, 0xd2, 0x27, 0x31, 0xa2, 0x6b,
142 0x89, 0x75, 0xf5, 0xab, 0xaa, 0x32, 0x57, 0x64, 0x9d, 0xc5, 0xd7, 0x0f, 0x76, 0x5c, 0x20,
143 0x9c, 0x51, 0xb4, 0x2e, 0x81, 0x00, 0xd9, 0x41, 0x6f, 0x33, 0xba, 0x0b, 0x14, 0x25, 0xd0,
144 0xc4, 0x00, 0x63, 0x4e, 0x9b, 0xc8, 0x8b, 0x09, 0x93, 0xab, 0x8b, 0x61, 0x50, 0x91, 0x6b,
145 0x59, 0x94, 0xbf, 0xb7, 0x70, 0xc1, 0xd1, 0x5d, 0xff, 0xfc, 0xae, 0xe7, 0x59, 0x22, 0x72,
146 0x3b, 0x2f, 0x4d, 0xc2, 0x47, 0xdf, 0xaa, 0xd0, 0x38, 0xf4, 0x99, 0xe7, 0xed, 0x1c, 0x01,
147 0xb0, 0x51, 0xdd, 0xf1, 0xbc, 0x45, 0xd7, 0x01, 0x74, 0x68, 0xb7, 0x50, 0x66, 0x8b, 0xcf,
148 0xe5, 0x21, 0xa4, 0xb0, 0x06, 0x7c, 0x21, 0x33, 0xc4, 0xa3, 0xce, 0xe0, 0xd8, 0x4a, 0x09,
149 0xd5, 0xb6, 0x0a, 0x60, 0xdc, 0x5c, 0x3e, 0x22, 0x3a, 0x94, 0x63, 0x5c, 0x30, 0x54, 0x78,
150 0x31, 0xd2, 0x9b, 0x06, 0x43, 0x58, 0x85, 0x42, 0xdf, 0xab, 0x97, 0x9f, 0x98, 0x66, 0x70,
151 0xc1, 0x43, 0x76, 0xda, 0xf7, 0x73, 0xe9, 0x5d, 0xfe, 0xb3, 0x09, 0x95, 0x45, 0xca, 0x9f,
152 0xbf, 0x3b, 0xa3, 0x0c, 0x0e, 0xae, 0xb4, 0x32, 0x73, 0xdb, 0x13, 0x34, 0x88, 0x42, 0xaf,
153 0x6e, 0xe8, 0x55, 0xbc, 0xb7, 0x8d, 0x64, 0xbb, 0xa0, 0xb2, 0x28, 0x3f, 0x17, 0xf0, 0x65,
154 0x4f, 0x98, 0x3b, 0x9f, 0x20, 0xcd, 0xfb, 0x06, 0xeb, 0xe5, 0x95, 0x8d, 0x17, 0x57, 0xc1,
155 0x09, 0x4b, 0xbf, 0x90, 0xbb, 0x04, 0xce, 0xd1, 0xd3, 0x31, 0xeb, 0xff, 0x20, 0xf9, 0xcb,
156 0xaf, 0x76, 0x58, 0x6a, 0x5a, 0x84, 0xaf, 0xc6, 0xed, 0x2d, 0x1b, 0x67, 0xbd, 0xe1, 0x91,
157 0xd3, 0xde, 0x07, 0x56, 0x24, 0xa5, 0xca, 0xbf, 0x23, 0x55, 0x66, 0xe1, 0x98, 0x80, 0xec,
158 0xa7, 0x5f, 0x4a, 0x9d, 0x7a, 0x4e, 0x93, 0x14, 0x3e, 0x44, 0xb2, 0xbd, 0x33, 0x35, 0xef,
159 0x35, 0x17, 0x7f, 0xc7, 0x91, 0xb7, 0x42, 0x39, 0x33, 0x51, 0x72, 0xee, 0x0f, 0x2c, 0xf5,
160 0xc9, 0xed, 0xec, 0x16, 0x89, 0xd7, 0xa4, 0x36, 0x1f, 0xe5, 0xb9, 0xf5, 0xe8, 0xba, 0x60,
161 0x85, 0xf4, 0x2c, 0x25, 0xe7, 0x7b, 0x76, 0x20, 0x5a, 0xea, 0x59, 0x86, 0xd1, 0x55, 0x41,
162 0x20, 0x74, 0xfe, 0x7f, 0xda, 0xb2, 0xf3, 0xc2, 0x16, 0xb3, 0xd8, 0xa2, 0xf4, 0x45, 0x18,
163 0x11, 0xfc, 0xc1, 0xc5, 0x32, 0xa5, 0x95, 0x1e, 0x25, 0xcc, 0xdd, 0xf4, 0xc2, 0xe6, 0x04,
164 0xbd, 0x11, 0xee, 0x99, 0x91, 0x59, 0xde, 0x71, 0x7d, 0x9a, 0xac, 0x2c, 0xa3, 0x39, 0xe1,
165 0x81, 0x8f, 0x0a, 0x9c, 0x24, 0x74, 0x2b, 0xb3, 0x94, 0x95, 0x72, 0xb9, 0xef, 0xf3, 0x7b,
166 0xc7, 0xc4, 0x55, 0xd3, 0x2c, 0xf8, 0x6b, 0x31, 0x75, 0xbf, 0x2e, 0x36, 0xe0,
167 ];
168
169 #[test]
170 fn test_senc_v0() {
171 let inbuf: &mut std::io::Cursor<&&[u8]> = &mut std::io::Cursor::new(&ENCODED_SENC);
172 let parse_result = Senc::decode(inbuf);
173 assert!(parse_result.is_ok());
174 let senc = parse_result.unwrap();
175 assert_eq!(
176 senc,
177 Senc {
178 version: SencBoxVersion::V0,
179 use_subsamples: false,
180 data: vec![
181 0x00, 0x00, 0x00, 0x57, 0x0a, 0x61, 0x06, 0x76, 0xcb, 0x88, 0xf3, 0x02, 0xd1,
182 0x0a, 0xc8, 0xbc, 0x66, 0xe0, 0x39, 0xed, 0xf9, 0xe3, 0x83, 0xca, 0x83, 0xd4,
183 0xa5, 0xe1, 0xe2, 0x74, 0xc5, 0x38, 0x9e, 0xd9, 0xa1, 0x0a, 0xf4, 0x79, 0xbc,
184 0xb4, 0x97, 0xe5, 0xa6, 0xeb, 0x06, 0xf8, 0x85, 0xa3, 0xe8, 0xf5, 0xa6, 0x2c,
185 0xe7, 0xd8, 0xdd, 0x62, 0x75, 0x6a, 0x71, 0x89, 0xb8, 0x82, 0xe6, 0xd6, 0x23,
186 0x3d, 0x40, 0x95, 0x1a, 0x50, 0x2b, 0x5f, 0xa4, 0xb1, 0x15, 0x6d, 0xa2, 0x48,
187 0xbe, 0x3f, 0x8b, 0xfb, 0x71, 0x8a, 0x85, 0xe6, 0xd6, 0x27, 0x02, 0xca, 0xee,
188 0xd0, 0x23, 0x6f, 0x72, 0x30, 0x62, 0x42, 0xdd, 0x9c, 0xb0, 0x03, 0xb0, 0x0f,
189 0xf6, 0x9c, 0x99, 0x6b, 0x56, 0x53, 0xf4, 0x02, 0xad, 0x89, 0x50, 0x61, 0xd0,
190 0xac, 0x12, 0x52, 0xa6, 0xc3, 0x88, 0xd9, 0xc2, 0x3a, 0x5b, 0x4b, 0x2d, 0xa5,
191 0x32, 0xa0, 0x31, 0x20, 0x03, 0x00, 0x9c, 0x6b, 0xf3, 0xa4, 0x6e, 0xee, 0x81,
192 0x18, 0xfe, 0x78, 0xce, 0xf0, 0x9e, 0x96, 0xde, 0x07, 0x90, 0xa6, 0x6c, 0xac,
193 0x84, 0x34, 0x26, 0x62, 0x0d, 0xa2, 0xc1, 0xdd, 0xdd, 0xf0, 0x01, 0x72, 0x68,
194 0x6b, 0x29, 0x4f, 0xc3, 0xaa, 0xc0, 0xaa, 0x08, 0xf5, 0x3b, 0x83, 0x04, 0xa5,
195 0x4d, 0x1d, 0x15, 0xa2, 0x64, 0x5e, 0xfa, 0xe0, 0xbc, 0x17, 0x31, 0x31, 0x8e,
196 0xa0, 0x9f, 0xc2, 0xcb, 0x15, 0x66, 0x30, 0xea, 0xa1, 0x31, 0x2d, 0xac, 0xbe,
197 0x5f, 0x3f, 0xcf, 0xa4, 0x8c, 0x7b, 0x21, 0x1a, 0xe4, 0xb4, 0x11, 0xf7, 0xeb,
198 0x25, 0xdf, 0xf8, 0x85, 0xcd, 0xd1, 0xe6, 0x3c, 0xaa, 0x5d, 0xa1, 0x72, 0x39,
199 0x93, 0x26, 0xb0, 0xfd, 0x63, 0x15, 0xca, 0xea, 0xbd, 0xd3, 0x8a, 0x02, 0x99,
200 0x23, 0x5e, 0x3c, 0xe6, 0x24, 0x52, 0x2a, 0x81, 0xe4, 0xc8, 0x65, 0x49, 0x1d,
201 0x50, 0x23, 0x66, 0x3e, 0x7e, 0x94, 0x9f, 0x53, 0xa5, 0x66, 0xde, 0x6a, 0x2f,
202 0x18, 0x48, 0x45, 0x0d, 0x7d, 0x87, 0xb8, 0xa6, 0x00, 0x5d, 0x66, 0xd5, 0x7f,
203 0x8e, 0x9c, 0x12, 0x87, 0x3a, 0x72, 0x98, 0xb8, 0x9e, 0x05, 0x2e, 0x10, 0x6c,
204 0xf7, 0x13, 0x0e, 0xf5, 0xcc, 0x32, 0x9f, 0x8e, 0x5e, 0xb3, 0xa9, 0xb5, 0x6b,
205 0xa0, 0xef, 0xd8, 0xb5, 0x22, 0x94, 0xb8, 0x48, 0x8c, 0x7f, 0xdb, 0x9d, 0xb1,
206 0x57, 0x05, 0x7a, 0x6e, 0x4b, 0x46, 0x89, 0x01, 0x75, 0xae, 0xc8, 0x9c, 0xaf,
207 0x29, 0x7e, 0xfb, 0x3c, 0xc7, 0xa0, 0x76, 0xe8, 0x9f, 0xcd, 0xe0, 0xce, 0xb6,
208 0x5b, 0x57, 0xb9, 0xa9, 0x4a, 0xa4, 0x21, 0xd6, 0x3e, 0x99, 0x5a, 0xf1, 0x74,
209 0xa5, 0xf7, 0xa5, 0xb2, 0xb8, 0x79, 0x81, 0x06, 0x79, 0xdb, 0x30, 0x71, 0x06,
210 0x9d, 0xfc, 0xdb, 0x09, 0x40, 0x29, 0x8e, 0x89, 0x3d, 0xe6, 0x88, 0x01, 0x43,
211 0x8e, 0xf8, 0x4e, 0xa0, 0x1b, 0xd8, 0xd8, 0x7e, 0xc4, 0xce, 0x1f, 0x1e, 0x81,
212 0x4a, 0xb2, 0x7f, 0x43, 0x7b, 0xf5, 0x19, 0x23, 0xe9, 0x46, 0xfd, 0x7a, 0x14,
213 0x25, 0xb9, 0xaa, 0x14, 0x78, 0x16, 0x38, 0x55, 0xdb, 0x12, 0xea, 0xc3, 0xc3,
214 0xb0, 0x21, 0x37, 0x86, 0x9a, 0xe9, 0xd7, 0xd6, 0x53, 0x3c, 0x4e, 0xf1, 0xee,
215 0xb8, 0xbd, 0xda, 0xc5, 0xaf, 0x80, 0x77, 0x8d, 0xf1, 0x7d, 0x7f, 0x3f, 0xdc,
216 0x07, 0xdc, 0xc9, 0x29, 0xc1, 0x9d, 0x38, 0x23, 0x8d, 0x85, 0x3a, 0x53, 0xef,
217 0xd0, 0xd5, 0xb8, 0x2e, 0xe6, 0x28, 0xae, 0x2a, 0x26, 0x8e, 0x9d, 0x64, 0x86,
218 0xb3, 0x0f, 0xe9, 0xb0, 0xc1, 0x99, 0x56, 0x9b, 0x19, 0xe1, 0x9e, 0x26, 0xfa,
219 0x51, 0x60, 0xda, 0x04, 0x2f, 0x4f, 0x7b, 0x68, 0xbf, 0xe5, 0x66, 0x11, 0x3b,
220 0xbf, 0xfd, 0x2d, 0x61, 0x92, 0x7b, 0x19, 0x92, 0x94, 0x06, 0xde, 0xa3, 0xea,
221 0xc3, 0x25, 0x27, 0x17, 0x9b, 0x3b, 0xcc, 0xfe, 0x7e, 0x28, 0x39, 0x0e, 0x0d,
222 0x2e, 0x64, 0xc0, 0x32, 0xa2, 0x6d, 0x3a, 0x69, 0x46, 0xf8, 0x9a, 0x6f, 0x87,
223 0x9b, 0xbf, 0x7a, 0xd7, 0x02, 0x15, 0xa8, 0x3b, 0x17, 0x22, 0x87, 0xdc, 0xf6,
224 0xb8, 0x9b, 0x5e, 0xd3, 0xdd, 0xf3, 0x61, 0x7a, 0x7b, 0x16, 0x0c, 0x5f, 0x6f,
225 0xf6, 0x01, 0xe6, 0x90, 0xbe, 0x2d, 0x94, 0x55, 0xb0, 0x7d, 0x08, 0xf8, 0x67,
226 0x1f, 0x22, 0x57, 0x75, 0xeb, 0xa3, 0x98, 0x9d, 0x3a, 0x0f, 0xce, 0x3f, 0x64,
227 0x83, 0x2d, 0x9c, 0x27, 0xbc, 0x3e, 0xe4, 0xf4, 0x25, 0xd7, 0xc6, 0xba, 0xaa,
228 0xe9, 0xf0, 0xb1, 0xeb, 0xcc, 0x8f, 0xaf, 0x10, 0x26, 0xa3, 0x2c, 0x6c, 0xfe,
229 0x2d, 0xd3, 0x4b, 0xfb, 0x0d, 0x4f, 0x01, 0x4a, 0x34, 0x94, 0x7a, 0x5e, 0xca,
230 0xcf, 0x31, 0x8e, 0x4c, 0x18, 0x64, 0xeb, 0x8c, 0x05, 0x21, 0x5f, 0xdb, 0xe4,
231 0x95, 0xe5, 0x93, 0xb6, 0x32, 0xd7, 0x09, 0x61, 0x4f, 0x26, 0x88, 0x93, 0x2d,
232 0x16, 0xa3, 0xbf, 0x1c, 0x12, 0xb2, 0x6f, 0xfc, 0x03, 0x73, 0x46, 0xb8, 0xe1,
233 0x54, 0x45, 0xbc, 0x34, 0x79, 0x14, 0xd9, 0x6d, 0xf4, 0xa0, 0x22, 0x06, 0x30,
234 0x45, 0x14, 0xe3, 0xe7, 0x2a, 0xae, 0xa4, 0xc2, 0xab, 0x4f, 0x82, 0x02, 0x52,
235 0xe5, 0x28, 0x18, 0x9b, 0x1c, 0x71, 0x66, 0x80, 0x0b, 0x01, 0xc8, 0x55, 0x4b,
236 0x9c, 0xe7, 0xa3, 0xad, 0x87, 0xd2, 0x23, 0x17, 0x0f, 0x85, 0x8d, 0x79, 0x0e,
237 0x59, 0x24, 0xa1, 0xbb, 0x39, 0x88, 0x8f, 0xeb, 0x3c, 0xce, 0x47, 0x98, 0x6d,
238 0xc2, 0xeb, 0xb8, 0xd0, 0x9c, 0x12, 0x63, 0x68, 0x91, 0xa0, 0x03, 0x63, 0x64,
239 0xe9, 0x3a, 0x59, 0x44, 0x2d, 0xe5, 0xdf, 0x7d, 0xd9, 0xad, 0x60, 0x63, 0x7c,
240 0xd4, 0xca, 0x94, 0x94, 0xcd, 0x2d, 0x1e, 0x9c, 0xa6, 0x4b, 0x09, 0xee, 0x87,
241 0x81, 0xfe, 0xa7, 0x27, 0x27, 0xb0, 0xcf, 0xb7, 0x3e, 0x14, 0x62, 0x87, 0xba,
242 0x35, 0x75, 0xe0, 0xf6, 0x33, 0x88, 0x26, 0x15, 0x5f, 0xab, 0x10, 0xb7, 0xd2,
243 0x98, 0x8c, 0xf0, 0x9e, 0x39, 0xd7, 0x73, 0x9e, 0x22, 0x92, 0x56, 0x0a, 0x3b,
244 0x53, 0xa4, 0x18, 0xe8, 0x5f, 0x25, 0x5c, 0x12, 0xa0, 0x54, 0xe3, 0xfb, 0x89,
245 0xad, 0x27, 0xef, 0xd4, 0x56, 0xf4, 0xfc, 0xb5, 0x27, 0xec, 0x99, 0xe3, 0x4b,
246 0xbe, 0x33, 0xea, 0x9a, 0xdc, 0xa2, 0x3a, 0x1a, 0x85, 0xb8, 0xc0, 0x4e, 0xc0,
247 0x0d, 0x44, 0x92, 0xe3, 0xe6, 0x45, 0x0e, 0xe9, 0xbd, 0x19, 0x91, 0xc9, 0x07,
248 0xf3, 0x55, 0xe6, 0x83, 0xb2, 0x42, 0x2f, 0x2c, 0x53, 0xb0, 0x2c, 0xc1, 0x78,
249 0x2c, 0x80, 0xda, 0xfe, 0x5c, 0x46, 0x2a, 0xc1, 0xaa, 0xa8, 0xd8, 0xd2, 0x5c,
250 0x3a, 0x6d, 0xdd, 0xe9, 0x0a, 0xf1, 0xa4, 0x36, 0xec, 0x74, 0xf8, 0xee, 0x28,
251 0x73, 0xf2, 0x01, 0xc9, 0xf2, 0xcd, 0x2a, 0x7b, 0x57, 0x6a, 0x9f, 0x8d, 0xeb,
252 0x74, 0xac, 0xd2, 0x49, 0x88, 0xa8, 0xeb, 0x44, 0x1b, 0xc9, 0x2f, 0xb4, 0x1b,
253 0x62, 0x5c, 0x01, 0xa8, 0x46, 0x96, 0xf4, 0x7c, 0x46, 0x1b, 0x2d, 0xc2, 0x34,
254 0x93, 0x3e, 0x72, 0x03, 0xbe, 0xeb, 0x61, 0x84, 0x65, 0x3d, 0x02, 0x12, 0x90,
255 0x3d, 0xbb, 0x1d, 0xa4, 0x7e, 0xbd, 0x2e, 0x39, 0x4d, 0x6d, 0xe2, 0x5b, 0xf7,
256 0x36, 0x33, 0x85, 0xe8, 0x45, 0xee, 0x42, 0x1f, 0x02, 0x44, 0x66, 0x5d, 0x69,
257 0x60, 0xaf, 0x9f, 0x63, 0xe0, 0x47, 0xd9, 0xfe, 0xff, 0x3d, 0xa0, 0x83, 0xab,
258 0x96, 0x7e, 0xcd, 0xbd, 0x6f, 0x76, 0x7e, 0x65, 0x3a, 0x22, 0x0d, 0x1f, 0xc4,
259 0x10, 0xbc, 0xab, 0x67, 0xd2, 0x27, 0x31, 0xa2, 0x6b, 0x89, 0x75, 0xf5, 0xab,
260 0xaa, 0x32, 0x57, 0x64, 0x9d, 0xc5, 0xd7, 0x0f, 0x76, 0x5c, 0x20, 0x9c, 0x51,
261 0xb4, 0x2e, 0x81, 0x00, 0xd9, 0x41, 0x6f, 0x33, 0xba, 0x0b, 0x14, 0x25, 0xd0,
262 0xc4, 0x00, 0x63, 0x4e, 0x9b, 0xc8, 0x8b, 0x09, 0x93, 0xab, 0x8b, 0x61, 0x50,
263 0x91, 0x6b, 0x59, 0x94, 0xbf, 0xb7, 0x70, 0xc1, 0xd1, 0x5d, 0xff, 0xfc, 0xae,
264 0xe7, 0x59, 0x22, 0x72, 0x3b, 0x2f, 0x4d, 0xc2, 0x47, 0xdf, 0xaa, 0xd0, 0x38,
265 0xf4, 0x99, 0xe7, 0xed, 0x1c, 0x01, 0xb0, 0x51, 0xdd, 0xf1, 0xbc, 0x45, 0xd7,
266 0x01, 0x74, 0x68, 0xb7, 0x50, 0x66, 0x8b, 0xcf, 0xe5, 0x21, 0xa4, 0xb0, 0x06,
267 0x7c, 0x21, 0x33, 0xc4, 0xa3, 0xce, 0xe0, 0xd8, 0x4a, 0x09, 0xd5, 0xb6, 0x0a,
268 0x60, 0xdc, 0x5c, 0x3e, 0x22, 0x3a, 0x94, 0x63, 0x5c, 0x30, 0x54, 0x78, 0x31,
269 0xd2, 0x9b, 0x06, 0x43, 0x58, 0x85, 0x42, 0xdf, 0xab, 0x97, 0x9f, 0x98, 0x66,
270 0x70, 0xc1, 0x43, 0x76, 0xda, 0xf7, 0x73, 0xe9, 0x5d, 0xfe, 0xb3, 0x09, 0x95,
271 0x45, 0xca, 0x9f, 0xbf, 0x3b, 0xa3, 0x0c, 0x0e, 0xae, 0xb4, 0x32, 0x73, 0xdb,
272 0x13, 0x34, 0x88, 0x42, 0xaf, 0x6e, 0xe8, 0x55, 0xbc, 0xb7, 0x8d, 0x64, 0xbb,
273 0xa0, 0xb2, 0x28, 0x3f, 0x17, 0xf0, 0x65, 0x4f, 0x98, 0x3b, 0x9f, 0x20, 0xcd,
274 0xfb, 0x06, 0xeb, 0xe5, 0x95, 0x8d, 0x17, 0x57, 0xc1, 0x09, 0x4b, 0xbf, 0x90,
275 0xbb, 0x04, 0xce, 0xd1, 0xd3, 0x31, 0xeb, 0xff, 0x20, 0xf9, 0xcb, 0xaf, 0x76,
276 0x58, 0x6a, 0x5a, 0x84, 0xaf, 0xc6, 0xed, 0x2d, 0x1b, 0x67, 0xbd, 0xe1, 0x91,
277 0xd3, 0xde, 0x07, 0x56, 0x24, 0xa5, 0xca, 0xbf, 0x23, 0x55, 0x66, 0xe1, 0x98,
278 0x80, 0xec, 0xa7, 0x5f, 0x4a, 0x9d, 0x7a, 0x4e, 0x93, 0x14, 0x3e, 0x44, 0xb2,
279 0xbd, 0x33, 0x35, 0xef, 0x35, 0x17, 0x7f, 0xc7, 0x91, 0xb7, 0x42, 0x39, 0x33,
280 0x51, 0x72, 0xee, 0x0f, 0x2c, 0xf5, 0xc9, 0xed, 0xec, 0x16, 0x89, 0xd7, 0xa4,
281 0x36, 0x1f, 0xe5, 0xb9, 0xf5, 0xe8, 0xba, 0x60, 0x85, 0xf4, 0x2c, 0x25, 0xe7,
282 0x7b, 0x76, 0x20, 0x5a, 0xea, 0x59, 0x86, 0xd1, 0x55, 0x41, 0x20, 0x74, 0xfe,
283 0x7f, 0xda, 0xb2, 0xf3, 0xc2, 0x16, 0xb3, 0xd8, 0xa2, 0xf4, 0x45, 0x18, 0x11,
284 0xfc, 0xc1, 0xc5, 0x32, 0xa5, 0x95, 0x1e, 0x25, 0xcc, 0xdd, 0xf4, 0xc2, 0xe6,
285 0x04, 0xbd, 0x11, 0xee, 0x99, 0x91, 0x59, 0xde, 0x71, 0x7d, 0x9a, 0xac, 0x2c,
286 0xa3, 0x39, 0xe1, 0x81, 0x8f, 0x0a, 0x9c, 0x24, 0x74, 0x2b, 0xb3, 0x94, 0x95,
287 0x72, 0xb9, 0xef, 0xf3, 0x7b, 0xc7, 0xc4, 0x55, 0xd3, 0x2c, 0xf8, 0x6b, 0x31,
288 0x75, 0xbf, 0x2e, 0x36, 0xe0,
289 ]
290 }
291 );
292
293 let mut outbuf = Vec::new();
294 senc.encode(&mut outbuf).unwrap();
295 assert_eq!(outbuf, ENCODED_SENC);
296 }
297
298 #[test]
299 fn test_senc_v1() {
300 let senc = Senc {
302 version: SencBoxVersion::V1,
303 use_subsamples: false,
304 data: vec![0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
305 };
306 let mut buf = Vec::new();
307 senc.encode(&mut buf).unwrap();
308 assert_eq!(
309 buf,
310 vec![
311 0x00, 0x00, 0x00, 0x12, 0x73, 0x65, 0x6e, 0x63, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
312 0x00, 0x00, 0x00, 0x00
313 ]
314 );
315
316 let decoded = Senc::decode(&mut buf.as_ref()).unwrap();
317 assert_eq!(decoded, senc);
318 }
319
320 #[test]
321 fn test_senc_v2() {
322 let senc = Senc {
323 version: SencBoxVersion::V2,
324 use_subsamples: false,
325 data: vec![0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08],
326 };
327 let mut buf = Vec::new();
328 senc.encode(&mut buf).unwrap();
329 assert_eq!(
330 buf,
331 vec![
332 0x00, 0x00, 0x00, 0x14, 0x73, 0x65, 0x6e, 0x63, 0x02, 0x00, 0x00, 0x00, 0x01, 0x02,
333 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
334 ]
335 );
336
337 let decoded = Senc::decode(&mut buf.as_ref()).unwrap();
338 assert_eq!(decoded, senc);
339 }
340}