<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 12"><meta name="Originator" content="Microsoft Word 12"><style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;
        mso-font-charset:1;
        mso-generic-font-family:roman;
        mso-font-format:other;
        mso-font-pitch:variable;
        mso-font-signature:0 0 0 0 0 0;}
@font-face
        {font-family:"TheSans Swisscom Light";
        panose-1:2 11 3 0 4 3 3 6 2 4;
        mso-font-charset:0;
        mso-generic-font-family:swiss;
        mso-font-pitch:variable;
        mso-font-signature:-2147483609 1342177354 0 0 1 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {mso-style-unhide:no;
        mso-style-qformat:yes;
        mso-style-parent:"";
        margin:0cm;
        margin-bottom:.0001pt;
        line-height:107%;
        mso-pagination:widow-orphan;
        font-size:10.0pt;
        mso-bidi-font-size:12.0pt;
        font-family:"TheSans Swisscom Light","sans-serif";
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:"Times New Roman";
        mso-ansi-language:EN-GB;}
p.MsoHeader, li.MsoHeader, div.MsoHeader
        {mso-style-unhide:no;
        mso-style-link:"Header Char";
        margin:0cm;
        margin-bottom:.0001pt;
        line-height:107%;
        mso-pagination:widow-orphan;
        font-size:10.0pt;
        mso-bidi-font-size:12.0pt;
        font-family:"TheSans Swisscom Light","sans-serif";
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:"Times New Roman";
        mso-ansi-language:EN-GB;}
p.MsoFooter, li.MsoFooter, div.MsoFooter
        {mso-style-unhide:no;
        mso-style-link:"Footer Char";
        margin:0cm;
        margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        tab-stops:2.0cm;
        font-size:7.5pt;
        mso-bidi-font-size:12.0pt;
        font-family:"TheSans Swisscom Light","sans-serif";
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:"Times New Roman";
        mso-ansi-language:EN-GB;}
span.MsoPageNumber
        {mso-style-unhide:no;
        mso-ansi-font-size:10.0pt;
        font-family:"TheSans Swisscom Light","sans-serif";
        mso-ascii-font-family:"TheSans Swisscom Light";
        mso-hansi-font-family:"TheSans Swisscom Light";}
p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
        {mso-style-unhide:no;
        mso-style-link:"Body Text Char";
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:0cm;
        line-height:107%;
        mso-pagination:widow-orphan;
        font-size:10.0pt;
        mso-bidi-font-size:12.0pt;
        font-family:"TheSans Swisscom Light","sans-serif";
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:"Times New Roman";
        mso-ansi-language:EN-GB;}
span.BodyTextChar
        {mso-style-name:"Body Text Char";
        mso-style-unhide:no;
        mso-style-locked:yes;
        mso-style-link:"Body Text";
        mso-bidi-font-size:12.0pt;
        font-family:"TheSans Swisscom Light","sans-serif";
        mso-ascii-font-family:"TheSans Swisscom Light";
        mso-hansi-font-family:"TheSans Swisscom Light";
        mso-ansi-language:EN-GB;}
p.DocInfo, li.DocInfo, div.DocInfo
        {mso-style-name:DocInfo;
        mso-style-unhide:no;
        margin:0cm;
        margin-bottom:.0001pt;
        line-height:107%;
        mso-pagination:widow-orphan;
        font-size:1.0pt;
        mso-bidi-font-size:12.0pt;
        font-family:"TheSans Swisscom Light","sans-serif";
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:"Times New Roman";
        color:white;
        mso-ansi-language:EN-GB;}
span.FooterChar
        {mso-style-name:"Footer Char";
        mso-style-unhide:no;
        mso-style-locked:yes;
        mso-style-link:Footer;
        mso-ansi-font-size:7.5pt;
        mso-bidi-font-size:12.0pt;
        font-family:"TheSans Swisscom Light","sans-serif";
        mso-ascii-font-family:"TheSans Swisscom Light";
        mso-hansi-font-family:"TheSans Swisscom Light";
        mso-ansi-language:EN-GB;}
p.FooterBold, li.FooterBold, div.FooterBold
        {mso-style-name:FooterBold;
        mso-style-unhide:no;
        mso-style-parent:Footer;
        mso-style-next:Footer;
        margin:0cm;
        margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        tab-stops:2.0cm;
        font-size:7.5pt;
        mso-bidi-font-size:12.0pt;
        font-family:"TheSans Swisscom Light","sans-serif";
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:"Times New Roman";
        mso-ansi-language:EN-GB;
        font-weight:bold;
        mso-bidi-font-weight:normal;}
p.FormTitle, li.FormTitle, div.FormTitle
        {mso-style-name:FormTitle;
        mso-style-unhide:no;
        margin-top:51.0pt;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:0cm;
        margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        font-size:10.0pt;
        mso-bidi-font-size:12.0pt;
        font-family:"TheSans Swisscom Light","sans-serif";
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:"Times New Roman";
        mso-ansi-language:EN-GB;
        font-weight:bold;
        mso-bidi-font-weight:normal;}
span.HeaderChar
        {mso-style-name:"Header Char";
        mso-style-unhide:no;
        mso-style-locked:yes;
        mso-style-link:Header;
        mso-bidi-font-size:12.0pt;
        font-family:"TheSans Swisscom Light","sans-serif";
        mso-ascii-font-family:"TheSans Swisscom Light";
        mso-hansi-font-family:"TheSans Swisscom Light";
        mso-ansi-language:EN-GB;}
.MsoChpDefault
        {mso-style-type:export-only;
        mso-default-props:yes;
        font-size:10.0pt;
        mso-ansi-font-size:10.0pt;
        mso-bidi-font-size:10.0pt;}
@page Section1
        {size:595.3pt 841.9pt;
        margin:5.0cm 42.55pt 102.05pt 90.7pt;
        mso-header-margin:36.85pt;
        mso-footer-margin:1.0cm;
        mso-paper-source:0;}
div.Section1
        {page:Section1;}
-->
</style>Hello everyone,<br><br>I&#39;m currently developing an adaptive videoconferencing application based on Ekiga which uses TFRC as a congestion control mechanism to adapt the video encoding rate according to the quality of the network experienced. My goal was to use the open-source Theora codec for video transmission. Unfortunately, it seemed that Theora 1.0 did not properly implement any correct CBR mode. The encoding rates can be adjusted &quot;on-the-fly&quot; during encoding by adjusting the &quot;target_bitrate&quot; and the &quot;keyframe_target_bitrate&quot; variables of the &quot;theora_info&quot; structure, but the resulting average bitrate is largely below the target bitrate desired. Furthermore, the bitrates vary depending on the amount of motion captured, which is a typical VBR feature.<br>
<br>Here are the bitrates I measured (VGA resolution):<br>tx = target_bitrate (Mbps); ox = max rate observed at output of encoder (Mbps; approximation)<br><br>tx: 0.7 --&gt;  ox: 0.7<br>tx: 1.0 --&gt;  ox: 0.9<br>tx: 1.6 --&gt;  ox: 1.1<br>
tx: 2.0 --&gt;  ox: 1.3<br>tx: 4.0 --&gt;  ox: 2.4<br>tx: 6.0 --&gt;  ox: 3.4<br>tx: 8.0 --&gt;  ox: 5.6<br><br>I also tested Theora 1.1  Thusnelda but no considerable improvement coud be noticed, though I found contradictory information:<br>
<br>&quot;According to Xiph.org&#39;s Ralph Giles, the most noticeable improvement in
1.1 is proper rate control, particularly for fixed bit rate encoding, where
the user specifies either the number of bits per second desired in the
output (a common use case for streaming applications), or the desired file
size.  &quot;<span>The 1.0 encoder relies a lot on heuristics, instead of trying
to optimize directly the trade-off between quality of the coded images and
the number of bits used to represent them,</span>&quot; he said, &quot;<span>More
significantly, the fixed bitrate mode in the 1.0 reference encoder didn&#39;t
really work; it just guessed how to meet its target and often missed the
requested bitrate, sometimes by quite a bit, which was a problem for
streaming and fixed-size encodes.</span>&quot; (<a href="http://lwn.net/Articles/326697">http://lwn.net/Articles/326697</a>)<br><br>What is the exact behavior of rate controller in Theora and is or will be CBR possible to use? At least, adaptive quantization is implemented (<a href="http://wiki.xiph.org/Theora">http://wiki.xiph.org/Theora</a>) but apparently not correctly to support CBR, or am I missing something? I found that the quantizer values are adapted in oc_enc_select_qi() and oc_enc_calc_lamba() without being able to define the actual behavior of these functions... <br>
<br>Having a constant bitrate that does not adapt to variations in the image content is really a crucial feature for my application.<br><br>Thank you for your inputs and clarifications! :)<br>