iOS 9.1 AudioQueueAllocateBuffer, запрашивающий фиксированный размер буфера, возвращает меньший

В новой iOS 9.1, когда устанавливает AudioSession, запрашивающий фиксированный размер буфера, ОС возвращает меньший буфер. Почему это происходит?? В ранних версиях <9.1 это работало как шарм

// Create a new audio input queue
OSStatus result = AudioQueueNewInput(&mAudioFormat,
                                     IOSAudioRecorder::RecorderCallback,
                                     this,                  // userData
                                     nullptr,               // run loop
                                     kCFRunLoopCommonModes, // run loop mode
                                     0,                     // flags
                                     &mAudioQueue);
if (result != 0)
{
    Logger::Error(this, "Failed to create new audio input queue, result: ", result);
    mAudioQueue = nullptr;
}
else
{
    // Allocate memory for the buffers
    for (unsigned int i = 0; i < mNumBuffers; i++)
    {
        AudioQueueAllocateBuffer(mAudioQueue, mBufferFrames * sizeof(short), &mInputBuffer[i]);
        mOutputBuffer[i] = new short[mBufferFrames];
    }
}

И в "RecorderCallback" я получаю буферы меньше, чем запрошено.

Любая подсказка, почему это происходит?

1 ответ

Решение

Размер буфера, указанный этим вызовом выделения аудио-очереди, является максимальным из того, что может быть возвращено. Аппаратное обеспечение устройства iOS может возвращать меньше данных. Ваше приложение должно учитывать этот потенциально меньший размер и / или, возможно, придется объединить несколько возвращенных буферов (например, в циклическом FIFO без блокировки), если вам нужен фрагмент данных фиксированной длины.

Другие вопросы по тегам