FFMPEG аудио декодирование: эффективное преобразование из короткого в плавающий буфер сэмплов

Я использую FFMPEG avcodec_decode_audio для декодирования аудио входных файлов различных типов. Полученные образцы имеют тип SHORT.

Эти сэмплы обрабатываются другой библиотекой, которая требует сэмплы во входном формате FLOAT. Наконец, для воспроизведения (на Android) мне нужно снова преобразовать сэмплы FLOAT в SHORT:

short* inputSamples = ...;
float* tmpBuffer = new float[nrInputSamples];
for (int i=0; i<nrInputSamples; i++)
tmpBuffer[i] = inputSamples[i]/32767.0f;

//process audio here

for (int i=0; i<nrInputSamples; i++)
inputSamples[i] = tmpBuffer[i]*32767.0f;

Есть ли более эффективный способ сделать это (например, заставить ffmpeg декодировать аудио в сэмплы FLOAT)?

С Уважением,

0

Решение

Используйте библиотеку swresample, которая включена в библиотеку ffmpeg, она существует для таких случаев, как эта. Вы можете найти примеры того, как это сделать, в их хранилище кода.

2

Другие решения

Других решений пока нет …