1 /*
2  * Copyright (c) 2022-2022 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 #include "audio_type_translate.h"
17 
18 #include <map>
19 #include <utility>
20 
21 #include "audio_errors.h"
22 #include "errors.h"
23 
24 namespace {
25 using namespace OHOS;
26 const std::pair<AudioStandard::AudioSamplingRate, uint32_t> g_auSampleRateMap[] = {
27     {AudioStandard::SAMPLE_RATE_8000, 8000},
28     {AudioStandard::SAMPLE_RATE_11025, 11025},
29     {AudioStandard::SAMPLE_RATE_12000, 12000},
30     {AudioStandard::SAMPLE_RATE_16000, 16000},
31     {AudioStandard::SAMPLE_RATE_22050, 22050},
32     {AudioStandard::SAMPLE_RATE_24000, 24000},
33     {AudioStandard::SAMPLE_RATE_32000, 32000},
34     {AudioStandard::SAMPLE_RATE_44100, 44100},
35     {AudioStandard::SAMPLE_RATE_48000, 48000},
36     {AudioStandard::SAMPLE_RATE_64000, 64000},
37     {AudioStandard::SAMPLE_RATE_96000, 96000},
38 };
39 const std::pair<AudioStandard::AudioSampleFormat, Media::Plugin::AudioSampleFormat> g_aduFmtMap[] = {
40     {AudioStandard::SAMPLE_U8, Media::Plugin::AudioSampleFormat::U8},
41     {AudioStandard::SAMPLE_S16LE, Media::Plugin::AudioSampleFormat::S16},
42     {AudioStandard::SAMPLE_S24LE, Media::Plugin::AudioSampleFormat::S24},
43     {AudioStandard::SAMPLE_S32LE, Media::Plugin::AudioSampleFormat::S32}
44 };
45 const std::pair<AudioStandard::AudioChannel, uint32_t> g_auChannelsMap[] = {
46     {AudioStandard::MONO, 1},
47     {AudioStandard::STEREO, 2},
48 };
49 }
50 
51 namespace OHOS {
52 namespace Media {
53 namespace Plugin {
54 namespace AuCapturePlugin {
SampleRateEnum2Num(OHOS::AudioStandard::AudioSamplingRate enumVal,uint32_t & numVal)55 bool SampleRateEnum2Num (OHOS::AudioStandard::AudioSamplingRate enumVal, uint32_t& numVal)
56 {
57     for (const auto& item : g_auSampleRateMap) {
58         if (item.first == enumVal) {
59             numVal = item.second;
60             return true;
61         }
62     }
63     numVal = 0;
64     return false;
65 }
SampleRateNum2Enum(uint32_t numVal,OHOS::AudioStandard::AudioSamplingRate & enumVal)66 bool SampleRateNum2Enum (uint32_t numVal, OHOS::AudioStandard::AudioSamplingRate& enumVal)
67 {
68     for (const auto& item : g_auSampleRateMap) {
69         if (item.second == numVal) {
70             enumVal = item.first;
71             return true;
72         }
73     }
74     return false;
75 }
76 
SampleFmt2PluginFmt(OHOS::AudioStandard::AudioSampleFormat aFmt,AudioSampleFormat & pFmt)77 bool SampleFmt2PluginFmt(OHOS::AudioStandard::AudioSampleFormat aFmt, AudioSampleFormat& pFmt)
78 {
79     for (const auto& item : g_aduFmtMap) {
80         if (item.first == aFmt) {
81             pFmt = item.second;
82             return true;
83         }
84     }
85     return false;
86 }
PluginFmt2SampleFmt(AudioSampleFormat pFmt,OHOS::AudioStandard::AudioSampleFormat & aFmt)87 bool PluginFmt2SampleFmt(AudioSampleFormat pFmt, OHOS::AudioStandard::AudioSampleFormat& aFmt)
88 {
89     for (const auto& item : g_aduFmtMap) {
90         if (item.second == pFmt) {
91             aFmt = item.first;
92             return true;
93         }
94     }
95     return false;
96 }
97 
ChannelNumEnum2Num(OHOS::AudioStandard::AudioChannel enumVal,uint32_t & numVal)98 bool ChannelNumEnum2Num(OHOS::AudioStandard::AudioChannel enumVal, uint32_t& numVal)
99 {
100     for (const auto& item : g_auChannelsMap) {
101         if (item.first == enumVal) {
102             numVal = item.second;
103             return true;
104         }
105     }
106     return false;
107 }
ChannelNumNum2Enum(uint32_t numVal,OHOS::AudioStandard::AudioChannel & enumVal)108 bool ChannelNumNum2Enum(uint32_t numVal, OHOS::AudioStandard::AudioChannel& enumVal)
109 {
110     for (const auto& item : g_auChannelsMap) {
111         if (item.second == numVal) {
112             enumVal = item.first;
113             return true;
114         }
115     }
116     return false;
117 }
Error2Status(int32_t err)118 Status Error2Status(int32_t err)
119 {
120     const static std::map<int32_t, Status> transMap = {
121         {OHOS::AudioStandard::SUCCESS, Status::OK},
122         {OHOS::ERR_OK, Status::OK},
123         {OHOS::ERR_INVALID_OPERATION, Status::ERROR_WRONG_STATE},
124         {OHOS::ERR_NO_MEMORY, Status::ERROR_NO_MEMORY},
125         {OHOS::ERR_INVALID_VALUE, Status::ERROR_INVALID_PARAMETER},
126         {OHOS::ERR_NAME_NOT_FOUND, Status::ERROR_NOT_EXISTED},
127         {OHOS::ERR_PERMISSION_DENIED, Status::ERROR_PERMISSION_DENIED},
128         {OHOS::ERR_ENOUGH_DATA, Status::ERROR_NOT_ENOUGH_DATA},
129         {OHOS::ERR_WOULD_BLOCK, Status::ERROR_AGAIN},
130         {OHOS::ERR_TIMED_OUT, Status::ERROR_TIMED_OUT},
131         {OHOS::ERR_ALREADY_EXISTS, Status::ERROR_UNKNOWN},
132         {OHOS::ERR_DEAD_OBJECT, Status::ERROR_UNKNOWN},
133         {OHOS::ERR_NO_INIT, Status::ERROR_UNKNOWN},
134         {OHOS::ERR_OVERFLOW, Status::ERROR_UNKNOWN},
135     };
136     if (transMap.count(err) != 0) {
137         return transMap.at(err);
138     }
139     return Status::ERROR_UNKNOWN;
140 }
141 } // namespace AuCapturePlugin
142 } // namespace Plugin
143 } // namespace Media
144 } // namespace OHOS