[opus] libopus API question - 120ms encoding

Jean-Marc Valin jmvalin at jmvalin.ca
Thu Oct 24 18:49:10 PDT 2013

The general ideao of opus_encode() is indeed to encode a single frame.
However, there is an exception for 40 and 60 ms because only one mode
(SILK-only) has this frame size. The original code would automatically
force SILK-only mode on 40 and 60 ms, but that was suboptimal for mode
switching. This why opus_encode() can now generate packets that
concatenate 2-3 CELT-only or 2-3 hybrid frames when called for 40 or 60
ms. This is the only exception. It will *not* encode 120 ms, nor 30 ms
frames from concatenating 3 10-ms frames. For anything else, you need
the repacketizer.



On 10/24/2013 01:45 PM, O'Connor, Kevin wrote:
> The libopus encoder’s opus_encode() method is documented as “Encodes an
> Opus frame”. Does that  mean that it always produces a single Opus frame
> (i.e. the number of frames in the TOC byte will always be 0)? It’s not
> clear from the documentation, but the fact that it cannot produce a
> 120ms Opus packet makes me wonder if that was the intention and any
> multi-frame Opus packets must formed outside the libopus encoder (e.g.
> the Repacketizer).
> If that’s not the case and opus_encode() can produce multi-frame Opus
> packets, why is it limited to 60ms Opus packets?
> Kevin O’Connor
> Interacive Intelligence, Inc.
> _______________________________________________
> opus mailing list
> opus at xiph.org
> http://lists.xiph.org/mailman/listinfo/opus

More information about the opus mailing list