[opus] Issue with decoding 8-bit PCM data
ashara.amit at gmail.com
Thu Jan 7 17:11:57 PST 2016
I was finally able to get it to work for both 8 and 16 bit PCM data.
However the output of the decoder is always 16 bit PCM and never the
original 8 bit making the wav file decoded 2x times the original file.
This is a restriction for some embedded system. Any idea how to work around
or fix the issue?
I did try reading out the 8-bit data from the 16 bit output but it does not
seem that simple (based on stackoverflow.com) and I am still searching on
an easier mechanism.
On Thu, Jan 7, 2016 at 12:41 PM, Amit Ashara <ashara.amit at gmail.com> wrote:
> Hello Ralph,
> > Likewise opus_encode() takes 16 bit samples, so you need to extend each
> > sample from an 8 bit source before encoding.
> Two questions
> 1. In opusenc.c which API does the extending the 8-bit to 16-bit?
> 2. If that is the case then how will 24 bit PCM sample work?
> On Thu, Jan 7, 2016 at 12:21 PM, Ralph Giles <giles at thaumas.net> wrote:
>> On 07/01/16 10:04 AM, Amit Ashara wrote:
>> > opus_decoder_ctl(sOpusDec, OPUS_SET_LSB_DEPTH(ui32BitsPerSample));
>> OPUS_SET_LSB_DEPTH only affects the encoder. If you check the return
>> value here you should get OPUS_UNIMPLEMENTED.
>> > output_samples = opus_decode(sOpusDec, (const unsigned char
>> > *)&pcRdBuf, len, opi16_out, (ui32SizeOfWrBuf/ui8ScaleFactor), 0);
>> I suspect the issue is dividing by ui8ScaleFactor = 1 here.
>> OPUS_SET_LSB_DEPTH works as a precision hint to the encoder about where
>> to set the noise floor, but opus_decode still returns 16 bit samples. It
>> always returns 16 bit samples, regardless of whether the original input
>> as 8 bit, 16 bit or 24 bit precision (from opus_encode_float).
>> To actually output 8-bit wav, you have to keep track of this out-of-band
>> and truncate each sample before writing it out.
>> Likewise opus_encode() takes 16 bit samples, so you need to extend each
>> sample from an 8 bit source before encoding.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the opus