Fixed bug #4982 - Failed to open audio_device on OpenSLES / Android 5.x with freq 96khz+
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
diff --git a/src/audio/openslES/SDL_openslES.c b/src/audio/openslES/SDL_openslES.c
index ae0f6a6..f888d2a 100644
--- a/src/audio/openslES/SDL_openslES.c
+++ b/src/audio/openslES/SDL_openslES.c
@@ -579,7 +579,7 @@ openslES_CreatePCMPlayer(_THIS)
failed:
- return SDL_SetError("Open device failed!");
+ return -1;
}
static int
@@ -594,8 +594,24 @@ openslES_OpenDevice(_THIS, void *handle, const char *devname, int iscapture)
LOGI("openslES_OpenDevice() %s for capture", devname);
return openslES_CreatePCMRecorder(this);
} else {
+ int ret;
LOGI("openslES_OpenDevice() %s for playing", devname);
- return openslES_CreatePCMPlayer(this);
+ ret = openslES_CreatePCMPlayer(this);
+ if (ret < 0) {
+ /* Another attempt to open the device with a lower frequency */
+ if (this->spec.freq > 48000) {
+ openslES_DestroyPCMPlayer(this);
+ this->spec.freq = 48000;
+ ret = openslES_CreatePCMPlayer(this);
+ }
+ }
+
+ if (ret == 0) {
+ return 0;
+ } else {
+ return SDL_SetError("Open device failed!");
+ }
+
}
}