[opus] 1.1 Much slower on Raspberry Pi

Stuart Marsden stuartmarsden at finmars.co.uk
Mon Dec 16 05:03:05 PST 2013


I have just started trying Opus with a view to using it in a project. I am
interested in embedded hardware and tried it on the Raspberry Pi using the
raspbian distro.

The version of libopus in the repos is 0.9.14. I installed this and tried
encoding 2 minutes of speech from a librevox recording. It managed this at
a respectable pace for complexity 10:

Skipping chunk of type "LIST", length 76
Encoding using libopus 0.9.14 (audio)
-----------------------------------------------------
   Input: 44.1kHz 1 channel
  Output: 1 channel (1 uncoupled)
          20ms packets, 6kbit/sec VBR
 Preskip: 356

Encoding complete
-----------------------------------------------------
    Encoded: 2 minutes and 0.02 seconds
    Runtime: 50.9 seconds
             (2.358x realtime)
      Wrote: 111194 bytes, 6001 packets, 123 pages
    Bitrate: 6.78414kbit/s (without overhead)
 Rate range: 2.8kbit/s to 12kbit/s
             (7 to 30 bytes per packet)
   Overhead: 8.47% (container+metadata)


And even faster on complexity 0:


Skipping chunk of type "LIST", length 76
Encoding using libopus 0.9.14 (audio)
-----------------------------------------------------
   Input: 44.1kHz 1 channel
  Output: 1 channel (1 uncoupled)
          20ms packets, 6kbit/sec VBR
 Preskip: 316

Encoding complete
-----------------------------------------------------
    Encoded: 2 minutes and 0.02 seconds
    Runtime: 23.72 seconds
             (5.059x realtime)
      Wrote: 106598 bytes, 6001 packets, 123 pages
    Bitrate: 6.47779kbit/s (without overhead)
 Rate range: 2.4kbit/s to 13.6kbit/s
             (6 to 34 bytes per packet)
   Overhead: 8.83% (container+metadata)


I saw the 1.1 release notes and it said speed improvements on ARM so
thought I would try. I downloaded from opus-codec.org and compiled directly
on the Pi. It has however turned out a lot slower. Complexity 10 barely can
encode in realtime:

Skipping chunk of type "LIST", length 76
Encoding using libopus 1.1 (audio)
-----------------------------------------------------
   Input: 44.1kHz 1 channel
  Output: 1 channel (1 uncoupled)
          20ms packets, 6kbit/sec VBR
 Preskip: 356

Encoding complete

-----------------------------------------------------
       Encoded: 2 minutes and 0.02 seconds
       Runtime: 1 minute and 53 seconds
                (1.062x realtime)
         Wrote: 110743 bytes, 6001 packets, 123 pages
       Bitrate: 6.70782kbit/s (without overhead)
 Instant rates: 2.8kbit/s to 11.6kbit/s
                (7 to 29 bytes per packet)
      Overhead: 9.13% (container+metadata)


And is also much slower at complexity 0:

Skipping chunk of type "LIST", length 76
Notice: Using resampling with complexity<10.
Opusenc is fastest with 48, 24, 16, 12, or 8kHz input.

Encoding using libopus 1.1 (audio)
-----------------------------------------------------
   Input: 44.1kHz 1 channel
  Output: 1 channel (1 uncoupled)
          20ms packets, 6kbit/sec VBR
 Preskip: 316

Encoding complete

-----------------------------------------------------
       Encoded: 2 minutes and 0.02 seconds
       Runtime: 36 seconds
                (3.334x realtime)
         Wrote: 106945 bytes, 6001 packets, 123 pages
       Bitrate: 6.45466kbit/s (without overhead)
 Instant rates: 2.4kbit/s to 12.8kbit/s
                (6 to 32 bytes per packet)
      Overhead: 9.45% (container+metadata)


I tried compiling it as fixed point and it is slightly faster but no where
near the older version. At complexity 10:

Skipping chunk of type "LIST", length 76
Encoding using libopus 1.1-fixed (audio)
-----------------------------------------------------
   Input: 44.1kHz 1 channel
  Output: 1 channel (1 uncoupled)
          20ms packets, 6kbit/sec VBR
 Preskip: 356

Encoding complete

-----------------------------------------------------
       Encoded: 2 minutes and 0.02 seconds
       Runtime: 1 minute and 42 seconds
                (1.177x realtime)
         Wrote: 110686 bytes, 6001 packets, 123 pages
       Bitrate: 6.70402kbit/s (without overhead)
 Instant rates: 2.4kbit/s to 11.2kbit/s
                (6 to 28 bytes per packet)
      Overhead: 9.13% (container+metadata)



I have tried different compiler options but nothing has brought the speed
back up.

Any advice on the compiler flags or why I should be seeing such a big speed
regression?

Stuart Marsden
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.xiph.org/pipermail/opus/attachments/20131216/73197108/attachment-0001.htm 


More information about the opus mailing list