-
Notifications
You must be signed in to change notification settings - Fork 259
/
Copy pathdenoise.rs
76 lines (71 loc) · 1.87 KB
/
denoise.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
use super::new_plane;
use criterion::*;
use rand::SeedableRng;
use rand_chacha::ChaChaRng;
use rav1e::bench::denoise::*;
use rav1e::prelude::*;
use std::collections::BTreeMap;
use std::sync::Arc;
fn bench_dft_denoiser_8b(c: &mut Criterion) {
let mut ra = ChaChaRng::from_seed([0; 32]);
let w = 640;
let h = 480;
let mut frame_queue = BTreeMap::new();
for i in 0..3 {
frame_queue.insert(
i,
Some(Arc::new(Frame {
planes: [
new_plane::<u8>(&mut ra, w, h),
new_plane::<u8>(&mut ra, w / 2, h / 2),
new_plane::<u8>(&mut ra, w / 2, h / 2),
],
})),
);
}
frame_queue.insert(3, None);
c.bench_function("dft_denoiser_8b", |b| {
b.iter_with_setup(
|| DftDenoiser::new(2.0, w, h, 8, ChromaSampling::Cs420),
|mut denoiser| {
for _ in 0..3 {
let _ = black_box(denoiser.filter_frame(&frame_queue));
}
},
)
});
}
fn bench_dft_denoiser_10b(c: &mut Criterion) {
let mut ra = ChaChaRng::from_seed([0; 32]);
let w = 640;
let h = 480;
let mut frame_queue = BTreeMap::new();
for i in 0..3 {
let mut frame = Frame {
planes: [
new_plane::<u16>(&mut ra, w, h),
new_plane::<u16>(&mut ra, w / 2, h / 2),
new_plane::<u16>(&mut ra, w / 2, h / 2),
],
};
for p in 0..3 {
// Shift from 16-bit to 10-bit
frame.planes[p].data.iter_mut().for_each(|pix| {
*pix = *pix >> 6;
});
}
frame_queue.insert(i, Some(Arc::new(frame)));
}
frame_queue.insert(3, None);
c.bench_function("dft_denoiser_10b", |b| {
b.iter_with_setup(
|| DftDenoiser::new(2.0, w, h, 10, ChromaSampling::Cs420),
|mut denoiser| {
for _ in 0..3 {
let _ = black_box(denoiser.filter_frame(&frame_queue));
}
},
)
});
}
criterion_group!(denoise, bench_dft_denoiser_8b, bench_dft_denoiser_10b);