[opus] Issue with decoding 8-bit PCM data

Amit Ashara ashara.amit at gmail.com
Thu Jan 7 10:41:49 PST 2016


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/27b9ecef/attachment.htm 


More information about the opus mailing list