Draft text for encoder mode selection

This commit is contained in:
Jean-Marc Valin 2011-10-17 17:55:59 -04:00
parent 88e5cdc5ad
commit f2d6480f90

View file

@ -5319,7 +5319,14 @@ In that case, only a 2.5 ms cross-fade is applied, still using the
<section title="Opus Encoder"> <section title="Opus Encoder">
<t> <t>
Opus encoder block diagram. Just like the decoder, the Opus encoder also normally consists of two main blocks: the
SILK encoder and the CELT encoder. However, unlike the case of the decoder, a valid
(though potentially suboptimal) Opus encoder is not required to support all modes and
may thus only include a SILK encoder module or a CELT encoder module.
The output bit-stream of the Opus encoding contains bits from the SILK and CELT
encoders, though these are not separable due to the use of a range coder.
A block diagram of the encoder is illustrated below.
<figure> <figure>
<artwork> <artwork>
<![CDATA[ <![CDATA[
@ -5339,6 +5346,26 @@ audio | +----------+ +-------+ | +-------+
</figure> </figure>
</t> </t>
<t>
For a normal encoder where both the SILK and the CELT modules are included, an optimal
encoder should select which coding mode to use at run-time depending on the conditions.
In the reference implementation, the frame size is selected by the application, but the
other configuration parameters (number of channels, bandwidth, mode) are automatically
selected (unless explicitly overridden by the application) depend on the following:
<list style="symbols">
<t>Requested bit-rate</t>
<t>Input sampling rate</t>
<t>Type of signal (speech vs music)</t>
<t>Frame size in use</t>
</list>
The type of signal currently needs to be provided by the application (though it can be
changed in real-time). An Opus encoder implementation could also do automatic detection,
but since Opus is an interactive codec, such an implementation would likely have to either
delay the signal (for non-interactive application) or delay the mode switching decisions (for
interactive applications).
</t>
<section anchor="range-encoder" title="Range Coder"> <section anchor="range-encoder" title="Range Coder">
<t> <t>
The range coder also acts as the bit-packer for Opus. It is The range coder also acts as the bit-packer for Opus. It is