corevm_video_test_common/
lib.rs

1#![no_std]
2
3pub struct VideoFrameGenerator {
4	frame: [u8; MAX_FRAME_LEN],
5	pub frame_number: usize,
6}
7
8impl VideoFrameGenerator {
9	pub fn new() -> Self {
10		Self { frame: [0; MAX_FRAME_LEN], frame_number: 0 }
11	}
12
13	pub fn generate(&mut self) -> &[u8] {
14		let mut offset = 1;
15		self.frame[0] = 1;
16		for i in 0..256 {
17			self.frame[offset + i * 3] = i as u8;
18			self.frame[offset + i * 3 + 1] = 127;
19			self.frame[offset + i * 3 + 2] = 255 - i as u8;
20		}
21		offset += PALETTE_LEN;
22		for y in 0..HEIGHT {
23			for x in 0..WIDTH {
24				let i = y + x + self.frame_number;
25				self.frame[offset + y * WIDTH + x] = (i % 256) as u8;
26			}
27		}
28		offset += PIXELS_LEN;
29		self.frame_number += 1;
30		&self.frame[..offset]
31	}
32}
33
34pub const WIDTH: usize = 320;
35pub const HEIGHT: usize = 200;
36pub const PALETTE_LEN: usize = 256 * 3;
37pub const PIXELS_LEN: usize = WIDTH * HEIGHT;
38pub const MAX_FRAME_LEN: usize = 1 + PALETTE_LEN + PIXELS_LEN;