瀏覽代碼

Android/openslES: prevent to run out of buffers if Enqueue() fails.

Sylvain Becker 6 年之前
父節點
當前提交
bf823bf2dc
共有 1 個文件被更改,包括 7 次插入5 次删除
  1. 7 5
      src/audio/openslES/SDL_openslES.c

+ 7 - 5
src/audio/openslES/SDL_openslES.c

@@ -549,19 +549,21 @@ openslES_PlayDevice(_THIS)
     SLresult result;
 
     LOGI("======openslES_PlayDevice( )======");
-    /* Queue it up */
 
+    /* Queue it up */
     result = (*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, audiodata->pmixbuff[audiodata->next_buffer], this->spec.size);
-    if (SL_RESULT_SUCCESS != result) {
-        /* just puk here */
-        /* next ! */
-    }
 
     audiodata->next_buffer++;
     if (audiodata->next_buffer >= NUM_BUFFERS) {
         audiodata->next_buffer = 0;
     }
 
+    /* If Enqueue fails, callback won't be called.
+     * Post the semphore, not to run out of buffer */
+    if (SL_RESULT_SUCCESS != result) {
+        SDL_SemPost(audiodata->playsem);
+    }
+
     return;
 }