pAudioBuffer
我有从函数 ffmpeg 获得的char缓冲区:
int len = avcodec_decode_audio3(av_codec_context,
(int16_t *) pAudioBuffer, &out_size, &packet);
我知道音频格式是每个样本两个字节,我需要将每两个字节转换为短值,我尝试使用下面的代码片段,但我经常得到零而不是短值:
int shortBufIndex = 0;
for (int i = 0; i < (out_size); i += 2) {
char b1 = pAudioBuffer[i];
char b2 = pAudioBuffer[i + 1];
short sample = atoi(&b1) + atoi(&b2);
shortBuffer[shortBufIndex] = sample;
shortBufIndex++;
LOGI("BUFFER_ITEM='%d'", sample);
}
我做错了什么,如何将 char 缓冲区中的每两个字节转换为 short 和 back。
更新:
系统的字节顺序是 LITTLE_ENDIAN 我有这样的测试:Android NDK的字节序
如何将缓冲区中的每两个字节转换为短类型样本并返回。请您提供任何代码示例。
更新
我试图以成对的方式访问short,这是我的固定代码,但它不起作用,我听不到任何声音:
int shortBufIndex = 0;
for (int i = 0; i < (out_size); i += 2) {
char * byte = (char *) pAudioBuffer[i];
short * sample = byte;
shortBuffer[shortBufIndex] = sample;
}
我做错了什么?我需要这样的转换:字节数组到短数组并在java中但在c中再次返回。