videoplayer: add two more symbols just in case
[nihav-player.git] / videoplayer / src / osd.rs
CommitLineData
8686f9f6
KS
1use std::time::Instant;
2
2425989e
KS
3const XOFF: usize = 10;
4const YOFF: usize = 4;
5
8686f9f6
KS
6#[derive(Default)]
7pub struct OSD {
8 time: Option<Instant>,
9 text: Vec<u8>,
10 text_stride: usize,
2425989e 11 duration: u64,
8686f9f6
KS
12}
13
14impl OSD {
15 pub fn new() -> Self { Self::default() }
2425989e
KS
16 pub fn reset(&mut self) {
17 self.text.clear();
18 self.duration = 0;
19 self.time = None;
20 }
21 pub fn set_duration(&mut self, duration: u64) { self.duration = duration; }
8686f9f6
KS
22 pub fn toggle(&mut self) {
23 if self.time.is_none() {
24 self.time = Some(Instant::now());
25 } else {
26 self.time = None;
27 }
28 }
29 pub fn update(&mut self) {
30 if let Some(time) = self.time {
31 if time.elapsed().as_millis() > 3000 {
32 self.time = None;
33 }
34 }
35 }
36 pub fn is_active(&self) -> bool { self.time.is_some() }
37 pub fn prepare(&mut self, ts: u64) {
38 self.update();
39 if !self.is_active() {
40 return;
41 }
2425989e
KS
42 let mut time_str = format_time(ts);
43 if self.duration != 0 {
44 time_str += "/";
45 time_str += format_time(self.duration).as_str();
46 }
8686f9f6
KS
47 let mut w = 0;
48 let mut syms = Vec::with_capacity(time_str.len());
49 for chr in time_str.chars() {
50 let sym_idx = OSD_GLYPHS.iter().position(|el| el.sym == chr).unwrap_or(0);
51 w += OSD_GLYPHS[sym_idx].width;
52 syms.push(sym_idx);
53 }
54 self.text_stride = w;
55 if w > 0 {
56 self.text.resize(self.text_stride * 16, 0);
57 let mut pos = 0;
58 for &sym_idx in syms.iter() {
59 let glyph = &OSD_GLYPHS[sym_idx];
60 let mut mask = 1 << (glyph.width - 1);
61 while mask > 0 {
62 for (dline, (bits, mbits)) in self.text.chunks_exact_mut(w).zip(glyph.bits.iter().zip(glyph.mask.iter())) {
63 let wval = (bits & mask) != 0;
64 let bval = (mbits & mask) != 0;
65 dline[pos] = if wval { 2 } else if bval { 1 } else { 0 };
66 }
67 mask >>= 1;
68 pos += 1;
69 }
70 }
71 } else {
72 self.text.clear();
73 }
74 }
75 pub fn draw_yuv(&self, buffer: &mut [u8], pitch: usize) {
76 if !self.is_active() || self.text_stride == 0 {
77 return;
78 }
2425989e
KS
79 for (dline, sline) in buffer.chunks_exact_mut(pitch).skip(YOFF).zip(self.text.chunks_exact(self.text_stride)) {
80 for (dst, &src) in dline.iter_mut().skip(XOFF).zip(sline.iter()) {
8686f9f6
KS
81 match src {
82 2 => *dst = 0xFF,
83 1 => *dst = 0x00,
84 _ => {},
85 };
86 }
87 }
88 }
89 pub fn draw_rgb(&self, buffer: &mut [u8], pitch: usize) {
90 if !self.is_active() || self.text_stride == 0 {
91 return;
92 }
2425989e
KS
93 for (dline, sline) in buffer.chunks_exact_mut(pitch).skip(YOFF).zip(self.text.chunks_exact(self.text_stride)) {
94 for (dst, &src) in dline.chunks_exact_mut(3).skip(XOFF).zip(sline.iter()) {
8686f9f6
KS
95 match src {
96 2 => dst.copy_from_slice(&[0xFF, 0xFF, 0xFF]),
97 1 => dst.copy_from_slice(&[0x00, 0x00, 0x00]),
98 _ => {},
99 };
100 }
101 }
102 }
103}
104
105fn format_time(ms: u64) -> String {
106 let s = ms / 1000;
107 let (min, s) = (s / 60, s % 60);
108 let (h, min) = (min / 60, min % 60);
109 if h == 0 {
110 if min == 0 {
2425989e 111 format!("0:{:02}", s)
8686f9f6
KS
112 } else {
113 format!("{}:{:02}", min, s)
114 }
115 } else {
116 format!("{}:{:02}:{:02}", h, min, s)
117 }
118}
119
120struct Glyph {
121 width: usize,
122 sym: char,
123 bits: [u16; 16],
124 mask: [u16; 16],
125}
126
127const OSD_GLYPHS: &[Glyph] = &[
128 Glyph {
2425989e 129 width: 14,
8686f9f6
KS
130 sym: '?',
131 bits: [
132 0b_0000000000000000,
2425989e
KS
133 0b_0000011111110000,
134 0b_0000110000111000,
135 0b_0000000000011000,
136 0b_0000000000011000,
8686f9f6
KS
137 0b_0000000000110000,
138 0b_0000000001100000,
139 0b_0000000011000000,
2425989e
KS
140 0b_0000000011000000,
141 0b_0000000011000000,
8686f9f6
KS
142 0b_0000000000000000,
143 0b_0000000000000000,
144 0b_0000000000000000,
2425989e
KS
145 0b_0000000111100000,
146 0b_0000000111100000,
8686f9f6
KS
147 0b_0000000000000000
148 ],
149 mask: [
2425989e
KS
150 0b_0000011111110000,
151 0b_0000111111111000,
152 0b_0001111111111100,
153 0b_0000110000111100,
154 0b_0000000000111100,
8686f9f6
KS
155 0b_0000000001111000,
156 0b_0000000011110000,
157 0b_0000000111100000,
2425989e
KS
158 0b_0000000111100000,
159 0b_0000000111100000,
160 0b_0000000011000000,
161 0b_0000000000000000,
162 0b_0000000111100000,
163 0b_0000001111110000,
164 0b_0000001111110000,
165 0b_0000000111100000
8686f9f6
KS
166 ],
167 },
168 Glyph {
2425989e 169 width: 12,
8686f9f6
KS
170 sym: '0',
171 bits: [
172 0b_0000000000000000,
173 0b_0000000000000000,
174 0b_0000000000000000,
2425989e
KS
175 0b_0000000011110000,
176 0b_0000000100001000,
177 0b_0000001000001100,
178 0b_0000001000010100,
179 0b_0000001000100100,
180 0b_0000001001000100,
181 0b_0000001010000100,
182 0b_0000001100000100,
183 0b_0000000100001000,
184 0b_0000000011110000,
8686f9f6
KS
185 0b_0000000000000000,
186 0b_0000000000000000,
187 0b_0000000000000000
188 ],
189 mask: [
190 0b_0000000000000000,
191 0b_0000000000000000,
2425989e
KS
192 0b_0000000111111000,
193 0b_0000001100001100,
194 0b_0000011011110110,
195 0b_0000010100010010,
196 0b_0000010100101010,
197 0b_0000010101011010,
198 0b_0000010110101010,
199 0b_0000010101001010,
200 0b_0000010010011010,
201 0b_0000011011110110,
202 0b_0000001100001100,
203 0b_0000000111111000,
8686f9f6
KS
204 0b_0000000000000000,
205 0b_0000000000000000
206 ],
207 },
208 Glyph {
2425989e 209 width: 10,
8686f9f6
KS
210 sym: '1',
211 bits: [
212 0b_0000000000000000,
213 0b_0000000000000000,
214 0b_0000000000000000,
2425989e
KS
215 0b_0000000000110000,
216 0b_0000000001110000,
217 0b_0000000011010000,
218 0b_0000000000010000,
219 0b_0000000000010000,
220 0b_0000000000010000,
221 0b_0000000000010000,
222 0b_0000000000010000,
223 0b_0000000000010000,
224 0b_0000000001111100,
8686f9f6
KS
225 0b_0000000000000000,
226 0b_0000000000000000,
227 0b_0000000000000000
228 ],
229 mask: [
230 0b_0000000000000000,
231 0b_0000000000000000,
2425989e
KS
232 0b_0000000000111000,
233 0b_0000000001001000,
234 0b_0000000010001000,
235 0b_0000000100101000,
236 0b_0000000111101000,
237 0b_0000000000101000,
238 0b_0000000000101000,
239 0b_0000000000101000,
240 0b_0000000000101000,
241 0b_0000000011101110,
242 0b_0000000010000010,
243 0b_0000000011111110,
8686f9f6
KS
244 0b_0000000000000000,
245 0b_0000000000000000
246 ],
247 },
248 Glyph {
2425989e 249 width: 10,
8686f9f6
KS
250 sym: '2',
251 bits: [
252 0b_0000000000000000,
253 0b_0000000000000000,
2425989e
KS
254 0b_0000000001110000,
255 0b_0000000010001000,
256 0b_0000000000000100,
257 0b_0000000000000100,
258 0b_0000000000000100,
8686f9f6
KS
259 0b_0000000000001000,
260 0b_0000000000010000,
261 0b_0000000000100000,
262 0b_0000000001000000,
263 0b_0000000010000000,
2425989e 264 0b_0000000011111100,
8686f9f6
KS
265 0b_0000000000000000,
266 0b_0000000000000000,
267 0b_0000000000000000
268 ],
269 mask: [
270 0b_0000000000000000,
2425989e
KS
271 0b_0000000001110000,
272 0b_0000000010001000,
273 0b_0000000101110100,
274 0b_0000000110001010,
275 0b_0000000000001010,
276 0b_0000000000001010,
8686f9f6
KS
277 0b_0000000000010100,
278 0b_0000000000101000,
279 0b_0000000001010000,
280 0b_0000000010100000,
2425989e
KS
281 0b_0000000101111110,
282 0b_0000000100000010,
283 0b_0000000111111110,
8686f9f6
KS
284 0b_0000000000000000,
285 0b_0000000000000000
286 ],
287 },
288 Glyph {
2425989e 289 width: 10,
8686f9f6
KS
290 sym: '3',
291 bits: [
292 0b_0000000000000000,
293 0b_0000000000000000,
294 0b_0000000000000000,
2425989e
KS
295 0b_0000000011111100,
296 0b_0000000010000100,
297 0b_0000000000001000,
8686f9f6
KS
298 0b_0000000000010000,
299 0b_0000000000100000,
8686f9f6
KS
300 0b_0000000000010000,
301 0b_0000000000001000,
2425989e
KS
302 0b_0000000000000100,
303 0b_0000000010000100,
304 0b_0000000001111000,
8686f9f6
KS
305 0b_0000000000000000,
306 0b_0000000000000000,
307 0b_0000000000000000
308 ],
309 mask: [
310 0b_0000000000000000,
311 0b_0000000000000000,
2425989e
KS
312 0b_0000000111111110,
313 0b_0000000100000010,
314 0b_0000000101111010,
315 0b_0000000111010100,
316 0b_0000000000101000,
8686f9f6
KS
317 0b_0000000001010000,
318 0b_0000000000101000,
2425989e
KS
319 0b_0000000000010100,
320 0b_0000000110001010,
321 0b_0000000101111010,
322 0b_0000000010000100,
323 0b_0000000001111000,
8686f9f6
KS
324 0b_0000000000000000,
325 0b_0000000000000000
326 ],
327 },
328 Glyph {
2425989e 329 width: 10,
8686f9f6
KS
330 sym: '4',
331 bits: [
332 0b_0000000000000000,
333 0b_0000000000000000,
334 0b_0000000000000000,
2425989e
KS
335 0b_0000000000001100,
336 0b_0000000000010100,
337 0b_0000000000100100,
338 0b_0000000001000100,
339 0b_0000000010000100,
340 0b_0000000011111100,
341 0b_0000000000000100,
342 0b_0000000000000100,
343 0b_0000000000000100,
344 0b_0000000000000100,
8686f9f6
KS
345 0b_0000000000000000,
346 0b_0000000000000000,
347 0b_0000000000000000
348 ],
349 mask: [
350 0b_0000000000000000,
351 0b_0000000000000000,
2425989e
KS
352 0b_0000000000001110,
353 0b_0000000000010010,
354 0b_0000000000101010,
355 0b_0000000001011010,
356 0b_0000000010101010,
357 0b_0000000101111010,
358 0b_0000000100000010,
359 0b_0000000111111010,
360 0b_0000000000001010,
361 0b_0000000000001010,
362 0b_0000000000001010,
363 0b_0000000000001110,
8686f9f6
KS
364 0b_0000000000000000,
365 0b_0000000000000000
366 ],
367 },
368 Glyph {
2425989e 369 width: 10,
8686f9f6
KS
370 sym: '5',
371 bits: [
372 0b_0000000000000000,
373 0b_0000000000000000,
374 0b_0000000000000000,
2425989e
KS
375 0b_0000000011111100,
376 0b_0000000010000100,
8686f9f6
KS
377 0b_0000000010000000,
378 0b_0000000001000000,
2425989e
KS
379 0b_0000000000100000,
380 0b_0000000000011000,
381 0b_0000000000000100,
382 0b_0000000000000100,
383 0b_0000000010000100,
384 0b_0000000001111000,
8686f9f6
KS
385 0b_0000000000000000,
386 0b_0000000000000000,
387 0b_0000000000000000
388 ],
389 mask: [
390 0b_0000000000000000,
391 0b_0000000000000000,
2425989e
KS
392 0b_0000000111111110,
393 0b_0000000100000010,
394 0b_0000000101111010,
395 0b_0000000101001110,
396 0b_0000000010100000,
397 0b_0000000001011000,
398 0b_0000000000100100,
399 0b_0000000000011010,
400 0b_0000000110001010,
401 0b_0000000101111010,
402 0b_0000000010000100,
403 0b_0000000001111000,
8686f9f6
KS
404 0b_0000000000000000,
405 0b_0000000000000000
406 ],
407 },
408 Glyph {
2425989e 409 width: 10,
8686f9f6
KS
410 sym: '6',
411 bits: [
412 0b_0000000000000000,
413 0b_0000000000000000,
414 0b_0000000000000000,
2425989e
KS
415 0b_0000000001111000,
416 0b_0000000010000100,
417 0b_0000000010000000,
418 0b_0000000010000000,
419 0b_0000000010000000,
420 0b_0000000011111000,
421 0b_0000000010000100,
422 0b_0000000010000100,
423 0b_0000000010000100,
424 0b_0000000001111000,
8686f9f6
KS
425 0b_0000000000000000,
426 0b_0000000000000000,
427 0b_0000000000000000
428 ],
429 mask: [
430 0b_0000000000000000,
431 0b_0000000000000000,
2425989e
KS
432 0b_0000000001111000,
433 0b_0000000010000100,
434 0b_0000000101111010,
435 0b_0000000101001110,
436 0b_0000000101000000,
437 0b_0000000101111000,
438 0b_0000000100000100,
439 0b_0000000101111010,
440 0b_0000000101001010,
441 0b_0000000101111010,
442 0b_0000000010000100,
443 0b_0000000001111000,
8686f9f6
KS
444 0b_0000000000000000,
445 0b_0000000000000000
446 ],
447 },
448 Glyph {
2425989e 449 width: 10,
8686f9f6
KS
450 sym: '7',
451 bits: [
452 0b_0000000000000000,
453 0b_0000000000000000,
454 0b_0000000000000000,
2425989e
KS
455 0b_0000000111111100,
456 0b_0000000100000100,
457 0b_0000000000000100,
458 0b_0000000000001000,
459 0b_0000000000001000,
8686f9f6
KS
460 0b_0000000000001000,
461 0b_0000000000010000,
462 0b_0000000000010000,
2425989e 463 0b_0000000000110000,
8686f9f6 464 0b_0000000000100000,
8686f9f6
KS
465 0b_0000000000000000,
466 0b_0000000000000000,
467 0b_0000000000000000
468 ],
469 mask: [
470 0b_0000000000000000,
471 0b_0000000000000000,
2425989e
KS
472 0b_0000001111111110,
473 0b_0000001000000010,
474 0b_0000001011111010,
475 0b_0000001110001010,
476 0b_0000000000010100,
477 0b_0000000000010100,
478 0b_0000000000010100,
8686f9f6
KS
479 0b_0000000000101000,
480 0b_0000000000101000,
2425989e 481 0b_0000000001001000,
8686f9f6 482 0b_0000000001010000,
2425989e 483 0b_0000000001110000,
8686f9f6
KS
484 0b_0000000000000000,
485 0b_0000000000000000
486 ],
487 },
488 Glyph {
2425989e 489 width: 10,
8686f9f6
KS
490 sym: '8',
491 bits: [
492 0b_0000000000000000,
493 0b_0000000000000000,
494 0b_0000000000000000,
2425989e
KS
495 0b_0000000001111000,
496 0b_0000000010000100,
497 0b_0000000010000100,
498 0b_0000000010000100,
499 0b_0000000001111000,
500 0b_0000000001001000,
501 0b_0000000010000100,
502 0b_0000000010000100,
503 0b_0000000010000100,
504 0b_0000000001111000,
8686f9f6
KS
505 0b_0000000000000000,
506 0b_0000000000000000,
507 0b_0000000000000000
508 ],
509 mask: [
510 0b_0000000000000000,
511 0b_0000000000000000,
2425989e
KS
512 0b_0000000001111000,
513 0b_0000000010000100,
514 0b_0000000101111010,
515 0b_0000000101001010,
516 0b_0000000101111010,
517 0b_0000000010000100,
518 0b_0000000010110100,
519 0b_0000000101001010,
520 0b_0000000101001010,
521 0b_0000000101111010,
522 0b_0000000010000100,
523 0b_0000000001111000,
8686f9f6
KS
524 0b_0000000000000000,
525 0b_0000000000000000
526 ],
527 },
528 Glyph {
2425989e 529 width: 10,
8686f9f6
KS
530 sym: '9',
531 bits: [
532 0b_0000000000000000,
533 0b_0000000000000000,
534 0b_0000000000000000,
2425989e
KS
535 0b_0000000001111000,
536 0b_0000000010000100,
537 0b_0000000010000100,
538 0b_0000000010000100,
539 0b_0000000001111100,
540 0b_0000000000000100,
541 0b_0000000000000100,
542 0b_0000000000000100,
543 0b_0000000010000100,
544 0b_0000000001111000,
8686f9f6
KS
545 0b_0000000000000000,
546 0b_0000000000000000,
547 0b_0000000000000000
548 ],
549 mask: [
550 0b_0000000000000000,
551 0b_0000000000000000,
2425989e
KS
552 0b_0000000001111000,
553 0b_0000000010000100,
554 0b_0000000101111010,
555 0b_0000000101001010,
556 0b_0000000101111010,
557 0b_0000000010000010,
558 0b_0000000001111010,
559 0b_0000000000001010,
560 0b_0000000111001010,
561 0b_0000000101111010,
562 0b_0000000010000100,
563 0b_0000000001111000,
8686f9f6
KS
564 0b_0000000000000000,
565 0b_0000000000000000
566 ],
567 },
568 Glyph {
2425989e 569 width: 7,
8686f9f6
KS
570 sym: ':',
571 bits: [
572 0b_0000000000000000,
573 0b_0000000000000000,
574 0b_0000000000000000,
575 0b_0000000000000000,
576 0b_0000000000000000,
2425989e
KS
577 0b_0000000000011100,
578 0b_0000000000011100,
8686f9f6
KS
579 0b_0000000000000000,
580 0b_0000000000000000,
581 0b_0000000000000000,
582 0b_0000000000000000,
2425989e
KS
583 0b_0000000000011100,
584 0b_0000000000011100,
8686f9f6
KS
585 0b_0000000000000000,
586 0b_0000000000000000,
587 0b_0000000000000000
588 ],
589 mask: [
590 0b_0000000000000000,
591 0b_0000000000000000,
592 0b_0000000000000000,
593 0b_0000000000000000,
2425989e
KS
594 0b_0000000000011100,
595 0b_0000000000111110,
596 0b_0000000000111110,
597 0b_0000000000011100,
8686f9f6
KS
598 0b_0000000000000000,
599 0b_0000000000000000,
2425989e
KS
600 0b_0000000000011100,
601 0b_0000000000111110,
602 0b_0000000000111110,
603 0b_0000000000011100,
604 0b_0000000000000000,
605 0b_0000000000000000
606 ],
607 },
608 Glyph {
609 width: 9,
610 sym: '/',
611 bits: [
612 0b_0000000000000000,
613 0b_0000000000000000,
614 0b_0000000000000000,
615 0b_0000000000000100,
616 0b_0000000000000100,
617 0b_0000000000001000,
618 0b_0000000000001000,
619 0b_0000000000010000,
620 0b_0000000000010000,
621 0b_0000000000100000,
622 0b_0000000000100000,
623 0b_0000000001000000,
624 0b_0000000001000000,
625 0b_0000000000000000,
626 0b_0000000000000000,
627 0b_0000000000000000
628 ],
629 mask: [
630 0b_0000000000000000,
631 0b_0000000000000000,
632 0b_0000000000001110,
633 0b_0000000000001010,
634 0b_0000000000001010,
635 0b_0000000000010100,
636 0b_0000000000010100,
637 0b_0000000000101000,
638 0b_0000000000101000,
639 0b_0000000001010000,
640 0b_0000000001010000,
641 0b_0000000010100000,
642 0b_0000000010100000,
643 0b_0000000011100000,
8686f9f6
KS
644 0b_0000000000000000,
645 0b_0000000000000000
646 ],
647 },
87eacb3a
KS
648 Glyph {
649 width: 7,
650 sym: '.',
651 bits: [
652 0b_0000000000000000,
653 0b_0000000000000000,
654 0b_0000000000000000,
655 0b_0000000000000000,
656 0b_0000000000000000,
657 0b_0000000000000000,
658 0b_0000000000000000,
659 0b_0000000000000000,
660 0b_0000000000000000,
661 0b_0000000000000000,
662 0b_0000000000000000,
663 0b_0000000000011100,
664 0b_0000000000011100,
665 0b_0000000000000000,
666 0b_0000000000000000,
667 0b_0000000000000000
668 ],
669 mask: [
670 0b_0000000000000000,
671 0b_0000000000000000,
672 0b_0000000000000000,
673 0b_0000000000000000,
674 0b_0000000000000000,
675 0b_0000000000000000,
676 0b_0000000000000000,
677 0b_0000000000000000,
678 0b_0000000000000000,
679 0b_0000000000000000,
680 0b_0000000000011100,
681 0b_0000000000111110,
682 0b_0000000000111110,
683 0b_0000000000011100,
684 0b_0000000000000000,
685 0b_0000000000000000
686 ],
687 },
688 Glyph {
689 width: 12,
690 sym: 'x',
691 bits: [
692 0b_0000000000000000,
693 0b_0000000000000000,
694 0b_0000000000000000,
695 0b_0000000000000000,
696 0b_0000000000000000,
697 0b_0000000000000000,
698 0b_0000000000000000,
699 0b_0000001110011100,
700 0b_0000000111111000,
701 0b_0000000011110000,
702 0b_0000000011110000,
703 0b_0000000111111000,
704 0b_0000001110011100,
705 0b_0000000000000000,
706 0b_0000000000000000,
707 0b_0000000000000000
708 ],
709 mask: [
710 0b_0000000000000000,
711 0b_0000000000000000,
712 0b_0000000000000000,
713 0b_0000000000000000,
714 0b_0000000000000000,
715 0b_0000000000000000,
716 0b_0000001110011100,
717 0b_0000011111111110,
718 0b_0000011111111110,
719 0b_0000001111111100,
720 0b_0000001111111100,
721 0b_0000011111111110,
722 0b_0000011111111110,
723 0b_0000001110011100,
724 0b_0000000000000000,
725 0b_0000000000000000
726 ],
727 },
8686f9f6
KS
728 Glyph {
729 width: 12,
730 sym: ' ',
731 bits: [
732 0b_0000000000000000,
733 0b_0000000000000000,
734 0b_0000000000000000,
735 0b_0000000000000000,
736 0b_0000000000000000,
737 0b_0000000000000000,
738 0b_0000000000000000,
739 0b_0000000000000000,
740 0b_0000000000000000,
741 0b_0000000000000000,
742 0b_0000000000000000,
743 0b_0000000000000000,
744 0b_0000000000000000,
745 0b_0000000000000000,
746 0b_0000000000000000,
747 0b_0000000000000000
748 ],
749 mask: [
750 0b_0000000000000000,
751 0b_0000000000000000,
752 0b_0000000000000000,
753 0b_0000000000000000,
754 0b_0000000000000000,
755 0b_0000000000000000,
756 0b_0000000000000000,
757 0b_0000000000000000,
758 0b_0000000000000000,
759 0b_0000000000000000,
760 0b_0000000000000000,
761 0b_0000000000000000,
762 0b_0000000000000000,
763 0b_0000000000000000,
764 0b_0000000000000000,
765 0b_0000000000000000
766 ],
767 },
768];