[opus] Issue with decoding 8-bit PCM data

Amit Ashara ashara.amit at gmail.com
Thu Jan 7 17:11:57 PST 2016


Hello Ralph,

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.

Regards
Amit

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?
>
> Regards
> Amit
>
> 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[0], 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.
>>
>> HTH,
>>  -r
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.xiph.org/pipermail/opus/attachments/20160107/c215f47b/attachment.htm 


More information about the opus mailing list