<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Consolas" size="2"><span style="font-size:10.5pt;">
<div>Hi, Opus team</div>
<div>I&#8217;m Huang Hao and trouble you again.</div>
<div><font face="Times New Roman">&nbsp;</font></div>
<div>When I used the OpusRepacketizer as Jean-Marc mentioned, I got a result (maybe problem I'm not sure) that perplexes me, please give me some comments.</div>
<div><font face="Times New Roman">&nbsp;</font></div>
<div>The result be described as below:</div>
<div><font face="Times New Roman">&nbsp;</font></div>
<div>First(all init which are needed I have done), I used opus_encode() to get the encoded data successfully. The encoder control parameters are set: VBR=0, CVBR=0, INBAND_FEC=0, and mode is OPUS_AUTO(means I will use CBR), then I can get the individual frames
in form of code0 or code3CBR(with padding part).</div>
<div><font face="Times New Roman">&nbsp;</font></div>
<div>Then, I used opus_repacketizer_cat() to cat 3 of the individual frames(2 code3CBR frame and 1 code0 frame) to become a multiframe successfully.</div>
<div><font face="Times New Roman">&nbsp;</font></div>
<div>Last, I used opus_repacketizer_out() to get the multiframe that I find the multiframe's toc&#43;vpm indicates that the multiframe is a code3VBR format. Use a CBR encoder but got a VBR result, This is what perplexes me, and my question is is this normal?</div>
<div><font face="Times New Roman">&nbsp;</font></div>
<div>And I read the opus lib source found that when call opus_repacketizer_out() and it will be into opus_repacketizer_out_range_impl() and finally into switch:default branch, the codes is below:</div>
<div>&nbsp;&nbsp; <span style="background-color:yellow;">default:</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp; {</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Code 3 */</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int vbr;</span></div>
<div>&nbsp;</div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vbr = 0;</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=1;i&lt;count;i&#43;&#43;)</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><font color="red"><span style="background-color:yellow;">if (len[i] != len[0])</span></font></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vbr=1;</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (vbr)</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="background-color:yellow;">....</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp; }</span></div>
<div><font face="Times New Roman">&nbsp;</font></div>
<div>I noted that in red part that the vbr flag is set just according to the length. But when use opus_repacketizer_cat() to cat the individual frame which is code3CBR that the padding part will be discard(code is below within red), then the length is not equal
with the individual frame which is code0 or other code3CBR, and I think is this a fault?</div>
<div><font face="Times New Roman">&nbsp;</font></div>
<div>opus_repacketizer_cat()-&gt;opus_packet_parse()-&gt;opus_packet_parse_impl():switch (toc&amp;0x3)</div>
<div style="text-indent:36pt;"><span style="background-color:yellow;">default: /*case 3:*/</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (len&lt;1)</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return OPUS_INVALID_PACKET;</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Number of frames encoded in bits 0 to 5 */</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ch = *data&#43;&#43;;</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count = ch&amp;0x3F;</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (count &lt;= 0 || framesize*count &gt; 5760)</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return OPUS_INVALID_PACKET;</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len--;</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Padding flag is bit 6 */</span></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><font color="red"><span style="background-color:yellow;">if (ch&amp;0x40)</span></font></div>
<div><font color="red"><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></font></div>
<div><font color="red"><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int p;</span></font></div>
<div><font color="red"><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do {</span></font></div>
<div><font color="red"><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (len&lt;=0)</span></font></div>
<div><font color="red"><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return OPUS_INVALID_PACKET;</span></font></div>
<div><font color="red"><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = *data&#43;&#43;;</span></font></div>
<div><font color="red"><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len--;</span></font></div>
<div><font color="red"><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len -= p==255 ? 254: p;</span></font></div>
<div><font color="red"><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } while (p==255);</span></font></div>
<div><span style="background-color:yellow;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></div>
<div><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Consolas"><span style="background-color:yellow;">&#8230;</span></font><font face="Consolas"><span style="background-color:yellow;">.</span></font></font></div>
<div><font face="Times New Roman">&nbsp;</font></div>
<div>Very pleasure if you can reply, thanks very much.</div>
<div>&nbsp;</div>
<div>Br</div>
<div>Huang Hao</div>
<div><font face="Times New Roman">&nbsp;</font></div>
<div>-----Original Message-----<br>

From: Huang, Hao 1. (NSN - CN/Hangzhou) <br>

Sent: Tuesday, November 12, 2013 4:21 PM<br>

To: 'ext Jean-Marc Valin'<br>

Subject: RE: One question about Opus encoder</div>
<div><font face="Times New Roman">&nbsp;</font></div>
<div>OK.</div>
<div>&nbsp;</div>
<div>Thanks very much!</div>
<div>&nbsp;</div>
<div>Br</div>
<div>Huang Hao</div>
<div>&nbsp;</div>
<div>-----Original Message-----</div>
<div>From: ext Jean-Marc Valin [<a href="mailto:jmvalin@jmvalin.ca">mailto:jmvalin@jmvalin.ca</a>] </div>
<div>Sent: Tuesday, November 12, 2013 3:56 PM</div>
<div>To: Huang, Hao 1. (NSN - CN/Hangzhou)</div>
<div>Subject: Re: One question about Opus encoder</div>
<div>&nbsp;</div>
<div>In almost all cases it will create a code 0 packet. You can then</div>
<div>concatenate packets using the OpusRepacketizer. Also, unless you have</div>
<div>confidential questions, please use the mailing list instead: <a href="mailto:opus@xiph.org">opus@xiph.org</a></div>
<div><font face="Times New Roman">&nbsp;</font></div>
<div>Cheers,</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jean-Marc</div>
<div>&nbsp;</div>
<div>On 11/12/2013 02:41 AM, Huang, Hao 1. (NSN - CN/Hangzhou) wrote:</div>
<div>&gt; Hi, jmvalin</div>
<div>&gt; I&#8217;m Huang Hao From NSN company in China. Now I have a question about</div>
<div>&gt; Opus encoder when I read the source code about opus. When we use</div>
<div>&gt; opus_encode() success, it will create a opus packet , but this packet is</div>
<div>&gt; always type of code 0 packet of opus, so I wonder that this function is</div>
<div>&gt; only create code 0 packet? If so, how we can create other type</div>
<div>&gt; packet(code 1, code 2, &#8230;.), writing own function codes? Very pleasure if</div>
<div>&gt; you can reply, thanks very much.</div>
<div>&gt;&nbsp; </div>
<div>&gt; Br</div>
<div>&gt; Huang Hao</div>
<div>&gt;&nbsp; </div>
<div>&gt;&nbsp; </div>
<div>&nbsp;</div>
<div><font face="Times New Roman" size="2"><span style="font-size:11pt;">&nbsp;</span></font></div>
<div><font face="Times New Roman" size="2"><span style="font-size:11pt;">&nbsp;</span></font></div>
</span></font>
</body>
</html>