<div dir="ltr"><div><div>Hello Ralph,<br><br>&gt; Likewise opus_encode() takes 16 bit samples, so you need to extend each<br>&gt; sample from an 8 bit source before encoding.<br><br></div><div>Two questions<br></div><div>1. In opusenc.c which API does the extending the 8-bit to 16-bit?<br></div><div>2. If that is the case then how will 24 bit PCM sample work?<br></div><div><br></div>Regards<br></div>Amit<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 7, 2016 at 12:21 PM, Ralph Giles <span dir="ltr">&lt;<a href="mailto:giles@thaumas.net" target="_blank">giles@thaumas.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 07/01/16 10:04 AM, Amit Ashara wrote:<br>
<br>
&gt; opus_decoder_ctl(sOpusDec, OPUS_SET_LSB_DEPTH(ui32BitsPerSample));<br>
<br>
OPUS_SET_LSB_DEPTH only affects the encoder. If you check the return<br>
value here you should get OPUS_UNIMPLEMENTED.<br>
<span class=""><br>
&gt; output_samples = opus_decode(sOpusDec, (const unsigned char<br>
&gt; *)&amp;pcRdBuf[0], len, opi16_out, (ui32SizeOfWrBuf/ui8ScaleFactor), 0);<br>
<br>
</span>I suspect the issue is dividing by ui8ScaleFactor = 1 here.<br>
OPUS_SET_LSB_DEPTH works as a precision hint to the encoder about where<br>
to set the noise floor, but opus_decode still returns 16 bit samples. It<br>
always returns 16 bit samples, regardless of whether the original input<br>
as 8 bit, 16 bit or 24 bit precision (from opus_encode_float).<br>
<br>
To actually output 8-bit wav, you have to keep track of this out-of-band<br>
and truncate each sample before writing it out.<br>
<br>
Likewise opus_encode() takes 16 bit samples, so you need to extend each<br>
sample from an 8 bit source before encoding.<br>
<br>
HTH,<br>
 -r<br>
</blockquote></div><br></div>