1 /*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #ifndef LOG_TAG
17 #define LOG_TAG "AudioManagerUtil"
18 #endif
19
20 #include "audio_manager_util.h"
21
22 #include "audio_common_log.h"
23 #include "audio_effect.h"
24 #include "audio_policy_manager.h"
25 #include "audio_effect_map.h"
26
27 namespace OHOS {
28 namespace AudioStandard {
29 const std::unordered_map<StreamUsage, std::string> STREAM_USAGE_MAP = {
30 {STREAM_USAGE_UNKNOWN, "STREAM_USAGE_UNKNOWN"},
31 // STREAM_USAGE_MUSIC(1), STREAM_USAGE_MEDIA(1), both mapped to STREAM_USAGE_MUSIC
32 {STREAM_USAGE_MUSIC, "STREAM_USAGE_MUSIC"},
33 {STREAM_USAGE_VOICE_COMMUNICATION, "STREAM_USAGE_VOICE_COMMUNICATION"},
34 {STREAM_USAGE_VOICE_ASSISTANT, "STREAM_USAGE_VOICE_ASSISTANT"},
35 {STREAM_USAGE_ALARM, "STREAM_USAGE_ALARM"},
36 {STREAM_USAGE_VOICE_MESSAGE, "STREAM_USAGE_VOICE_MESSAGE"},
37 // STREAM_USAGE_RINGTONE(6), STREAM_USAGE_NOTIFICATION_RINGRONE(6) both mapped to STREAM_USAGE_RINGTONE
38 {STREAM_USAGE_RINGTONE, "STREAM_USAGE_RINGTONE"},
39 {STREAM_USAGE_NOTIFICATION, "STREAM_USAGE_NOTIFICATION"},
40 {STREAM_USAGE_ACCESSIBILITY, "STREAM_USAGE_ACCESSIBILITY"},
41 {STREAM_USAGE_SYSTEM, "STREAM_USAGE_SYSTEM"},
42 {STREAM_USAGE_MOVIE, "STREAM_USAGE_MOVIE"},
43 {STREAM_USAGE_GAME, "STREAM_USAGE_GAME"},
44 {STREAM_USAGE_AUDIOBOOK, "STREAM_USAGE_AUDIOBOOK"},
45 {STREAM_USAGE_NAVIGATION, "STREAM_USAGE_NAVIGATION"},
46 {STREAM_USAGE_DTMF, "STREAM_USAGE_DTMF"},
47 {STREAM_USAGE_ENFORCED_TONE, "STREAM_USAGE_ENFORCED_TONE"},
48 {STREAM_USAGE_ULTRASONIC, "STREAM_USAGE_ULTRASONIC"},
49 {STREAM_USAGE_VIDEO_COMMUNICATION, "STREAM_USAGE_VIDEO_COMMUNICATION"},
50 {STREAM_USAGE_VOICE_CALL_ASSISTANT, "STREAM_USAGE_VOICE_CALL_ASSISTANT"},
51 {STREAM_USAGE_RANGING, "STREAM_USAGE_RANGING"},
52 {STREAM_USAGE_VOICE_MODEM_COMMUNICATION, "STREAM_USAGE_VOICE_MODEM_COMMUNICATION"},
53 {STREAM_USAGE_VOICE_RINGTONE, "STREAM_USAGE_VOICE_RINGTONE"},
54 };
GetEffectSceneName(const StreamUsage & streamUsage)55 const std::string AudioManagerUtil::GetEffectSceneName(const StreamUsage &streamUsage)
56 {
57 SupportedEffectConfig supportedEffectConfig;
58 AudioPolicyManager::GetInstance().QueryEffectSceneMode(supportedEffectConfig);
59 std::string streamUsageString = "";
60 const std::unordered_map<AudioEffectScene, std::string> &audioSupportedSceneTypes = GetSupportedSceneType();
61 if (STREAM_USAGE_MAP.find(streamUsage) != STREAM_USAGE_MAP.end()) {
62 streamUsageString = STREAM_USAGE_MAP.find(streamUsage)->second;
63 }
64 if (supportedEffectConfig.postProcessNew.stream.empty()) {
65 AUDIO_WARNING_LOG("empty scene type set!");
66 return audioSupportedSceneTypes.find(SCENE_OTHERS)->second;
67 }
68 if (streamUsageString == "") {
69 AUDIO_WARNING_LOG("Find streamUsage string failed, not in the parser's string-enum map.");
70 return audioSupportedSceneTypes.find(SCENE_OTHERS)->second;
71 }
72 for (const SceneMappingItem &item: supportedEffectConfig.postProcessSceneMap) {
73 if (item.name == streamUsageString) {
74 return item.sceneType;
75 }
76 }
77 return audioSupportedSceneTypes.find(SCENE_OTHERS)->second;
78 }
79 } // namespace AudioStandard
80 } // namespace OHOS