Loading media/libaudioclient/AidlConversion.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -1434,6 +1434,8 @@ ConversionResult<audio_input_flags_t> aidl2legacy_AudioInputFlags_audio_input_fl return AUDIO_INPUT_FLAG_HW_AV_SYNC; case AudioInputFlags::DIRECT: return AUDIO_INPUT_FLAG_DIRECT; case AudioInputFlags::ULTRASOUND: return AUDIO_INPUT_FLAG_ULTRASOUND; } return unexpected(BAD_VALUE); } Loading @@ -1459,6 +1461,8 @@ ConversionResult<AudioInputFlags> legacy2aidl_audio_input_flags_t_AudioInputFlag return AudioInputFlags::HW_AV_SYNC; case AUDIO_INPUT_FLAG_DIRECT: return AudioInputFlags::DIRECT; case AUDIO_INPUT_FLAG_ULTRASOUND: return AudioInputFlags::ULTRASOUND; } return unexpected(BAD_VALUE); } Loading Loading @@ -1498,6 +1502,8 @@ ConversionResult<audio_output_flags_t> aidl2legacy_AudioOutputFlags_audio_output return AUDIO_OUTPUT_FLAG_INCALL_MUSIC; case AudioOutputFlags::GAPLESS_OFFLOAD: return AUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD; case AudioOutputFlags::ULTRASOUND: return AUDIO_OUTPUT_FLAG_ULTRASOUND; } return unexpected(BAD_VALUE); } Loading Loading @@ -1539,6 +1545,8 @@ ConversionResult<AudioOutputFlags> legacy2aidl_audio_output_flags_t_AudioOutputF return AudioOutputFlags::INCALL_MUSIC; case AUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD: return AudioOutputFlags::GAPLESS_OFFLOAD; case AUDIO_OUTPUT_FLAG_ULTRASOUND: return AudioOutputFlags::ULTRASOUND; } return unexpected(BAD_VALUE); } Loading Loading @@ -1744,6 +1752,8 @@ ConversionResult<audio_source_t> aidl2legacy_AudioSource_audio_source_t( return AUDIO_SOURCE_UNPROCESSED; case AudioSource::VOICE_PERFORMANCE: return AUDIO_SOURCE_VOICE_PERFORMANCE; case AudioSource::ULTRASOUND: return AUDIO_SOURCE_ULTRASOUND; case AudioSource::ECHO_REFERENCE: return AUDIO_SOURCE_ECHO_REFERENCE; case AudioSource::FM_TUNER: Loading Loading @@ -1781,6 +1791,8 @@ ConversionResult<AudioSource> legacy2aidl_audio_source_t_AudioSource( return AudioSource::UNPROCESSED; case AUDIO_SOURCE_VOICE_PERFORMANCE: return AudioSource::VOICE_PERFORMANCE; case AUDIO_SOURCE_ULTRASOUND: return AudioSource::ULTRASOUND; case AUDIO_SOURCE_ECHO_REFERENCE: return AudioSource::ECHO_REFERENCE; case AUDIO_SOURCE_FM_TUNER: Loading Loading @@ -2141,6 +2153,8 @@ aidl2legacy_AudioContentType_audio_content_type_t(AudioContentType aidl) { return AUDIO_CONTENT_TYPE_MOVIE; case AudioContentType::SONIFICATION: return AUDIO_CONTENT_TYPE_SONIFICATION; case AudioContentType::ULTRASOUND: return AUDIO_CONTENT_TYPE_ULTRASOUND; } return unexpected(BAD_VALUE); } Loading @@ -2158,6 +2172,8 @@ legacy2aidl_audio_content_type_t_AudioContentType(audio_content_type_t legacy) { return AudioContentType::MOVIE; case AUDIO_CONTENT_TYPE_SONIFICATION: return AudioContentType::SONIFICATION; case AUDIO_CONTENT_TYPE_ULTRASOUND: return AudioContentType::ULTRASOUND; } return unexpected(BAD_VALUE); } Loading media/utils/ServiceUtilities.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,17 @@ bool captureVoiceCommunicationOutputAllowed(const AttributionSourceState& attrib return ok; } bool accessUltrasoundAllowed(const AttributionSourceState& attributionSource) { uid_t uid = VALUE_OR_FATAL(aidl2legacy_int32_t_uid_t(attributionSource.uid)); uid_t pid = VALUE_OR_FATAL(aidl2legacy_int32_t_pid_t(attributionSource.pid)); if (isAudioServerOrRootUid(uid)) return true; static const String16 sAccessUltrasound( "android.permission.ACCESS_ULTRASOUND"); bool ok = PermissionCache::checkPermission(sAccessUltrasound, pid, uid); if (!ok) ALOGE("Request requires android.permission.ACCESS_ULTRASOUND"); return ok; } bool captureHotwordAllowed(const AttributionSourceState& attributionSource) { // CAPTURE_AUDIO_HOTWORD permission implies RECORD_AUDIO permission bool ok = recordingAllowed(attributionSource); Loading media/utils/include/mediautils/ServiceUtilities.h +1 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ bool captureAudioOutputAllowed(const AttributionSourceState& attributionSource); bool captureMediaOutputAllowed(const AttributionSourceState& attributionSource); bool captureTunerAudioInputAllowed(const AttributionSourceState& attributionSource); bool captureVoiceCommunicationOutputAllowed(const AttributionSourceState& attributionSource); bool accessUltrasoundAllowed(const AttributionSourceState& attributionSource); bool captureHotwordAllowed(const AttributionSourceState& attributionSource); bool settingsAllowed(); bool modifyAudioRoutingAllowed(); Loading services/audiopolicy/common/include/policy.h +11 −8 Original line number Diff line number Diff line Loading @@ -133,6 +133,7 @@ static inline bool device_has_encoding_capability(audio_devices_t device) * - AUDIO_SOURCE_FM_TUNER * - AUDIO_SOURCE_VOICE_RECOGNITION * - AUDIO_SOURCE_HOTWORD * - AUDIO_SOURCE_ULTRASOUND * * @return the corresponding input source priority or 0 if priority is irrelevant for this source. * This happens when the specified source cannot share a given input stream (e.g remote submix) Loading @@ -142,22 +143,24 @@ static inline int32_t source_priority(audio_source_t inputSource) { switch (inputSource) { case AUDIO_SOURCE_VOICE_COMMUNICATION: return 9; return 10; case AUDIO_SOURCE_CAMCORDER: return 8; return 9; case AUDIO_SOURCE_VOICE_PERFORMANCE: return 7; return 8; case AUDIO_SOURCE_UNPROCESSED: return 6; return 7; case AUDIO_SOURCE_MIC: return 5; return 6; case AUDIO_SOURCE_ECHO_REFERENCE: return 4; return 5; case AUDIO_SOURCE_FM_TUNER: return 3; return 4; case AUDIO_SOURCE_VOICE_RECOGNITION: return 2; return 3; case AUDIO_SOURCE_HOTWORD: return 2; case AUDIO_SOURCE_ULTRASOUND: return 1; default: break; Loading services/audiopolicy/engine/common/src/EngineDefaultConfig.h +6 −2 Original line number Diff line number Diff line Loading @@ -122,8 +122,12 @@ const engineConfig::ProductStrategies gOrderedStrategies = { {"STRATEGY_TRANSMITTED_THROUGH_SPEAKER", { {"", AUDIO_STREAM_TTS, "AUDIO_STREAM_TTS", {{AUDIO_CONTENT_TYPE_UNKNOWN, AUDIO_USAGE_UNKNOWN, AUDIO_SOURCE_DEFAULT, AUDIO_FLAG_BEACON, ""}} { {AUDIO_CONTENT_TYPE_UNKNOWN, AUDIO_USAGE_UNKNOWN, AUDIO_SOURCE_DEFAULT, AUDIO_FLAG_BEACON, ""}, {AUDIO_CONTENT_TYPE_ULTRASOUND, AUDIO_USAGE_UNKNOWN, AUDIO_SOURCE_DEFAULT, AUDIO_FLAG_NONE, ""} } } }, } Loading Loading
media/libaudioclient/AidlConversion.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -1434,6 +1434,8 @@ ConversionResult<audio_input_flags_t> aidl2legacy_AudioInputFlags_audio_input_fl return AUDIO_INPUT_FLAG_HW_AV_SYNC; case AudioInputFlags::DIRECT: return AUDIO_INPUT_FLAG_DIRECT; case AudioInputFlags::ULTRASOUND: return AUDIO_INPUT_FLAG_ULTRASOUND; } return unexpected(BAD_VALUE); } Loading @@ -1459,6 +1461,8 @@ ConversionResult<AudioInputFlags> legacy2aidl_audio_input_flags_t_AudioInputFlag return AudioInputFlags::HW_AV_SYNC; case AUDIO_INPUT_FLAG_DIRECT: return AudioInputFlags::DIRECT; case AUDIO_INPUT_FLAG_ULTRASOUND: return AudioInputFlags::ULTRASOUND; } return unexpected(BAD_VALUE); } Loading Loading @@ -1498,6 +1502,8 @@ ConversionResult<audio_output_flags_t> aidl2legacy_AudioOutputFlags_audio_output return AUDIO_OUTPUT_FLAG_INCALL_MUSIC; case AudioOutputFlags::GAPLESS_OFFLOAD: return AUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD; case AudioOutputFlags::ULTRASOUND: return AUDIO_OUTPUT_FLAG_ULTRASOUND; } return unexpected(BAD_VALUE); } Loading Loading @@ -1539,6 +1545,8 @@ ConversionResult<AudioOutputFlags> legacy2aidl_audio_output_flags_t_AudioOutputF return AudioOutputFlags::INCALL_MUSIC; case AUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD: return AudioOutputFlags::GAPLESS_OFFLOAD; case AUDIO_OUTPUT_FLAG_ULTRASOUND: return AudioOutputFlags::ULTRASOUND; } return unexpected(BAD_VALUE); } Loading Loading @@ -1744,6 +1752,8 @@ ConversionResult<audio_source_t> aidl2legacy_AudioSource_audio_source_t( return AUDIO_SOURCE_UNPROCESSED; case AudioSource::VOICE_PERFORMANCE: return AUDIO_SOURCE_VOICE_PERFORMANCE; case AudioSource::ULTRASOUND: return AUDIO_SOURCE_ULTRASOUND; case AudioSource::ECHO_REFERENCE: return AUDIO_SOURCE_ECHO_REFERENCE; case AudioSource::FM_TUNER: Loading Loading @@ -1781,6 +1791,8 @@ ConversionResult<AudioSource> legacy2aidl_audio_source_t_AudioSource( return AudioSource::UNPROCESSED; case AUDIO_SOURCE_VOICE_PERFORMANCE: return AudioSource::VOICE_PERFORMANCE; case AUDIO_SOURCE_ULTRASOUND: return AudioSource::ULTRASOUND; case AUDIO_SOURCE_ECHO_REFERENCE: return AudioSource::ECHO_REFERENCE; case AUDIO_SOURCE_FM_TUNER: Loading Loading @@ -2141,6 +2153,8 @@ aidl2legacy_AudioContentType_audio_content_type_t(AudioContentType aidl) { return AUDIO_CONTENT_TYPE_MOVIE; case AudioContentType::SONIFICATION: return AUDIO_CONTENT_TYPE_SONIFICATION; case AudioContentType::ULTRASOUND: return AUDIO_CONTENT_TYPE_ULTRASOUND; } return unexpected(BAD_VALUE); } Loading @@ -2158,6 +2172,8 @@ legacy2aidl_audio_content_type_t_AudioContentType(audio_content_type_t legacy) { return AudioContentType::MOVIE; case AUDIO_CONTENT_TYPE_SONIFICATION: return AudioContentType::SONIFICATION; case AUDIO_CONTENT_TYPE_ULTRASOUND: return AudioContentType::ULTRASOUND; } return unexpected(BAD_VALUE); } Loading
media/utils/ServiceUtilities.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,17 @@ bool captureVoiceCommunicationOutputAllowed(const AttributionSourceState& attrib return ok; } bool accessUltrasoundAllowed(const AttributionSourceState& attributionSource) { uid_t uid = VALUE_OR_FATAL(aidl2legacy_int32_t_uid_t(attributionSource.uid)); uid_t pid = VALUE_OR_FATAL(aidl2legacy_int32_t_pid_t(attributionSource.pid)); if (isAudioServerOrRootUid(uid)) return true; static const String16 sAccessUltrasound( "android.permission.ACCESS_ULTRASOUND"); bool ok = PermissionCache::checkPermission(sAccessUltrasound, pid, uid); if (!ok) ALOGE("Request requires android.permission.ACCESS_ULTRASOUND"); return ok; } bool captureHotwordAllowed(const AttributionSourceState& attributionSource) { // CAPTURE_AUDIO_HOTWORD permission implies RECORD_AUDIO permission bool ok = recordingAllowed(attributionSource); Loading
media/utils/include/mediautils/ServiceUtilities.h +1 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ bool captureAudioOutputAllowed(const AttributionSourceState& attributionSource); bool captureMediaOutputAllowed(const AttributionSourceState& attributionSource); bool captureTunerAudioInputAllowed(const AttributionSourceState& attributionSource); bool captureVoiceCommunicationOutputAllowed(const AttributionSourceState& attributionSource); bool accessUltrasoundAllowed(const AttributionSourceState& attributionSource); bool captureHotwordAllowed(const AttributionSourceState& attributionSource); bool settingsAllowed(); bool modifyAudioRoutingAllowed(); Loading
services/audiopolicy/common/include/policy.h +11 −8 Original line number Diff line number Diff line Loading @@ -133,6 +133,7 @@ static inline bool device_has_encoding_capability(audio_devices_t device) * - AUDIO_SOURCE_FM_TUNER * - AUDIO_SOURCE_VOICE_RECOGNITION * - AUDIO_SOURCE_HOTWORD * - AUDIO_SOURCE_ULTRASOUND * * @return the corresponding input source priority or 0 if priority is irrelevant for this source. * This happens when the specified source cannot share a given input stream (e.g remote submix) Loading @@ -142,22 +143,24 @@ static inline int32_t source_priority(audio_source_t inputSource) { switch (inputSource) { case AUDIO_SOURCE_VOICE_COMMUNICATION: return 9; return 10; case AUDIO_SOURCE_CAMCORDER: return 8; return 9; case AUDIO_SOURCE_VOICE_PERFORMANCE: return 7; return 8; case AUDIO_SOURCE_UNPROCESSED: return 6; return 7; case AUDIO_SOURCE_MIC: return 5; return 6; case AUDIO_SOURCE_ECHO_REFERENCE: return 4; return 5; case AUDIO_SOURCE_FM_TUNER: return 3; return 4; case AUDIO_SOURCE_VOICE_RECOGNITION: return 2; return 3; case AUDIO_SOURCE_HOTWORD: return 2; case AUDIO_SOURCE_ULTRASOUND: return 1; default: break; Loading
services/audiopolicy/engine/common/src/EngineDefaultConfig.h +6 −2 Original line number Diff line number Diff line Loading @@ -122,8 +122,12 @@ const engineConfig::ProductStrategies gOrderedStrategies = { {"STRATEGY_TRANSMITTED_THROUGH_SPEAKER", { {"", AUDIO_STREAM_TTS, "AUDIO_STREAM_TTS", {{AUDIO_CONTENT_TYPE_UNKNOWN, AUDIO_USAGE_UNKNOWN, AUDIO_SOURCE_DEFAULT, AUDIO_FLAG_BEACON, ""}} { {AUDIO_CONTENT_TYPE_UNKNOWN, AUDIO_USAGE_UNKNOWN, AUDIO_SOURCE_DEFAULT, AUDIO_FLAG_BEACON, ""}, {AUDIO_CONTENT_TYPE_ULTRASOUND, AUDIO_USAGE_UNKNOWN, AUDIO_SOURCE_DEFAULT, AUDIO_FLAG_NONE, ""} } } }, } Loading