Tremolo is an ARM optimised version of the Tremor lib from xiph.org. For those that don't know, the Tremor lib is an integer only library for doing Ogg Vorbis decompression.
For those that really don't know, Ogg Vorbis is a (supposedly) patent/royalty free audio compression scheme that pretty much beats the pants off everything else out there (but of course the thing it gets compared to most is MP3). Everything you could possibly want to know about Ogg Vorbis (and lots you don't) can again be found at xiph.org.
The Tremor lib as supplied is (fairly) portable C, but with the option to use gcc's inline assembler in the speed critical sections for ARM based machines.
Tremolo has taken this further; these speed critical sections (and many others) have been completely written in hand optimised ARM code. Tremolo makes no attempt to target anything other than ARM based devices with the long multiply instruction. The bit reading sections of the code assume a little endian memory system, but this can probably be changed if required.
The API to the library is identical - Tremolo and Tremor should be interchangable (except Tremolo should be faster)!
Previous versions of Tremolo have been released under the GNU GPL, but thanks to a grant from Google it has now been rereleased under the same BSD style license as the original Theora library was. Many thanks to everyone at Google for making this happen!
The nice thing about this is that it means we can start to roll the Tremolo changes back into the mainline Tremor code, so everyone benefits. In particular it means that when the merge completes you should be able to just get the latest version from Xiph, and not have to worry that the two will have diverged.
There are still gccisms in there (it uses alloca, for example).
The assembly code is in gcc format - it's pretty trivial to convert it to ARM standard format (rename @ to ;, add END, change .global to EXPORT, change .text to AREA etc)
You'd probably like some timings, to show how much better Tremolo is than Tremor, right?
Figure on Tremolo being between 15% and 20% better than Tremor.
I might add more details here if I can be bothered later.
The original Tremor lib included the following disclaimer:
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The same applies to Tremolo.
|Siryn||Tremolo||Theorarm||YUV 2 RGB|