updating update draft
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Fri, 21 Oct 2016 01:56:24 +0000 (21:56 -0400)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Fri, 21 Oct 2016 07:48:37 +0000 (03:48 -0400)
doc/draft-ietf-codec-opus-update.xml

index 767f4f9..f4c2e81 100644 (file)
@@ -10,7 +10,7 @@
 <?rfc inline="yes"?>
 <?rfc compact="yes"?>
 <?rfc subcompact="no"?>
-<rfc category="std" docName="draft-ietf-codec-opus-update-03"
+<rfc category="std" docName="draft-ietf-codec-opus-update-04"
      ipr="trust200902">
   <front>
     <title abbrev="Opus Update">Updates to the Opus Audio Codec</title>
@@ -47,7 +47,7 @@
 
 
 
-    <date day="1" month="September" year="2016" />
+    <date day="21" month="October" year="2016" />
 
     <abstract>
       <t>This document addresses minor issues that were found in the specification
@@ -276,6 +276,26 @@ silk_ADD_SAT16( NLSF_Q15[i-1], NDeltaMin_Q15[i] ) );
 
     </section>
 
+    <section title="Cap on Band Energy">
+      <t>On extreme bit-streams, it is possible for log-domain band energy levels
+        to exceed the maximum single-precision floating point value once converted
+        to a linear scale. This would later cause the decoded values to be NaN,
+        possibly causing problems in the software using the PCM values. This can be
+        avoided with the following patch to line 552 of celt/quant_bands.c:
+      </t>
+<figure>
+<artwork><![CDATA[
+       {
+          opus_val16 lg = ADD16(oldEBands[i+c*m->nbEBands],
+                          SHL16((opus_val16)eMeans[i],6));
++         lg = MIN32(QCONST32(32.f, 16), lg);
+          eBands[i+c*m->nbEBands] = PSHR32(celt_exp2(lg),4);
+       }
+       for (;i<m->nbEBands;i++)
+]]></artwork>
+</figure>
+    </section>
+
     <section title="Hybrid Folding" anchor="folding">
       <t>When encoding in hybrid mode at low bitrate, we sometimes only have
         enough bits to code a single CELT band (8 - 9.6 kHz). When that happens,