[opus] running at 44.1K but with standard frame sizes
Timothy B. Terriberry
tterribe at xiph.org
Sat Jun 15 11:18:57 PDT 2013
Marc Lindahl wrote:
> Of course, I'm setting up a bunch of tests to evaluate these, what I was asking was more along the lines of,
> If you set up the same exact, including the sample rate, do you get the same results (e.g. same code path, calculations, etc.?)
If you configure a custom mode with the standard parameters (48 kHz
sampling rate and a frame size of 120, 240, 480, or 960), the encoded
format is _exactly_ equivalent to a standard Opus mode, and can even be
decoded by a non-custom Opus decoder.
However, there is a bunch of analysis that runs in opus_encoder.c that
is not enabled for custom modes. A fixed-point standard Opus encoder
with OPUS_APPLICATION_RESTRICTED_LOWDELAY, OPUS_BANDWIDTH_FULLBAND, and
OPUS_SET_FORCE_CHANNELS should give identical results.
In floating point, you will need to call the non-public run_analysis()
API and use the CELT_SET_ANALYSIS() encoder ctl to get equivalent results.
Using OPUS_APPLICATION_RESTRICTED_LOWDELAY disables SILK and automatic
Forcing OPUS_BANDWIDTH_FULLBAND in the standard modes disables automatic
bandwidth detection... you could hook something equivalent up for Opus
Custom, but CELT_SET_END_BAND_REQUEST is not exposed in the public API
(and you are _required_ to use end band numbers compatible with standard
Opus modes (13, 17, 19, or 21), or the encoder will fail).
OPUS_SET_FORCE_CHANNELS() will disable automatic rate-dependent
switching between mono and stereo. You can hook up something equivalent
by aping the code in opus_encoder.c.
There may be other differences I've forgotten. In general, custom modes
are not well-tested (in comparison to the standard modes).
More information about the opus