• Stars
    star
    121
  • Rank 293,924 (Top 6 %)
  • Language
    C
  • License
    MIT License
  • Created about 7 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Reverse-engineered apt-X audio codec

[open]aptx - reverse-engineered apt-X

This project is for research purposes only. Without a proper license private and commercial usage might be a case of a patent infringement. If you are looking for a library, which can be installed and used legally (commercial, private and educational usage), go to the Qualcommยฎ aptXโ„ข homepage and contact Qualcomm customer service.

The source code itself is licensed under the terms of the MIT license. However, compression algorithms are patented and licensed under the terms of a proprietary license. Hence, compilation and redistribution in a binary format is forbidden!

Compilation

mkdir build && cd build
cmake -DENABLE_DOC=ON -DWITH_FFMPEG=ON -DWITH_SNDFILE=ON ..
make && make install

Configure options

  • ENABLE_DOC - build and install manual files (requires Doxygen)
  • ENABLE_APTX_DECODER_API - build with apt-X / apt-X HD decoder API (default: ON)
  • ENABLE_APTX_ENCODER_API - build with apt-X / apt-X HD encoder API (default: ON)
  • ENABLE_APTX422 - build reverse engineered apt-X library based on bt-aptX-x86-4.2.2.so
  • ENABLE_APTXHD100 - build reverse engineered apt-X HD library based on aptXHD-1.0.0-ARMv7A
  • WITH_FFMPEG - use FFmpeg as a back-end (otherwise, stub library will be built)
  • WITH_SNDFILE - read file formats supported by libsndfile (used by openaptx utils)

In the apt-X stub library (build without FFmpeg back-end), all symbols are exported as weak. As a consequence, it should be possible to overwrite them during runtime with other library which exports strong symbols. However, it might be required to define LD_DYNAMIC_WEAK environment variable - for more information consult ld.so manual.

When reverse-engineered libraries were enabled, they will be automatically linked with the apt-X stub library (build without FFmpeg back-end). See previous paragraph for the meaning of this.

Benchmark

Below is the result of a small benchmark test performed with various apt-X encoding libraries. Test was done with the usage of aptxenc and aptxhdenc tools from this repository. Elapsed user time was calculated with the usage of a standard UNIX time command line tool. All libraries (except original Qualcomm libraries) were compiled with Clang version 8.0.7 with the O2 or O3 optimization level.

Setup

  • CPU: ARM Cortex-A53
  • Input file: WAV audio, Microsoft PCM, 16 bit, stereo 48000 Hz
  • Input duration: 15 minutes 45 seconds

Results

Library apt-X Mbit/s apt-X HD Mbit/s
libaptX-1.0.16-rel-Android21 1m00.370s 1.23673 โ€” โ€”
libaptXHD-1.0.1-rel-Android21 โ€” โ€” 1m07.030s 1.11109
openaptx-stub 0m04.480s 0.0 0m04.820s 0.0
openaptx-ffmpeg (libavcodec-58.54.100) 1m58.100s 0.60835 2m03.270s 0.58354
aptx422 1m19.840s 0.91721 โ€” โ€”
aptxHD100 โ€” โ€” 1m21.950s 0.89616
libopenaptx-0.2.0 1m22.090s 0.89062 1m25.730s 0.85429

Resources

  1. AptX audio codec family
  2. Method and apparatus for electrical signal coding
  3. Two-channel QMF bank