Skip to content

Commit 1b0b689

Browse files
committed
optimize transform_4x4
1 parent dbb2dd1 commit 1b0b689

File tree

1 file changed

+25
-33
lines changed

1 file changed

+25
-33
lines changed

src/h264/residual.rs

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -344,62 +344,54 @@ pub fn unscan_block_4x4(block: &[i32]) -> Block4x4 {
344344
// Section 8.5.12.2 Transformation process for residual 4x4 blocks
345345
pub fn transform_4x4(block: &Block4x4) -> Block4x4 {
346346
let d = &block.samples;
347-
let mut tmp_block1 = Block4x4::default();
348-
let mut tmp_block2 = Block4x4::default();
349-
let e = &mut tmp_block1.samples;
347+
let mut tmp_block = Block4x4::default();
348+
349+
let f = &mut tmp_block.samples;
350350
for i in 0..4 {
351351
// (8-338)
352-
e[i][0] = d[i][0] + d[i][2];
352+
let e0 = d[i][0] + d[i][2];
353353
// (8-339)
354-
e[i][1] = d[i][0] - d[i][2];
354+
let e1 = d[i][0] - d[i][2];
355355
// (8-340)
356-
e[i][2] = (d[i][1] >> 1) - d[i][3];
356+
let e2 = (d[i][1] >> 1) - d[i][3];
357357
// (8-341)
358-
e[i][3] = d[i][1] + (d[i][3] >> 1);
359-
}
358+
let e3 = d[i][1] + (d[i][3] >> 1);
360359

361-
let f = &mut tmp_block2.samples;
362-
for i in 0..4 {
363360
// (8-342)
364-
f[i][0] = e[i][0] + e[i][3];
361+
f[i][0] = e0 + e3;
365362
// (8-343)
366-
f[i][1] = e[i][1] + e[i][2];
363+
f[i][1] = e1 + e2;
367364
// (8-344)
368-
f[i][2] = e[i][1] - e[i][2];
365+
f[i][2] = e1 - e2;
369366
// (8-345)
370-
f[i][3] = e[i][0] - e[i][3];
367+
f[i][3] = e0 - e3;
371368
}
372369

373-
let g = &mut tmp_block1.samples;
370+
let mut r_block = Block4x4::default();
371+
let r = &mut r_block.samples;
374372
for j in 0..4 {
375373
// (8-346)
376-
g[0][j] = f[0][j] + f[2][j];
374+
let g0 = f[0][j] + f[2][j];
377375
// (8-347)
378-
g[1][j] = f[0][j] - f[2][j];
376+
let g1 = f[0][j] - f[2][j];
379377
// (8-348)
380-
g[2][j] = (f[1][j] >> 1) - f[3][j];
378+
let g2 = (f[1][j] >> 1) - f[3][j];
381379
// (8-349)
382-
g[3][j] = f[1][j] + (f[3][j] >> 1);
383-
}
380+
let g3 = f[1][j] + (f[3][j] >> 1);
384381

385-
let h = &mut tmp_block2.samples;
386-
for j in 0..4 {
387382
// (8-350)
388-
h[0][j] = g[0][j] + g[3][j];
383+
let h0 = g0 + g3;
389384
// (8-351)
390-
h[1][j] = g[1][j] + g[2][j];
385+
let h1 = g1 + g2;
391386
// (8-352)
392-
h[2][j] = g[1][j] - g[2][j];
387+
let h2 = g1 - g2;
393388
// (8-353)
394-
h[3][j] = g[0][j] - g[3][j];
395-
}
389+
let h3 = g0 - g3;
396390

397-
let mut r_block = Block4x4::default();
398-
let r = &mut r_block.samples;
399-
for i in 0..4 {
400-
for j in 0..4 {
401-
r[i][j] = (h[i][j] + 32) >> 6;
402-
}
391+
r[0][j] = (h0 + 32) >> 6;
392+
r[1][j] = (h1 + 32) >> 6;
393+
r[2][j] = (h2 + 32) >> 6;
394+
r[3][j] = (h3 + 32) >> 6;
403395
}
404396

405397
r_block

0 commit comments

Comments
 (0)