2011-02-01 70 views
7

對於API AudioQueueFreeBuffer,我收到警告「AudioQueueObject :: FreeBuffer:AQBuffer * 0x6273fd0已入隊計數1 ...如何避免此警告?AudioQueueFreeBuffer警告

我得到的AudioQueueFreeBuffer API此警告

 for (int i = 0; i < kNumberBuffers; ++i) { 

      if(mAudioInfo.mBuffers[i] != NULL) 
      { 
       AudioQueueFreeBuffer(mAudioInfo.mQueue, mAudioInfo.mBuffers[i]); 
       mAudioInfo.mBuffers[i] = NULL; 
      } 
      XThrowIfError(AudioQueueAllocateBuffer(mAudioInfo.mQueue, mBufferByteSize, &mAudioInfo.mBuffers[i]), "AudioQueueAllocateBuffer failed"); 

      AQTestBufferCallback (&mAudioInfo, mAudioInfo.mQueue, mAudioInfo.mBuffers[i]); 

      if (mAudioInfo.mDone) break; 
     } 
+0

發佈一些重現此錯誤的最小代碼。 – servermanfail 2011-02-20 15:20:36

+0

我沒有得到答案,也失去了50分:-( – 2011-02-26 18:39:29

回答

1

試試這個:

for(int i = 0; i < NUM_BUFFERS; i++) 
{ 
    AudioQueueFreeBuffer(playState.queue, playState.buffers[i]); 
} 

AudioQueueDispose(playState.queue, true); 
AudioFileClose(playState.audioFile); 
2

當您嘗試對已在AudioQueue進行排隊的緩衝區調用AudioQueueFreeBuffer()會發生此說在跑。在嘗試釋放緩衝區之前,您應該在關聯的AudioQueue上調用AudioQueueStop()。

The doc's for AudioQueueFreeBuffer() say:

只有電話,如果你想同時繼續使用音頻隊列處置特定的緩衝區 的這個功能。僅當擁有它的音頻隊列停止時(即,不處理音頻數據的 ),才能處理緩衝區 。