[READ-ONLY] Mirror of https://github.com/probablykasper/redlux. AAC decoder for MPEG-4 and AAC files, with rodio support
aac audio decoder mp4 package
0

Configure Feed

Select the types of activity you want to include in your feed.

Add mpeg aac decoder

Kasper (Feb 1, 2021, 12:56 AM +0100) 4e4a6475 75754b25

+1801
+1
.gitignore
··· 1 + /target
+1499
Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + [[package]] 4 + name = "addr2line" 5 + version = "0.14.1" 6 + source = "registry+https://github.com/rust-lang/crates.io-index" 7 + checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" 8 + dependencies = [ 9 + "gimli", 10 + ] 11 + 12 + [[package]] 13 + name = "adler" 14 + version = "0.2.3" 15 + source = "registry+https://github.com/rust-lang/crates.io-index" 16 + checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" 17 + 18 + [[package]] 19 + name = "adler32" 20 + version = "1.2.0" 21 + source = "registry+https://github.com/rust-lang/crates.io-index" 22 + checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" 23 + 24 + [[package]] 25 + name = "alsa" 26 + version = "0.4.3" 27 + source = "registry+https://github.com/rust-lang/crates.io-index" 28 + checksum = "eb213f6b3e4b1480a60931ca2035794aa67b73103d254715b1db7b70dcb3c934" 29 + dependencies = [ 30 + "alsa-sys", 31 + "bitflags", 32 + "libc", 33 + "nix", 34 + ] 35 + 36 + [[package]] 37 + name = "alsa-sys" 38 + version = "0.3.1" 39 + source = "registry+https://github.com/rust-lang/crates.io-index" 40 + checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" 41 + dependencies = [ 42 + "libc", 43 + "pkg-config", 44 + ] 45 + 46 + [[package]] 47 + name = "ascii" 48 + version = "0.9.3" 49 + source = "registry+https://github.com/rust-lang/crates.io-index" 50 + checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" 51 + 52 + [[package]] 53 + name = "autocfg" 54 + version = "1.0.1" 55 + source = "registry+https://github.com/rust-lang/crates.io-index" 56 + checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" 57 + 58 + [[package]] 59 + name = "backtrace" 60 + version = "0.3.56" 61 + source = "registry+https://github.com/rust-lang/crates.io-index" 62 + checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" 63 + dependencies = [ 64 + "addr2line", 65 + "cfg-if 1.0.0", 66 + "libc", 67 + "miniz_oxide", 68 + "object", 69 + "rustc-demangle", 70 + ] 71 + 72 + [[package]] 73 + name = "base-x" 74 + version = "0.2.8" 75 + source = "registry+https://github.com/rust-lang/crates.io-index" 76 + checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" 77 + 78 + [[package]] 79 + name = "base64" 80 + version = "0.13.0" 81 + source = "registry+https://github.com/rust-lang/crates.io-index" 82 + checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 83 + 84 + [[package]] 85 + name = "bindgen" 86 + version = "0.56.0" 87 + source = "registry+https://github.com/rust-lang/crates.io-index" 88 + checksum = "2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239" 89 + dependencies = [ 90 + "bitflags", 91 + "cexpr", 92 + "clang-sys", 93 + "lazy_static", 94 + "lazycell", 95 + "peeking_take_while", 96 + "proc-macro2", 97 + "quote", 98 + "regex", 99 + "rustc-hash", 100 + "shlex", 101 + ] 102 + 103 + [[package]] 104 + name = "bitflags" 105 + version = "1.2.1" 106 + source = "registry+https://github.com/rust-lang/crates.io-index" 107 + checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 108 + 109 + [[package]] 110 + name = "bumpalo" 111 + version = "3.6.0" 112 + source = "registry+https://github.com/rust-lang/crates.io-index" 113 + checksum = "099e596ef14349721d9016f6b80dd3419ea1bf289ab9b44df8e4dfd3a005d5d9" 114 + 115 + [[package]] 116 + name = "byteorder" 117 + version = "1.4.2" 118 + source = "registry+https://github.com/rust-lang/crates.io-index" 119 + checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" 120 + 121 + [[package]] 122 + name = "bytes" 123 + version = "0.5.6" 124 + source = "registry+https://github.com/rust-lang/crates.io-index" 125 + checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" 126 + 127 + [[package]] 128 + name = "bytes" 129 + version = "1.0.1" 130 + source = "registry+https://github.com/rust-lang/crates.io-index" 131 + checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" 132 + 133 + [[package]] 134 + name = "cc" 135 + version = "1.0.66" 136 + source = "registry+https://github.com/rust-lang/crates.io-index" 137 + checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" 138 + dependencies = [ 139 + "jobserver", 140 + ] 141 + 142 + [[package]] 143 + name = "cesu8" 144 + version = "1.1.0" 145 + source = "registry+https://github.com/rust-lang/crates.io-index" 146 + checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 147 + 148 + [[package]] 149 + name = "cexpr" 150 + version = "0.4.0" 151 + source = "registry+https://github.com/rust-lang/crates.io-index" 152 + checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" 153 + dependencies = [ 154 + "nom", 155 + ] 156 + 157 + [[package]] 158 + name = "cfg-if" 159 + version = "0.1.10" 160 + source = "registry+https://github.com/rust-lang/crates.io-index" 161 + checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 162 + 163 + [[package]] 164 + name = "cfg-if" 165 + version = "1.0.0" 166 + source = "registry+https://github.com/rust-lang/crates.io-index" 167 + checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 168 + 169 + [[package]] 170 + name = "chunked_transfer" 171 + version = "1.4.0" 172 + source = "registry+https://github.com/rust-lang/crates.io-index" 173 + checksum = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e" 174 + 175 + [[package]] 176 + name = "clang-sys" 177 + version = "1.0.3" 178 + source = "registry+https://github.com/rust-lang/crates.io-index" 179 + checksum = "0659001ab56b791be01d4b729c44376edc6718cf389a502e579b77b758f3296c" 180 + dependencies = [ 181 + "glob", 182 + "libc", 183 + "libloading", 184 + ] 185 + 186 + [[package]] 187 + name = "combine" 188 + version = "3.8.1" 189 + source = "registry+https://github.com/rust-lang/crates.io-index" 190 + checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" 191 + dependencies = [ 192 + "ascii", 193 + "byteorder", 194 + "either", 195 + "memchr", 196 + "unreachable", 197 + ] 198 + 199 + [[package]] 200 + name = "combine" 201 + version = "4.5.2" 202 + source = "registry+https://github.com/rust-lang/crates.io-index" 203 + checksum = "cc4369b5e4c0cddf64ad8981c0111e7df4f7078f4d6ba98fb31f2e17c4c57b7e" 204 + dependencies = [ 205 + "bytes 1.0.1", 206 + "memchr", 207 + ] 208 + 209 + [[package]] 210 + name = "const_fn" 211 + version = "0.4.5" 212 + source = "registry+https://github.com/rust-lang/crates.io-index" 213 + checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6" 214 + 215 + [[package]] 216 + name = "cookie" 217 + version = "0.14.3" 218 + source = "registry+https://github.com/rust-lang/crates.io-index" 219 + checksum = "784ad0fbab4f3e9cef09f20e0aea6000ae08d2cb98ac4c0abc53df18803d702f" 220 + dependencies = [ 221 + "percent-encoding", 222 + "time", 223 + "version_check", 224 + ] 225 + 226 + [[package]] 227 + name = "cookie_store" 228 + version = "0.12.0" 229 + source = "registry+https://github.com/rust-lang/crates.io-index" 230 + checksum = "3818dfca4b0cb5211a659bbcbb94225b7127407b2b135e650d717bfb78ab10d3" 231 + dependencies = [ 232 + "cookie", 233 + "idna", 234 + "log", 235 + "publicsuffix", 236 + "serde", 237 + "serde_json", 238 + "time", 239 + "url", 240 + ] 241 + 242 + [[package]] 243 + name = "core-foundation-sys" 244 + version = "0.6.2" 245 + source = "registry+https://github.com/rust-lang/crates.io-index" 246 + checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" 247 + 248 + [[package]] 249 + name = "coreaudio-rs" 250 + version = "0.9.1" 251 + source = "registry+https://github.com/rust-lang/crates.io-index" 252 + checksum = "f229761965dad3e9b11081668a6ea00f1def7aa46062321b5ec245b834f6e491" 253 + dependencies = [ 254 + "bitflags", 255 + "coreaudio-sys", 256 + ] 257 + 258 + [[package]] 259 + name = "coreaudio-sys" 260 + version = "0.2.8" 261 + source = "registry+https://github.com/rust-lang/crates.io-index" 262 + checksum = "2b7e3347be6a09b46aba228d6608386739fb70beff4f61e07422da87b0bb31fa" 263 + dependencies = [ 264 + "bindgen", 265 + ] 266 + 267 + [[package]] 268 + name = "cpal" 269 + version = "0.13.1" 270 + source = "registry+https://github.com/rust-lang/crates.io-index" 271 + checksum = "05631e2089dfa5d3b6ea1cfbbfd092e2ee5deeb69698911bc976b28b746d3657" 272 + dependencies = [ 273 + "alsa", 274 + "core-foundation-sys", 275 + "coreaudio-rs", 276 + "jni 0.17.0", 277 + "js-sys", 278 + "lazy_static", 279 + "libc", 280 + "mach", 281 + "ndk", 282 + "ndk-glue", 283 + "nix", 284 + "oboe", 285 + "parking_lot", 286 + "stdweb 0.1.3", 287 + "thiserror", 288 + "web-sys", 289 + "winapi", 290 + ] 291 + 292 + [[package]] 293 + name = "crc32fast" 294 + version = "1.2.1" 295 + source = "registry+https://github.com/rust-lang/crates.io-index" 296 + checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" 297 + dependencies = [ 298 + "cfg-if 1.0.0", 299 + ] 300 + 301 + [[package]] 302 + name = "darling" 303 + version = "0.10.2" 304 + source = "registry+https://github.com/rust-lang/crates.io-index" 305 + checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" 306 + dependencies = [ 307 + "darling_core", 308 + "darling_macro", 309 + ] 310 + 311 + [[package]] 312 + name = "darling_core" 313 + version = "0.10.2" 314 + source = "registry+https://github.com/rust-lang/crates.io-index" 315 + checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" 316 + dependencies = [ 317 + "fnv", 318 + "ident_case", 319 + "proc-macro2", 320 + "quote", 321 + "strsim", 322 + "syn", 323 + ] 324 + 325 + [[package]] 326 + name = "darling_macro" 327 + version = "0.10.2" 328 + source = "registry+https://github.com/rust-lang/crates.io-index" 329 + checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" 330 + dependencies = [ 331 + "darling_core", 332 + "quote", 333 + "syn", 334 + ] 335 + 336 + [[package]] 337 + name = "derivative" 338 + version = "2.2.0" 339 + source = "registry+https://github.com/rust-lang/crates.io-index" 340 + checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" 341 + dependencies = [ 342 + "proc-macro2", 343 + "quote", 344 + "syn", 345 + ] 346 + 347 + [[package]] 348 + name = "discard" 349 + version = "1.0.4" 350 + source = "registry+https://github.com/rust-lang/crates.io-index" 351 + checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" 352 + 353 + [[package]] 354 + name = "either" 355 + version = "1.6.1" 356 + source = "registry+https://github.com/rust-lang/crates.io-index" 357 + checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" 358 + 359 + [[package]] 360 + name = "error-chain" 361 + version = "0.12.4" 362 + source = "registry+https://github.com/rust-lang/crates.io-index" 363 + checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" 364 + dependencies = [ 365 + "backtrace", 366 + "version_check", 367 + ] 368 + 369 + [[package]] 370 + name = "fdk-aac" 371 + version = "0.4.0" 372 + source = "registry+https://github.com/rust-lang/crates.io-index" 373 + checksum = "a8f295617a979ab0bdceab08e16f3edb82ae876b48c25354fa56fed4d276b0db" 374 + dependencies = [ 375 + "fdk-aac-sys", 376 + ] 377 + 378 + [[package]] 379 + name = "fdk-aac-sys" 380 + version = "0.4.0" 381 + source = "registry+https://github.com/rust-lang/crates.io-index" 382 + checksum = "0ccdef9ea77a8aa82f37b62ef0d847356e15f1f12b9f894b5ca7e8de048e17fc" 383 + dependencies = [ 384 + "cc", 385 + ] 386 + 387 + [[package]] 388 + name = "fetch_unroll" 389 + version = "0.2.2" 390 + source = "registry+https://github.com/rust-lang/crates.io-index" 391 + checksum = "c8d44807d562d137f063cbfe209da1c3f9f2fa8375e11166ef495daab7b847f9" 392 + dependencies = [ 393 + "libflate", 394 + "tar", 395 + "ureq", 396 + ] 397 + 398 + [[package]] 399 + name = "filetime" 400 + version = "0.2.14" 401 + source = "registry+https://github.com/rust-lang/crates.io-index" 402 + checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8" 403 + dependencies = [ 404 + "cfg-if 1.0.0", 405 + "libc", 406 + "redox_syscall 0.2.4", 407 + "winapi", 408 + ] 409 + 410 + [[package]] 411 + name = "fnv" 412 + version = "1.0.7" 413 + source = "registry+https://github.com/rust-lang/crates.io-index" 414 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 415 + 416 + [[package]] 417 + name = "form_urlencoded" 418 + version = "1.0.0" 419 + source = "registry+https://github.com/rust-lang/crates.io-index" 420 + checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" 421 + dependencies = [ 422 + "matches", 423 + "percent-encoding", 424 + ] 425 + 426 + [[package]] 427 + name = "gimli" 428 + version = "0.23.0" 429 + source = "registry+https://github.com/rust-lang/crates.io-index" 430 + checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" 431 + 432 + [[package]] 433 + name = "glob" 434 + version = "0.3.0" 435 + source = "registry+https://github.com/rust-lang/crates.io-index" 436 + checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" 437 + 438 + [[package]] 439 + name = "ident_case" 440 + version = "1.0.1" 441 + source = "registry+https://github.com/rust-lang/crates.io-index" 442 + checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 443 + 444 + [[package]] 445 + name = "idna" 446 + version = "0.2.0" 447 + source = "registry+https://github.com/rust-lang/crates.io-index" 448 + checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" 449 + dependencies = [ 450 + "matches", 451 + "unicode-bidi", 452 + "unicode-normalization", 453 + ] 454 + 455 + [[package]] 456 + name = "instant" 457 + version = "0.1.9" 458 + source = "registry+https://github.com/rust-lang/crates.io-index" 459 + checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" 460 + dependencies = [ 461 + "cfg-if 1.0.0", 462 + ] 463 + 464 + [[package]] 465 + name = "itoa" 466 + version = "0.4.7" 467 + source = "registry+https://github.com/rust-lang/crates.io-index" 468 + checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" 469 + 470 + [[package]] 471 + name = "jni" 472 + version = "0.14.0" 473 + source = "registry+https://github.com/rust-lang/crates.io-index" 474 + checksum = "1981310da491a4f0f815238097d0d43d8072732b5ae5f8bd0d8eadf5bf245402" 475 + dependencies = [ 476 + "cesu8", 477 + "combine 3.8.1", 478 + "error-chain", 479 + "jni-sys", 480 + "log", 481 + "walkdir", 482 + ] 483 + 484 + [[package]] 485 + name = "jni" 486 + version = "0.17.0" 487 + source = "registry+https://github.com/rust-lang/crates.io-index" 488 + checksum = "36bcc950632e48b86da402c5c077590583da5ac0d480103611d5374e7c967a3c" 489 + dependencies = [ 490 + "cesu8", 491 + "combine 4.5.2", 492 + "error-chain", 493 + "jni-sys", 494 + "log", 495 + "walkdir", 496 + ] 497 + 498 + [[package]] 499 + name = "jni-sys" 500 + version = "0.3.0" 501 + source = "registry+https://github.com/rust-lang/crates.io-index" 502 + checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 503 + 504 + [[package]] 505 + name = "jobserver" 506 + version = "0.1.21" 507 + source = "registry+https://github.com/rust-lang/crates.io-index" 508 + checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" 509 + dependencies = [ 510 + "libc", 511 + ] 512 + 513 + [[package]] 514 + name = "js-sys" 515 + version = "0.3.47" 516 + source = "registry+https://github.com/rust-lang/crates.io-index" 517 + checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65" 518 + dependencies = [ 519 + "wasm-bindgen", 520 + ] 521 + 522 + [[package]] 523 + name = "lazy_static" 524 + version = "1.4.0" 525 + source = "registry+https://github.com/rust-lang/crates.io-index" 526 + checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 527 + 528 + [[package]] 529 + name = "lazycell" 530 + version = "1.3.0" 531 + source = "registry+https://github.com/rust-lang/crates.io-index" 532 + checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" 533 + 534 + [[package]] 535 + name = "libc" 536 + version = "0.2.84" 537 + source = "registry+https://github.com/rust-lang/crates.io-index" 538 + checksum = "1cca32fa0182e8c0989459524dc356b8f2b5c10f1b9eb521b7d182c03cf8c5ff" 539 + 540 + [[package]] 541 + name = "libflate" 542 + version = "1.0.3" 543 + source = "registry+https://github.com/rust-lang/crates.io-index" 544 + checksum = "389de7875e06476365974da3e7ff85d55f1972188ccd9f6020dd7c8156e17914" 545 + dependencies = [ 546 + "adler32", 547 + "crc32fast", 548 + "libflate_lz77", 549 + "rle-decode-fast", 550 + ] 551 + 552 + [[package]] 553 + name = "libflate_lz77" 554 + version = "1.0.0" 555 + source = "registry+https://github.com/rust-lang/crates.io-index" 556 + checksum = "3286f09f7d4926fc486334f28d8d2e6ebe4f7f9994494b6dab27ddfad2c9b11b" 557 + 558 + [[package]] 559 + name = "libloading" 560 + version = "0.6.7" 561 + source = "registry+https://github.com/rust-lang/crates.io-index" 562 + checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" 563 + dependencies = [ 564 + "cfg-if 1.0.0", 565 + "winapi", 566 + ] 567 + 568 + [[package]] 569 + name = "lock_api" 570 + version = "0.4.2" 571 + source = "registry+https://github.com/rust-lang/crates.io-index" 572 + checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" 573 + dependencies = [ 574 + "scopeguard", 575 + ] 576 + 577 + [[package]] 578 + name = "log" 579 + version = "0.4.14" 580 + source = "registry+https://github.com/rust-lang/crates.io-index" 581 + checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" 582 + dependencies = [ 583 + "cfg-if 1.0.0", 584 + ] 585 + 586 + [[package]] 587 + name = "mach" 588 + version = "0.3.2" 589 + source = "registry+https://github.com/rust-lang/crates.io-index" 590 + checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" 591 + dependencies = [ 592 + "libc", 593 + ] 594 + 595 + [[package]] 596 + name = "matches" 597 + version = "0.1.8" 598 + source = "registry+https://github.com/rust-lang/crates.io-index" 599 + checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" 600 + 601 + [[package]] 602 + name = "memchr" 603 + version = "2.3.4" 604 + source = "registry+https://github.com/rust-lang/crates.io-index" 605 + checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" 606 + 607 + [[package]] 608 + name = "miniz_oxide" 609 + version = "0.4.3" 610 + source = "registry+https://github.com/rust-lang/crates.io-index" 611 + checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" 612 + dependencies = [ 613 + "adler", 614 + "autocfg", 615 + ] 616 + 617 + [[package]] 618 + name = "mp4" 619 + version = "0.8.0" 620 + source = "git+https://github.com/alfg/mp4-rust?branch=bugfix/read-largesize-boxheader-size#b757d90627a5c1610bb253ff663fbebdddd08a57" 621 + dependencies = [ 622 + "byteorder", 623 + "bytes 0.5.6", 624 + "num-rational", 625 + "serde", 626 + "serde_json", 627 + "thiserror", 628 + ] 629 + 630 + [[package]] 631 + name = "ndk" 632 + version = "0.2.1" 633 + source = "registry+https://github.com/rust-lang/crates.io-index" 634 + checksum = "5eb167c1febed0a496639034d0c76b3b74263636045db5489eee52143c246e73" 635 + dependencies = [ 636 + "jni-sys", 637 + "ndk-sys", 638 + "num_enum", 639 + "thiserror", 640 + ] 641 + 642 + [[package]] 643 + name = "ndk-glue" 644 + version = "0.2.1" 645 + source = "registry+https://github.com/rust-lang/crates.io-index" 646 + checksum = "bdf399b8b7a39c6fb153c4ec32c72fd5fe789df24a647f229c239aa7adb15241" 647 + dependencies = [ 648 + "lazy_static", 649 + "libc", 650 + "log", 651 + "ndk", 652 + "ndk-macro", 653 + "ndk-sys", 654 + ] 655 + 656 + [[package]] 657 + name = "ndk-macro" 658 + version = "0.2.0" 659 + source = "registry+https://github.com/rust-lang/crates.io-index" 660 + checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" 661 + dependencies = [ 662 + "darling", 663 + "proc-macro-crate", 664 + "proc-macro2", 665 + "quote", 666 + "syn", 667 + ] 668 + 669 + [[package]] 670 + name = "ndk-sys" 671 + version = "0.2.1" 672 + source = "registry+https://github.com/rust-lang/crates.io-index" 673 + checksum = "c44922cb3dbb1c70b5e5f443d63b64363a898564d739ba5198e3a9138442868d" 674 + 675 + [[package]] 676 + name = "nix" 677 + version = "0.15.0" 678 + source = "registry+https://github.com/rust-lang/crates.io-index" 679 + checksum = "3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229" 680 + dependencies = [ 681 + "bitflags", 682 + "cc", 683 + "cfg-if 0.1.10", 684 + "libc", 685 + "void", 686 + ] 687 + 688 + [[package]] 689 + name = "nom" 690 + version = "5.1.2" 691 + source = "registry+https://github.com/rust-lang/crates.io-index" 692 + checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" 693 + dependencies = [ 694 + "memchr", 695 + "version_check", 696 + ] 697 + 698 + [[package]] 699 + name = "num-bigint" 700 + version = "0.3.1" 701 + source = "registry+https://github.com/rust-lang/crates.io-index" 702 + checksum = "5e9a41747ae4633fce5adffb4d2e81ffc5e89593cb19917f8fb2cc5ff76507bf" 703 + dependencies = [ 704 + "autocfg", 705 + "num-integer", 706 + "num-traits", 707 + ] 708 + 709 + [[package]] 710 + name = "num-derive" 711 + version = "0.3.3" 712 + source = "registry+https://github.com/rust-lang/crates.io-index" 713 + checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" 714 + dependencies = [ 715 + "proc-macro2", 716 + "quote", 717 + "syn", 718 + ] 719 + 720 + [[package]] 721 + name = "num-integer" 722 + version = "0.1.44" 723 + source = "registry+https://github.com/rust-lang/crates.io-index" 724 + checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" 725 + dependencies = [ 726 + "autocfg", 727 + "num-traits", 728 + ] 729 + 730 + [[package]] 731 + name = "num-rational" 732 + version = "0.3.2" 733 + source = "registry+https://github.com/rust-lang/crates.io-index" 734 + checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" 735 + dependencies = [ 736 + "autocfg", 737 + "num-bigint", 738 + "num-integer", 739 + "num-traits", 740 + "serde", 741 + ] 742 + 743 + [[package]] 744 + name = "num-traits" 745 + version = "0.2.14" 746 + source = "registry+https://github.com/rust-lang/crates.io-index" 747 + checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" 748 + dependencies = [ 749 + "autocfg", 750 + ] 751 + 752 + [[package]] 753 + name = "num_enum" 754 + version = "0.4.3" 755 + source = "registry+https://github.com/rust-lang/crates.io-index" 756 + checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4" 757 + dependencies = [ 758 + "derivative", 759 + "num_enum_derive", 760 + ] 761 + 762 + [[package]] 763 + name = "num_enum_derive" 764 + version = "0.4.3" 765 + source = "registry+https://github.com/rust-lang/crates.io-index" 766 + checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" 767 + dependencies = [ 768 + "proc-macro-crate", 769 + "proc-macro2", 770 + "quote", 771 + "syn", 772 + ] 773 + 774 + [[package]] 775 + name = "object" 776 + version = "0.23.0" 777 + source = "registry+https://github.com/rust-lang/crates.io-index" 778 + checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" 779 + 780 + [[package]] 781 + name = "oboe" 782 + version = "0.3.1" 783 + source = "registry+https://github.com/rust-lang/crates.io-index" 784 + checksum = "1aadc2b0867bdbb9a81c4d99b9b682958f49dbea1295a81d2f646cca2afdd9fc" 785 + dependencies = [ 786 + "jni 0.14.0", 787 + "ndk", 788 + "ndk-glue", 789 + "num-derive", 790 + "num-traits", 791 + "oboe-sys", 792 + ] 793 + 794 + [[package]] 795 + name = "oboe-sys" 796 + version = "0.3.0" 797 + source = "registry+https://github.com/rust-lang/crates.io-index" 798 + checksum = "68ff7a51600eabe34e189eec5c995a62f151d8d97e5fbca39e87ca738bb99b82" 799 + dependencies = [ 800 + "fetch_unroll", 801 + ] 802 + 803 + [[package]] 804 + name = "once_cell" 805 + version = "1.5.2" 806 + source = "registry+https://github.com/rust-lang/crates.io-index" 807 + checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" 808 + 809 + [[package]] 810 + name = "parking_lot" 811 + version = "0.11.1" 812 + source = "registry+https://github.com/rust-lang/crates.io-index" 813 + checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" 814 + dependencies = [ 815 + "instant", 816 + "lock_api", 817 + "parking_lot_core", 818 + ] 819 + 820 + [[package]] 821 + name = "parking_lot_core" 822 + version = "0.8.2" 823 + source = "registry+https://github.com/rust-lang/crates.io-index" 824 + checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272" 825 + dependencies = [ 826 + "cfg-if 1.0.0", 827 + "instant", 828 + "libc", 829 + "redox_syscall 0.1.57", 830 + "smallvec", 831 + "winapi", 832 + ] 833 + 834 + [[package]] 835 + name = "peeking_take_while" 836 + version = "0.1.2" 837 + source = "registry+https://github.com/rust-lang/crates.io-index" 838 + checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" 839 + 840 + [[package]] 841 + name = "percent-encoding" 842 + version = "2.1.0" 843 + source = "registry+https://github.com/rust-lang/crates.io-index" 844 + checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 845 + 846 + [[package]] 847 + name = "pkg-config" 848 + version = "0.3.19" 849 + source = "registry+https://github.com/rust-lang/crates.io-index" 850 + checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" 851 + 852 + [[package]] 853 + name = "proc-macro-crate" 854 + version = "0.1.5" 855 + source = "registry+https://github.com/rust-lang/crates.io-index" 856 + checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" 857 + dependencies = [ 858 + "toml", 859 + ] 860 + 861 + [[package]] 862 + name = "proc-macro-hack" 863 + version = "0.5.19" 864 + source = "registry+https://github.com/rust-lang/crates.io-index" 865 + checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" 866 + 867 + [[package]] 868 + name = "proc-macro2" 869 + version = "1.0.24" 870 + source = "registry+https://github.com/rust-lang/crates.io-index" 871 + checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" 872 + dependencies = [ 873 + "unicode-xid", 874 + ] 875 + 876 + [[package]] 877 + name = "publicsuffix" 878 + version = "1.5.4" 879 + source = "registry+https://github.com/rust-lang/crates.io-index" 880 + checksum = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" 881 + dependencies = [ 882 + "error-chain", 883 + "idna", 884 + "lazy_static", 885 + "regex", 886 + "url", 887 + ] 888 + 889 + [[package]] 890 + name = "qstring" 891 + version = "0.7.2" 892 + source = "registry+https://github.com/rust-lang/crates.io-index" 893 + checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" 894 + dependencies = [ 895 + "percent-encoding", 896 + ] 897 + 898 + [[package]] 899 + name = "quote" 900 + version = "1.0.8" 901 + source = "registry+https://github.com/rust-lang/crates.io-index" 902 + checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df" 903 + dependencies = [ 904 + "proc-macro2", 905 + ] 906 + 907 + [[package]] 908 + name = "redlux" 909 + version = "0.1.0" 910 + dependencies = [ 911 + "fdk-aac", 912 + "mp4", 913 + "rodio", 914 + ] 915 + 916 + [[package]] 917 + name = "redox_syscall" 918 + version = "0.1.57" 919 + source = "registry+https://github.com/rust-lang/crates.io-index" 920 + checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" 921 + 922 + [[package]] 923 + name = "redox_syscall" 924 + version = "0.2.4" 925 + source = "registry+https://github.com/rust-lang/crates.io-index" 926 + checksum = "05ec8ca9416c5ea37062b502703cd7fcb207736bc294f6e0cf367ac6fc234570" 927 + dependencies = [ 928 + "bitflags", 929 + ] 930 + 931 + [[package]] 932 + name = "regex" 933 + version = "1.4.3" 934 + source = "registry+https://github.com/rust-lang/crates.io-index" 935 + checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" 936 + dependencies = [ 937 + "regex-syntax", 938 + ] 939 + 940 + [[package]] 941 + name = "regex-syntax" 942 + version = "0.6.22" 943 + source = "registry+https://github.com/rust-lang/crates.io-index" 944 + checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" 945 + 946 + [[package]] 947 + name = "ring" 948 + version = "0.16.19" 949 + source = "registry+https://github.com/rust-lang/crates.io-index" 950 + checksum = "024a1e66fea74c66c66624ee5622a7ff0e4b73a13b4f5c326ddb50c708944226" 951 + dependencies = [ 952 + "cc", 953 + "libc", 954 + "once_cell", 955 + "spin", 956 + "untrusted", 957 + "web-sys", 958 + "winapi", 959 + ] 960 + 961 + [[package]] 962 + name = "rle-decode-fast" 963 + version = "1.0.1" 964 + source = "registry+https://github.com/rust-lang/crates.io-index" 965 + checksum = "cabe4fa914dec5870285fa7f71f602645da47c486e68486d2b4ceb4a343e90ac" 966 + 967 + [[package]] 968 + name = "rodio" 969 + version = "0.13.0" 970 + source = "registry+https://github.com/rust-lang/crates.io-index" 971 + checksum = "c9683532495146e98878d4948fa1a1953f584cd923f2a5f5c26b7a8701b56943" 972 + dependencies = [ 973 + "cpal", 974 + ] 975 + 976 + [[package]] 977 + name = "rustc-demangle" 978 + version = "0.1.18" 979 + source = "registry+https://github.com/rust-lang/crates.io-index" 980 + checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" 981 + 982 + [[package]] 983 + name = "rustc-hash" 984 + version = "1.1.0" 985 + source = "registry+https://github.com/rust-lang/crates.io-index" 986 + checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 987 + 988 + [[package]] 989 + name = "rustc_version" 990 + version = "0.2.3" 991 + source = "registry+https://github.com/rust-lang/crates.io-index" 992 + checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 993 + dependencies = [ 994 + "semver", 995 + ] 996 + 997 + [[package]] 998 + name = "rustls" 999 + version = "0.19.0" 1000 + source = "registry+https://github.com/rust-lang/crates.io-index" 1001 + checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b" 1002 + dependencies = [ 1003 + "base64", 1004 + "log", 1005 + "ring", 1006 + "sct", 1007 + "webpki", 1008 + ] 1009 + 1010 + [[package]] 1011 + name = "ryu" 1012 + version = "1.0.5" 1013 + source = "registry+https://github.com/rust-lang/crates.io-index" 1014 + checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" 1015 + 1016 + [[package]] 1017 + name = "same-file" 1018 + version = "1.0.6" 1019 + source = "registry+https://github.com/rust-lang/crates.io-index" 1020 + checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1021 + dependencies = [ 1022 + "winapi-util", 1023 + ] 1024 + 1025 + [[package]] 1026 + name = "scopeguard" 1027 + version = "1.1.0" 1028 + source = "registry+https://github.com/rust-lang/crates.io-index" 1029 + checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 1030 + 1031 + [[package]] 1032 + name = "sct" 1033 + version = "0.6.0" 1034 + source = "registry+https://github.com/rust-lang/crates.io-index" 1035 + checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" 1036 + dependencies = [ 1037 + "ring", 1038 + "untrusted", 1039 + ] 1040 + 1041 + [[package]] 1042 + name = "semver" 1043 + version = "0.9.0" 1044 + source = "registry+https://github.com/rust-lang/crates.io-index" 1045 + checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1046 + dependencies = [ 1047 + "semver-parser", 1048 + ] 1049 + 1050 + [[package]] 1051 + name = "semver-parser" 1052 + version = "0.7.0" 1053 + source = "registry+https://github.com/rust-lang/crates.io-index" 1054 + checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1055 + 1056 + [[package]] 1057 + name = "serde" 1058 + version = "1.0.123" 1059 + source = "registry+https://github.com/rust-lang/crates.io-index" 1060 + checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae" 1061 + dependencies = [ 1062 + "serde_derive", 1063 + ] 1064 + 1065 + [[package]] 1066 + name = "serde_derive" 1067 + version = "1.0.123" 1068 + source = "registry+https://github.com/rust-lang/crates.io-index" 1069 + checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31" 1070 + dependencies = [ 1071 + "proc-macro2", 1072 + "quote", 1073 + "syn", 1074 + ] 1075 + 1076 + [[package]] 1077 + name = "serde_json" 1078 + version = "1.0.61" 1079 + source = "registry+https://github.com/rust-lang/crates.io-index" 1080 + checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a" 1081 + dependencies = [ 1082 + "itoa", 1083 + "ryu", 1084 + "serde", 1085 + ] 1086 + 1087 + [[package]] 1088 + name = "sha1" 1089 + version = "0.6.0" 1090 + source = "registry+https://github.com/rust-lang/crates.io-index" 1091 + checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" 1092 + 1093 + [[package]] 1094 + name = "shlex" 1095 + version = "0.1.1" 1096 + source = "registry+https://github.com/rust-lang/crates.io-index" 1097 + checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" 1098 + 1099 + [[package]] 1100 + name = "smallvec" 1101 + version = "1.6.1" 1102 + source = "registry+https://github.com/rust-lang/crates.io-index" 1103 + checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" 1104 + 1105 + [[package]] 1106 + name = "spin" 1107 + version = "0.5.2" 1108 + source = "registry+https://github.com/rust-lang/crates.io-index" 1109 + checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 1110 + 1111 + [[package]] 1112 + name = "standback" 1113 + version = "0.2.14" 1114 + source = "registry+https://github.com/rust-lang/crates.io-index" 1115 + checksum = "c66a8cff4fa24853fdf6b51f75c6d7f8206d7c75cab4e467bcd7f25c2b1febe0" 1116 + dependencies = [ 1117 + "version_check", 1118 + ] 1119 + 1120 + [[package]] 1121 + name = "stdweb" 1122 + version = "0.1.3" 1123 + source = "registry+https://github.com/rust-lang/crates.io-index" 1124 + checksum = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" 1125 + 1126 + [[package]] 1127 + name = "stdweb" 1128 + version = "0.4.20" 1129 + source = "registry+https://github.com/rust-lang/crates.io-index" 1130 + checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" 1131 + dependencies = [ 1132 + "discard", 1133 + "rustc_version", 1134 + "stdweb-derive", 1135 + "stdweb-internal-macros", 1136 + "stdweb-internal-runtime", 1137 + "wasm-bindgen", 1138 + ] 1139 + 1140 + [[package]] 1141 + name = "stdweb-derive" 1142 + version = "0.5.3" 1143 + source = "registry+https://github.com/rust-lang/crates.io-index" 1144 + checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" 1145 + dependencies = [ 1146 + "proc-macro2", 1147 + "quote", 1148 + "serde", 1149 + "serde_derive", 1150 + "syn", 1151 + ] 1152 + 1153 + [[package]] 1154 + name = "stdweb-internal-macros" 1155 + version = "0.2.9" 1156 + source = "registry+https://github.com/rust-lang/crates.io-index" 1157 + checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" 1158 + dependencies = [ 1159 + "base-x", 1160 + "proc-macro2", 1161 + "quote", 1162 + "serde", 1163 + "serde_derive", 1164 + "serde_json", 1165 + "sha1", 1166 + "syn", 1167 + ] 1168 + 1169 + [[package]] 1170 + name = "stdweb-internal-runtime" 1171 + version = "0.1.5" 1172 + source = "registry+https://github.com/rust-lang/crates.io-index" 1173 + checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" 1174 + 1175 + [[package]] 1176 + name = "strsim" 1177 + version = "0.9.3" 1178 + source = "registry+https://github.com/rust-lang/crates.io-index" 1179 + checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" 1180 + 1181 + [[package]] 1182 + name = "syn" 1183 + version = "1.0.60" 1184 + source = "registry+https://github.com/rust-lang/crates.io-index" 1185 + checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" 1186 + dependencies = [ 1187 + "proc-macro2", 1188 + "quote", 1189 + "unicode-xid", 1190 + ] 1191 + 1192 + [[package]] 1193 + name = "tar" 1194 + version = "0.4.32" 1195 + source = "registry+https://github.com/rust-lang/crates.io-index" 1196 + checksum = "0313546c01d59e29be4f09687bcb4fb6690cec931cc3607b6aec7a0e417f4cc6" 1197 + dependencies = [ 1198 + "filetime", 1199 + "libc", 1200 + "xattr", 1201 + ] 1202 + 1203 + [[package]] 1204 + name = "thiserror" 1205 + version = "1.0.23" 1206 + source = "registry+https://github.com/rust-lang/crates.io-index" 1207 + checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" 1208 + dependencies = [ 1209 + "thiserror-impl", 1210 + ] 1211 + 1212 + [[package]] 1213 + name = "thiserror-impl" 1214 + version = "1.0.23" 1215 + source = "registry+https://github.com/rust-lang/crates.io-index" 1216 + checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" 1217 + dependencies = [ 1218 + "proc-macro2", 1219 + "quote", 1220 + "syn", 1221 + ] 1222 + 1223 + [[package]] 1224 + name = "time" 1225 + version = "0.2.25" 1226 + source = "registry+https://github.com/rust-lang/crates.io-index" 1227 + checksum = "1195b046942c221454c2539395f85413b33383a067449d78aab2b7b052a142f7" 1228 + dependencies = [ 1229 + "const_fn", 1230 + "libc", 1231 + "standback", 1232 + "stdweb 0.4.20", 1233 + "time-macros", 1234 + "version_check", 1235 + "winapi", 1236 + ] 1237 + 1238 + [[package]] 1239 + name = "time-macros" 1240 + version = "0.1.1" 1241 + source = "registry+https://github.com/rust-lang/crates.io-index" 1242 + checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" 1243 + dependencies = [ 1244 + "proc-macro-hack", 1245 + "time-macros-impl", 1246 + ] 1247 + 1248 + [[package]] 1249 + name = "time-macros-impl" 1250 + version = "0.1.1" 1251 + source = "registry+https://github.com/rust-lang/crates.io-index" 1252 + checksum = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa" 1253 + dependencies = [ 1254 + "proc-macro-hack", 1255 + "proc-macro2", 1256 + "quote", 1257 + "standback", 1258 + "syn", 1259 + ] 1260 + 1261 + [[package]] 1262 + name = "tinyvec" 1263 + version = "1.1.1" 1264 + source = "registry+https://github.com/rust-lang/crates.io-index" 1265 + checksum = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023" 1266 + dependencies = [ 1267 + "tinyvec_macros", 1268 + ] 1269 + 1270 + [[package]] 1271 + name = "tinyvec_macros" 1272 + version = "0.1.0" 1273 + source = "registry+https://github.com/rust-lang/crates.io-index" 1274 + checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 1275 + 1276 + [[package]] 1277 + name = "toml" 1278 + version = "0.5.8" 1279 + source = "registry+https://github.com/rust-lang/crates.io-index" 1280 + checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" 1281 + dependencies = [ 1282 + "serde", 1283 + ] 1284 + 1285 + [[package]] 1286 + name = "unicode-bidi" 1287 + version = "0.3.4" 1288 + source = "registry+https://github.com/rust-lang/crates.io-index" 1289 + checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1290 + dependencies = [ 1291 + "matches", 1292 + ] 1293 + 1294 + [[package]] 1295 + name = "unicode-normalization" 1296 + version = "0.1.16" 1297 + source = "registry+https://github.com/rust-lang/crates.io-index" 1298 + checksum = "a13e63ab62dbe32aeee58d1c5408d35c36c392bba5d9d3142287219721afe606" 1299 + dependencies = [ 1300 + "tinyvec", 1301 + ] 1302 + 1303 + [[package]] 1304 + name = "unicode-xid" 1305 + version = "0.2.1" 1306 + source = "registry+https://github.com/rust-lang/crates.io-index" 1307 + checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" 1308 + 1309 + [[package]] 1310 + name = "unreachable" 1311 + version = "1.0.0" 1312 + source = "registry+https://github.com/rust-lang/crates.io-index" 1313 + checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" 1314 + dependencies = [ 1315 + "void", 1316 + ] 1317 + 1318 + [[package]] 1319 + name = "untrusted" 1320 + version = "0.7.1" 1321 + source = "registry+https://github.com/rust-lang/crates.io-index" 1322 + checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" 1323 + 1324 + [[package]] 1325 + name = "ureq" 1326 + version = "1.5.4" 1327 + source = "registry+https://github.com/rust-lang/crates.io-index" 1328 + checksum = "294b85ef5dbc3670a72e82a89971608a1fcc4ed5c7c5a2895230d31a95f0569b" 1329 + dependencies = [ 1330 + "base64", 1331 + "chunked_transfer", 1332 + "cookie", 1333 + "cookie_store", 1334 + "log", 1335 + "once_cell", 1336 + "qstring", 1337 + "rustls", 1338 + "url", 1339 + "webpki", 1340 + "webpki-roots", 1341 + ] 1342 + 1343 + [[package]] 1344 + name = "url" 1345 + version = "2.2.0" 1346 + source = "registry+https://github.com/rust-lang/crates.io-index" 1347 + checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" 1348 + dependencies = [ 1349 + "form_urlencoded", 1350 + "idna", 1351 + "matches", 1352 + "percent-encoding", 1353 + ] 1354 + 1355 + [[package]] 1356 + name = "version_check" 1357 + version = "0.9.2" 1358 + source = "registry+https://github.com/rust-lang/crates.io-index" 1359 + checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" 1360 + 1361 + [[package]] 1362 + name = "void" 1363 + version = "1.0.2" 1364 + source = "registry+https://github.com/rust-lang/crates.io-index" 1365 + checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" 1366 + 1367 + [[package]] 1368 + name = "walkdir" 1369 + version = "2.3.1" 1370 + source = "registry+https://github.com/rust-lang/crates.io-index" 1371 + checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" 1372 + dependencies = [ 1373 + "same-file", 1374 + "winapi", 1375 + "winapi-util", 1376 + ] 1377 + 1378 + [[package]] 1379 + name = "wasm-bindgen" 1380 + version = "0.2.70" 1381 + source = "registry+https://github.com/rust-lang/crates.io-index" 1382 + checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be" 1383 + dependencies = [ 1384 + "cfg-if 1.0.0", 1385 + "wasm-bindgen-macro", 1386 + ] 1387 + 1388 + [[package]] 1389 + name = "wasm-bindgen-backend" 1390 + version = "0.2.70" 1391 + source = "registry+https://github.com/rust-lang/crates.io-index" 1392 + checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7" 1393 + dependencies = [ 1394 + "bumpalo", 1395 + "lazy_static", 1396 + "log", 1397 + "proc-macro2", 1398 + "quote", 1399 + "syn", 1400 + "wasm-bindgen-shared", 1401 + ] 1402 + 1403 + [[package]] 1404 + name = "wasm-bindgen-macro" 1405 + version = "0.2.70" 1406 + source = "registry+https://github.com/rust-lang/crates.io-index" 1407 + checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c" 1408 + dependencies = [ 1409 + "quote", 1410 + "wasm-bindgen-macro-support", 1411 + ] 1412 + 1413 + [[package]] 1414 + name = "wasm-bindgen-macro-support" 1415 + version = "0.2.70" 1416 + source = "registry+https://github.com/rust-lang/crates.io-index" 1417 + checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385" 1418 + dependencies = [ 1419 + "proc-macro2", 1420 + "quote", 1421 + "syn", 1422 + "wasm-bindgen-backend", 1423 + "wasm-bindgen-shared", 1424 + ] 1425 + 1426 + [[package]] 1427 + name = "wasm-bindgen-shared" 1428 + version = "0.2.70" 1429 + source = "registry+https://github.com/rust-lang/crates.io-index" 1430 + checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64" 1431 + 1432 + [[package]] 1433 + name = "web-sys" 1434 + version = "0.3.47" 1435 + source = "registry+https://github.com/rust-lang/crates.io-index" 1436 + checksum = "c40dc691fc48003eba817c38da7113c15698142da971298003cac3ef175680b3" 1437 + dependencies = [ 1438 + "js-sys", 1439 + "wasm-bindgen", 1440 + ] 1441 + 1442 + [[package]] 1443 + name = "webpki" 1444 + version = "0.21.4" 1445 + source = "registry+https://github.com/rust-lang/crates.io-index" 1446 + checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" 1447 + dependencies = [ 1448 + "ring", 1449 + "untrusted", 1450 + ] 1451 + 1452 + [[package]] 1453 + name = "webpki-roots" 1454 + version = "0.21.0" 1455 + source = "registry+https://github.com/rust-lang/crates.io-index" 1456 + checksum = "82015b7e0b8bad8185994674a13a93306bea76cf5a16c5a181382fd3a5ec2376" 1457 + dependencies = [ 1458 + "webpki", 1459 + ] 1460 + 1461 + [[package]] 1462 + name = "winapi" 1463 + version = "0.3.9" 1464 + source = "registry+https://github.com/rust-lang/crates.io-index" 1465 + checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1466 + dependencies = [ 1467 + "winapi-i686-pc-windows-gnu", 1468 + "winapi-x86_64-pc-windows-gnu", 1469 + ] 1470 + 1471 + [[package]] 1472 + name = "winapi-i686-pc-windows-gnu" 1473 + version = "0.4.0" 1474 + source = "registry+https://github.com/rust-lang/crates.io-index" 1475 + checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1476 + 1477 + [[package]] 1478 + name = "winapi-util" 1479 + version = "0.1.5" 1480 + source = "registry+https://github.com/rust-lang/crates.io-index" 1481 + checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 1482 + dependencies = [ 1483 + "winapi", 1484 + ] 1485 + 1486 + [[package]] 1487 + name = "winapi-x86_64-pc-windows-gnu" 1488 + version = "0.4.0" 1489 + source = "registry+https://github.com/rust-lang/crates.io-index" 1490 + checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1491 + 1492 + [[package]] 1493 + name = "xattr" 1494 + version = "0.2.2" 1495 + source = "registry+https://github.com/rust-lang/crates.io-index" 1496 + checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" 1497 + dependencies = [ 1498 + "libc", 1499 + ]
+25
Cargo.toml
··· 1 + [package] 2 + name = "redlux" 3 + version = "0.1.0" 4 + description = "AAC decoder for MPEG-4 (MP4, M4A etc) and AAC files" 5 + authors = ["Kasper Henningsen"] 6 + edition = "2018" 7 + readme = "README.md" 8 + license = "MIT" 9 + homepage = "https://github.com/probablykasper/redlux#readme" 10 + repository = "https://github.com/probablykasper/redlux" 11 + documentation = "https://docs.rs/redlux" 12 + keywords = ["aac", "mp4", "m4a", "decoder", "rodio"] 13 + categories = ["multimedia::audio"] 14 + 15 + [dependencies] 16 + # mp4 = "0.8.0" 17 + mp4 = { git = "https://github.com/alfg/mp4-rust", branch = "bugfix/read-largesize-boxheader-size" } 18 + fdk-aac = "0.4.0" 19 + rodio = { version = "0.13.0", default-features = false } 20 + 21 + [dev-dependencies] 22 + 23 + # [features] 24 + # default = ["mpeg"] 25 + # rodio = ["rodio-source"]
+99
src/adts.rs
··· 1 + use std::ops::Range; 2 + 3 + fn get_bits(byte: u16, range: Range<u16>) -> u16 { 4 + let shaved_left = byte << range.start - 1; 5 + let moved_back = shaved_left >> range.start - 1; 6 + let shave_right = moved_back >> 16 - range.end; 7 + return shave_right; 8 + } 9 + 10 + fn get_bits_u8(byte: u8, range: Range<u8>) -> u8 { 11 + let shaved_left = byte << range.start - 1; 12 + let moved_back = shaved_left >> range.start - 1; 13 + let shave_right = moved_back >> 8 - range.end; 14 + return shave_right; 15 + } 16 + 17 + pub fn construct_adts_header(track: &mp4::Mp4Track, sample: &mp4::Mp4Sample) -> Option<Vec<u8>> { 18 + // ADTS header wiki reference: https://wiki.multimedia.cx/index.php/ADTS#:~:text=Audio%20Data%20Transport%20Stream%20(ADTS,to%20stream%20audio%2C%20usually%20AAC. 19 + 20 + // byte7 and byte9 not included without CRC 21 + let adts_header_length = 7; 22 + 23 + // AAAA_AAAA 24 + let byte0 = 0b1111_1111; 25 + 26 + // AAAA_BCCD 27 + // D: Only support 1 (without CRC) 28 + let byte1 = 0b1111_0001; 29 + 30 + // EEFF_FFGH 31 + let mut byte2 = 0b0000_0000; 32 + let object_type = match track.audio_profile() { 33 + Ok(mp4::AudioObjectType::AacMain) => 1, 34 + Ok(mp4::AudioObjectType::AacLowComplexity) => 2, 35 + Ok(mp4::AudioObjectType::AacScalableSampleRate) => 3, 36 + Ok(mp4::AudioObjectType::AacLongTermPrediction) => 4, 37 + Err(_) => return None, 38 + }; 39 + let adts_object_type = object_type - 1; 40 + byte2 = (byte2 << 2) | adts_object_type; // EE 41 + 42 + let sample_freq_index = match track.sample_freq_index() { 43 + Ok(mp4::SampleFreqIndex::Freq96000) => 0, 44 + Ok(mp4::SampleFreqIndex::Freq88200) => 1, 45 + Ok(mp4::SampleFreqIndex::Freq64000) => 2, 46 + Ok(mp4::SampleFreqIndex::Freq48000) => 3, 47 + Ok(mp4::SampleFreqIndex::Freq44100) => 4, 48 + Ok(mp4::SampleFreqIndex::Freq32000) => 5, 49 + Ok(mp4::SampleFreqIndex::Freq24000) => 6, 50 + Ok(mp4::SampleFreqIndex::Freq22050) => 7, 51 + Ok(mp4::SampleFreqIndex::Freq16000) => 8, 52 + Ok(mp4::SampleFreqIndex::Freq12000) => 9, 53 + Ok(mp4::SampleFreqIndex::Freq11025) => 10, 54 + Ok(mp4::SampleFreqIndex::Freq8000) => 11, 55 + Ok(mp4::SampleFreqIndex::Freq7350) => 12, 56 + // 13-14 = reserved 57 + // 15 = explicit frequency (forbidden in adts) 58 + Err(_) => return None, 59 + }; 60 + byte2 = (byte2 << 4) | sample_freq_index; // FFFF 61 + byte2 = (byte2 << 1) | 0b1; // G 62 + 63 + let channel_config = match track.channel_config() { 64 + // 0 = for when channel config is sent via an inband PCE 65 + Ok(mp4::ChannelConfig::Mono) => 1, 66 + Ok(mp4::ChannelConfig::Stereo) => 2, 67 + Ok(mp4::ChannelConfig::Three) => 3, 68 + Ok(mp4::ChannelConfig::Four) => 4, 69 + Ok(mp4::ChannelConfig::Five) => 5, 70 + Ok(mp4::ChannelConfig::FiveOne) => 6, 71 + Ok(mp4::ChannelConfig::SevenOne) => 7, 72 + // 8-15 = reserved 73 + Err(_) => return None, 74 + }; 75 + byte2 = (byte2 << 1) | get_bits_u8(channel_config, 6..6); // H 76 + 77 + // HHIJ_KLMM 78 + let mut byte3 = 0b0000_0000; 79 + byte3 = (byte3 << 2) | get_bits_u8(channel_config, 7..8); // HH 80 + byte3 = (byte3 << 4) | 0b1111; // IJKL 81 + 82 + let frame_length = adts_header_length + sample.bytes.len() as u16; 83 + byte3 = (byte3 << 2) | get_bits(frame_length, 3..5) as u8; // MM 84 + 85 + // MMMM_MMMM 86 + let byte4 = get_bits(frame_length, 6..13) as u8; 87 + 88 + // MMMO_OOOO 89 + let mut byte5 = 0b0000_0000; 90 + byte5 = (byte5 << 3) | get_bits(frame_length, 14..16) as u8; 91 + byte5 = (byte5 << 5) | 0b11111; // OOOOO 92 + 93 + // OOOO_OOPP 94 + let mut byte6 = 0b0000_0000; 95 + byte6 = (byte6 << 6) | 0b111111; // OOOOOO 96 + byte6 = (byte6 << 2) | 0b00; // PP 97 + 98 + return Some(vec![byte0, byte1, byte2, byte3, byte4, byte5, byte6]); 99 + }
+152
src/lib.rs
··· 1 + use fdk_aac::dec::{Decoder as AacDecoder, DecoderError, Transport}; 2 + use std::io::{Read, Seek}; 3 + use std::time::Duration; 4 + 5 + pub mod adts; 6 + 7 + pub struct Decoder<R> 8 + where 9 + R: Read + Seek, 10 + { 11 + mp4_reader: mp4::Mp4Reader<R>, 12 + aac_decoder: AacDecoder, 13 + current_pcm_index: usize, 14 + current_pcm: Vec<i16>, 15 + track_id: u32, 16 + position: u32, 17 + } 18 + 19 + impl<R> Decoder<R> 20 + where 21 + R: Read + Seek, 22 + { 23 + pub fn new(reader: R, size: u64) -> Result<Decoder<R>, &'static str> { 24 + let decoder = AacDecoder::new(Transport::Adts); 25 + let mp4 = mp4::Mp4Reader::read_header(reader, size).or(Err("Error reading MPEG header"))?; 26 + let mut track_id: Option<u32> = None; 27 + { 28 + for track in mp4.tracks().iter() { 29 + let media_type = track.media_type().or(Err("Error getting media type"))?; 30 + match media_type { 31 + mp4::MediaType::AAC => { 32 + track_id = Some(track.track_id()); 33 + break; 34 + } 35 + _ => {} 36 + } 37 + } 38 + } 39 + match track_id { 40 + Some(track_id) => { 41 + return Ok(Decoder { 42 + mp4_reader: mp4, 43 + aac_decoder: decoder, 44 + current_pcm_index: 0, 45 + current_pcm: Vec::new(), 46 + track_id: track_id, 47 + position: 1, 48 + }); 49 + } 50 + None => { 51 + return Err("No aac track found"); 52 + } 53 + } 54 + } 55 + pub fn current_frame_len(&self) -> Option<usize> { 56 + let frame_size: usize = self.aac_decoder.decoded_frame_size(); 57 + Some(frame_size) 58 + } 59 + pub fn channels(&self) -> u16 { 60 + let num_channels: i32 = self.aac_decoder.stream_info().numChannels; 61 + num_channels as _ 62 + } 63 + pub fn sample_rate(&self) -> u32 { 64 + let sample_rate: i32 = self.aac_decoder.stream_info().sampleRate; 65 + sample_rate as _ 66 + } 67 + pub fn total_duration(&self) -> Option<Duration> { 68 + return None; 69 + } 70 + } 71 + 72 + impl<R> Iterator for Decoder<R> 73 + where 74 + R: Read + Seek, 75 + { 76 + type Item = i16; 77 + fn next(&mut self) -> Option<i16> { 78 + if self.current_pcm_index == self.current_pcm.len() { 79 + let mut pcm = vec![0; 8192]; 80 + let result = match self.aac_decoder.decode_frame(&mut self.current_pcm) { 81 + Err(DecoderError::NOT_ENOUGH_BITS) => { 82 + let sample_result = self.mp4_reader.read_sample(self.track_id, self.position); 83 + let sample = match sample_result { 84 + Ok(sample) => sample?, // None if EOF 85 + Err(_) => { 86 + println!("Error reading sample"); 87 + return None; 88 + } 89 + }; 90 + let tracks = self.mp4_reader.tracks(); 91 + let track = match tracks.get(self.track_id as usize - 1) { 92 + Some(track) => track, 93 + None => { 94 + println!("No track ID there"); 95 + return None; 96 + } 97 + }; 98 + let adts_header = match adts::construct_adts_header(track, &sample) { 99 + Some(bytes) => bytes, 100 + None => { 101 + println!("Error getting adts header bytes"); 102 + return None; 103 + } 104 + }; 105 + let adts_bytes = mp4::Bytes::copy_from_slice(&adts_header); 106 + let bytes = [adts_bytes, sample.bytes].concat(); 107 + self.position += 1; 108 + let _bytes_read = match self.aac_decoder.fill(&bytes) { 109 + Ok(bytes_read) => bytes_read, 110 + Err(_) => return None, 111 + }; 112 + self.aac_decoder.decode_frame(&mut pcm) 113 + } 114 + val => val, 115 + }; 116 + match result { 117 + Ok(_) => {} 118 + Err(err) => { 119 + println!("DecoderError: {}", err); 120 + return None; 121 + } 122 + } 123 + let decoded_fram_size = self.aac_decoder.decoded_frame_size(); 124 + if decoded_fram_size < pcm.len() { 125 + let _ = pcm.split_off(decoded_fram_size); 126 + } 127 + self.current_pcm = pcm; 128 + self.current_pcm_index = 0; 129 + } 130 + let value = self.current_pcm[self.current_pcm_index]; 131 + self.current_pcm_index += 1; 132 + return Some(value); 133 + } 134 + } 135 + 136 + impl<R> rodio::Source for Decoder<R> 137 + where 138 + R: Read + Seek, 139 + { 140 + fn current_frame_len(&self) -> Option<usize> { 141 + return self.current_frame_len(); 142 + } 143 + fn channels(&self) -> u16 { 144 + return self.channels(); 145 + } 146 + fn sample_rate(&self) -> u32 { 147 + return self.sample_rate(); 148 + } 149 + fn total_duration(&self) -> Option<Duration> { 150 + return self.total_duration(); 151 + } 152 + }
tests/samples/Simbai & Elke Bay - Energy.m4a

This is a binary file and will not be displayed.

+25
tests/test.rs
··· 1 + use redlux::Decoder; 2 + use rodio::{OutputStream, Sink}; 3 + use std::fs::File; 4 + use std::io::BufReader; 5 + 6 + #[test] 7 + fn play_m4a() { 8 + let path = "tests/samples/Simbai & Elke Bay - Energy.m4a"; 9 + let file = File::open(path).expect("Error opening file"); 10 + 11 + let metadata = file.metadata().expect("Error getting file metadata"); 12 + let size = metadata.len(); 13 + let buf = BufReader::new(file); 14 + 15 + let decoder = Decoder::new(buf, size).expect("Error creating M4aDecoder"); 16 + 17 + let output_stream = OutputStream::try_default(); 18 + let (_stream, handle) = output_stream.expect("Error creating output stream"); 19 + let sink = Sink::try_new(&handle).expect("Error creating sink"); 20 + 21 + sink.append(decoder); 22 + sink.play(); 23 + sink.set_volume(0.5); 24 + sink.sleep_until_end(); 25 + }