av_scenechange/data/
superblock.rs1use crate::data::{
2 block::{BlockOffset, MIB_SIZE_LOG2},
3 tile::TileBlockOffset,
4};
5
6pub const MAX_SB_SIZE_LOG2: usize = 7;
7pub const SUPERBLOCK_TO_BLOCK_SHIFT: usize = MIB_SIZE_LOG2;
8pub const SB_SIZE_LOG2: usize = 6;
9pub const SB_SIZE: usize = 1 << SB_SIZE_LOG2;
10pub const MI_SIZE_LOG2: usize = 2;
11pub const MI_SIZE: usize = 1 << MI_SIZE_LOG2;
12
13#[derive(Clone, Copy, Debug, PartialEq, Eq)]
16pub struct TileSuperBlockOffset(pub SuperBlockOffset);
17
18impl TileSuperBlockOffset {
19 pub const fn block_offset(self, block_x: usize, block_y: usize) -> TileBlockOffset {
21 TileBlockOffset(self.0.block_offset(block_x, block_y))
22 }
23}
24
25#[derive(Clone, Copy, Debug, PartialEq, Eq)]
28pub struct PlaneSuperBlockOffset(pub SuperBlockOffset);
29
30#[derive(Clone, Copy, Debug, PartialEq, Eq)]
33pub struct SuperBlockOffset {
34 pub x: usize,
35 pub y: usize,
36}
37
38impl SuperBlockOffset {
39 const fn block_offset(self, block_x: usize, block_y: usize) -> BlockOffset {
41 BlockOffset {
42 x: (self.x << SUPERBLOCK_TO_BLOCK_SHIFT) + block_x,
43 y: (self.y << SUPERBLOCK_TO_BLOCK_SHIFT) + block_y,
44 }
45 }
46}