[opus] Opus decoding performance on ARM devices

Jean-Marc Valin jmvalin at jmvalin.ca
Fri Sep 5 12:39:58 PDT 2014


On 05/09/14 03:56 AM, Dan Nilsson wrote:
> Performance jumped up from about 4.8 Mb/s to 5.3 Mb/s on the same device,
> so it is improvement. Not sure what other tweaks there would be to try,
> but if it could match the tremolo decoder, we could probably throw that
> out entirely which would be very nice.

So the performance difference you're seeing compared to your
ARM-optimized Vorbis decoder can be explained by:
1) The Opus codebase isn't as thoroughly optimized for ARM as the Vorbis
implementation you're comparing it to
2) Opus decoding is fundamentally more complex than Vorbis decoding

I don't have any numbers to back this up, but my intuition is that two
are about equally important. So there's still a lot to be gain from
better optimizations in Opus, but you're also unlikely to reach the same
performance as with Vorbis (at least at equal level of optimization).

Cheers,

	Jean-Marc


> Thanks!
> Dan
> 
> On 04/09/14 19:40, "Jean-Marc Valin" <jmvalin at jmvalin.ca> wrote:
> 
>> Hi Dan,
>>
>> I suggest you try the code in git master, which has further ARM
>> optimizations compared to 1.1.
>>
>> Cheers,
>>
>> 	Jean-Marc
>>
>> On 04/09/14 08:00 AM, Dan Nilsson wrote:
>>> Hi everyone,
>>>
>>> I have lately been evaluating the performance of various audio decoders,
>>> particularly for ARM devices (Cortex A8 / A9). The context is audio
>>> playback in a game engine, and thus decoding performance is of
>>> particular
>>> interest. 
>>>
>>> Looking at Opus versus Vorbis on a Cortex A9 smartphone, the numbers
>>> look
>>> approximately like this:
>>>
>>> Vorbis (tremolo decoder)
>>> 9.3 Mb PCM/s
>>>
>>> Opus (libopus 1.1)
>>> 4.8 Mb PCM/s
>>>
>>> The Opus audio is encoded approximately 120 kbps (and the vorbis file
>>> has
>>> higher bitrate). On ARM devices this far I get Opus decoded at about
>>> half
>>> the rate (and on x86 they are about on par).
>>>
>>> Should I be able to squeeze more performance out of it?  Or do those
>>> numbers look about what should be expected? What I really want to know
>>> is
>>> if Opus could potentially run faster than Vorbis for equivalent audio.
>>>
>>> I also must mention I am cross compiling with a different build system.
>>> I
>>> have attempted different sets of compilation defines. Latest run
>>> included
>>> the following:
>>>
>>> OPUS_ARM_ASM
>>> OPUS_ARM_MAY_HAVE_NEON
>>> OPUS_ARM_MAY_HAVE_MEDIA
>>> OPUS_ARM_INLINE_EDSP
>>> OPUS_ARM_INLINE_NEON
>>> OPUS_ARM_INLINE_ASM
>>> FIXED_POINT
>>> OPUS_BUILD
>>> HAVE_LRINT
>>> HAVE_LRINTF
>>>
>>> Thanks!
>>> Dan
>>>
>>> _______________________________________________
>>> opus mailing list
>>> opus at xiph.org
>>> http://lists.xiph.org/mailman/listinfo/opus
>>>
>>
> 
> 


More information about the opus mailing list