OpenAL - alSourceQueueBuffers увеличивает количество AL_BUFFERS_PROCESSED? - PullRequest
0 голосов
/ 08 марта 2012

У меня возникли некоторые трудности с обработкой потоковых источников в OpenAL на Mac OS X (с использованием системной инфраструктуры). Я до сих пор не уверен, что это вызывает, но иногда, после остановки потокового источника и повторного его воспроизведения, постановка в очередь буфера увеличивает значение AL_BUFFERS_PROCESSED. Я использую цикл while, подобный следующему, для обработки исходных буферов:

alGetSourcei(source, AL_BUFFERS_PROCESSED, &processed);

while (processed--)
{
    ALuint buffer;

    // Get a free buffer.
    alSourceUnqueueBuffers(source, 1, &buffer);
    streamAtomic(buffer, decoder); // streamAtomic decodes compressed audio data and calls alBufferData.
    alSourceQueueBuffers(source, 1, &buffer);
}

Полный исходный код класса Source можно найти здесь .

Обычно этот цикл обновления работает нормально, но всякий раз, когда эта ошибка срабатывает, вызов alSourceQueueBuffers, по-видимому, увеличивает AL_BUFFERS_PROCESSED, означая, что каждый цикл обновления, этот цикл занимает все больше и больше времени, пока не достигнет общего числа буферов, поставленных в очередь, период (32 в данном случае), где он остается до приостановки или остановки источника, после чего AL_BUFFERS_PROCESSED сбрасывается - и быстро начинает снова увеличиваться. Я проверил, и после вызова alSourceUnqueueBuffers счет уменьшается на 1. Только после того, как я позвоню alSourceQueueBuffers, счет снова увеличится.

Я просматривал свой код, спецификацию OpenAL, переполнение стека, список рассылки OpenAL и Google, и я не могу найти ни документации по этому случаю, ни указаний относительно того, что я делаю что-то неправильно или если это ошибка в реализации OpenAL. Что бы это ни стоило, эта ошибка не возникает, используя точно такой же код, в OpenAL Soft для Windows и Linux. Однако я не смог заставить OpenAL Soft нормально работать на моем Mac для тестирования.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...