Tremor: Difference between revisions
No edit summary |
|||
(17 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
Tremor is a fixed-point version of the Ogg Vorbis decoder for those platforms that can't do floating point math. | Tremor is a fixed-point version of the Ogg Vorbis decoder for those platforms that can't do floating point math. | ||
== Platforms == | |||
=== ARM CPUs === | |||
You will probably want to use the Tremor main branch. You can check it out here: | |||
== Texas Instruments TMS320C55x DSP Family == | <code> | ||
git clone https://gitlab.xiph.org/xiph/tremor.git | |||
</code> | |||
It contains some optimizations for ARM and the overall lowest computational complexity. It should run on most devices with a few hundred KB of codec RAM. The configure script should automatically enable ARM assembly code on ARM systems, however you can also force it by defining _ARM_ASSEM_. | |||
=== Coldfire/MIPS/other === | |||
Tremor currently does not have CPU specific optimization for less common embedded CPUs. In this case the main branch will probably give very good performance if CPU optimized fixed point multiply and complex multiply functions are added. | |||
=== Texas Instruments TMS320C55x DSP Family === | |||
Download the generic lowmem source using [http://subversion.tigris.org/ Subversion]. | Download the generic lowmem source using [http://subversion.tigris.org/ Subversion]. | ||
This is probably the version you want to start working with for a DSP. | This is probably the version you want to start working with for a DSP, but may be slower on normal CPUs. | ||
<code> | |||
git checkout lowmem | |||
There is also a [ | </code> | ||
There is also a [https://gitlab.xiph.org/xiph/tremor/-/tree/nobyte no-byte branch] for platforms whose smallest data unit is larger than 8 bits. | |||
Required / Suggested Changes to the code as downloaded: | Required / Suggested Changes to the code as downloaded: | ||
Line 27: | Line 32: | ||
See the [http://lists.xiph.org/pipermail/tremor/2004-October/001114.html mailing list entry] | See the [http://lists.xiph.org/pipermail/tremor/2004-October/001114.html mailing list entry] | ||
* Johannes Sandvall's performance improvements | * Johannes Sandvall's performance improvements | ||
See the [http://lists.xiph.org/pipermail/tremor/2004-March/000957.html mailing list entry | See the [http://lists.xiph.org/pipermail/tremor/2004-March/000957.html mailing list entry] | ||
* alloca removal | * alloca removal | ||
The TI compiler does not support this. | The TI compiler does not support this. | ||
Line 35: | Line 40: | ||
* [http://lists.xiph.org/pipermail/tremor/attachments/20041029/30a4905c/misc.h 64-bit math functions] | * [http://lists.xiph.org/pipermail/tremor/attachments/20041029/30a4905c/misc.h 64-bit math functions] | ||
* converting all ints assumed to be 32 bits to ogg_int32_t | * converting all ints assumed to be 32 bits to ogg_int32_t | ||
== Memory Usage == | |||
The exact memory requirements for Tremor depend on the file to be decoded as Vorbis allows encoders to use different features in different files. Typical Vorbis files will need several hundred KB of memory (this includes the binary as well as malloc buffers) in the main branch, and somewhat less in the lowmem branch. Some very old (and rare) files may need 500KB or more to decode. Systems with much less then 250KB of codec memory should probably use the slower low memory branch, and should take care to fail gracefully if a call to malloc fails. This will result in the overwhelming majority of Vorbis files decoding correctly. | |||
== Links == | == Links == | ||
* [https://gitlab.xiph.org/xiph/tremor Tremor Main Branch] | |||
* [https://gitlab.xiph.org/xiph/tremor/-/tree/lowmem Tremor Low Memory Branch] | |||
* [http://lists.xiph.org/pipermail/tremor/ Tremor Mailing List] - lots of info here, but have to wade through a lot! | * [http://lists.xiph.org/pipermail/tremor/ Tremor Mailing List] - lots of info here, but have to wade through a lot! | ||
* [http://git.rockbox.org/?p=rockbox.git;a=tree;f=lib/rbcodec/codecs/libtremor Rockbox Optimized Tremor Fork] - Highly optimized version of Tremor for ARM and several other embedded CPUs |
Latest revision as of 11:10, 18 March 2021
Tremor is a fixed-point version of the Ogg Vorbis decoder for those platforms that can't do floating point math.
Platforms
ARM CPUs
You will probably want to use the Tremor main branch. You can check it out here:
git clone https://gitlab.xiph.org/xiph/tremor.git
It contains some optimizations for ARM and the overall lowest computational complexity. It should run on most devices with a few hundred KB of codec RAM. The configure script should automatically enable ARM assembly code on ARM systems, however you can also force it by defining _ARM_ASSEM_.
Coldfire/MIPS/other
Tremor currently does not have CPU specific optimization for less common embedded CPUs. In this case the main branch will probably give very good performance if CPU optimized fixed point multiply and complex multiply functions are added.
Texas Instruments TMS320C55x DSP Family
Download the generic lowmem source using Subversion. This is probably the version you want to start working with for a DSP, but may be slower on normal CPUs.
git checkout lowmem
There is also a no-byte branch for platforms whose smallest data unit is larger than 8 bits.
Required / Suggested Changes to the code as downloaded:
- Roland Wintersteller's various fixes
See the mailing list entry
- Johannes Sandvall's performance improvements
See the mailing list entry
- alloca removal
The TI compiler does not support this.
- misc compiler warning fixes
- hooks to TI DSPLIB functions cfft3216_NOSCALE and cbrev32
These are part of the TI DSPLIB which can be downloaded from the TI website.
- 64-bit math functions
- converting all ints assumed to be 32 bits to ogg_int32_t
Memory Usage
The exact memory requirements for Tremor depend on the file to be decoded as Vorbis allows encoders to use different features in different files. Typical Vorbis files will need several hundred KB of memory (this includes the binary as well as malloc buffers) in the main branch, and somewhat less in the lowmem branch. Some very old (and rare) files may need 500KB or more to decode. Systems with much less then 250KB of codec memory should probably use the slower low memory branch, and should take care to fail gracefully if a call to malloc fails. This will result in the overwhelming majority of Vorbis files decoding correctly.
Links
- Tremor Main Branch
- Tremor Low Memory Branch
- Tremor Mailing List - lots of info here, but have to wade through a lot!
- Rockbox Optimized Tremor Fork - Highly optimized version of Tremor for ARM and several other embedded CPUs