ietf doc: stereo description
authorJean-Marc Valin <jean-marc.valin@octasic.com>
Tue, 16 Jun 2009 20:45:23 +0000 (16:45 -0400)
committerJean-Marc Valin <jean-marc.valin@octasic.com>
Tue, 16 Jun 2009 20:45:23 +0000 (16:45 -0400)
doc/ietf/draft-valin-celt-codec.xml

index 566a0ff..87abc36 100644 (file)
@@ -148,7 +148,7 @@ This document contains a detailed description of both the encoder and the decode
 <t>
 The CELT codec does not use a standard <spanx style="emph">bit-packer</spanx>, 
 but rather uses a range coder to pack both integers and entropy-coded symbols. 
-The bit-stream generated by the encoder contains (in the same order) the 
+In mono mode, the bit-stream generated by the encoder contains (in the same order) the 
 following parameters:
 </t>
 
@@ -523,6 +523,22 @@ formulation one line (or column) at a time to save on memory use.
 
 </section>
 
+
+<section anchor="stereo" title="Stereo support">
+<t>
+When encoding a stereo stream, some parameters are shared across the left and right channels, while others are transmitted for each channel, or jointly encoded. All the flags for the features, transients and pitch (pitch period and gains) are transmitted only one copy. The coarse and fine energy parameters are transmitted separately for each channel.
+</t>
+
+<t>
+The main difference between mono and stereo coding is the PVQ coding of the normalised vectors. For bands of N=3 or N=4 samples, the PVQ coding is performed separately for left and right, with only one (joint) pitch bit and the left channel of each band encoded before the right channel of the same band. Each band always uses the same number of pulses for left as for right. For bands of N>=5 samples, a normalised mid-side (M-S) encoding is used. Let L and R be the normalised vector of a certain band for the left and right channels, respectively. The mid and side vectors are computed as M=L+R and S=L-R and no longer have unit norm.
+</t>
+
+<t>
+From M and S, an angular parameter theta=2/pi*atan2(||S||, ||M||) is computed. It is quantised on a scale from 0 to 1 with an intervals of 2^-qb, where qb = (b-2*(N-1)*(40-log2_frac(N,4)))/(32*(N-1)), b is the number of bits allocated to the band, and log2_frac() is defined in <xref target="cwrs.c">cwrs.c</xref>. Let m=M/||M|| and s=S/||S||, m and s are separately encoded with the PVQ encoder described in <xref target="pvq"></xref>. The number of bits allocated to m and s depends on the value of theta.
+</t>
+</section>
+
+
 <section anchor="synthesis" title="Synthesis">
 <t>
 After all the quantisation is completed, the quantised energy is used along with the 
@@ -545,8 +561,8 @@ Like for most audio codecs, the CELT decoder is less complex than the encoder.
 If during the decoding process a decoded integer value is out of the specified range
 (it can happen due to a minimal amount of redundancy when incoding large integers with
 the range coder), then the decoder knows there has been an error in the coding, 
-decoding or transmission and SHOULD take measures to conceal the error and/or report
-that a problem has occured.
+decoding, or transmission and SHOULD take measures to conceal the error and/or report
+to the application that a problem has occured.
 </t>
 
 <section anchor="Range Decoder" title="Range Decoder">