Loading services/audioflinger/AudioPolicyService.cpp +10 −2 Original line number Diff line number Diff line Loading @@ -296,9 +296,14 @@ audio_io_handle_t AudioPolicyService::getInput(audio_source_t inputSource, return 0; } // already checked by client, but double-check in case the client wrapper is bypassed if (uint32_t(inputSource) >= AUDIO_SOURCE_CNT) { if (inputSource >= AUDIO_SOURCE_CNT && inputSource != AUDIO_SOURCE_HOTWORD) { return 0; } if ((inputSource == AUDIO_SOURCE_HOTWORD) && !captureHotwordAllowed()) { return 0; } Mutex::Autolock _l(mLock); // the audio_in_acoustics_t parameter is ignored by get_input() audio_io_handle_t input = mpAudioPolicy->get_input(mpAudioPolicy, inputSource, samplingRate, Loading @@ -308,7 +313,10 @@ audio_io_handle_t AudioPolicyService::getInput(audio_source_t inputSource, return input; } // create audio pre processors according to input source ssize_t index = mInputSources.indexOfKey(inputSource); audio_source_t aliasSource = (inputSource == AUDIO_SOURCE_HOTWORD) ? AUDIO_SOURCE_VOICE_RECOGNITION : inputSource; ssize_t index = mInputSources.indexOfKey(aliasSource); if (index < 0) { return input; } Loading services/audioflinger/RecordTracks.h +1 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ public: void destroy(); void invalidate(); // clear the buffer overflow flag void clearOverflow() { mOverflow = false; } // set the buffer overflow flag and return previous value Loading services/audioflinger/ServiceUtilities.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,13 @@ bool captureAudioOutputAllowed() { return ok; } bool captureHotwordAllowed() { static const String16 sCaptureHotwordAllowed("android.permission.CAPTURE_AUDIO_HOTWORD"); bool ok = checkCallingPermission(sCaptureHotwordAllowed); if (!ok) ALOGE("android.permission.CAPTURE_AUDIO_HOTWORD"); return ok; } bool settingsAllowed() { if (getpid_cached == IPCThreadState::self()->getCallingPid()) return true; static const String16 sAudioSettings("android.permission.MODIFY_AUDIO_SETTINGS"); Loading services/audioflinger/ServiceUtilities.h +1 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ extern pid_t getpid_cached; bool recordingAllowed(); bool captureAudioOutputAllowed(); bool captureHotwordAllowed(); bool settingsAllowed(); bool dumpAllowed(); Loading services/audioflinger/Threads.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -4451,6 +4451,10 @@ bool AudioFlinger::RecordThread::threadLoop() { Mutex::Autolock _l(mLock); for (size_t i = 0; i < mTracks.size(); i++) { sp<RecordTrack> track = mTracks[i]; track->invalidate(); } mActiveTrack.clear(); mStartStopCond.broadcast(); } Loading Loading
services/audioflinger/AudioPolicyService.cpp +10 −2 Original line number Diff line number Diff line Loading @@ -296,9 +296,14 @@ audio_io_handle_t AudioPolicyService::getInput(audio_source_t inputSource, return 0; } // already checked by client, but double-check in case the client wrapper is bypassed if (uint32_t(inputSource) >= AUDIO_SOURCE_CNT) { if (inputSource >= AUDIO_SOURCE_CNT && inputSource != AUDIO_SOURCE_HOTWORD) { return 0; } if ((inputSource == AUDIO_SOURCE_HOTWORD) && !captureHotwordAllowed()) { return 0; } Mutex::Autolock _l(mLock); // the audio_in_acoustics_t parameter is ignored by get_input() audio_io_handle_t input = mpAudioPolicy->get_input(mpAudioPolicy, inputSource, samplingRate, Loading @@ -308,7 +313,10 @@ audio_io_handle_t AudioPolicyService::getInput(audio_source_t inputSource, return input; } // create audio pre processors according to input source ssize_t index = mInputSources.indexOfKey(inputSource); audio_source_t aliasSource = (inputSource == AUDIO_SOURCE_HOTWORD) ? AUDIO_SOURCE_VOICE_RECOGNITION : inputSource; ssize_t index = mInputSources.indexOfKey(aliasSource); if (index < 0) { return input; } Loading
services/audioflinger/RecordTracks.h +1 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ public: void destroy(); void invalidate(); // clear the buffer overflow flag void clearOverflow() { mOverflow = false; } // set the buffer overflow flag and return previous value Loading
services/audioflinger/ServiceUtilities.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,13 @@ bool captureAudioOutputAllowed() { return ok; } bool captureHotwordAllowed() { static const String16 sCaptureHotwordAllowed("android.permission.CAPTURE_AUDIO_HOTWORD"); bool ok = checkCallingPermission(sCaptureHotwordAllowed); if (!ok) ALOGE("android.permission.CAPTURE_AUDIO_HOTWORD"); return ok; } bool settingsAllowed() { if (getpid_cached == IPCThreadState::self()->getCallingPid()) return true; static const String16 sAudioSettings("android.permission.MODIFY_AUDIO_SETTINGS"); Loading
services/audioflinger/ServiceUtilities.h +1 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ extern pid_t getpid_cached; bool recordingAllowed(); bool captureAudioOutputAllowed(); bool captureHotwordAllowed(); bool settingsAllowed(); bool dumpAllowed(); Loading
services/audioflinger/Threads.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -4451,6 +4451,10 @@ bool AudioFlinger::RecordThread::threadLoop() { Mutex::Autolock _l(mLock); for (size_t i = 0; i < mTracks.size(); i++) { sp<RecordTrack> track = mTracks[i]; track->invalidate(); } mActiveTrack.clear(); mStartStopCond.broadcast(); } Loading