Skip to content

Commit

Permalink
refactor most code into safe methods
Browse files Browse the repository at this point in the history
  • Loading branch information
Folkert de Vries committed Feb 23, 2024
1 parent 463f614 commit 3b5b46c
Showing 1 changed file with 64 additions and 55 deletions.
119 changes: 64 additions & 55 deletions src/intra_edge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,73 +74,82 @@ struct ModeSelMem {
}

unsafe fn init_edges(node: *mut EdgeNode, bl: BlockLevel, edge_flags: EdgeFlags) {
(*node).o = edge_flags;

if bl == BL_8X8 {
let nt = &mut *(node as *mut EdgeTip);
let node = &mut nt.node;

node.h[0] = edge_flags | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
node.h[1] =
edge_flags & (EdgeFlags::ALL_LEFT_HAS_BOTTOM | EdgeFlags::EDGE_I420_TOP_HAS_RIGHT);

node.v[0] = edge_flags | EdgeFlags::ALL_TOP_HAS_RIGHT;
node.v[1] = edge_flags
& (EdgeFlags::ALL_TOP_HAS_RIGHT
| EdgeFlags::EDGE_I420_LEFT_HAS_BOTTOM
| EdgeFlags::EDGE_I422_LEFT_HAS_BOTTOM);

nt.split[0] = EdgeFlags::ALL_TOP_HAS_RIGHT | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nt.split[1] =
(edge_flags & EdgeFlags::ALL_TOP_HAS_RIGHT) | EdgeFlags::EDGE_I422_LEFT_HAS_BOTTOM;
nt.split[2] = edge_flags | EdgeFlags::EDGE_I444_TOP_HAS_RIGHT;
nt.split[3] = edge_flags
& (EdgeFlags::EDGE_I420_TOP_HAS_RIGHT
| EdgeFlags::EDGE_I420_LEFT_HAS_BOTTOM
| EdgeFlags::EDGE_I422_LEFT_HAS_BOTTOM);
init_edges_tip(nt, edge_flags)
} else {
let nwc = &mut *(node as *mut EdgeBranch);
let node = &mut nwc.node;
init_edges_branch(nwc, bl, edge_flags)
}
}

node.h[0] = edge_flags | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
node.h[1] = edge_flags & EdgeFlags::ALL_LEFT_HAS_BOTTOM;
fn init_edges_tip(nt: &mut EdgeTip, edge_flags: EdgeFlags) {
let node = &mut nt.node;

node.v[0] = edge_flags | EdgeFlags::ALL_TOP_HAS_RIGHT;
node.v[1] = edge_flags & EdgeFlags::ALL_TOP_HAS_RIGHT;
node.o = edge_flags;

nwc.h4[0] = edge_flags | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.h4[1] = EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.h4[2] = nwc.h4[1];
nwc.h4[3] = edge_flags & EdgeFlags::ALL_LEFT_HAS_BOTTOM;
if bl == BL_16X16 {
nwc.h4[1] |= edge_flags & EdgeFlags::EDGE_I420_TOP_HAS_RIGHT;
}
node.h[0] = edge_flags | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
node.h[1] = edge_flags & (EdgeFlags::ALL_LEFT_HAS_BOTTOM | EdgeFlags::EDGE_I420_TOP_HAS_RIGHT);

nwc.v4[0] = edge_flags | EdgeFlags::ALL_TOP_HAS_RIGHT;
nwc.v4[1] = EdgeFlags::ALL_TOP_HAS_RIGHT;
nwc.v4[2] = nwc.v4[1];
nwc.v4[3] = edge_flags & EdgeFlags::ALL_TOP_HAS_RIGHT;
if bl == BL_16X16 {
nwc.v4[1] |= edge_flags
& (EdgeFlags::EDGE_I420_LEFT_HAS_BOTTOM | EdgeFlags::EDGE_I422_LEFT_HAS_BOTTOM);
}
node.v[0] = edge_flags | EdgeFlags::ALL_TOP_HAS_RIGHT;
node.v[1] = edge_flags
& (EdgeFlags::ALL_TOP_HAS_RIGHT
| EdgeFlags::EDGE_I420_LEFT_HAS_BOTTOM
| EdgeFlags::EDGE_I422_LEFT_HAS_BOTTOM);

nwc.tls[0] = EdgeFlags::ALL_TOP_HAS_RIGHT | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.tls[1] = edge_flags & EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.tls[2] = edge_flags & EdgeFlags::ALL_TOP_HAS_RIGHT;
nt.split[0] = EdgeFlags::ALL_TOP_HAS_RIGHT | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nt.split[1] =
(edge_flags & EdgeFlags::ALL_TOP_HAS_RIGHT) | EdgeFlags::EDGE_I422_LEFT_HAS_BOTTOM;
nt.split[2] = edge_flags | EdgeFlags::EDGE_I444_TOP_HAS_RIGHT;
nt.split[3] = edge_flags
& (EdgeFlags::EDGE_I420_TOP_HAS_RIGHT
| EdgeFlags::EDGE_I420_LEFT_HAS_BOTTOM
| EdgeFlags::EDGE_I422_LEFT_HAS_BOTTOM);
}

nwc.trs[0] = edge_flags | EdgeFlags::ALL_TOP_HAS_RIGHT;
nwc.trs[1] = edge_flags | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.trs[2] = EdgeFlags::empty();
fn init_edges_branch(nwc: &mut EdgeBranch, bl: BlockLevel, edge_flags: EdgeFlags) {
let node = &mut nwc.node;

nwc.tts[0] = EdgeFlags::ALL_TOP_HAS_RIGHT | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.tts[1] = edge_flags & EdgeFlags::ALL_TOP_HAS_RIGHT;
nwc.tts[2] = edge_flags & EdgeFlags::ALL_LEFT_HAS_BOTTOM;
node.o = edge_flags;

nwc.tbs[0] = edge_flags | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.tbs[1] = edge_flags | EdgeFlags::ALL_TOP_HAS_RIGHT;
nwc.tbs[2] = EdgeFlags::empty();
};
node.h[0] = edge_flags | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
node.h[1] = edge_flags & EdgeFlags::ALL_LEFT_HAS_BOTTOM;

node.v[0] = edge_flags | EdgeFlags::ALL_TOP_HAS_RIGHT;
node.v[1] = edge_flags & EdgeFlags::ALL_TOP_HAS_RIGHT;

nwc.h4[0] = edge_flags | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.h4[1] = EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.h4[2] = nwc.h4[1];
nwc.h4[3] = edge_flags & EdgeFlags::ALL_LEFT_HAS_BOTTOM;
if bl == BL_16X16 {
nwc.h4[1] |= edge_flags & EdgeFlags::EDGE_I420_TOP_HAS_RIGHT;
}

nwc.v4[0] = edge_flags | EdgeFlags::ALL_TOP_HAS_RIGHT;
nwc.v4[1] = EdgeFlags::ALL_TOP_HAS_RIGHT;
nwc.v4[2] = nwc.v4[1];
nwc.v4[3] = edge_flags & EdgeFlags::ALL_TOP_HAS_RIGHT;
if bl == BL_16X16 {
nwc.v4[1] |= edge_flags
& (EdgeFlags::EDGE_I420_LEFT_HAS_BOTTOM | EdgeFlags::EDGE_I422_LEFT_HAS_BOTTOM);
}

nwc.tls[0] = EdgeFlags::ALL_TOP_HAS_RIGHT | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.tls[1] = edge_flags & EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.tls[2] = edge_flags & EdgeFlags::ALL_TOP_HAS_RIGHT;

nwc.trs[0] = edge_flags | EdgeFlags::ALL_TOP_HAS_RIGHT;
nwc.trs[1] = edge_flags | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.trs[2] = EdgeFlags::empty();

nwc.tts[0] = EdgeFlags::ALL_TOP_HAS_RIGHT | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.tts[1] = edge_flags & EdgeFlags::ALL_TOP_HAS_RIGHT;
nwc.tts[2] = edge_flags & EdgeFlags::ALL_LEFT_HAS_BOTTOM;

nwc.tbs[0] = edge_flags | EdgeFlags::ALL_LEFT_HAS_BOTTOM;
nwc.tbs[1] = edge_flags | EdgeFlags::ALL_TOP_HAS_RIGHT;
nwc.tbs[2] = EdgeFlags::empty();
}

unsafe fn init_mode_node(
Expand Down

0 comments on commit 3b5b46c

Please sign in to comment.