OpenAL - alSourceQueueBuffers会增加AL_BUFFERS_PROCESSED计数吗?

时间:2012-03-08 15:19:50

标签: macos openal

我在Mac OS X上使用OpenAL处理流式传输源时遇到了一些困难(使用系统框架)。我仍然不确定是什么触发它,但有时,在停止流式传输源并再次播放之后,排队缓冲区会增加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类的完整源代码here

通常这个更新循环工作正常,但每当触发此错误时,调用alSourceQueueBuffers似乎会增加AL_BUFFERS_PROCESSED,这意味着每个更新周期,此循环需要更长更长时间,直到达到总数排队的缓冲区,句点(在这种情况下为32),它一直停留直到暂停或停止源,此时AL_BUFFERS_PROCESSED重置 - 并立即再次开始增加。我检查过,调用alSourceUnqueueBuffers后计数减少了1。只有在我打电话给alSourceQueueBuffers后,计数才会再次增加。

我一直在研究我的代码,OpenAL规范,Stack Overflow,OpenAL邮件列表和Google,我找不到任何关于这种情况的文档,也没有任何迹象表明我是否正在做某事错误或者如果它是OpenAL实现中的错误。对于它的价值,在Windows和Linux上的OpenAL Soft下使用完全相同的代码,这个错误 not 发生。不过,我无法让我的Mac上的OpenAL Soft正常工作进行测试。

有什么想法吗?

0 个答案:

没有答案