OpenSL ES解码24位FLAC

时间:2013-11-07 03:49:00

标签: android android-ndk decode opensl

我正在尝试使用Android上的OpenSL ES解码具有24位样本格式的FLAC文件。最初,我为此SLDataFormat_PCM设置SLDataSink

_pcm.formatType = SL_DATAFORMAT_PCM;
_pcm.numChannels = 2;
_pcm.samplesPerSec = SL_SAMPLINGRATE_44_1;
_pcm.bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16;
_pcm.containerSize = SL_PCMSAMPLEFORMAT_FIXED_16;
_pcm.channelMask = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT;
_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN;

这基本上适用于任何数据格式。幸运的是samplesPerSec没有得到尊重(我不想重新取样)。

现在我想支持24位采样的FLAC文件的完整位深度。使用此格式时,它显然会执行深度转换,因为一旦我加载文件,然后检查ANDROID_KEY_PCMFORMAT_BITSPERSAMPLE信息,它就是16。

当我放置bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_24;SL_PCMSAMPLEFORMAT_FIXED_32时,OpenSL ES会拒绝它

E/libOpenSLES(22706): pAudioSnk: bitsPerSample=32
W/libOpenSLES(22706): Leaving Engine::CreateAudioPlayer (SL_RESULT_CONTENT_UNSUPPORTED)

知道这是如何工作的吗? Android目前仅限于16位int吗? 我也会接受32位浮点数,但我认为这也无效。

1 个答案:

答案 0 :(得分:1)

目前它只支持8位和16位

来源