Sunday, March 27, 2011

Helix Fixed-point HE-AAC (aacPlus) decoder

The Helix Fixed-point HE-AAC decoder provides an optimized 32-bit fixed-point implementation, which will be dual-licensed under RCSL/RPSL. No extra copyright license is required beyond the standard Helix license terms, although patent licenses are not included and must be acquired from the appropriate AAC licensors.

The Helix AAC decoder is highly optimized for ARM processors and meets or exceeds the performance of other commercial implementations. It also features one of the first widely available fixed-point implementations of SBR.

Key Features

  • MPEG-2 and MPEG-4 low complexity decoding (intensity stereo, MS, TNS, PNS)
  • Spectral band replication (SBR), high-quality mode
  • Mono, stereo, and multichannel modes
  • ADTS, ADIF, and raw data block decoding
  • MP4, RM, and other file formats supported via Helix client

Technical Specifications

Average CPU Usage

1. MPEG4-LC AAC (SBR not used)


Sample Rate
Channels
Bit Rate
Processor Model (1)
ARM9TDMI-REV2
ARM9E
StrongARM1 (uncached)
XScale (cached)
22 KHz
1
64 Kbps
7 / 9 MHz
5 / 7 MHz
6 / 8 MHz
6 / 8 MHz
44.1 KHz 1
96 Kbps 11 / 13 MHz
9 / 11 MHz
9 / 11 MHz
10 / 12 MHz
44.1 KHz 2
128 Kbps 19 / 23 MHz
17 / 21 MHz
17 / 20 MHz
18 / 21 MHz
44.1 KHz
2
320 Kbps
23 / 30 MHz
21 / 28 MHz
21 / 27 MHz
22 / 28 MHz

2. MPEG4-LC HE-AAC (SBR enabled, "high quality" mode)


Sample Rate
Channels
Bit Rate
Processor Model (1)
ARM9TDMI-REV2
ARM9E
StrongARM1 (uncached)
XScale (cached)
22 kHz base/44 kHz output
1
48 Kbps
32 / 34 MHz
27 / 29 MHz
27 / 29 MHz
28 / 30 MHz
22 kHz base/44 kHz output
2
64 Kbps
58 / 60 MHz
49 / 52 MHz
49 / 52 MHz
51 / 53 MHz

(1) Tested with ARMulator, simulated zero-wait-state memory

Notes:

  • Compiled using ARM ADS 1.2
  • Tested with ARMulator, zero-wait state memory
  • Results are average CPU usage, typical content
  • first MHz value is when TNS is off, second value is when TNS is on

Memory Usage

1. MPEG4-LC AAC (SBR not used)
  • ROM (const globals) = 27128
  • RAM (heap, max 2 channels) = 20656
  • Code size - x86 (MSVC++ 6.0) = 22654
  • Code size - ARM (ADS ARM9TDMI) = 20120
  • Additional RAM required per channel = 4104
2. MPEG4-LC HE-AAC (SBR enabled, "high quality" mode)
  • ROM (const globals) = 37580
  • RAM (heap, max 2 channels) = 79580
  • Code size - x86 (MSVC++ 6.0) = 47822
  • Code size - ARM (ADS ARM9TDMI) = 41764
  • Additional RAM required per channel = 17198

Notes:

  • Memory usage constant for all sample rates, bit rates
  • Does not include input buffer (encoded data) or output buffer (PCM)
  • There is no zero-init or read-write global data
  • All values are in bytes



Frequently Asked Questions

What features are currently not supported in the aacPlus decoder?

  • main or SSR profile, LTP
  • coupling channel elements (CCE)
  • 960/1920-sample frame size
  • low-power mode SBR decoding
  • downsampled (single-rate) SBR decoding

Where is the code in CVS?

  • See the Helix Datatype project page: http://datatype.helixcommunity.org
    The CVS root is /cvsroot/datatype, and the module name (path) is aac/codec/fixpt/decoder

Where does the build system put the code in my local source tree?

  • datatype/aac/codec/fixpt
How do I build the fixed-point AAC implementation through the "ribosome" build system?
  • In the build menu, use one of the following bif files: helix.bif (HEAD) or hxclient_1_5_0_cayenne.bif
  • Select the target "datatype_aac_codec"
  • Make sure the define "HELIX_CONFIG_FIXEDPOINT", is either in the profile or config (cf) file that you are currently using.
=======================================

Build System Menu
-> Current Directory: D:\client_150_cayenne
[0] Set BIF branch (hxclient_1_5_0_cayenne)
[1] Set Target(s) (datatype_aac_codec)
=======================================

How do I play .mp4/.3gp streams that contain AAC-encoded streams?

  • In the build menu, use the same bif as you have used above
  • Select the target "splay". This builds a command-line player through which you can play .mp4/.3gp streams
  • For instructions to check out source, go to Quickstart Guide
=======================================

Build System Menu
-> Current Directory: D:\client_150_cayenne
[0] Set BIF branch (hxclient_1_5_0_cayenne)
[1] Set Target(s) (splay)
=======================================

Where do developers go to acquire their aacPlus patent license?

Courtesy :