aboutsummaryrefslogtreecommitdiff
path: root/flowy/src/motion
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-01-24 02:16:03 +0100
committermetamuffin <metamuffin@disroot.org>2024-01-24 02:16:03 +0100
commit330cbef6f1953de3e1cbeb5aed03e951bc101965 (patch)
treefc4566dc27ac3d6487fbfe125166335324fd7d88 /flowy/src/motion
parent754ebf34cbb6280ef77421e1ca54d35d727dc6f7 (diff)
downloadvideo-codec-experiments-330cbef6f1953de3e1cbeb5aed03e951bc101965.tar
video-codec-experiments-330cbef6f1953de3e1cbeb5aed03e951bc101965.tar.bz2
video-codec-experiments-330cbef6f1953de3e1cbeb5aed03e951bc101965.tar.zst
fix it?
Diffstat (limited to 'flowy/src/motion')
-rw-r--r--flowy/src/motion/debug.wgsl12
-rw-r--r--flowy/src/motion/enc.rs4
-rw-r--r--flowy/src/motion/enc.wgsl17
-rw-r--r--flowy/src/motion/mod.rs43
4 files changed, 70 insertions, 6 deletions
diff --git a/flowy/src/motion/debug.wgsl b/flowy/src/motion/debug.wgsl
index 7da5c57..d2c56a4 100644
--- a/flowy/src/motion/debug.wgsl
+++ b/flowy/src/motion/debug.wgsl
@@ -29,6 +29,18 @@ struct BlockOffset {
textureStore(out, base, col);
}
}
+
+ // for (var x = 0; x < params.block_size.x; x++) {
+ // for (var y = 0; y < params.block_size.y; y++) {
+ // let base = uv + vec2(x, y);
+ // let col_dec = textureLoad(prev, base + bl.offset, 0) + vec4(bl.tint, 1.);
+ // let col_orig = textureLoad(next, base, 0);
+
+ // let col = vec4( saturate((0.5) + (col_orig.rgb - col_dec.rgb) * 100.), 1.0);
+
+ // textureStore(out, base, col);
+ // }
+ // }
}
diff --git a/flowy/src/motion/enc.rs b/flowy/src/motion/enc.rs
index d3e8a81..1a46aa6 100644
--- a/flowy/src/motion/enc.rs
+++ b/flowy/src/motion/enc.rs
@@ -37,8 +37,8 @@ impl MotionEncoder {
let uniform = EncoderUniform {
block_size: [params.block_width as i32, params.block_height as i32],
output_stride: (params.width / params.block_width) as u32,
- search_radius: 16,
- skip_threshold: 0.1,
+ search_radius: 24,
+ skip_threshold: 1.,
..Default::default()
};
diff --git a/flowy/src/motion/enc.wgsl b/flowy/src/motion/enc.wgsl
index 80618b7..ca3c769 100644
--- a/flowy/src/motion/enc.wgsl
+++ b/flowy/src/motion/enc.wgsl
@@ -30,16 +30,28 @@ var<private> best_tint: vec3<f32> = vec3(0.);
apply_tint(uv);
if best_error < params.skip_threshold { break; }
best_tint = vec3(0.);
+ best_error = 10000000.;
+ do_dist(uv, 64);
+ if best_error < params.skip_threshold { break; }
do_dist(uv, 32);
+ if best_error < params.skip_threshold { break; }
+ do_dist(uv, 24);
+ if best_error < params.skip_threshold { break; }
do_dist(uv, 16);
- do_dist(uv, 10);
+ if best_error < params.skip_threshold { break; }
+ do_dist(uv, 12);
+ if best_error < params.skip_threshold { break; }
do_dist(uv, 8);
if best_error < params.skip_threshold { break; }
do_dist(uv, 6);
- do_dist(uv, 3);
+ if best_error < params.skip_threshold { break; }
do_dist(uv, 4);
+ if best_error < params.skip_threshold { break; }
+ do_dist(uv, 3);
+ if best_error < params.skip_threshold { break; }
do_dist(uv, 2);
+ if best_error < params.skip_threshold { break; }
do_dist(uv, 1);
if best_error < params.skip_threshold { break; }
@@ -85,6 +97,7 @@ fn apply_tint(uv: vec2<i32>) {
}
}
if err < best_error {
+ best_error = err;
best_tint = tint;
}
}
diff --git a/flowy/src/motion/mod.rs b/flowy/src/motion/mod.rs
index cd53550..337290f 100644
--- a/flowy/src/motion/mod.rs
+++ b/flowy/src/motion/mod.rs
@@ -102,7 +102,7 @@ impl CommonBuffers {
}
}
- pub fn upload(&self, queue: &Queue, params: &Params, rp: &RoundParams, buffer: &[u8]) {
+ pub fn upload_texture(&self, queue: &Queue, params: &Params, rp: &RoundParams, buffer: &[u8]) {
queue.write_texture(
ImageCopyTexture {
aspect: wgpu::TextureAspect::All,
@@ -119,6 +119,23 @@ impl CommonBuffers {
params.extent,
);
}
+ // pub fn upload_offsets(&self, queue: &Queue, params: &Params, rp: &RoundParams, buffer: &[u8]) {
+ // queue.write_texture(
+ // ImageCopyTexture {
+ // aspect: wgpu::TextureAspect::All,
+ // mip_level: 0,
+ // origin: Origin3d::ZERO,
+ // texture: &self.textures[rp.swap],
+ // },
+ // buffer,
+ // wgpu::ImageDataLayout {
+ // offset: 0,
+ // bytes_per_row: Some(params.extent.width * 4),
+ // rows_per_image: Some(params.extent.height),
+ // },
+ // params.extent,
+ // );
+ // }
pub fn prepare_texture_download(
&self,
@@ -148,8 +165,30 @@ impl CommonBuffers {
params.extent,
);
}
+ pub fn prepare_offsets_download(&self, encoder: &mut CommandEncoder, params: &Params) {
+ encoder.copy_buffer_to_buffer(
+ &self.offsets,
+ 0,
+ self.offsets_download.as_ref().unwrap(),
+ 0,
+ (params.blocks * size_of::<BlockOffset>()) as u64,
+ );
+ }
+
+ pub fn download_offsets(&self, device: &Device, buffer: &mut [u8]) {
+ let buffer_slice = self.offsets_download.as_ref().unwrap().slice(..);
+ let (sender, receiver) = oneshot::channel();
+ buffer_slice.map_async(wgpu::MapMode::Read, move |r| sender.send(r).unwrap());
+ device.poll(wgpu::Maintain::Wait);
+ receiver.recv().unwrap().unwrap();
+ {
+ let view = buffer_slice.get_mapped_range();
+ buffer.copy_from_slice(&view[..]);
+ }
+ self.offsets_download.as_ref().unwrap().unmap();
+ }
- pub fn download(&self, device: &Device, buffer: &mut [u8]) {
+ pub fn download_texture(&self, device: &Device, buffer: &mut [u8]) {
let buffer_slice = self.texture_download.as_ref().unwrap().slice(..);
let (sender, receiver) = oneshot::channel();
buffer_slice.map_async(wgpu::MapMode::Read, move |r| sender.send(r).unwrap());