diff --git a/src/audio/openslES/SDL_openslES.c b/src/audio/openslES/SDL_openslES.c index ae0f6a62a..f888d2ac2 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!"); + } + } }