From 4e4a647538b208cecb8ee23df11816cfb0cdf821 Mon Sep 17 00:00:00 2001 From: Kasper Date: Mon, 1 Feb 2021 00:56:59 +0100 Subject: [PATCH] Add mpeg aac decoder --- .gitignore | 1 + Cargo.lock | 1499 ++++++++++++++++++ Cargo.toml | 25 + src/adts.rs | 99 ++ src/lib.rs | 152 ++ tests/samples/Simbai & Elke Bay - Energy.m4a | Bin 0 -> 117364 bytes tests/test.rs | 25 + 7 files changed, 1801 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/adts.rs create mode 100644 src/lib.rs create mode 100644 tests/samples/Simbai & Elke Bay - Energy.m4a create mode 100644 tests/test.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..5b77ff1 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,1499 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "addr2line" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" + +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + +[[package]] +name = "alsa" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb213f6b3e4b1480a60931ca2035794aa67b73103d254715b1db7b70dcb3c934" +dependencies = [ + "alsa-sys", + "bitflags", + "libc", + "nix", +] + +[[package]] +name = "alsa-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "ascii" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "backtrace" +version = "0.3.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" +dependencies = [ + "addr2line", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base-x" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "bindgen" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", +] + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + +[[package]] +name = "bumpalo" +version = "3.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099e596ef14349721d9016f6b80dd3419ea1bf289ab9b44df8e4dfd3a005d5d9" + +[[package]] +name = "byteorder" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" + +[[package]] +name = "bytes" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" + +[[package]] +name = "bytes" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" + +[[package]] +name = "cc" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cexpr" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chunked_transfer" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e" + +[[package]] +name = "clang-sys" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0659001ab56b791be01d4b729c44376edc6718cf389a502e579b77b758f3296c" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "combine" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" +dependencies = [ + "ascii", + "byteorder", + "either", + "memchr", + "unreachable", +] + +[[package]] +name = "combine" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4369b5e4c0cddf64ad8981c0111e7df4f7078f4d6ba98fb31f2e17c4c57b7e" +dependencies = [ + "bytes 1.0.1", + "memchr", +] + +[[package]] +name = "const_fn" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6" + +[[package]] +name = "cookie" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784ad0fbab4f3e9cef09f20e0aea6000ae08d2cb98ac4c0abc53df18803d702f" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3818dfca4b0cb5211a659bbcbb94225b7127407b2b135e650d717bfb78ab10d3" +dependencies = [ + "cookie", + "idna", + "log", + "publicsuffix", + "serde", + "serde_json", + "time", + "url", +] + +[[package]] +name = "core-foundation-sys" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" + +[[package]] +name = "coreaudio-rs" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f229761965dad3e9b11081668a6ea00f1def7aa46062321b5ec245b834f6e491" +dependencies = [ + "bitflags", + "coreaudio-sys", +] + +[[package]] +name = "coreaudio-sys" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b7e3347be6a09b46aba228d6608386739fb70beff4f61e07422da87b0bb31fa" +dependencies = [ + "bindgen", +] + +[[package]] +name = "cpal" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05631e2089dfa5d3b6ea1cfbbfd092e2ee5deeb69698911bc976b28b746d3657" +dependencies = [ + "alsa", + "core-foundation-sys", + "coreaudio-rs", + "jni 0.17.0", + "js-sys", + "lazy_static", + "libc", + "mach", + "ndk", + "ndk-glue", + "nix", + "oboe", + "parking_lot", + "stdweb 0.1.3", + "thiserror", + "web-sys", + "winapi", +] + +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "darling" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "discard" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "error-chain" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" +dependencies = [ + "backtrace", + "version_check", +] + +[[package]] +name = "fdk-aac" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f295617a979ab0bdceab08e16f3edb82ae876b48c25354fa56fed4d276b0db" +dependencies = [ + "fdk-aac-sys", +] + +[[package]] +name = "fdk-aac-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ccdef9ea77a8aa82f37b62ef0d847356e15f1f12b9f894b5ca7e8de048e17fc" +dependencies = [ + "cc", +] + +[[package]] +name = "fetch_unroll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d44807d562d137f063cbfe209da1c3f9f2fa8375e11166ef495daab7b847f9" +dependencies = [ + "libflate", + "tar", + "ureq", +] + +[[package]] +name = "filetime" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall 0.2.4", + "winapi", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" +dependencies = [ + "matches", + "percent-encoding", +] + +[[package]] +name = "gimli" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" + +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "instant" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "itoa" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" + +[[package]] +name = "jni" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1981310da491a4f0f815238097d0d43d8072732b5ae5f8bd0d8eadf5bf245402" +dependencies = [ + "cesu8", + "combine 3.8.1", + "error-chain", + "jni-sys", + "log", + "walkdir", +] + +[[package]] +name = "jni" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36bcc950632e48b86da402c5c077590583da5ac0d480103611d5374e7c967a3c" +dependencies = [ + "cesu8", + "combine 4.5.2", + "error-chain", + "jni-sys", + "log", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cca32fa0182e8c0989459524dc356b8f2b5c10f1b9eb521b7d182c03cf8c5ff" + +[[package]] +name = "libflate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389de7875e06476365974da3e7ff85d55f1972188ccd9f6020dd7c8156e17914" +dependencies = [ + "adler32", + "crc32fast", + "libflate_lz77", + "rle-decode-fast", +] + +[[package]] +name = "libflate_lz77" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3286f09f7d4926fc486334f28d8d2e6ebe4f7f9994494b6dab27ddfad2c9b11b" + +[[package]] +name = "libloading" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" +dependencies = [ + "cfg-if 1.0.0", + "winapi", +] + +[[package]] +name = "lock_api" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" + +[[package]] +name = "memchr" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" + +[[package]] +name = "miniz_oxide" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "mp4" +version = "0.8.0" +source = "git+https://github.com/alfg/mp4-rust?branch=bugfix/read-largesize-boxheader-size#b757d90627a5c1610bb253ff663fbebdddd08a57" +dependencies = [ + "byteorder", + "bytes 0.5.6", + "num-rational", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "ndk" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb167c1febed0a496639034d0c76b3b74263636045db5489eee52143c246e73" +dependencies = [ + "jni-sys", + "ndk-sys", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk-glue" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdf399b8b7a39c6fb153c4ec32c72fd5fe789df24a647f229c239aa7adb15241" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk", + "ndk-macro", + "ndk-sys", +] + +[[package]] +name = "ndk-macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" +dependencies = [ + "darling", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ndk-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c44922cb3dbb1c70b5e5f443d63b64363a898564d739ba5198e3a9138442868d" + +[[package]] +name = "nix" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229" +dependencies = [ + "bitflags", + "cc", + "cfg-if 0.1.10", + "libc", + "void", +] + +[[package]] +name = "nom" +version = "5.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +dependencies = [ + "memchr", + "version_check", +] + +[[package]] +name = "num-bigint" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e9a41747ae4633fce5adffb4d2e81ffc5e89593cb19917f8fb2cc5ff76507bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4" +dependencies = [ + "derivative", + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "object" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" + +[[package]] +name = "oboe" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aadc2b0867bdbb9a81c4d99b9b682958f49dbea1295a81d2f646cca2afdd9fc" +dependencies = [ + "jni 0.14.0", + "ndk", + "ndk-glue", + "num-derive", + "num-traits", + "oboe-sys", +] + +[[package]] +name = "oboe-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ff7a51600eabe34e189eec5c995a62f151d8d97e5fbca39e87ca738bb99b82" +dependencies = [ + "fetch_unroll", +] + +[[package]] +name = "once_cell" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" + +[[package]] +name = "parking_lot" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272" +dependencies = [ + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall 0.1.57", + "smallvec", + "winapi", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pkg-config" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + +[[package]] +name = "proc-macro2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "publicsuffix" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" +dependencies = [ + "error-chain", + "idna", + "lazy_static", + "regex", + "url", +] + +[[package]] +name = "qstring" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "quote" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "redlux" +version = "0.1.0" +dependencies = [ + "fdk-aac", + "mp4", + "rodio", +] + +[[package]] +name = "redox_syscall" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" + +[[package]] +name = "redox_syscall" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ec8ca9416c5ea37062b502703cd7fcb207736bc294f6e0cf367ac6fc234570" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" +dependencies = [ + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" + +[[package]] +name = "ring" +version = "0.16.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "024a1e66fea74c66c66624ee5622a7ff0e4b73a13b4f5c326ddb50c708944226" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi", +] + +[[package]] +name = "rle-decode-fast" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cabe4fa914dec5870285fa7f71f602645da47c486e68486d2b4ceb4a343e90ac" + +[[package]] +name = "rodio" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9683532495146e98878d4948fa1a1953f584cd923f2a5f5c26b7a8701b56943" +dependencies = [ + "cpal", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver", +] + +[[package]] +name = "rustls" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b" +dependencies = [ + "base64", + "log", + "ring", + "sct", + "webpki", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "sct" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.123" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.123" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" + +[[package]] +name = "shlex" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" + +[[package]] +name = "smallvec" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "standback" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66a8cff4fa24853fdf6b51f75c6d7f8206d7c75cab4e467bcd7f25c2b1febe0" +dependencies = [ + "version_check", +] + +[[package]] +name = "stdweb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" + +[[package]] +name = "stdweb" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" +dependencies = [ + "discard", + "rustc_version", + "stdweb-derive", + "stdweb-internal-macros", + "stdweb-internal-runtime", + "wasm-bindgen", +] + +[[package]] +name = "stdweb-derive" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_derive", + "syn", +] + +[[package]] +name = "stdweb-internal-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" +dependencies = [ + "base-x", + "proc-macro2", + "quote", + "serde", + "serde_derive", + "serde_json", + "sha1", + "syn", +] + +[[package]] +name = "stdweb-internal-runtime" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" + +[[package]] +name = "strsim" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" + +[[package]] +name = "syn" +version = "1.0.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "tar" +version = "0.4.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0313546c01d59e29be4f09687bcb4fb6690cec931cc3607b6aec7a0e417f4cc6" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "thiserror" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1195b046942c221454c2539395f85413b33383a067449d78aab2b7b052a142f7" +dependencies = [ + "const_fn", + "libc", + "standback", + "stdweb 0.4.20", + "time-macros", + "version_check", + "winapi", +] + +[[package]] +name = "time-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" +dependencies = [ + "proc-macro-hack", + "time-macros-impl", +] + +[[package]] +name = "time-macros-impl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa" +dependencies = [ + "proc-macro-hack", + "proc-macro2", + "quote", + "standback", + "syn", +] + +[[package]] +name = "tinyvec" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "toml" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +dependencies = [ + "serde", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +dependencies = [ + "matches", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13e63ab62dbe32aeee58d1c5408d35c36c392bba5d9d3142287219721afe606" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-xid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" + +[[package]] +name = "unreachable" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +dependencies = [ + "void", +] + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "ureq" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "294b85ef5dbc3670a72e82a89971608a1fcc4ed5c7c5a2895230d31a95f0569b" +dependencies = [ + "base64", + "chunked_transfer", + "cookie", + "cookie_store", + "log", + "once_cell", + "qstring", + "rustls", + "url", + "webpki", + "webpki-roots", +] + +[[package]] +name = "url" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", +] + +[[package]] +name = "version_check" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "walkdir" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64" + +[[package]] +name = "web-sys" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c40dc691fc48003eba817c38da7113c15698142da971298003cac3ef175680b3" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82015b7e0b8bad8185994674a13a93306bea76cf5a16c5a181382fd3a5ec2376" +dependencies = [ + "webpki", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "xattr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" +dependencies = [ + "libc", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..dbea0ff --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "redlux" +version = "0.1.0" +description = "AAC decoder for MPEG-4 (MP4, M4A etc) and AAC files" +authors = ["Kasper Henningsen"] +edition = "2018" +readme = "README.md" +license = "MIT" +homepage = "https://github.com/probablykasper/redlux#readme" +repository = "https://github.com/probablykasper/redlux" +documentation = "https://docs.rs/redlux" +keywords = ["aac", "mp4", "m4a", "decoder", "rodio"] +categories = ["multimedia::audio"] + +[dependencies] +# mp4 = "0.8.0" +mp4 = { git = "https://github.com/alfg/mp4-rust", branch = "bugfix/read-largesize-boxheader-size" } +fdk-aac = "0.4.0" +rodio = { version = "0.13.0", default-features = false } + +[dev-dependencies] + +# [features] +# default = ["mpeg"] +# rodio = ["rodio-source"] diff --git a/src/adts.rs b/src/adts.rs new file mode 100644 index 0000000..a262db7 --- /dev/null +++ b/src/adts.rs @@ -0,0 +1,99 @@ +use std::ops::Range; + +fn get_bits(byte: u16, range: Range) -> u16 { + let shaved_left = byte << range.start - 1; + let moved_back = shaved_left >> range.start - 1; + let shave_right = moved_back >> 16 - range.end; + return shave_right; +} + +fn get_bits_u8(byte: u8, range: Range) -> u8 { + let shaved_left = byte << range.start - 1; + let moved_back = shaved_left >> range.start - 1; + let shave_right = moved_back >> 8 - range.end; + return shave_right; +} + +pub fn construct_adts_header(track: &mp4::Mp4Track, sample: &mp4::Mp4Sample) -> Option> { + // ADTS header wiki reference: https://wiki.multimedia.cx/index.php/ADTS#:~:text=Audio%20Data%20Transport%20Stream%20(ADTS,to%20stream%20audio%2C%20usually%20AAC. + + // byte7 and byte9 not included without CRC + let adts_header_length = 7; + + // AAAA_AAAA + let byte0 = 0b1111_1111; + + // AAAA_BCCD + // D: Only support 1 (without CRC) + let byte1 = 0b1111_0001; + + // EEFF_FFGH + let mut byte2 = 0b0000_0000; + let object_type = match track.audio_profile() { + Ok(mp4::AudioObjectType::AacMain) => 1, + Ok(mp4::AudioObjectType::AacLowComplexity) => 2, + Ok(mp4::AudioObjectType::AacScalableSampleRate) => 3, + Ok(mp4::AudioObjectType::AacLongTermPrediction) => 4, + Err(_) => return None, + }; + let adts_object_type = object_type - 1; + byte2 = (byte2 << 2) | adts_object_type; // EE + + let sample_freq_index = match track.sample_freq_index() { + Ok(mp4::SampleFreqIndex::Freq96000) => 0, + Ok(mp4::SampleFreqIndex::Freq88200) => 1, + Ok(mp4::SampleFreqIndex::Freq64000) => 2, + Ok(mp4::SampleFreqIndex::Freq48000) => 3, + Ok(mp4::SampleFreqIndex::Freq44100) => 4, + Ok(mp4::SampleFreqIndex::Freq32000) => 5, + Ok(mp4::SampleFreqIndex::Freq24000) => 6, + Ok(mp4::SampleFreqIndex::Freq22050) => 7, + Ok(mp4::SampleFreqIndex::Freq16000) => 8, + Ok(mp4::SampleFreqIndex::Freq12000) => 9, + Ok(mp4::SampleFreqIndex::Freq11025) => 10, + Ok(mp4::SampleFreqIndex::Freq8000) => 11, + Ok(mp4::SampleFreqIndex::Freq7350) => 12, + // 13-14 = reserved + // 15 = explicit frequency (forbidden in adts) + Err(_) => return None, + }; + byte2 = (byte2 << 4) | sample_freq_index; // FFFF + byte2 = (byte2 << 1) | 0b1; // G + + let channel_config = match track.channel_config() { + // 0 = for when channel config is sent via an inband PCE + Ok(mp4::ChannelConfig::Mono) => 1, + Ok(mp4::ChannelConfig::Stereo) => 2, + Ok(mp4::ChannelConfig::Three) => 3, + Ok(mp4::ChannelConfig::Four) => 4, + Ok(mp4::ChannelConfig::Five) => 5, + Ok(mp4::ChannelConfig::FiveOne) => 6, + Ok(mp4::ChannelConfig::SevenOne) => 7, + // 8-15 = reserved + Err(_) => return None, + }; + byte2 = (byte2 << 1) | get_bits_u8(channel_config, 6..6); // H + + // HHIJ_KLMM + let mut byte3 = 0b0000_0000; + byte3 = (byte3 << 2) | get_bits_u8(channel_config, 7..8); // HH + byte3 = (byte3 << 4) | 0b1111; // IJKL + + let frame_length = adts_header_length + sample.bytes.len() as u16; + byte3 = (byte3 << 2) | get_bits(frame_length, 3..5) as u8; // MM + + // MMMM_MMMM + let byte4 = get_bits(frame_length, 6..13) as u8; + + // MMMO_OOOO + let mut byte5 = 0b0000_0000; + byte5 = (byte5 << 3) | get_bits(frame_length, 14..16) as u8; + byte5 = (byte5 << 5) | 0b11111; // OOOOO + + // OOOO_OOPP + let mut byte6 = 0b0000_0000; + byte6 = (byte6 << 6) | 0b111111; // OOOOOO + byte6 = (byte6 << 2) | 0b00; // PP + + return Some(vec![byte0, byte1, byte2, byte3, byte4, byte5, byte6]); +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..e0885a0 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,152 @@ +use fdk_aac::dec::{Decoder as AacDecoder, DecoderError, Transport}; +use std::io::{Read, Seek}; +use std::time::Duration; + +pub mod adts; + +pub struct Decoder +where + R: Read + Seek, +{ + mp4_reader: mp4::Mp4Reader, + aac_decoder: AacDecoder, + current_pcm_index: usize, + current_pcm: Vec, + track_id: u32, + position: u32, +} + +impl Decoder +where + R: Read + Seek, +{ + pub fn new(reader: R, size: u64) -> Result, &'static str> { + let decoder = AacDecoder::new(Transport::Adts); + let mp4 = mp4::Mp4Reader::read_header(reader, size).or(Err("Error reading MPEG header"))?; + let mut track_id: Option = None; + { + for track in mp4.tracks().iter() { + let media_type = track.media_type().or(Err("Error getting media type"))?; + match media_type { + mp4::MediaType::AAC => { + track_id = Some(track.track_id()); + break; + } + _ => {} + } + } + } + match track_id { + Some(track_id) => { + return Ok(Decoder { + mp4_reader: mp4, + aac_decoder: decoder, + current_pcm_index: 0, + current_pcm: Vec::new(), + track_id: track_id, + position: 1, + }); + } + None => { + return Err("No aac track found"); + } + } + } + pub fn current_frame_len(&self) -> Option { + let frame_size: usize = self.aac_decoder.decoded_frame_size(); + Some(frame_size) + } + pub fn channels(&self) -> u16 { + let num_channels: i32 = self.aac_decoder.stream_info().numChannels; + num_channels as _ + } + pub fn sample_rate(&self) -> u32 { + let sample_rate: i32 = self.aac_decoder.stream_info().sampleRate; + sample_rate as _ + } + pub fn total_duration(&self) -> Option { + return None; + } +} + +impl Iterator for Decoder +where + R: Read + Seek, +{ + type Item = i16; + fn next(&mut self) -> Option { + if self.current_pcm_index == self.current_pcm.len() { + let mut pcm = vec![0; 8192]; + let result = match self.aac_decoder.decode_frame(&mut self.current_pcm) { + Err(DecoderError::NOT_ENOUGH_BITS) => { + let sample_result = self.mp4_reader.read_sample(self.track_id, self.position); + let sample = match sample_result { + Ok(sample) => sample?, // None if EOF + Err(_) => { + println!("Error reading sample"); + return None; + } + }; + let tracks = self.mp4_reader.tracks(); + let track = match tracks.get(self.track_id as usize - 1) { + Some(track) => track, + None => { + println!("No track ID there"); + return None; + } + }; + let adts_header = match adts::construct_adts_header(track, &sample) { + Some(bytes) => bytes, + None => { + println!("Error getting adts header bytes"); + return None; + } + }; + let adts_bytes = mp4::Bytes::copy_from_slice(&adts_header); + let bytes = [adts_bytes, sample.bytes].concat(); + self.position += 1; + let _bytes_read = match self.aac_decoder.fill(&bytes) { + Ok(bytes_read) => bytes_read, + Err(_) => return None, + }; + self.aac_decoder.decode_frame(&mut pcm) + } + val => val, + }; + match result { + Ok(_) => {} + Err(err) => { + println!("DecoderError: {}", err); + return None; + } + } + let decoded_fram_size = self.aac_decoder.decoded_frame_size(); + if decoded_fram_size < pcm.len() { + let _ = pcm.split_off(decoded_fram_size); + } + self.current_pcm = pcm; + self.current_pcm_index = 0; + } + let value = self.current_pcm[self.current_pcm_index]; + self.current_pcm_index += 1; + return Some(value); + } +} + +impl rodio::Source for Decoder +where + R: Read + Seek, +{ + fn current_frame_len(&self) -> Option { + return self.current_frame_len(); + } + fn channels(&self) -> u16 { + return self.channels(); + } + fn sample_rate(&self) -> u32 { + return self.sample_rate(); + } + fn total_duration(&self) -> Option { + return self.total_duration(); + } +} diff --git a/tests/samples/Simbai & Elke Bay - Energy.m4a b/tests/samples/Simbai & Elke Bay - Energy.m4a new file mode 100644 index 0000000000000000000000000000000000000000..04f63d184c780b05321141b9ab8c311090af5a19 GIT binary patch literal 117364 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 !o+zz*U78u$LH5$cCh5^Xq!`a? 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 literal 0 HcmV?d00001 diff --git a/tests/test.rs b/tests/test.rs new file mode 100644 index 0000000..9c5ef3c --- /dev/null +++ b/tests/test.rs @@ -0,0 +1,25 @@ +use redlux::Decoder; +use rodio::{OutputStream, Sink}; +use std::fs::File; +use std::io::BufReader; + +#[test] +fn play_m4a() { + let path = "tests/samples/Simbai & Elke Bay - Energy.m4a"; + let file = File::open(path).expect("Error opening file"); + + let metadata = file.metadata().expect("Error getting file metadata"); + let size = metadata.len(); + let buf = BufReader::new(file); + + let decoder = Decoder::new(buf, size).expect("Error creating M4aDecoder"); + + let output_stream = OutputStream::try_default(); + let (_stream, handle) = output_stream.expect("Error creating output stream"); + let sink = Sink::try_new(&handle).expect("Error creating sink"); + + sink.append(decoder); + sink.play(); + sink.set_volume(0.5); + sink.sleep_until_end(); +} -- 2.51.2