diff --git a/.gitignore b/.gitignore index 2960132..8223a29 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ /target test.iq test.py +/frames +*.png +*.mp4 diff --git a/Cargo.lock b/Cargo.lock index 675de15..bdf77ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -635,9 +635,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" [[package]] name = "calloop" @@ -1421,15 +1421,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi 6.0.0", - "wasip2", - "wasip3", ] [[package]] @@ -1603,12 +1601,6 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - [[package]] name = "hermit-abi" version = "0.5.2" @@ -1709,12 +1701,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "idna" version = "1.1.0" @@ -1772,9 +1758,9 @@ dependencies = [ [[package]] name = "imgref" -version = "1.12.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40fac9d56ed6437b198fddba683305e8e2d651aa42647f00f5ae542e7f5c94a2" +checksum = "89194689a993ab15268672e99e7b0e19da2da3268ac682e8f02d29d4d1434cd7" [[package]] name = "indexmap" @@ -1784,8 +1770,6 @@ checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", "hashbrown 0.17.1", - "serde", - "serde_core", ] [[package]] @@ -1821,12 +1805,6 @@ dependencies = [ "either", ] -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - [[package]] name = "jni" version = "0.22.4" @@ -1935,12 +1913,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "lebe" version = "0.5.3" @@ -2859,16 +2831,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -3259,19 +3221,6 @@ dependencies = [ "syn", ] -[[package]] -name = "serde_json" -version = "1.0.150" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - [[package]] name = "serde_repr" version = "0.1.20" @@ -3468,9 +3417,9 @@ checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" [[package]] name = "syn" -version = "2.0.117" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", @@ -3495,7 +3444,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.4.3", "once_cell", "rustix 1.1.4", "windows-sys 0.61.2", @@ -3705,12 +3654,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "unit-prefix" version = "0.5.2" @@ -3805,16 +3748,7 @@ version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] @@ -3872,40 +3806,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags 2.13.0", - "hashbrown 0.15.5", - "indexmap", - "semver", -] - [[package]] name = "wayland-backend" version = "0.3.15" @@ -4606,100 +4506,12 @@ dependencies = [ "memchr", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck", - "indexmap", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.13.0", - "indexmap", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "writeable" version = "0.6.3" @@ -4969,12 +4781,6 @@ dependencies = [ "syn", ] -[[package]] -name = "zmij" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" - [[package]] name = "zune-core" version = "0.5.1" diff --git a/frames/frame_0000.png b/frames/frame_0000.png new file mode 100644 index 0000000..1c5c970 Binary files /dev/null and b/frames/frame_0000.png differ diff --git a/frames/frame_0001.png b/frames/frame_0001.png new file mode 100644 index 0000000..acb8c17 Binary files /dev/null and b/frames/frame_0001.png differ diff --git a/frames/frame_0002.png b/frames/frame_0002.png new file mode 100644 index 0000000..1b5d7df Binary files /dev/null and b/frames/frame_0002.png differ diff --git a/frames/frame_0003.png b/frames/frame_0003.png new file mode 100644 index 0000000..e6c05ff Binary files /dev/null and b/frames/frame_0003.png differ diff --git a/frames/frame_0004.png b/frames/frame_0004.png new file mode 100644 index 0000000..ec33cf7 Binary files /dev/null and b/frames/frame_0004.png differ diff --git a/frames/frame_0005.png b/frames/frame_0005.png new file mode 100644 index 0000000..679e087 Binary files /dev/null and b/frames/frame_0005.png differ diff --git a/frames/frame_0006.png b/frames/frame_0006.png new file mode 100644 index 0000000..afb12fd Binary files /dev/null and b/frames/frame_0006.png differ diff --git a/frames/frame_0007.png b/frames/frame_0007.png new file mode 100644 index 0000000..feb7d5f Binary files /dev/null and b/frames/frame_0007.png differ diff --git a/frames/frame_0008.png b/frames/frame_0008.png new file mode 100644 index 0000000..a6b2101 Binary files /dev/null and b/frames/frame_0008.png differ diff --git a/frames/frame_0009.png b/frames/frame_0009.png new file mode 100644 index 0000000..c796d50 Binary files /dev/null and b/frames/frame_0009.png differ diff --git a/frames/frame_0010.png b/frames/frame_0010.png new file mode 100644 index 0000000..47b1a0d Binary files /dev/null and b/frames/frame_0010.png differ diff --git a/frames/frame_0011.png b/frames/frame_0011.png new file mode 100644 index 0000000..1f5f2a5 Binary files /dev/null and b/frames/frame_0011.png differ diff --git a/frames/frame_0012.png b/frames/frame_0012.png new file mode 100644 index 0000000..f416616 Binary files /dev/null and b/frames/frame_0012.png differ diff --git a/frames/frame_0013.png b/frames/frame_0013.png new file mode 100644 index 0000000..2bc9209 Binary files /dev/null and b/frames/frame_0013.png differ diff --git a/frames/frame_0014.png b/frames/frame_0014.png new file mode 100644 index 0000000..55d6b4b Binary files /dev/null and b/frames/frame_0014.png differ diff --git a/frames/frame_0015.png b/frames/frame_0015.png new file mode 100644 index 0000000..8daaeaf Binary files /dev/null and b/frames/frame_0015.png differ diff --git a/frames/frame_0016.png b/frames/frame_0016.png new file mode 100644 index 0000000..ae9c12f Binary files /dev/null and b/frames/frame_0016.png differ diff --git a/frames/frame_0017.png b/frames/frame_0017.png new file mode 100644 index 0000000..a467992 Binary files /dev/null and b/frames/frame_0017.png differ diff --git a/frames/frame_0018.png b/frames/frame_0018.png new file mode 100644 index 0000000..3edff6f Binary files /dev/null and b/frames/frame_0018.png differ diff --git a/frames/frame_0019.png b/frames/frame_0019.png new file mode 100644 index 0000000..14db62f Binary files /dev/null and b/frames/frame_0019.png differ diff --git a/frames/frame_0020.png b/frames/frame_0020.png new file mode 100644 index 0000000..626ef49 Binary files /dev/null and b/frames/frame_0020.png differ diff --git a/frames/frame_0021.png b/frames/frame_0021.png new file mode 100644 index 0000000..a605714 Binary files /dev/null and b/frames/frame_0021.png differ diff --git a/frames/frame_0022.png b/frames/frame_0022.png new file mode 100644 index 0000000..db7e0ed Binary files /dev/null and b/frames/frame_0022.png differ diff --git a/frames/frame_0023.png b/frames/frame_0023.png new file mode 100644 index 0000000..29bb058 Binary files /dev/null and b/frames/frame_0023.png differ diff --git a/frames/frame_0024.png b/frames/frame_0024.png new file mode 100644 index 0000000..4e27a52 Binary files /dev/null and b/frames/frame_0024.png differ diff --git a/frames/frame_0025.png b/frames/frame_0025.png new file mode 100644 index 0000000..71c1b06 Binary files /dev/null and b/frames/frame_0025.png differ diff --git a/frames/frame_0026.png b/frames/frame_0026.png new file mode 100644 index 0000000..d97842a Binary files /dev/null and b/frames/frame_0026.png differ diff --git a/frames/frame_0027.png b/frames/frame_0027.png new file mode 100644 index 0000000..53a4464 Binary files /dev/null and b/frames/frame_0027.png differ diff --git a/frames/frame_0028.png b/frames/frame_0028.png new file mode 100644 index 0000000..d01e47b Binary files /dev/null and b/frames/frame_0028.png differ diff --git a/frames/frame_0029.png b/frames/frame_0029.png new file mode 100644 index 0000000..71c54b2 Binary files /dev/null and b/frames/frame_0029.png differ diff --git a/frames/frame_0030.png b/frames/frame_0030.png new file mode 100644 index 0000000..c689fb7 Binary files /dev/null and b/frames/frame_0030.png differ diff --git a/frames/frame_0031.png b/frames/frame_0031.png new file mode 100644 index 0000000..d53f9a2 Binary files /dev/null and b/frames/frame_0031.png differ diff --git a/frames/frame_0032.png b/frames/frame_0032.png new file mode 100644 index 0000000..e2b4960 Binary files /dev/null and b/frames/frame_0032.png differ diff --git a/frames/frame_0033.png b/frames/frame_0033.png new file mode 100644 index 0000000..dd450a9 Binary files /dev/null and b/frames/frame_0033.png differ diff --git a/frames/frame_0034.png b/frames/frame_0034.png new file mode 100644 index 0000000..8709ade Binary files /dev/null and b/frames/frame_0034.png differ diff --git a/frames/frame_0035.png b/frames/frame_0035.png new file mode 100644 index 0000000..ef5f07d Binary files /dev/null and b/frames/frame_0035.png differ diff --git a/frames/frame_0036.png b/frames/frame_0036.png new file mode 100644 index 0000000..c047d9b Binary files /dev/null and b/frames/frame_0036.png differ diff --git a/frames/frame_0037.png b/frames/frame_0037.png new file mode 100644 index 0000000..2ac23f2 Binary files /dev/null and b/frames/frame_0037.png differ diff --git a/frames/frame_0038.png b/frames/frame_0038.png new file mode 100644 index 0000000..3cbd44d Binary files /dev/null and b/frames/frame_0038.png differ diff --git a/frames/frame_0039.png b/frames/frame_0039.png new file mode 100644 index 0000000..ad86e64 Binary files /dev/null and b/frames/frame_0039.png differ diff --git a/frames/frame_0040.png b/frames/frame_0040.png new file mode 100644 index 0000000..94e9276 Binary files /dev/null and b/frames/frame_0040.png differ diff --git a/frames/frame_0041.png b/frames/frame_0041.png new file mode 100644 index 0000000..5290eb9 Binary files /dev/null and b/frames/frame_0041.png differ diff --git a/frames/frame_0042.png b/frames/frame_0042.png new file mode 100644 index 0000000..7171e4f Binary files /dev/null and b/frames/frame_0042.png differ diff --git a/frames/frame_0043.png b/frames/frame_0043.png new file mode 100644 index 0000000..2ed5995 Binary files /dev/null and b/frames/frame_0043.png differ diff --git a/frames/frame_0044.png b/frames/frame_0044.png new file mode 100644 index 0000000..64ec1d7 Binary files /dev/null and b/frames/frame_0044.png differ diff --git a/frames/frame_0045.png b/frames/frame_0045.png new file mode 100644 index 0000000..86546c9 Binary files /dev/null and b/frames/frame_0045.png differ diff --git a/frames/frame_0046.png b/frames/frame_0046.png new file mode 100644 index 0000000..6072478 Binary files /dev/null and b/frames/frame_0046.png differ diff --git a/frames/frame_0047.png b/frames/frame_0047.png new file mode 100644 index 0000000..82042e1 Binary files /dev/null and b/frames/frame_0047.png differ diff --git a/frames/frame_0048.png b/frames/frame_0048.png new file mode 100644 index 0000000..2ffd55f Binary files /dev/null and b/frames/frame_0048.png differ diff --git a/frames/frame_0049.png b/frames/frame_0049.png new file mode 100644 index 0000000..d5ba221 Binary files /dev/null and b/frames/frame_0049.png differ diff --git a/frames/frame_0050.png b/frames/frame_0050.png new file mode 100644 index 0000000..3e8ea5c Binary files /dev/null and b/frames/frame_0050.png differ diff --git a/frames/frame_0051.png b/frames/frame_0051.png new file mode 100644 index 0000000..da313c6 Binary files /dev/null and b/frames/frame_0051.png differ diff --git a/frames/frame_0052.png b/frames/frame_0052.png new file mode 100644 index 0000000..e0f24d5 Binary files /dev/null and b/frames/frame_0052.png differ diff --git a/frames/frame_0053.png b/frames/frame_0053.png new file mode 100644 index 0000000..2211a53 Binary files /dev/null and b/frames/frame_0053.png differ diff --git a/frames/frame_0054.png b/frames/frame_0054.png new file mode 100644 index 0000000..9f6b5c0 Binary files /dev/null and b/frames/frame_0054.png differ diff --git a/frames/frame_0055.png b/frames/frame_0055.png new file mode 100644 index 0000000..5adaa68 Binary files /dev/null and b/frames/frame_0055.png differ diff --git a/frames/frame_0056.png b/frames/frame_0056.png new file mode 100644 index 0000000..091f9b4 Binary files /dev/null and b/frames/frame_0056.png differ diff --git a/frames/frame_0057.png b/frames/frame_0057.png new file mode 100644 index 0000000..8a2a8b3 Binary files /dev/null and b/frames/frame_0057.png differ diff --git a/frames/frame_0058.png b/frames/frame_0058.png new file mode 100644 index 0000000..3f5c6e3 Binary files /dev/null and b/frames/frame_0058.png differ diff --git a/frames/frame_0059.png b/frames/frame_0059.png new file mode 100644 index 0000000..79ef555 Binary files /dev/null and b/frames/frame_0059.png differ diff --git a/frames/frame_0060.png b/frames/frame_0060.png new file mode 100644 index 0000000..03618bb Binary files /dev/null and b/frames/frame_0060.png differ diff --git a/frames/frame_0061.png b/frames/frame_0061.png new file mode 100644 index 0000000..923fe39 Binary files /dev/null and b/frames/frame_0061.png differ diff --git a/frames/frame_0062.png b/frames/frame_0062.png new file mode 100644 index 0000000..90eb4e8 Binary files /dev/null and b/frames/frame_0062.png differ diff --git a/frames/frame_0063.png b/frames/frame_0063.png new file mode 100644 index 0000000..34a7f3a Binary files /dev/null and b/frames/frame_0063.png differ diff --git a/frames/frame_0064.png b/frames/frame_0064.png new file mode 100644 index 0000000..b8468f3 Binary files /dev/null and b/frames/frame_0064.png differ diff --git a/frames/frame_0065.png b/frames/frame_0065.png new file mode 100644 index 0000000..173affb Binary files /dev/null and b/frames/frame_0065.png differ diff --git a/frames/frame_0066.png b/frames/frame_0066.png new file mode 100644 index 0000000..dfcda77 Binary files /dev/null and b/frames/frame_0066.png differ diff --git a/frames/frame_0067.png b/frames/frame_0067.png new file mode 100644 index 0000000..5a13aab Binary files /dev/null and b/frames/frame_0067.png differ diff --git a/frames/frame_0068.png b/frames/frame_0068.png new file mode 100644 index 0000000..d0e209f Binary files /dev/null and b/frames/frame_0068.png differ diff --git a/frames/frame_0069.png b/frames/frame_0069.png new file mode 100644 index 0000000..fcafa80 Binary files /dev/null and b/frames/frame_0069.png differ diff --git a/frames/frame_0070.png b/frames/frame_0070.png new file mode 100644 index 0000000..a808b75 Binary files /dev/null and b/frames/frame_0070.png differ diff --git a/frames/frame_0071.png b/frames/frame_0071.png new file mode 100644 index 0000000..2648fb6 Binary files /dev/null and b/frames/frame_0071.png differ diff --git a/frames/frame_0072.png b/frames/frame_0072.png new file mode 100644 index 0000000..cb8088a Binary files /dev/null and b/frames/frame_0072.png differ diff --git a/frames/frame_0073.png b/frames/frame_0073.png new file mode 100644 index 0000000..a43c0e2 Binary files /dev/null and b/frames/frame_0073.png differ diff --git a/frames/frame_0074.png b/frames/frame_0074.png new file mode 100644 index 0000000..bb779a0 Binary files /dev/null and b/frames/frame_0074.png differ diff --git a/frames/frame_0075.png b/frames/frame_0075.png new file mode 100644 index 0000000..f149f43 Binary files /dev/null and b/frames/frame_0075.png differ diff --git a/frames/frame_0076.png b/frames/frame_0076.png new file mode 100644 index 0000000..a589495 Binary files /dev/null and b/frames/frame_0076.png differ diff --git a/frames/frame_0077.png b/frames/frame_0077.png new file mode 100644 index 0000000..c823a35 Binary files /dev/null and b/frames/frame_0077.png differ diff --git a/frames/frame_0078.png b/frames/frame_0078.png new file mode 100644 index 0000000..48372dd Binary files /dev/null and b/frames/frame_0078.png differ diff --git a/frames/frame_0079.png b/frames/frame_0079.png new file mode 100644 index 0000000..c9453d7 Binary files /dev/null and b/frames/frame_0079.png differ diff --git a/frames/frame_0080.png b/frames/frame_0080.png new file mode 100644 index 0000000..8f845b4 Binary files /dev/null and b/frames/frame_0080.png differ diff --git a/frames/frame_0081.png b/frames/frame_0081.png new file mode 100644 index 0000000..ed2ceac Binary files /dev/null and b/frames/frame_0081.png differ diff --git a/frames/frame_0082.png b/frames/frame_0082.png new file mode 100644 index 0000000..3c75979 Binary files /dev/null and b/frames/frame_0082.png differ diff --git a/frames/frame_0083.png b/frames/frame_0083.png new file mode 100644 index 0000000..c53a6d2 Binary files /dev/null and b/frames/frame_0083.png differ diff --git a/frames/frame_0084.png b/frames/frame_0084.png new file mode 100644 index 0000000..3bab327 Binary files /dev/null and b/frames/frame_0084.png differ diff --git a/frames/frame_0085.png b/frames/frame_0085.png new file mode 100644 index 0000000..d658610 Binary files /dev/null and b/frames/frame_0085.png differ diff --git a/frames/frame_0086.png b/frames/frame_0086.png new file mode 100644 index 0000000..0528e66 Binary files /dev/null and b/frames/frame_0086.png differ diff --git a/frames/frame_0087.png b/frames/frame_0087.png new file mode 100644 index 0000000..9571001 Binary files /dev/null and b/frames/frame_0087.png differ diff --git a/frames/frame_0088.png b/frames/frame_0088.png new file mode 100644 index 0000000..2553b9c Binary files /dev/null and b/frames/frame_0088.png differ diff --git a/frames/frame_0089.png b/frames/frame_0089.png new file mode 100644 index 0000000..b2ea8d9 Binary files /dev/null and b/frames/frame_0089.png differ diff --git a/frames/frame_0090.png b/frames/frame_0090.png new file mode 100644 index 0000000..a35455f Binary files /dev/null and b/frames/frame_0090.png differ diff --git a/frames/frame_0091.png b/frames/frame_0091.png new file mode 100644 index 0000000..212b4c6 Binary files /dev/null and b/frames/frame_0091.png differ diff --git a/frames/frame_0092.png b/frames/frame_0092.png new file mode 100644 index 0000000..80e452b Binary files /dev/null and b/frames/frame_0092.png differ diff --git a/frames/frame_0093.png b/frames/frame_0093.png new file mode 100644 index 0000000..768db33 Binary files /dev/null and b/frames/frame_0093.png differ diff --git a/frames/frame_0094.png b/frames/frame_0094.png new file mode 100644 index 0000000..bb94fce Binary files /dev/null and b/frames/frame_0094.png differ diff --git a/frames/frame_0095.png b/frames/frame_0095.png new file mode 100644 index 0000000..53c4482 Binary files /dev/null and b/frames/frame_0095.png differ diff --git a/frames/frame_0096.png b/frames/frame_0096.png new file mode 100644 index 0000000..d1d7c0d Binary files /dev/null and b/frames/frame_0096.png differ diff --git a/frames/frame_0097.png b/frames/frame_0097.png new file mode 100644 index 0000000..1c71a94 Binary files /dev/null and b/frames/frame_0097.png differ diff --git a/frames/frame_0098.png b/frames/frame_0098.png new file mode 100644 index 0000000..369d03a Binary files /dev/null and b/frames/frame_0098.png differ diff --git a/frames/frame_0099.png b/frames/frame_0099.png new file mode 100644 index 0000000..b26b4e1 Binary files /dev/null and b/frames/frame_0099.png differ diff --git a/frames/frame_0100.png b/frames/frame_0100.png new file mode 100644 index 0000000..32553fa Binary files /dev/null and b/frames/frame_0100.png differ diff --git a/frames/frame_0101.png b/frames/frame_0101.png new file mode 100644 index 0000000..fbab807 Binary files /dev/null and b/frames/frame_0101.png differ diff --git a/frames/frame_0102.png b/frames/frame_0102.png new file mode 100644 index 0000000..3772023 Binary files /dev/null and b/frames/frame_0102.png differ diff --git a/frames/frame_0103.png b/frames/frame_0103.png new file mode 100644 index 0000000..cc1b940 Binary files /dev/null and b/frames/frame_0103.png differ diff --git a/frames/frame_0104.png b/frames/frame_0104.png new file mode 100644 index 0000000..39c3bf6 Binary files /dev/null and b/frames/frame_0104.png differ diff --git a/frames/frame_0105.png b/frames/frame_0105.png new file mode 100644 index 0000000..f144f53 Binary files /dev/null and b/frames/frame_0105.png differ diff --git a/frames/frame_0106.png b/frames/frame_0106.png new file mode 100644 index 0000000..02b595c Binary files /dev/null and b/frames/frame_0106.png differ diff --git a/frames/frame_0107.png b/frames/frame_0107.png new file mode 100644 index 0000000..68e2de7 Binary files /dev/null and b/frames/frame_0107.png differ diff --git a/frames/frame_0108.png b/frames/frame_0108.png new file mode 100644 index 0000000..6e627d6 Binary files /dev/null and b/frames/frame_0108.png differ diff --git a/frames/frame_0109.png b/frames/frame_0109.png new file mode 100644 index 0000000..e816369 Binary files /dev/null and b/frames/frame_0109.png differ diff --git a/frames/frame_0110.png b/frames/frame_0110.png new file mode 100644 index 0000000..119169a Binary files /dev/null and b/frames/frame_0110.png differ diff --git a/frames/frame_0111.png b/frames/frame_0111.png new file mode 100644 index 0000000..9dd5273 Binary files /dev/null and b/frames/frame_0111.png differ diff --git a/frames/frame_0112.png b/frames/frame_0112.png new file mode 100644 index 0000000..d5d78bb Binary files /dev/null and b/frames/frame_0112.png differ diff --git a/frames/frame_0113.png b/frames/frame_0113.png new file mode 100644 index 0000000..0327dc0 Binary files /dev/null and b/frames/frame_0113.png differ diff --git a/frames/frame_0114.png b/frames/frame_0114.png new file mode 100644 index 0000000..3838569 Binary files /dev/null and b/frames/frame_0114.png differ diff --git a/frames/frame_0115.png b/frames/frame_0115.png new file mode 100644 index 0000000..944f314 Binary files /dev/null and b/frames/frame_0115.png differ diff --git a/frames/frame_0116.png b/frames/frame_0116.png new file mode 100644 index 0000000..83da927 Binary files /dev/null and b/frames/frame_0116.png differ diff --git a/frames/frame_0117.png b/frames/frame_0117.png new file mode 100644 index 0000000..1810691 Binary files /dev/null and b/frames/frame_0117.png differ diff --git a/frames/frame_0118.png b/frames/frame_0118.png new file mode 100644 index 0000000..629f4df Binary files /dev/null and b/frames/frame_0118.png differ diff --git a/frames/frame_0119.png b/frames/frame_0119.png new file mode 100644 index 0000000..cc5b90b Binary files /dev/null and b/frames/frame_0119.png differ diff --git a/frames/frame_0120.png b/frames/frame_0120.png new file mode 100644 index 0000000..406d0b4 Binary files /dev/null and b/frames/frame_0120.png differ diff --git a/frames/frame_0121.png b/frames/frame_0121.png new file mode 100644 index 0000000..a55c4d1 Binary files /dev/null and b/frames/frame_0121.png differ diff --git a/frames/frame_0122.png b/frames/frame_0122.png new file mode 100644 index 0000000..50f7bd4 Binary files /dev/null and b/frames/frame_0122.png differ diff --git a/frames/frame_0123.png b/frames/frame_0123.png new file mode 100644 index 0000000..bad1302 Binary files /dev/null and b/frames/frame_0123.png differ diff --git a/frames/frame_0124.png b/frames/frame_0124.png new file mode 100644 index 0000000..54b85a8 Binary files /dev/null and b/frames/frame_0124.png differ diff --git a/frames/frame_0125.png b/frames/frame_0125.png new file mode 100644 index 0000000..abcb278 Binary files /dev/null and b/frames/frame_0125.png differ diff --git a/frames/frame_0126.png b/frames/frame_0126.png new file mode 100644 index 0000000..d0f5bb0 Binary files /dev/null and b/frames/frame_0126.png differ diff --git a/frames/frame_0127.png b/frames/frame_0127.png new file mode 100644 index 0000000..2ae6954 Binary files /dev/null and b/frames/frame_0127.png differ diff --git a/frames/frame_0128.png b/frames/frame_0128.png new file mode 100644 index 0000000..1aabaf4 Binary files /dev/null and b/frames/frame_0128.png differ diff --git a/frames/frame_0129.png b/frames/frame_0129.png new file mode 100644 index 0000000..1c8ee9a Binary files /dev/null and b/frames/frame_0129.png differ diff --git a/frames/frame_0130.png b/frames/frame_0130.png new file mode 100644 index 0000000..4a41b97 Binary files /dev/null and b/frames/frame_0130.png differ diff --git a/frames/frame_0131.png b/frames/frame_0131.png new file mode 100644 index 0000000..4b4d87d Binary files /dev/null and b/frames/frame_0131.png differ diff --git a/frames/frame_0132.png b/frames/frame_0132.png new file mode 100644 index 0000000..0f7463b Binary files /dev/null and b/frames/frame_0132.png differ diff --git a/frames/frame_0133.png b/frames/frame_0133.png new file mode 100644 index 0000000..df20d69 Binary files /dev/null and b/frames/frame_0133.png differ diff --git a/frames/frame_0134.png b/frames/frame_0134.png new file mode 100644 index 0000000..1c83de8 Binary files /dev/null and b/frames/frame_0134.png differ diff --git a/frames/frame_0135.png b/frames/frame_0135.png new file mode 100644 index 0000000..a91d48d Binary files /dev/null and b/frames/frame_0135.png differ diff --git a/frames/frame_0136.png b/frames/frame_0136.png new file mode 100644 index 0000000..d6b466a Binary files /dev/null and b/frames/frame_0136.png differ diff --git a/frames/frame_0137.png b/frames/frame_0137.png new file mode 100644 index 0000000..404635e Binary files /dev/null and b/frames/frame_0137.png differ diff --git a/frames/frame_0138.png b/frames/frame_0138.png new file mode 100644 index 0000000..f150d6b Binary files /dev/null and b/frames/frame_0138.png differ diff --git a/frames/frame_0139.png b/frames/frame_0139.png new file mode 100644 index 0000000..dc68444 Binary files /dev/null and b/frames/frame_0139.png differ diff --git a/frames/frame_0140.png b/frames/frame_0140.png new file mode 100644 index 0000000..407a004 Binary files /dev/null and b/frames/frame_0140.png differ diff --git a/frames/frame_0141.png b/frames/frame_0141.png new file mode 100644 index 0000000..24633b6 Binary files /dev/null and b/frames/frame_0141.png differ diff --git a/frames/frame_0142.png b/frames/frame_0142.png new file mode 100644 index 0000000..612de1a Binary files /dev/null and b/frames/frame_0142.png differ diff --git a/frames/frame_0143.png b/frames/frame_0143.png new file mode 100644 index 0000000..8497139 Binary files /dev/null and b/frames/frame_0143.png differ diff --git a/frames/frame_0144.png b/frames/frame_0144.png new file mode 100644 index 0000000..5dd284b Binary files /dev/null and b/frames/frame_0144.png differ diff --git a/frames/frame_0145.png b/frames/frame_0145.png new file mode 100644 index 0000000..4782f42 Binary files /dev/null and b/frames/frame_0145.png differ diff --git a/frames/frame_0146.png b/frames/frame_0146.png new file mode 100644 index 0000000..5c5c659 Binary files /dev/null and b/frames/frame_0146.png differ diff --git a/frames/frame_0147.png b/frames/frame_0147.png new file mode 100644 index 0000000..c41fd19 Binary files /dev/null and b/frames/frame_0147.png differ diff --git a/frames/frame_0148.png b/frames/frame_0148.png new file mode 100644 index 0000000..38ab20e Binary files /dev/null and b/frames/frame_0148.png differ diff --git a/frames/frame_0149.png b/frames/frame_0149.png new file mode 100644 index 0000000..db95f0d Binary files /dev/null and b/frames/frame_0149.png differ diff --git a/frames/frame_0150.png b/frames/frame_0150.png new file mode 100644 index 0000000..53a725c Binary files /dev/null and b/frames/frame_0150.png differ diff --git a/frames/frame_0151.png b/frames/frame_0151.png new file mode 100644 index 0000000..4ac5dcc Binary files /dev/null and b/frames/frame_0151.png differ diff --git a/frames/frame_0152.png b/frames/frame_0152.png new file mode 100644 index 0000000..91c92d7 Binary files /dev/null and b/frames/frame_0152.png differ diff --git a/frames/frame_0153.png b/frames/frame_0153.png new file mode 100644 index 0000000..9d5b505 Binary files /dev/null and b/frames/frame_0153.png differ diff --git a/frames/frame_0154.png b/frames/frame_0154.png new file mode 100644 index 0000000..f7e27c9 Binary files /dev/null and b/frames/frame_0154.png differ diff --git a/frames/frame_0155.png b/frames/frame_0155.png new file mode 100644 index 0000000..41874db Binary files /dev/null and b/frames/frame_0155.png differ diff --git a/frames/frame_0156.png b/frames/frame_0156.png new file mode 100644 index 0000000..058efc9 Binary files /dev/null and b/frames/frame_0156.png differ diff --git a/frames/frame_0157.png b/frames/frame_0157.png new file mode 100644 index 0000000..4a1c47a Binary files /dev/null and b/frames/frame_0157.png differ diff --git a/frames/frame_0158.png b/frames/frame_0158.png new file mode 100644 index 0000000..48c9ba6 Binary files /dev/null and b/frames/frame_0158.png differ diff --git a/frames/frame_0159.png b/frames/frame_0159.png new file mode 100644 index 0000000..d29e57b Binary files /dev/null and b/frames/frame_0159.png differ diff --git a/frames/frame_0160.png b/frames/frame_0160.png new file mode 100644 index 0000000..8fbc378 Binary files /dev/null and b/frames/frame_0160.png differ diff --git a/frames/frame_0161.png b/frames/frame_0161.png new file mode 100644 index 0000000..ea18e3b Binary files /dev/null and b/frames/frame_0161.png differ diff --git a/frames/frame_0162.png b/frames/frame_0162.png new file mode 100644 index 0000000..26383b7 Binary files /dev/null and b/frames/frame_0162.png differ diff --git a/frames/frame_0163.png b/frames/frame_0163.png new file mode 100644 index 0000000..2bd1ea2 Binary files /dev/null and b/frames/frame_0163.png differ diff --git a/frames/frame_0164.png b/frames/frame_0164.png new file mode 100644 index 0000000..bbcfd0e Binary files /dev/null and b/frames/frame_0164.png differ diff --git a/frames/frame_0165.png b/frames/frame_0165.png new file mode 100644 index 0000000..6208dc8 Binary files /dev/null and b/frames/frame_0165.png differ diff --git a/frames/frame_0166.png b/frames/frame_0166.png new file mode 100644 index 0000000..d567798 Binary files /dev/null and b/frames/frame_0166.png differ diff --git a/frames/frame_0167.png b/frames/frame_0167.png new file mode 100644 index 0000000..c422168 Binary files /dev/null and b/frames/frame_0167.png differ diff --git a/frames/frame_0168.png b/frames/frame_0168.png new file mode 100644 index 0000000..94302b6 Binary files /dev/null and b/frames/frame_0168.png differ diff --git a/frames/frame_0169.png b/frames/frame_0169.png new file mode 100644 index 0000000..77d6497 Binary files /dev/null and b/frames/frame_0169.png differ diff --git a/frames/frame_0170.png b/frames/frame_0170.png new file mode 100644 index 0000000..a9532ed Binary files /dev/null and b/frames/frame_0170.png differ diff --git a/frames/frame_0171.png b/frames/frame_0171.png new file mode 100644 index 0000000..4fc1312 Binary files /dev/null and b/frames/frame_0171.png differ diff --git a/frames/frame_0172.png b/frames/frame_0172.png new file mode 100644 index 0000000..4dfaf9d Binary files /dev/null and b/frames/frame_0172.png differ diff --git a/frames/frame_0173.png b/frames/frame_0173.png new file mode 100644 index 0000000..a30b2cc Binary files /dev/null and b/frames/frame_0173.png differ diff --git a/frames/frame_0174.png b/frames/frame_0174.png new file mode 100644 index 0000000..c49e006 Binary files /dev/null and b/frames/frame_0174.png differ diff --git a/frames/frame_0175.png b/frames/frame_0175.png new file mode 100644 index 0000000..af9fba6 Binary files /dev/null and b/frames/frame_0175.png differ diff --git a/frames/frame_0176.png b/frames/frame_0176.png new file mode 100644 index 0000000..7875487 Binary files /dev/null and b/frames/frame_0176.png differ diff --git a/frames/frame_0177.png b/frames/frame_0177.png new file mode 100644 index 0000000..ab2134c Binary files /dev/null and b/frames/frame_0177.png differ diff --git a/frames/frame_0178.png b/frames/frame_0178.png new file mode 100644 index 0000000..cc93c3f Binary files /dev/null and b/frames/frame_0178.png differ diff --git a/frames/frame_0179.png b/frames/frame_0179.png new file mode 100644 index 0000000..7607d1f Binary files /dev/null and b/frames/frame_0179.png differ diff --git a/frames/frame_0180.png b/frames/frame_0180.png new file mode 100644 index 0000000..41ebd48 Binary files /dev/null and b/frames/frame_0180.png differ diff --git a/frames/frame_0181.png b/frames/frame_0181.png new file mode 100644 index 0000000..d368ce2 Binary files /dev/null and b/frames/frame_0181.png differ diff --git a/frames/frame_0182.png b/frames/frame_0182.png new file mode 100644 index 0000000..07f7cd2 Binary files /dev/null and b/frames/frame_0182.png differ diff --git a/frames/frame_0183.png b/frames/frame_0183.png new file mode 100644 index 0000000..2c11f76 Binary files /dev/null and b/frames/frame_0183.png differ diff --git a/frames/frame_0184.png b/frames/frame_0184.png new file mode 100644 index 0000000..82db516 Binary files /dev/null and b/frames/frame_0184.png differ diff --git a/frames/frame_0185.png b/frames/frame_0185.png new file mode 100644 index 0000000..7857548 Binary files /dev/null and b/frames/frame_0185.png differ diff --git a/frames/frame_0186.png b/frames/frame_0186.png new file mode 100644 index 0000000..9c3a7dc Binary files /dev/null and b/frames/frame_0186.png differ diff --git a/frames/frame_0187.png b/frames/frame_0187.png new file mode 100644 index 0000000..fbf2e18 Binary files /dev/null and b/frames/frame_0187.png differ diff --git a/frames/frame_0188.png b/frames/frame_0188.png new file mode 100644 index 0000000..201de01 Binary files /dev/null and b/frames/frame_0188.png differ diff --git a/frames/frame_0189.png b/frames/frame_0189.png new file mode 100644 index 0000000..9083ebd Binary files /dev/null and b/frames/frame_0189.png differ diff --git a/frames/frame_0190.png b/frames/frame_0190.png new file mode 100644 index 0000000..dd298f4 Binary files /dev/null and b/frames/frame_0190.png differ diff --git a/frames/frame_0191.png b/frames/frame_0191.png new file mode 100644 index 0000000..08239eb Binary files /dev/null and b/frames/frame_0191.png differ diff --git a/frames/frame_0192.png b/frames/frame_0192.png new file mode 100644 index 0000000..d21d7b5 Binary files /dev/null and b/frames/frame_0192.png differ diff --git a/frames/frame_0193.png b/frames/frame_0193.png new file mode 100644 index 0000000..908eb7e Binary files /dev/null and b/frames/frame_0193.png differ diff --git a/frames/frame_0194.png b/frames/frame_0194.png new file mode 100644 index 0000000..75b2fba Binary files /dev/null and b/frames/frame_0194.png differ diff --git a/frames/frame_0195.png b/frames/frame_0195.png new file mode 100644 index 0000000..025407a Binary files /dev/null and b/frames/frame_0195.png differ diff --git a/frames/frame_0196.png b/frames/frame_0196.png new file mode 100644 index 0000000..1717042 Binary files /dev/null and b/frames/frame_0196.png differ diff --git a/frames/frame_0197.png b/frames/frame_0197.png new file mode 100644 index 0000000..4de334c Binary files /dev/null and b/frames/frame_0197.png differ diff --git a/frames/frame_0198.png b/frames/frame_0198.png new file mode 100644 index 0000000..5cdda3f Binary files /dev/null and b/frames/frame_0198.png differ diff --git a/frames/frame_0199.png b/frames/frame_0199.png new file mode 100644 index 0000000..5e25d55 Binary files /dev/null and b/frames/frame_0199.png differ diff --git a/frames/frame_0200.png b/frames/frame_0200.png new file mode 100644 index 0000000..19f4c2b Binary files /dev/null and b/frames/frame_0200.png differ diff --git a/frames/frame_0201.png b/frames/frame_0201.png new file mode 100644 index 0000000..20157ed Binary files /dev/null and b/frames/frame_0201.png differ diff --git a/frames/frame_0202.png b/frames/frame_0202.png new file mode 100644 index 0000000..e5d29c6 Binary files /dev/null and b/frames/frame_0202.png differ diff --git a/frames/frame_0203.png b/frames/frame_0203.png new file mode 100644 index 0000000..78acefa Binary files /dev/null and b/frames/frame_0203.png differ diff --git a/frames/frame_0204.png b/frames/frame_0204.png new file mode 100644 index 0000000..b4809b7 Binary files /dev/null and b/frames/frame_0204.png differ diff --git a/frames/frame_0205.png b/frames/frame_0205.png new file mode 100644 index 0000000..bcc8c3c Binary files /dev/null and b/frames/frame_0205.png differ diff --git a/frames/frame_0206.png b/frames/frame_0206.png new file mode 100644 index 0000000..77cc753 Binary files /dev/null and b/frames/frame_0206.png differ diff --git a/frames/output.mp4 b/frames/output.mp4 new file mode 100644 index 0000000..1226ef5 Binary files /dev/null and b/frames/output.mp4 differ diff --git a/frames/vid.sh b/frames/vid.sh new file mode 100755 index 0000000..6e76b24 --- /dev/null +++ b/frames/vid.sh @@ -0,0 +1 @@ +ffmpeg -framerate 30 -i frame_%04d.png -c:v libx264 -vf "format=yuv420p" output.mp4 diff --git a/src/frame.rs b/src/frame.rs index c26b58a..104d39e 100644 --- a/src/frame.rs +++ b/src/frame.rs @@ -4,9 +4,9 @@ use std::path::Path; use crate::line_assembler::VideoFrame; -// PAL +// PAL: 1280 samples per line const WIDTH: u32 = 1280; -const HEIGHT: u32 = 288; +const HEIGHT: u32 = 480; // NTSC (576 for PAL) pub fn save_frames(frames: &[VideoFrame], output_dir: &str, sig_min: f32, sig_max: f32) { fs::create_dir_all(output_dir).expect("Could not create output directory"); @@ -22,7 +22,6 @@ pub fn save_frames(frames: &[VideoFrame], output_dir: &str, sig_min: f32, sig_ma let mut img = GrayImage::new(WIDTH, HEIGHT); for y in 0..HEIGHT as usize { - // If the frame has fewer lines than HEIGHT, fill the rest with black let line = frame.lines.get(y); for x in 0..WIDTH as usize { diff --git a/src/line_assembler.rs b/src/line_assembler.rs index 2c61eb5..3b11105 100644 --- a/src/line_assembler.rs +++ b/src/line_assembler.rs @@ -8,6 +8,8 @@ pub struct VideoFrame { pub lines: Vec, } +const LINES_PER_FRAME: usize = 480; // NTSC (576 for PAL) + pub struct LineAssembler { pub inner: I, pub current_line: Vec, @@ -37,22 +39,57 @@ where self.current_line.push(s); } Ok(SyncEvent::HSync) => { - // Save the finished line let line = VideoLine { samples: std::mem::take(&mut self.current_line), }; - self.current_frame.push(line); + + if self.current_frame.len() >= LINES_PER_FRAME { + let frame = VideoFrame { + lines: std::mem::take(&mut self.current_frame), + }; + return Some(Ok(frame)); + } } Ok(SyncEvent::VSync) => { - // Frame finished - let frame = VideoFrame { - lines: std::mem::take(&mut self.current_frame), - }; - return Some(Ok(frame)); + // test without vsync } Err(e) => return Some(Err(e)), } } } } + +// impl Iterator for LineAssembler +// where +// I: Iterator>, +// { +// type Item = Result; +// +// fn next(&mut self) -> Option { +// loop { +// match self.inner.next()? { +// Ok(SyncEvent::VideoSample(s)) => { +// self.current_line.push(s); +// } +// Ok(SyncEvent::HSync) => { +// // Save the finished line +// let line = VideoLine { +// samples: std::mem::take(&mut self.current_line), +// }; +// +// self.current_frame.push(line); +// } +// Ok(SyncEvent::VSync) => { +// // Frame finished +// let frame = VideoFrame { +// lines: std::mem::take(&mut self.current_frame), +// }; +// self.current_line.clear(); +// return Some(Ok(frame)); +// } +// Err(e) => return Some(Err(e)), +// } +// } +// } +// } diff --git a/src/main.rs b/src/main.rs index dbca8cb..a9f99f5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ use crate::fm_demod::Sample; use crate::iq_reader::FileSource; use crate::pipeline::{AfterDemodPiplineExt, DspPipelineExt, SyncPipelineExt}; -use egui_plot::{Line, Plot}; +use egui_plot::{HLine, Line, Plot, VLine}; use indicatif::ProgressIterator; mod agc; @@ -17,16 +17,84 @@ mod sync; mod utils; const SAMPLE_RATE: f32 = 20_000_000.0; -const SYNC_THRESHOLD: f32 = -0.3; -const LOWPASS_ALPHA: f32 = 0.6; +const SYNC_THRESHOLD: f32 = -0.5; +const LOWPASS_ALPHA: f32 = 0.7; -// fn main() -> eframe::Result { fn main() { + // fn main() { + let taps: [f32; 64] = [ + -0.00015813, + -0.00047836, + -0.00080166, + -0.00110309, + -0.00132172, + -0.00136203, + -0.00111203, + -0.00047680, + 0.00057973, + 0.00199526, + 0.00358456, + 0.00504093, + 0.00597041, + 0.00595859, + 0.00466189, + 0.00190795, + -0.00221520, + -0.00730261, + -0.01262639, + -0.01719077, + -0.01984753, + -0.01945971, + -0.01509023, + -0.00618502, + 0.00728221, + 0.02473253, + 0.04499119, + 0.06638976, + 0.08695132, + 0.10463402, + 0.11759778, + 0.12445312, + 0.12445312, + 0.11759778, + 0.10463402, + 0.08695132, + 0.06638976, + 0.04499119, + 0.02473253, + 0.00728221, + -0.00618502, + -0.01509023, + -0.01945971, + -0.01984753, + -0.01719077, + -0.01262639, + -0.00730261, + -0.00221520, + 0.00190795, + 0.00466189, + 0.00595859, + 0.00597041, + 0.00504093, + 0.00358456, + 0.00199526, + 0.00057973, + -0.00047680, + -0.00111203, + -0.00136203, + -0.00132172, + -0.00110309, + -0.00080166, + -0.00047836, + -0.00015813, + ]; + let source = FileSource::new("test.iq", 32769).unwrap(); let samples: Vec = source .skip(10_000) - .take(100_000) + .take(10_000) .agc(SAMPLE_RATE, 1.0, 0.001, 100.0) + // .fir(taps, 1) .demodulate() .dc_block(0.997) .lowpass(LOWPASS_ALPHA) @@ -41,12 +109,12 @@ fn main() { let source = FileSource::new("test.iq", 32769).unwrap(); - // let taps = [0.5; 64]; - let frames: Vec<_> = source - .take(50_000_000) + .skip(10_000) + // .take(5_000_000) .progress() .agc(SAMPLE_RATE, 1.0, 0.001, 100.0) + // .fir(taps, 1) .demodulate() .dc_block(0.997) .lowpass(LOWPASS_ALPHA) @@ -58,22 +126,64 @@ fn main() { println!("{} frames decoded", frames.len()); frame::save_frames(&frames, "frames", min, max); - - // let source2 = FileSource::new("test.iq", 32769).unwrap(); // - // let samples: Vec = source2 - // .skip(10_000) - // .take(10_000) + // let source = FileSource::new("test.iq", 32769).unwrap(); + // let samples: Vec = source + // .skip(40_000) + // .take(1_000_000) // .progress() // .agc(20_000_000.0, 1.0, 0.001, 100.0) - // // .fir::<64>(taps, 4) + // // .fir::<64>(taps, 1) // .demodulate() // .dc_block(0.997) // .lowpass(0.75) // .filter_map(|r| r.ok()) // .collect(); + + // let source = FileSource::new("test.iq", 32769).unwrap(); + // let sync_events: Vec<(usize, &str)> = { + // use crate::sync::SyncEvent; + // let mut events = Vec::new(); // - // eframe::run_ui_native("DSP", Default::default(), move |ui, _frame| { + // let source = FileSource::new("test.iq", 32769).unwrap(); + // let mut separator = source + // .progress() + // .skip(40_000) + // // .take(1_000_000) + // .agc(SAMPLE_RATE, 1.0, 0.001, 100.0) + // .demodulate() + // .dc_block(0.997) + // .lowpass(LOWPASS_ALPHA) + // .sync_separate(SAMPLE_RATE, SYNC_THRESHOLD); + // + // while let Some(r) = separator.next() { + // if let Ok(evt) = r { + // let pos = separator.samples_consumed; + // match evt { + // SyncEvent::HSync => events.push((pos, "h")), + // SyncEvent::VSync => { + // events.push((pos, "v")); + // println!("vsync\n") + // } + // SyncEvent::VideoSample(_) => {} + // } + // } + // } + // events + // }; + + // let _ = eframe::run_native( + // "DSP debug", + // Default::default(), + // Box::new(move |_cc| { + // Ok(Box::new(DebugApp { + // samples, + // sync_events, + // })) + // }), + // ); + + // let _ = eframe::run_ui_native("DSP", Default::default(), move |ui, _frame| { // egui::CentralPanel::default().show(ui, |ui| { // Plot::new("plot").show(ui, |plot_ui| { // plot_ui.line(Line::new( @@ -87,5 +197,48 @@ fn main() { // )) // }) // }); - // }) + // }); +} + +struct DebugApp { + samples: Vec, + sync_events: Vec<(usize, &'static str)>, +} + +impl eframe::App for DebugApp { + fn ui(&mut self, ui: &mut egui::Ui, _frame: &mut eframe::Frame) { + Plot::new("plot").show(ui, |plot_ui| { + plot_ui.line(Line::new( + "Signal", + self.samples + .iter() + .enumerate() + .map(|(i, x)| [i as f64, *x as f64]) + .collect::>(), + )); + + plot_ui.hline( + HLine::new("Threshold", SYNC_THRESHOLD as f64) + .color(egui::Color32::YELLOW) + .width(4.0), + ); + + for (pos, kind) in &self.sync_events { + let x = *pos as f64; + match *kind { + "h" => plot_ui.vline( + VLine::new("HSync", x) + .color(egui::Color32::from_rgb(80, 160, 255)) + .width(4.0), + ), + "v" => plot_ui.vline( + VLine::new("VSync", x) + .color(egui::Color32::BROWN) + .width(10.0), + ), + _ => {} + } + } + }); + } } diff --git a/src/sync.rs b/src/sync.rs index c5dfbec..638e66c 100644 --- a/src/sync.rs +++ b/src/sync.rs @@ -19,6 +19,7 @@ pub struct SyncSeparator { pub hsync_min: usize, pub hsync_max: usize, pub vsync_min: usize, + pub samples_consumed: usize, } impl SyncSeparator { @@ -30,13 +31,15 @@ impl SyncSeparator { inner, state: SyncState::Active, sync_threshold, - hsync_min: us(3.5), - hsync_max: us(6.0), + hsync_min: us(2.0), + hsync_max: us(10.0), vsync_min: us(25.0), + samples_consumed: 0, } } pub fn process_sample(&mut self, sample: Sample) -> Option { + self.samples_consumed += 1; match self.state { SyncState::Active => { if sample < self.sync_threshold { @@ -58,7 +61,7 @@ impl SyncSeparator { } else if pulse_len >= self.hsync_min && pulse_len <= self.hsync_max { Some(SyncEvent::HSync) } else { - None + Some(SyncEvent::VideoSample(sample)) } } }