• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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