diff --git a/Cargo.lock b/Cargo.lock index ad7074b8..b7861b4b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,6 +23,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -34,9 +43,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.58" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" +checksum = "a26fa4d7e3f2eebadf743988fc8aec9fa9a9e82611acafd77c1462ed6262440a" [[package]] name = "arbitrary" @@ -66,6 +75,9 @@ name = "arrayvec" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +dependencies = [ + "serde", +] [[package]] name = "atty" @@ -135,11 +147,13 @@ dependencies = [ [[package]] name = "av-scenechange" version = "0.7.2" -source = "git+https://github.com/rust-av/av-scenechange?rev=4804462f2b6ae6209609cd95b5d9739264bf614f#4804462f2b6ae6209609cd95b5d9739264bf614f" +source = "git+https://github.com/redzic/av-scenechange?branch=zerocopy#cd259cac94278f2d431dce99774d3c9f4f8598b8" dependencies = [ "anyhow", + "ffmpeg-next", "rav1e", "rust_hawktracer", + "vapoursynth", "y4m", ] @@ -151,6 +165,9 @@ checksum = "7ac3ad7be4db4d3bbe49beee21e8170f4a4d6d1f1c8c4ce68c5ec0c77b89a5f9" dependencies = [ "anyhow", "arrayvec", + "itertools", + "nom", + "serde", ] [[package]] @@ -181,7 +198,7 @@ dependencies = [ "path_abs", "shlex", "thiserror", - "vergen 7.2.1", + "vergen", ] [[package]] @@ -221,7 +238,7 @@ dependencies = [ "smallvec", "splines", "strsim", - "strum 0.24.1", + "strum", "sysinfo", "textwrap", "thiserror", @@ -262,11 +279,22 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97d524fdb78bf6dc6d2dc4c02043e4b4962ede0a17ae3e13f0ed211a7eda5897" +[[package]] +name = "built" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f346b6890a0dfa7266974910e7df2d5088120dd54721b9b0e5aae1ae5e05715" +dependencies = [ + "cargo-lock", + "chrono", + "git2", +] + [[package]] name = "bumpalo" -version = "3.10.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" +checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" [[package]] name = "byte-slice-cast" @@ -276,9 +304,21 @@ checksum = "87c5fdd0166095e1d463fc6cc01aa8ce547ad77a4e84d42eb6762b084e28067e" [[package]] name = "bytes" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" + +[[package]] +name = "cargo-lock" +version = "7.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c408da54db4c50d4693f7e649c299bc9de9c23ead86249e5368830bb32a734b" +dependencies = [ + "semver", + "serde", + "toml", + "url", +] [[package]] name = "cc" @@ -300,9 +340,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.7.4" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30aa9e2ffbb838c6b451db14f3cd8e63ed622bf859f9956bc93845a10fafc26a" +checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" dependencies = [ "smallvec", ] @@ -315,14 +355,16 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" dependencies = [ - "libc", + "iana-time-zone", + "js-sys", "num-integer", "num-traits", "time 0.1.44", + "wasm-bindgen", "winapi", ] @@ -339,9 +381,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.12" +version = "3.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab8b79fe3946ceb4a0b1c080b4018992b8d27e9ff363644c1c9b6387c854614d" +checksum = "68d43934757334b5c0519ff882e1ab9647ac0258b47c24c4f490d78e42697fd5" dependencies = [ "atty", "bitflags", @@ -356,11 +398,11 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.2.7" +version = "3.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902" +checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" dependencies = [ - "heck 0.4.0", + "heck", "proc-macro-error", "proc-macro2", "quote", @@ -403,9 +445,9 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "crossbeam-channel" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ "cfg-if", "crossbeam-utils", @@ -413,9 +455,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -424,9 +466,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d" +checksum = "045ebe27666471bb549370b4b0b3e51b07f56325befa4284db65fc89c02511b1" dependencies = [ "autocfg", "cfg-if", @@ -438,9 +480,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83" +checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" dependencies = [ "cfg-if", "once_cell", @@ -448,22 +490,23 @@ dependencies = [ [[package]] name = "dashmap" -version = "5.3.4" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3495912c9c1ccf2e18976439f4443f3fee0fd61f424ff99fde6a66b15ecb448f" +checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" dependencies = [ "cfg-if", "hashbrown", "lock_api", + "once_cell", "parking_lot_core", "serde", ] [[package]] name = "either" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "encode_unicode" @@ -473,18 +516,18 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "enum-iterator" -version = "0.7.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6" +checksum = "91a4ec26efacf4aeff80887a175a419493cb6f8b5480d26387eb0bd038976187" dependencies = [ "enum-iterator-derive", ] [[package]] name = "enum-iterator-derive" -version = "0.7.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" +checksum = "828de45d0ca18782232dfb8f3ea9cc428e8ced380eb26a520baaacfc70de39ce" dependencies = [ "proc-macro2", "quote", @@ -553,9 +596,9 @@ dependencies = [ [[package]] name = "flexi_logger" -version = "0.22.5" +version = "0.22.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee9a6796ff68a1014f6665dac55341820f26e63ec706e58bfaee468cf0ac174f" +checksum = "0c76a80dd14a27fc3d8bc696502132cb52b3f227256fd8601166c3a35e45f409" dependencies = [ "ansi_term", "atty", @@ -565,7 +608,7 @@ dependencies = [ "log", "rustversion", "thiserror", - "time 0.3.11", + "time 0.3.9", ] [[package]] @@ -603,9 +646,9 @@ dependencies = [ [[package]] name = "git2" -version = "0.14.4" +version = "0.13.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c" +checksum = "f29229cc1b24c0e6062f6e742aa3e256492a5323365e5ed3413599f8a5eff7d6" dependencies = [ "bitflags", "libc", @@ -626,15 +669,6 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - [[package]] name = "heck" version = "0.4.0" @@ -650,6 +684,20 @@ dependencies = [ "libc", ] +[[package]] +name = "iana-time-zone" +version = "0.1.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c495f162af0bf17656d0014a0eded5f3cd2f365fdd204548c2869db89359dc7" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "js-sys", + "once_cell", + "wasm-bindgen", + "winapi", +] + [[package]] name = "idna" version = "0.2.3" @@ -704,9 +752,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" [[package]] name = "jobserver" @@ -719,9 +767,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.58" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" +checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" dependencies = [ "wasm-bindgen", ] @@ -740,9 +788,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.126" +version = "0.2.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" [[package]] name = "libfuzzer-sys" @@ -756,9 +804,9 @@ dependencies = [ [[package]] name = "libgit2-sys" -version = "0.13.4+1.4.2" +version = "0.12.26+1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0fa6563431ede25f5cc7f6d803c6afbc1c5d3ad3d4925d12c882bf2b526f5d1" +checksum = "19e1c899248e606fbfe68dcb31d8b0176ebab833b103824af31bddf4b7457494" dependencies = [ "cc", "libc", @@ -790,9 +838,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390" dependencies = [ "autocfg", "scopeguard", @@ -976,15 +1024,15 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "once_cell" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" +checksum = "074864da206b4973b84eb91683020dbefd6a8c3f0f38e054d93954e891935e4e" [[package]] name = "os_str_bytes" -version = "6.2.0" +version = "6.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "648001efe5d5c0102d8cea768e348da85d90af8ba91f0bea908f157951493cd4" +checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff" [[package]] name = "parking_lot" @@ -1011,9 +1059,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" +checksum = "9423e2b32f7a043629287a536f21951e8c6a82482d0acb1eeebfc90bc2225b22" [[package]] name = "path_abs" @@ -1053,9 +1101,9 @@ checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" [[package]] name = "plotters" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9428003b84df1496fb9d6eeee9c5f8145cb41ca375eb0dad204328888832811f" +checksum = "716b4eeb6c4a1d3ecc956f75b43ec2e8e8ba80026413e70a3f41fd3313d3492b" dependencies = [ "num-traits", "plotters-backend", @@ -1072,9 +1120,9 @@ checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" [[package]] name = "plotters-svg" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0918736323d1baff32ee0eade54984f6f201ad7e97d5cfb5d6ab4a358529615" +checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" dependencies = [ "plotters-backend", ] @@ -1111,9 +1159,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" dependencies = [ "unicode-ident", ] @@ -1140,9 +1188,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] @@ -1180,13 +1228,15 @@ dependencies = [ [[package]] name = "rav1e" version = "0.5.0" -source = "git+https://github.com/xiph/rav1e#b2db4a3cc6f9bcf5b07a6668d20d5d09f3afb063" +source = "git+https://github.com/redzic/rav1e?branch=zerocopy#6a44da2bbc929e35cbd39d6d7fb6665a62e4f031" dependencies = [ "arbitrary", "arg_enum_proc_macro", "arrayref", "arrayvec", + "av1-grain", "bitstream-io", + "built", "cc", "cfg-if", "const_fn_assert", @@ -1212,7 +1262,6 @@ dependencies = [ "system-deps", "thiserror", "v_frame", - "vergen 3.0.4", ] [[package]] @@ -1241,9 +1290,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] @@ -1304,15 +1353,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c8ad4f0c00e1eb5bc7614d236a7f1300e3dbd76b68cac8e06fb00b015ad8d8" +checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" [[package]] name = "ryu" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" [[package]] name = "scopeguard" @@ -1322,24 +1371,27 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "semver" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1" +checksum = "93f6841e709003d68bb2deee8c343572bf446003ec20a583e76f7b15cebf3711" +dependencies = [ + "serde", +] [[package]] name = "serde" -version = "1.0.139" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0171ebb889e45aa68b44aee0859b3eede84c6f5f5c228e6f140c0b2a0a46cad6" +checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.139" +version = "1.0.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1d3230c1de7932af58ad8ffbe1d784bd55efd5a9d84ac24f69c72d83543dfb" +checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" dependencies = [ "proc-macro2", "quote", @@ -1348,9 +1400,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.82" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" +checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" dependencies = [ "itoa", "ryu", @@ -1401,9 +1453,9 @@ checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043" [[package]] name = "splines" -version = "4.1.0" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85d3c90d443c10f66d69fc45269f3bf1d3b0171c239751fe6129b7d79a82c535" +checksum = "39c3ba77d6f4cc9405ff36c95b70292e59f814c2e07385a1b47121ba0f862c52" [[package]] name = "std_prelude" @@ -1427,40 +1479,22 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" -[[package]] -name = "strum" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2" - [[package]] name = "strum" version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" dependencies = [ - "strum_macros 0.24.2", -] - -[[package]] -name = "strum_macros" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec" -dependencies = [ - "heck 0.3.3", - "proc-macro2", - "quote", - "syn", + "strum_macros", ] [[package]] name = "strum_macros" -version = "0.24.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4faebde00e8ff94316c01800f9054fd2ba77d30d9e922541913051d1d978918b" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ - "heck 0.4.0", + "heck", "proc-macro2", "quote", "rustversion", @@ -1469,9 +1503,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" dependencies = [ "proc-macro2", "quote", @@ -1507,18 +1541,13 @@ dependencies = [ [[package]] name = "system-deps" -version = "3.1.2" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab7dbd121ce66af2176147a48c7e01aaf1f001837a18a7cf4317858606bbdf8" +checksum = "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709" dependencies = [ - "anyhow", "cfg-expr", - "heck 0.3.3", - "itertools", + "heck", "pkg-config", - "strum 0.21.0", - "strum_macros 0.21.1", - "thiserror", "toml", "version-compare", ] @@ -1555,18 +1584,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "f5f6586b7f764adc0231f4c79be7b920e766bb2f3e51b3661cdb263828f19994" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "12bafc5b54507e0149cdf1b145a5d80ab80a90bcd9275df43d4fff68460f6c21" dependencies = [ "proc-macro2", "quote", @@ -1586,9 +1615,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.11" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217" +checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" dependencies = [ "itoa", "libc", @@ -1619,9 +1648,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57aec3cfa4c296db7255446efb4928a6be304b431a806216105542a67b6ca82e" +checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" dependencies = [ "autocfg", "bytes", @@ -1651,9 +1680,9 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-ident" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" [[package]] name = "unicode-linebreak" @@ -1673,12 +1702,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-segmentation" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" - [[package]] name = "unicode-width" version = "0.1.9" @@ -1706,7 +1729,7 @@ dependencies = [ [[package]] name = "v_frame" version = "0.2.5" -source = "git+https://github.com/xiph/rav1e#b2db4a3cc6f9bcf5b07a6668d20d5d09f3afb063" +source = "git+https://github.com/redzic/rav1e?branch=zerocopy#6a44da2bbc929e35cbd39d6d7fb6665a62e4f031" dependencies = [ "cfg-if", "new_debug_unreachable", @@ -1747,18 +1770,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vergen" -version = "3.0.4" -source = "git+https://github.com/xiph/rav1e#b2db4a3cc6f9bcf5b07a6668d20d5d09f3afb063" -dependencies = [ - "bitflags", - "chrono", -] - -[[package]] -name = "vergen" -version = "7.2.1" +version = "7.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f44ef1afcf5979e34748c12595f9589f3dc4e34abf156fb6d95f9b835568dc" +checksum = "f10de320f0fe3f21913dabbfcbced6867bbe47a6b1a5db830e37df3a50279bd0" dependencies = [ "anyhow", "cfg-if", @@ -1768,14 +1782,14 @@ dependencies = [ "rustc_version", "rustversion", "thiserror", - "time 0.3.11", + "time 0.3.9", ] [[package]] name = "version-compare" -version = "0.0.11" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" +checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73" [[package]] name = "version_check" @@ -1797,9 +1811,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" +checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1807,13 +1821,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" +checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -1822,9 +1836,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" +checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1832,9 +1846,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" +checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" dependencies = [ "proc-macro2", "quote", @@ -1845,15 +1859,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" +checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" [[package]] name = "web-sys" -version = "0.3.58" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" +checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/Cargo.toml b/Cargo.toml index 10ab7d30..a69c112a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,9 +33,6 @@ vapoursynth_new_api = ["av1an-core/vapoursynth_new_api"] [workspace] members = ["av1an-core", "av1an-cli"] -[profile.dev.package.av-scenechange] -opt-level = 3 - [profile.release] lto = "thin" codegen-units = 1 @@ -48,5 +45,6 @@ debug-assertions = true overflow-checks = true [patch.crates-io] -av-scenechange = { git = "https://github.com/rust-av/av-scenechange", rev = "4804462f2b6ae6209609cd95b5d9739264bf614f" } +av-scenechange = { git = "https://github.com/redzic/av-scenechange", branch = "zerocopy" } +# av-scenechange = { path = "../av-scenechange" } console = { git = "https://github.com/console-rs/console", rev = "5484ea9d9f6884f6685349708e27bf08fab7703c" } diff --git a/av1an-core/Cargo.toml b/av1an-core/Cargo.toml index eb2dabb9..ae6d3a72 100644 --- a/av1an-core/Cargo.toml +++ b/av1an-core/Cargo.toml @@ -87,8 +87,10 @@ quickcheck = { version = "1.0.3", default-features = false } quickcheck_macros = "1" [features] +default = ["vapoursynth_new_api"] ffmpeg_static = ["ffmpeg/static", "ffmpeg/build"] vapoursynth_new_api = [ "vapoursynth/vapoursynth-api-32", "vapoursynth/vsscript-api-31", + "av-scenechange/vapoursynth_new_api", ] diff --git a/av1an-core/src/lib.rs b/av1an-core/src/lib.rs index 7a28bd0f..25d0abdb 100644 --- a/av1an-core/src/lib.rs +++ b/av1an-core/src/lib.rs @@ -71,6 +71,7 @@ pub enum Input { impl Input { /// Returns a reference to the inner path, panicking if the input is not an `Input::Video`. + #[track_caller] pub fn as_video_path(&self) -> &Path { match &self { Input::Video(path) => path.as_ref(), @@ -81,6 +82,7 @@ impl Input { } /// Returns a reference to the inner path, panicking if the input is not an `Input::VapourSynth`. + #[track_caller] pub fn as_vapoursynth_path(&self) -> &Path { match &self { Input::VapourSynth(path) => path.as_ref(), diff --git a/av1an-core/src/scene_detect.rs b/av1an-core/src/scene_detect.rs index ae0ea926..a8998f83 100644 --- a/av1an-core/src/scene_detect.rs +++ b/av1an-core/src/scene_detect.rs @@ -1,16 +1,17 @@ -use std::io::Read; -use std::process::{Command, Stdio}; use std::thread; use ansi_term::Style; use anyhow::bail; +use av_scenechange::decode::Decoder; +use av_scenechange::ffmpeg::FfmpegDecoder; +use av_scenechange::vapoursynth::VapoursynthDecoder; use av_scenechange::{detect_scene_changes, DetectionOptions, SceneDetectionSpeed}; use ffmpeg::format::Pixel; use itertools::Itertools; -use smallvec::{smallvec, SmallVec}; +use vapoursynth::prelude::*; use crate::scenes::Scene; -use crate::{into_smallvec, progress_bar, Encoder, Input, ScenecutMethod, Verbosity}; +use crate::{progress_bar, Encoder, Input, ScenecutMethod, Verbosity}; pub fn av_scenechange_detect( input: &Input, @@ -42,23 +43,63 @@ pub fn av_scenechange_detect( frames }); - let scenes = scene_detect( - input, - encoder, - total_frames, - if verbosity == Verbosity::Quiet { - None - } else { - Some(&|frames| { - progress_bar::set_pos(frames as u64); - }) - }, - min_scene_len, - sc_pix_format, - sc_method, - sc_downscale_height, - zones, - )?; + let mut ff_ctx; + let mut ff_decoder; + + let mut vs_ctx; + let mut vs_decoder; + + let scenes = match input { + Input::Video(path) => { + ff_ctx = FfmpegDecoder::get_ctx(path).unwrap(); + ff_decoder = FfmpegDecoder::new(&mut ff_ctx).unwrap(); + + scene_detect( + &mut ff_decoder, + encoder, + total_frames, + if verbosity == Verbosity::Quiet { + None + } else { + Some(&|frames, _| { + progress_bar::set_pos(frames as u64); + }) + }, + min_scene_len, + sc_pix_format, + sc_method, + sc_downscale_height, + zones, + )? + } + Input::VapourSynth(path) => { + // TODO make helper function for creating VS Environment + vs_ctx = Environment::new().unwrap(); + + // Evaluate the script. + vs_ctx.eval_file(path, EvalFlags::SetWorkingDir).unwrap(); + + vs_decoder = VapoursynthDecoder::new(&vs_ctx).unwrap(); + + scene_detect( + &mut vs_decoder, + encoder, + total_frames, + if verbosity == Verbosity::Quiet { + None + } else { + Some(&|frames, _| { + progress_bar::set_pos(frames as u64); + }) + }, + min_scene_len, + sc_pix_format, + sc_method, + sc_downscale_height, + zones, + )? + } + }; let frames = frame_thread.join().unwrap(); @@ -69,18 +110,20 @@ pub fn av_scenechange_detect( /// Detect scene changes using rav1e scene detector. #[allow(clippy::option_if_let_else)] -pub fn scene_detect( - input: &Input, - encoder: Encoder, +pub fn scene_detect>( + decoder: &mut D, + // TODO use these fields + _encoder: Encoder, total_frames: usize, - callback: Option<&dyn Fn(usize)>, + callback: Option<&dyn Fn(usize, usize)>, min_scene_len: usize, - sc_pix_format: Option, + // TODO use these fields + _sc_pix_format: Option, sc_method: ScenecutMethod, - sc_downscale_height: Option, + _sc_downscale_height: Option, zones: &[Scene], ) -> anyhow::Result> { - let (mut decoder, bit_depth) = build_decoder(input, encoder, sc_pix_format, sc_downscale_height)?; + let bit_depth = decoder.get_bit_depth(); let mut scenes = Vec::new(); let mut cur_zone = zones.first().filter(|frame| frame.start_frame == 0); @@ -121,19 +164,19 @@ pub fn scene_detect( }; let callback = callback.map(|cb| { |frames, _keyframes| { - cb(frames + frames_read); + cb(frames + frames_read, 0); } }); let sc_result = if bit_depth > 8 { - detect_scene_changes::<_, u16>( - &mut decoder, + detect_scene_changes::( + decoder, options, frame_limit, callback.as_ref().map(|cb| cb as &dyn Fn(usize, usize)), ) } else { - detect_scene_changes::<_, u8>( - &mut decoder, + detect_scene_changes::( + decoder, options, frame_limit, callback.as_ref().map(|cb| cb as &dyn Fn(usize, usize)), @@ -190,75 +233,3 @@ pub fn scene_detect( } Ok(scenes) } - -fn build_decoder( - input: &Input, - encoder: Encoder, - sc_pix_format: Option, - sc_downscale_height: Option, -) -> anyhow::Result<(y4m::Decoder, usize)> { - let bit_depth; - let filters: SmallVec<[String; 4]> = match (sc_downscale_height, sc_pix_format) { - (Some(sdh), Some(spf)) => into_smallvec![ - "-vf", - format!( - "format={},scale=-2:'min({},ih)'", - spf.descriptor().unwrap().name(), - sdh - ) - ], - (Some(sdh), None) => into_smallvec!["-vf", format!("scale=-2:'min({},ih)'", sdh)], - (None, Some(spf)) => into_smallvec!["-pix_fmt", spf.descriptor().unwrap().name()], - (None, None) => smallvec![], - }; - - let decoder = y4m::Decoder::new(match input { - Input::VapourSynth(path) => { - bit_depth = crate::vapoursynth::bit_depth(path.as_ref())?; - let vspipe = Command::new("vspipe") - .arg("-c") - .arg("y4m") - .arg(path) - .arg("-") - .stdin(Stdio::null()) - .stdout(Stdio::piped()) - .stderr(Stdio::null()) - .spawn()? - .stdout - .unwrap(); - - if !filters.is_empty() { - Command::new("ffmpeg") - .stdin(vspipe) - .args(["-i", "pipe:", "-f", "yuv4mpegpipe", "-strict", "-1"]) - .args(filters) - .arg("-") - .stdout(Stdio::piped()) - .stderr(Stdio::null()) - .spawn()? - .stdout - .unwrap() - } else { - vspipe - } - } - Input::Video(path) => { - let input_pix_format = crate::ffmpeg::get_pixel_format(path.as_ref()) - .unwrap_or_else(|e| panic!("FFmpeg failed to get pixel format for input video: {:?}", e)); - bit_depth = encoder.get_format_bit_depth(sc_pix_format.unwrap_or(input_pix_format))?; - Command::new("ffmpeg") - .args(["-r", "1", "-i"]) - .arg(path) - .args(filters.as_ref()) - .args(["-f", "yuv4mpegpipe", "-strict", "-1", "-"]) - .stdin(Stdio::null()) - .stdout(Stdio::piped()) - .stderr(Stdio::null()) - .spawn()? - .stdout - .unwrap() - } - })?; - - Ok((decoder, bit_depth)) -} diff --git a/compare.sh b/compare.sh new file mode 100755 index 00000000..11d58c93 --- /dev/null +++ b/compare.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +rm master.json zerocopy.json + +./target/release/av1an -i "$1" --sc-method fast --sc-only -s zerocopy.json +/usr/bin/av1an -i "$1" --sc-method fast --sc-only -s master.json + +cmp master.json zerocopy.json