1 /* 2 * Copyright (c) 2023 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 AUDIO_USAGE_STRATEGY_PARSER_H 17 #define AUDIO_USAGE_STRATEGY_PARSER_H 18 19 #include <list> 20 #include <unordered_map> 21 #include <string> 22 #include <sstream> 23 #include <libxml/parser.h> 24 #include <libxml/tree.h> 25 26 #include "audio_policy_log.h" 27 #include "audio_info.h" 28 #include "iport_observer.h" 29 #include "parser.h" 30 31 namespace OHOS { 32 namespace AudioStandard { 33 using namespace std; 34 35 class AudioUsageStrategyParser : public Parser { 36 public: 37 static constexpr char DEVICE_CONFIG_FILE[] = "system/etc/audio/audio_usage_strategy.xml"; 38 39 bool LoadConfiguration() final; 40 bool Parse() final; 41 void Destroy() final; 42 AudioUsageStrategyParser()43 AudioUsageStrategyParser() 44 { 45 AUDIO_DEBUG_LOG("AudioUsageStrategyParser ctor"); 46 } 47 ~AudioUsageStrategyParser()48 virtual ~AudioUsageStrategyParser() 49 { 50 AUDIO_DEBUG_LOG("AudioUsageStrategyParser dtor"); 51 Destroy(); 52 } 53 54 std::unordered_map<StreamUsage, std::string> renderConfigMap_; 55 std::unordered_map<SourceType, std::string> capturerConfigMap_; 56 57 private: 58 bool ParseInternal(xmlNode *node); 59 void ParserStreamUsageList(xmlNode *node); 60 void ParserSourceTypeList(xmlNode *node); 61 void ParserStreamUsageInfo(const std::string &strategyName, const std::string &streamUsage); 62 void ParserStreamUsage(const std::vector<std::string> &buf, const std::string &routerName); 63 void ParserSourceTypeInfo(const std::string &sourceType, const std::string &nameSourceType); 64 void ParserSourceTypes(const std::vector<std::string> &buf, const std::string &sourceTypes); 65 66 std::vector<std::string> split(const std::string &line, const std::string &sep); 67 68 const unordered_map<string, StreamUsage> streamUsageMap = { 69 {"STREAM_USAGE_UNKNOWN", STREAM_USAGE_UNKNOWN}, 70 {"STREAM_USAGE_MEDIA", STREAM_USAGE_MEDIA}, 71 {"STREAM_USAGE_MUSIC", STREAM_USAGE_MUSIC}, 72 {"STREAM_USAGE_VOICE_COMMUNICATION", STREAM_USAGE_VOICE_COMMUNICATION}, 73 {"STREAM_USAGE_VOICE_ASSISTANT", STREAM_USAGE_VOICE_ASSISTANT}, 74 {"STREAM_USAGE_VOICE_CALL_ASSISTANT", STREAM_USAGE_VOICE_CALL_ASSISTANT}, 75 {"STREAM_USAGE_ALARM", STREAM_USAGE_ALARM}, 76 {"STREAM_USAGE_VOICE_MESSAGE", STREAM_USAGE_VOICE_MESSAGE}, 77 {"STREAM_USAGE_NOTIFICATION_RINGTONE", STREAM_USAGE_NOTIFICATION_RINGTONE}, 78 {"STREAM_USAGE_RINGTONE", STREAM_USAGE_RINGTONE}, 79 {"STREAM_USAGE_NOTIFICATION", STREAM_USAGE_NOTIFICATION}, 80 {"STREAM_USAGE_ACCESSIBILITY", STREAM_USAGE_ACCESSIBILITY}, 81 {"STREAM_USAGE_SYSTEM", STREAM_USAGE_SYSTEM}, 82 {"STREAM_USAGE_MOVIE", STREAM_USAGE_MOVIE}, 83 {"STREAM_USAGE_GAME", STREAM_USAGE_GAME}, 84 {"STREAM_USAGE_AUDIOBOOK", STREAM_USAGE_AUDIOBOOK}, 85 {"STREAM_USAGE_NAVIGATION", STREAM_USAGE_NAVIGATION}, 86 {"STREAM_USAGE_DTMF", STREAM_USAGE_DTMF}, 87 {"STREAM_USAGE_ENFORCED_TONE", STREAM_USAGE_ENFORCED_TONE}, 88 {"STREAM_USAGE_ULTRASONIC", STREAM_USAGE_ULTRASONIC}, 89 {"STREAM_USAGE_VIDEO_COMMUNICATION", STREAM_USAGE_VIDEO_COMMUNICATION}, 90 {"STREAM_USAGE_RANGING", STREAM_USAGE_RANGING}, 91 {"STREAM_USAGE_VOICE_MODEM_COMMUNICATION", STREAM_USAGE_VOICE_MODEM_COMMUNICATION}, 92 {"STREAM_USAGE_VOICE_RINGTONE", STREAM_USAGE_VOICE_RINGTONE}, 93 }; 94 95 const unordered_map<string, SourceType> sourceTypeMap = { 96 {"SOURCE_TYPE_MIC", SOURCE_TYPE_MIC}, 97 {"SOURCE_TYPE_CAMCORDER", SOURCE_TYPE_CAMCORDER}, 98 {"SOURCE_TYPE_VOICE_RECOGNITION", SOURCE_TYPE_VOICE_RECOGNITION}, 99 {"SOURCE_TYPE_PLAYBACK_CAPTURE", SOURCE_TYPE_PLAYBACK_CAPTURE}, 100 {"SOURCE_TYPE_WAKEUP", SOURCE_TYPE_WAKEUP}, 101 {"SOURCE_TYPE_VOICE_COMMUNICATION", SOURCE_TYPE_VOICE_COMMUNICATION}, 102 {"SOURCE_TYPE_VOICE_CALL", SOURCE_TYPE_VOICE_CALL}, 103 {"SOURCE_TYPE_ULTRASONIC", SOURCE_TYPE_ULTRASONIC}, 104 {"SOURCE_TYPE_VIRTUAL_CAPTURE", SOURCE_TYPE_VIRTUAL_CAPTURE}, 105 {"SOURCE_TYPE_VOICE_MESSAGE", SOURCE_TYPE_VOICE_MESSAGE}, 106 {"SOURCE_TYPE_VOICE_TRANSCRIPTION", SOURCE_TYPE_VOICE_TRANSCRIPTION}, 107 {"SOURCE_TYPE_UNPROCESSED", SOURCE_TYPE_UNPROCESSED}, 108 }; 109 110 xmlDoc *doc_; 111 }; 112 } // namespace AudioStandard 113 } // namespace OHOS 114 #endif // AUDIO_USAGE_STRATEGY_PARSER_H 115