- fix problem with hanging call termination

This commit is contained in:
Dmytro Bogovych 2020-09-15 16:10:09 +03:00
parent e5771a013c
commit 9e26eaa373
1 changed files with 10 additions and 2 deletions

View File

@ -65,6 +65,9 @@ void OpenSLEngine::open()
void OpenSLEngine::close() void OpenSLEngine::close()
{ {
std::unique_lock<std::mutex> l(mMutex); std::unique_lock<std::mutex> l(mMutex);
if (mUsageCounter == 0)
return;
if (--mUsageCounter == 0) if (--mUsageCounter == 0)
internalClose(); internalClose();
} }
@ -505,6 +508,8 @@ void AndroidOutputDevice::internalOpen(int rateId, int rate, bool voice)
// Set the player's state to playing // Set the player's state to playing
resultCode = (*mPlayerControl)->SetPlayState(mPlayerControl, SL_PLAYSTATE_PLAYING); resultCode = (*mPlayerControl)->SetPlayState(mPlayerControl, SL_PLAYSTATE_PLAYING);
CHECK_OPENSLES_ERROR; CHECK_OPENSLES_ERROR;
ICELogInfo(<< "Android audio output is opened and playing.");
} }
void AndroidOutputDevice::internalClose() void AndroidOutputDevice::internalClose()
@ -535,6 +540,8 @@ void AndroidOutputDevice::internalClose()
// Destroy player object // Destroy player object
(*mPlayer)->Destroy(mPlayer); (*mPlayer)->Destroy(mPlayer);
ICELogInfo(<< "Android audio output closed.");
mPlayer = nullptr; mPlayer = nullptr;
mPlayerControl = nullptr; mPlayerControl = nullptr;
mBufferQueue = nullptr; mBufferQueue = nullptr;
@ -554,11 +561,12 @@ void AndroidOutputDevice::internalClose()
void AndroidOutputDevice::handleCallback(SLAndroidSimpleBufferQueueItf bq) void AndroidOutputDevice::handleCallback(SLAndroidSimpleBufferQueueItf bq)
{ {
if (mInShutdown) if (mInShutdown)
{ return;
/*{
char silence[mBufferSize]; memset(silence, 0, mBufferSize); char silence[mBufferSize]; memset(silence, 0, mBufferSize);
(*mBufferQueue)->Enqueue(mBufferQueue, silence, mBufferSize); (*mBufferQueue)->Enqueue(mBufferQueue, silence, mBufferSize);
return; return;
} }*/
// Ask producer about data // Ask producer about data
char* buffer = mPlayBuffer.mutableData() + mBufferIndex * mBufferSize; char* buffer = mPlayBuffer.mutableData() + mBufferIndex * mBufferSize;