2011-02-01 15 views
7

Dostaję ostrzeżenie "AudioQueueObject :: FreeBuffer: AQBuffer * 0x6273fd0 został enqueue rachubę 1" dla API AudioQueueFreeBuffer ... Jak uniknąć tego ostrzeżenia?AudioQueueFreeBuffer ostrzeżenie

jestem coraz to ostrzeżenie w 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

Dodaj niewielki kod, który odtwarza ten błąd. – servermanfail

+0

Nie dostałem odpowiedzi, a także straciłem 50 punktów :-( –

Odpowiedz

1

Spróbuj tego:

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

AudioQueueDispose(playState.queue, true); 
AudioFileClose(playState.audioFile); 
+0

Próbowałem ... Ale nie rozwiązałem problemu –

2

Dzieje się tak, gdy spróbujesz zadzwonić AudioQueueFreeBuffer() w buforze, który został skolejkowany w AudioQueue że biegnie. Powinieneś wywołać AudioQueueStop() na powiązanej AudioQueue przed próbą uwolnienia buforów.

The doc's for AudioQueueFreeBuffer() say:

wywołać tę funkcję tylko wtedy, gdy chcesz pozbyć się danego bufora kontynuując jednocześnie korzystać z kolejki audio. Możesz pozbyć się bufora tylko wtedy, gdy jego kolejka dźwiękowa, do której należy, jest zatrzymana (czyli nie przetwarza danych dźwiękowych w postaci ).