Browse Source

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

Sylvain Becker 6 years ago
parent
commit
bf823bf2dc
1 changed files with 7 additions and 5 deletions
  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;
 }