diff options
Diffstat (limited to 'service/src/com')
8 files changed, 112 insertions, 131 deletions
diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioManager.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioManager.cpp index 49efef54..e957cc3b 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioManager.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioManager.cpp @@ -23,9 +23,18 @@ using namespace android; AudioManager* AudioManager::sManager = nullptr; -AudioManager::AudioManager() {} +AudioManager::AudioManager() +{ + mRequestHandler.Init("AUDIO_REQUEST_EVENT"); + mResponseHandler.Init("AUDIO_RESPONSE_EVENT"); +} -AudioManager::~AudioManager() {} +AudioManager::~AudioManager() +{ + mRequestHandler.Deinit(); + mResponseHandler.Deinit(); + sManager = nullptr; +} AudioManager* AudioManager::getInstance() { @@ -203,6 +212,22 @@ void AudioManager::setMediaQualityThreshold(int sessionId, MediaQualityThreshold } } +void AudioManager::SendInternalEvent( + uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB) +{ + auto session = mSessions.find(sessionId); + IMLOGI1("[SendInternalEvent] sessionId[%d]", sessionId); + + if (session != mSessions.end()) + { + (session->second)->SendInternalEvent(event, paramA, paramB); + } + else + { + IMLOGE1("[SendInternalEvent] no session id[%d]", sessionId); + } +} + void AudioManager::sendMessage(const int sessionId, const android::Parcel& parcel) { int nMsg = parcel.readInt32(); @@ -283,35 +308,19 @@ void AudioManager::sendMessage(const int sessionId, const android::Parcel& parce } } -void AudioManager::SendInternalEvent( - uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB) -{ - auto session = mSessions.find(sessionId); - IMLOGI1("[SendInternalEvent] sessionId[%d]", sessionId); - - if (session != mSessions.end()) - { - (session->second)->SendInternalEvent(event, paramA, paramB); - } - else - { - IMLOGE1("[SendInternalEvent] no session id[%d]", sessionId); - } -} - -AudioManager::RequestHandler::RequestHandler() : - ImsMediaEventHandler("AUDIO_REQUEST_EVENT") -{ -} - -AudioManager::RequestHandler::~RequestHandler() {} - void AudioManager::RequestHandler::processEvent( uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB) { IMLOGI4("[processEvent] event[%d], sessionId[%d], paramA[%d], paramB[%d]", event, sessionId, paramA, paramB); ImsMediaResult result = RESULT_SUCCESS; + + if (sManager == nullptr) + { + IMLOGE0("[processEvent] not ready"); + return; + } + switch (event) { case kAudioOpenSession: @@ -320,7 +329,7 @@ void AudioManager::RequestHandler::processEvent( if (param != nullptr) { AudioConfig* pConfig = reinterpret_cast<AudioConfig*>(param->mConfig); - result = AudioManager::getInstance()->openSession( + result = sManager->openSession( static_cast<int>(sessionId), param->rtpFd, param->rtcpFd, pConfig); if (result == RESULT_SUCCESS) @@ -349,8 +358,7 @@ void AudioManager::RequestHandler::processEvent( } break; case kAudioCloseSession: - if (AudioManager::getInstance()->closeSession(static_cast<int>(sessionId)) == - RESULT_SUCCESS) + if (sManager->closeSession(static_cast<int>(sessionId)) == RESULT_SUCCESS) { ImsMediaEventHandler::SendEvent( "AUDIO_RESPONSE_EVENT", kAudioSessionClosed, sessionId, 0, 0); @@ -359,8 +367,7 @@ void AudioManager::RequestHandler::processEvent( case kAudioModifySession: { AudioConfig* config = reinterpret_cast<AudioConfig*>(paramA); - result = - AudioManager::getInstance()->modifySession(static_cast<int>(sessionId), config); + result = sManager->modifySession(static_cast<int>(sessionId), config); ImsMediaEventHandler::SendEvent( "AUDIO_RESPONSE_EVENT", kAudioModifySessionResponse, sessionId, result, paramA); } @@ -368,7 +375,7 @@ void AudioManager::RequestHandler::processEvent( case kAudioAddConfig: { AudioConfig* config = reinterpret_cast<AudioConfig*>(paramA); - result = AudioManager::getInstance()->addConfig(static_cast<int>(sessionId), config); + result = sManager->addConfig(static_cast<int>(sessionId), config); ImsMediaEventHandler::SendEvent( "AUDIO_RESPONSE_EVENT", kAudioAddConfigResponse, sessionId, result, paramA); } @@ -376,8 +383,7 @@ void AudioManager::RequestHandler::processEvent( case kAudioConfirmConfig: { AudioConfig* config = reinterpret_cast<AudioConfig*>(paramA); - result = - AudioManager::getInstance()->confirmConfig(static_cast<int>(sessionId), config); + result = sManager->confirmConfig(static_cast<int>(sessionId), config); ImsMediaEventHandler::SendEvent( "AUDIO_RESPONSE_EVENT", kAudioConfirmConfigResponse, sessionId, result, paramA); } @@ -387,7 +393,7 @@ void AudioManager::RequestHandler::processEvent( AudioConfig* config = reinterpret_cast<AudioConfig*>(paramA); if (config != nullptr) { - AudioManager::getInstance()->deleteConfig(static_cast<int>(sessionId), config); + sManager->deleteConfig(static_cast<int>(sessionId), config); delete config; } } @@ -397,8 +403,7 @@ void AudioManager::RequestHandler::processEvent( EventParamDtmf* param = reinterpret_cast<EventParamDtmf*>(paramA); if (param != nullptr) { - AudioManager::getInstance()->sendDtmf( - static_cast<int>(sessionId), param->digit, param->duration); + sManager->sendDtmf(static_cast<int>(sessionId), param->digit, param->duration); delete param; } } @@ -410,8 +415,7 @@ void AudioManager::RequestHandler::processEvent( if (listExtension != nullptr) { - AudioManager::getInstance()->sendRtpHeaderExtension( - static_cast<int>(sessionId), listExtension); + sManager->sendRtpHeaderExtension(static_cast<int>(sessionId), listExtension); delete listExtension; } } @@ -421,34 +425,32 @@ void AudioManager::RequestHandler::processEvent( MediaQualityThreshold* threshold = reinterpret_cast<MediaQualityThreshold*>(paramA); if (threshold != nullptr) { - AudioManager::getInstance()->setMediaQualityThreshold( - static_cast<int>(sessionId), threshold); + sManager->setMediaQualityThreshold(static_cast<int>(sessionId), threshold); delete threshold; } } break; case kRequestAudioCmr: case kRequestSendRtcpXrReport: - AudioManager::getInstance()->SendInternalEvent( - event, static_cast<int>(sessionId), paramA, paramB); + sManager->SendInternalEvent(event, static_cast<int>(sessionId), paramA, paramB); break; default: break; } } -AudioManager::ResponseHandler::ResponseHandler() : - ImsMediaEventHandler("AUDIO_RESPONSE_EVENT") -{ -} - -AudioManager::ResponseHandler::~ResponseHandler() {} - void AudioManager::ResponseHandler::processEvent( uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB) { IMLOGI4("[processEvent] event[%d], sessionId[%d], paramA[%d], paramB[%d]", event, sessionId, paramA, paramB); + + if (sManager == nullptr) + { + IMLOGE0("[processEvent] not ready"); + return; + } + android::Parcel parcel; switch (event) { @@ -461,7 +463,7 @@ void AudioManager::ResponseHandler::processEvent( // fail reason parcel.writeInt32(static_cast<int>(paramA)); } - AudioManager::getInstance()->sendResponse(sessionId, parcel); + sManager->sendResponse(sessionId, parcel); break; case kAudioModifySessionResponse: // fall through case kAudioAddConfigResponse: // fall through @@ -473,7 +475,7 @@ void AudioManager::ResponseHandler::processEvent( if (config != nullptr) { config->writeToParcel(&parcel); - AudioManager::getInstance()->sendResponse(sessionId, parcel); + sManager->sendResponse(sessionId, parcel); delete config; } } @@ -485,7 +487,7 @@ void AudioManager::ResponseHandler::processEvent( if (config != nullptr) { config->writeToParcel(&parcel); - AudioManager::getInstance()->sendResponse(sessionId, parcel); + sManager->sendResponse(sessionId, parcel); delete config; } } @@ -505,7 +507,7 @@ void AudioManager::ResponseHandler::processEvent( extension.writeToParcel(&parcel); } - AudioManager::getInstance()->sendResponse(sessionId, parcel); + sManager->sendResponse(sessionId, parcel); delete listExtension; } } @@ -517,7 +519,7 @@ void AudioManager::ResponseHandler::processEvent( if (status != nullptr) { status->writeToParcel(&parcel); - AudioManager::getInstance()->sendResponse(sessionId, parcel); + sManager->sendResponse(sessionId, parcel); delete status; } } @@ -529,7 +531,7 @@ void AudioManager::ResponseHandler::processEvent( parcel.writeInt32(event); parcel.writeByte(static_cast<uint8_t>(paramA)); parcel.writeInt32(static_cast<int>(paramB)); - AudioManager::getInstance()->sendResponse(sessionId, parcel); + sManager->sendResponse(sessionId, parcel); break; case kAudioCallQualityChangedInd: { @@ -538,7 +540,7 @@ void AudioManager::ResponseHandler::processEvent( if (quality != nullptr) { quality->writeToParcel(&parcel); - AudioManager::getInstance()->sendResponse(sessionId, parcel); + sManager->sendResponse(sessionId, parcel); delete quality; } } @@ -546,7 +548,7 @@ void AudioManager::ResponseHandler::processEvent( case kAudioSessionClosed: parcel.writeInt32(event); parcel.writeInt32(static_cast<int>(sessionId)); - AudioManager::getInstance()->sendResponse(sessionId, parcel); + sManager->sendResponse(sessionId, parcel); break; default: break; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioManager.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioManager.h index 231b4141..d2a0e441 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioManager.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/audio/AudioManager.h @@ -37,10 +37,6 @@ public: */ class RequestHandler : public ImsMediaEventHandler { - public: - RequestHandler(); - virtual ~RequestHandler(); - protected: virtual void processEvent( uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB); @@ -51,10 +47,6 @@ public: */ class ResponseHandler : public ImsMediaEventHandler { - public: - ResponseHandler(); - virtual ~ResponseHandler(); - protected: virtual void processEvent( uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB); @@ -63,20 +55,22 @@ public: static AudioManager* getInstance(); virtual int getState(int sessionId); virtual void sendMessage(const int sessionId, const android::Parcel& parcel); - void SendInternalEvent(uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB); -private: +protected: AudioManager(); virtual ~AudioManager(); ImsMediaResult openSession(int sessionId, int rtpFd, int rtcpFd, AudioConfig* config); ImsMediaResult closeSession(int sessionId); ImsMediaResult modifySession(int sessionId, AudioConfig* config); ImsMediaResult addConfig(int sessionId, AudioConfig* config); - ImsMediaResult deleteConfig(int sessionId, AudioConfig* config); + virtual ImsMediaResult deleteConfig(int sessionId, AudioConfig* config); ImsMediaResult confirmConfig(int sessionId, AudioConfig* config); - void sendDtmf(int sessionId, char dtmfDigit, int duration); - void sendRtpHeaderExtension(int sessionId, std::list<RtpHeaderExtension>* listExtension); - void setMediaQualityThreshold(int sessionId, MediaQualityThreshold* threshold); + virtual void sendDtmf(int sessionId, char dtmfDigit, int duration); + virtual void sendRtpHeaderExtension( + int sessionId, std::list<RtpHeaderExtension>* listExtension); + virtual void setMediaQualityThreshold(int sessionId, MediaQualityThreshold* threshold); + virtual void SendInternalEvent( + uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB); static AudioManager* sManager; std::unordered_map<int, std::unique_ptr<AudioSession>> mSessions; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/text/TextManager.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/text/TextManager.h index 66201daa..67b24ed3 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/text/TextManager.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/text/TextManager.h @@ -37,10 +37,6 @@ public: */ class RequestHandler : public ImsMediaEventHandler { - public: - RequestHandler(); - virtual ~RequestHandler(); - protected: virtual void processEvent( uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB); @@ -51,10 +47,6 @@ public: */ class ResponseHandler : public ImsMediaEventHandler { - public: - ResponseHandler(); - virtual ~ResponseHandler(); - protected: virtual void processEvent( uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB); diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/utils/ImsMediaEventHandler.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/utils/ImsMediaEventHandler.h index 4e5dc7f0..e01761da 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/utils/ImsMediaEventHandler.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/utils/ImsMediaEventHandler.h @@ -46,8 +46,10 @@ private: std::mutex mMutexEvent; public: - ImsMediaEventHandler(const char* strName); + ImsMediaEventHandler(); virtual ~ImsMediaEventHandler(); + void Init(const char* strName); + void Deinit(); static void SendEvent(const char* strEventHandlerName, uint32_t event, uint64_t paramA, uint64_t paramB = 0, uint64_t paramC = 0); char* getName(); diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/video/VideoManager.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/video/VideoManager.h index 7c780fd0..91c2747b 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/video/VideoManager.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/video/VideoManager.h @@ -37,10 +37,6 @@ public: */ class RequestHandler : public ImsMediaEventHandler { - public: - RequestHandler(); - virtual ~RequestHandler(); - protected: virtual void processEvent( uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB); @@ -51,10 +47,6 @@ public: */ class ResponseHandler : public ImsMediaEventHandler { - public: - ResponseHandler(); - virtual ~ResponseHandler(); - protected: virtual void processEvent( uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB); diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextManager.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextManager.cpp index f50a0ba8..33ad7a20 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextManager.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextManager.cpp @@ -21,9 +21,18 @@ using namespace android; TextManager* TextManager::manager; -TextManager::TextManager() {} +TextManager::TextManager() +{ + mRequestHandler.Init("TEXT_REQUEST_EVENT"); + mResponseHandler.Init("TEXT_RESPONSE_EVENT"); +} -TextManager::~TextManager() {} +TextManager::~TextManager() +{ + mRequestHandler.Deinit(); + mResponseHandler.Deinit(); + manager = nullptr; +} TextManager* TextManager::getInstance() { @@ -200,13 +209,6 @@ void TextManager::sendMessage(const int sessionId, const android::Parcel& parcel } } -TextManager::RequestHandler::RequestHandler() : - ImsMediaEventHandler("TEXT_REQUEST_EVENT") -{ -} - -TextManager::RequestHandler::~RequestHandler() {} - void TextManager::RequestHandler::processEvent( uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB) { @@ -294,13 +296,6 @@ void TextManager::RequestHandler::processEvent( } } -TextManager::ResponseHandler::ResponseHandler() : - ImsMediaEventHandler("TEXT_RESPONSE_EVENT") -{ -} - -TextManager::ResponseHandler::~ResponseHandler() {} - void TextManager::ResponseHandler::processEvent( uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB) { diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaEventHandler.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaEventHandler.cpp index b3d165ab..336f2aa5 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaEventHandler.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaEventHandler.cpp @@ -22,24 +22,29 @@ std::list<ImsMediaEventHandler*> ImsMediaEventHandler::gListEventHandler; std::mutex ImsMediaEventHandler::mMutex; -ImsMediaEventHandler::ImsMediaEventHandler(const char* strName) +ImsMediaEventHandler::ImsMediaEventHandler() {} + +ImsMediaEventHandler::~ImsMediaEventHandler() {} + +void ImsMediaEventHandler::Init(const char* strName) { strncpy(mName, strName, MAX_EVENTHANDLER_NAME); mbTerminate = false; gListEventHandler.push_back(this); - IMLOGD1("[ImsMediaEventHandler] %s", mName); + IMLOGD1("[Init] %s", mName); StartThread(); } -ImsMediaEventHandler::~ImsMediaEventHandler() +void ImsMediaEventHandler::Deinit() { - IMLOGD1("[~ImsMediaEventHandler] %s", mName); + IMLOGD2("[Deinit] %s, queue size[%d]", mName, mListevent.size()); + std::lock_guard<std::mutex> guard(mMutexEvent); + StopThread(); gListEventHandler.remove(this); mListevent.clear(); mListParamA.clear(); mListParamB.clear(); mListParamC.clear(); - StopThread(); mCondition.signal(); mConditionExit.wait(); } @@ -73,13 +78,12 @@ char* ImsMediaEventHandler::getName() void ImsMediaEventHandler::AddEvent( uint32_t event, uint64_t paramA, uint64_t paramB, uint64_t paramC) { + std::lock_guard<std::mutex> guard(mMutexEvent); IMLOGD3("[AddEvent] %s, event[%d], size[%d]", mName, event, mListevent.size()); - mMutexEvent.lock(); mListevent.push_back(event); mListParamA.push_back(paramA); mListParamB.push_back(paramB); mListParamC.push_back(paramC); - mMutexEvent.unlock(); mCondition.signal(); } @@ -94,17 +98,22 @@ void* ImsMediaEventHandler::run() for (;;) { - // lock + if (IsThreadStopped()) + { + break; + } + mMutexEvent.lock(); - if (IsThreadStopped() || mListevent.size() == 0) + + if (mListevent.size() == 0) { mMutexEvent.unlock(); break; } - mMutexEvent.unlock(); + processEvent(mListevent.front(), mListParamA.front(), mListParamB.front(), mListParamC.front()); - mMutexEvent.lock(); + mListevent.pop_front(); mListParamA.pop_front(); mListParamB.pop_front(); diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoManager.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoManager.cpp index 9d98be37..37007b21 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoManager.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoManager.cpp @@ -21,9 +21,18 @@ using namespace android; VideoManager* VideoManager::manager; -VideoManager::VideoManager() {} +VideoManager::VideoManager() +{ + mRequestHandler.Init("VIDEO_REQUEST_EVENT"); + mResponseHandler.Init("VIDEO_RESPONSE_EVENT"); +} -VideoManager::~VideoManager() {} +VideoManager::~VideoManager() +{ + mRequestHandler.Deinit(); + mResponseHandler.Deinit(); + manager = nullptr; +} VideoManager* VideoManager::getInstance() { @@ -245,13 +254,6 @@ void VideoManager::SendInternalEvent( } } -VideoManager::RequestHandler::RequestHandler() : - ImsMediaEventHandler("VIDEO_REQUEST_EVENT") -{ -} - -VideoManager::RequestHandler::~RequestHandler() {} - void VideoManager::RequestHandler::processEvent( uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB) { @@ -351,13 +353,6 @@ void VideoManager::RequestHandler::processEvent( } } -VideoManager::ResponseHandler::ResponseHandler() : - ImsMediaEventHandler("VIDEO_RESPONSE_EVENT") -{ -} - -VideoManager::ResponseHandler::~ResponseHandler() {} - void VideoManager::ResponseHandler::processEvent( uint32_t event, uint64_t sessionId, uint64_t paramA, uint64_t paramB) { |