• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-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 #ifndef AUDIO_PARAMETERS_NAPI_H_
17 #define AUDIO_PARAMETERS_NAPI_H_
18 
19 #include <iostream>
20 #include <map>
21 
22 #include "audio_info.h"
23 #include "napi/native_api.h"
24 #include "napi/native_node_api.h"
25 
26 namespace OHOS {
27 namespace AudioStandard {
28 static const std::string AUDIO_PARAMETERS_NAPI_CLASS_NAME = "AudioParameters";
29 
30 static const std::int32_t REFERENCE_CREATION_COUNT = 1;
31 
32 static const std::map<std::string, AudioChannel> audioChannelMap = {
33     {"CHANNEL_1", MONO},
34     {"CHANNEL_2", STEREO}
35 };
36 
37 static const std::map<std::string, AudioSamplingRate> samplingRateMap = {
38     {"SAMPLE_RATE_8000", SAMPLE_RATE_8000},
39     {"SAMPLE_RATE_11025", SAMPLE_RATE_11025},
40     {"SAMPLE_RATE_12000", SAMPLE_RATE_12000},
41     {"SAMPLE_RATE_16000", SAMPLE_RATE_16000},
42     {"SAMPLE_RATE_22050", SAMPLE_RATE_22050},
43     {"SAMPLE_RATE_24000", SAMPLE_RATE_24000},
44     {"SAMPLE_RATE_32000", SAMPLE_RATE_32000},
45     {"SAMPLE_RATE_44100", SAMPLE_RATE_44100},
46     {"SAMPLE_RATE_48000", SAMPLE_RATE_48000},
47     {"SAMPLE_RATE_64000", SAMPLE_RATE_64000},
48     {"SAMPLE_RATE_96000", SAMPLE_RATE_96000}
49 };
50 
51 static const std::map<std::string, AudioEncodingType> encodingTypeMap = {
52     {"ENCODING_TYPE_INVALID", ENCODING_INVALID},
53     {"ENCODING_TYPE_RAW", ENCODING_PCM}
54 };
55 
56 static const std::map<std::string, ContentType> contentTypeMap = {
57     {"CONTENT_TYPE_UNKNOWN", CONTENT_TYPE_UNKNOWN},
58     {"CONTENT_TYPE_SPEECH", CONTENT_TYPE_SPEECH},
59     {"CONTENT_TYPE_MUSIC", CONTENT_TYPE_MUSIC},
60     {"CONTENT_TYPE_MOVIE", CONTENT_TYPE_MOVIE},
61     {"CONTENT_TYPE_SONIFICATION", CONTENT_TYPE_SONIFICATION},
62     {"CONTENT_TYPE_RINGTONE", CONTENT_TYPE_RINGTONE}
63 };
64 
65 static const std::map<std::string, StreamUsage> streamUsageMap = {
66     {"STREAM_USAGE_UNKNOWN", STREAM_USAGE_UNKNOWN},
67     {"STREAM_USAGE_MEDIA", STREAM_USAGE_MEDIA},
68     {"STREAM_USAGE_VOICE_COMMUNICATION", STREAM_USAGE_VOICE_COMMUNICATION},
69     {"STREAM_USAGE_NOTIFICATION_RINGTONE", STREAM_USAGE_NOTIFICATION_RINGTONE}
70 };
71 
72 static const std::map<std::string, DeviceRole> deviceRoleMap = {
73     {"DEVICE_ROLE_NONE", DEVICE_ROLE_NONE},
74     {"INPUT_DEVICE", INPUT_DEVICE},
75     {"OUTPUT_DEVICE", OUTPUT_DEVICE},
76     {"DEVICE_ROLE_MAX", DEVICE_ROLE_MAX}
77 };
78 
79 static const std::map<std::string, DeviceType> deviceTypeMap = {
80     {"NONE", DEVICE_TYPE_NONE},
81     {"INVALID", DEVICE_TYPE_INVALID},
82     {"SPEAKER", DEVICE_TYPE_SPEAKER},
83     {"WIRED_HEADSET", DEVICE_TYPE_WIRED_HEADSET},
84     {"WIRED_HEADPHONES", DEVICE_TYPE_WIRED_HEADPHONES},
85     {"BLUETOOTH_SCO", DEVICE_TYPE_BLUETOOTH_SCO},
86     {"BLUETOOTH_A2DP", DEVICE_TYPE_BLUETOOTH_A2DP},
87     {"MIC", DEVICE_TYPE_MIC},
88     {"MAX", DEVICE_TYPE_MAX},
89 };
90 
91 static const std::map<std::string, SourceType> sourceTypeMap = {
92     {"SOURCE_TYPE_INVALID", SOURCE_TYPE_INVALID},
93     {"SOURCE_TYPE_MIC", SOURCE_TYPE_MIC},
94     {"SOURCE_TYPE_VOICE_COMMUNICATION", SOURCE_TYPE_VOICE_COMMUNICATION}
95 };
96 
97 class AudioParametersNapi {
98 public:
99     AudioParametersNapi();
100     ~AudioParametersNapi();
101 
102     static napi_value Init(napi_env env, napi_value exports);
103     static napi_value CreateAudioParametersWrapper(napi_env env, std::unique_ptr<AudioParameters> &audioParameters);
104 
105 private:
106     static void Destructor(napi_env env, void *nativeObject, void *finalize_hint);
107     static napi_value Construct(napi_env env, napi_callback_info info);
108     static napi_value GetAudioSampleFormat(napi_env env, napi_callback_info info);
109     static napi_value SetAudioSampleFormat(napi_env env, napi_callback_info info);
110     static napi_value GetAudioChannel(napi_env env, napi_callback_info info);
111     static napi_value SetAudioChannel(napi_env env, napi_callback_info info);
112     static napi_value GetAudioSamplingRate(napi_env env, napi_callback_info info);
113     static napi_value SetAudioSamplingRate(napi_env env, napi_callback_info info);
114     static napi_value GetAudioEncodingType(napi_env env, napi_callback_info info);
115     static napi_value SetAudioEncodingType(napi_env env, napi_callback_info info);
116     static napi_value GetContentType(napi_env env, napi_callback_info info);
117     static napi_value SetContentType(napi_env env, napi_callback_info info);
118     static napi_value GetStreamUsage(napi_env env, napi_callback_info info);
119     static napi_value SetStreamUsage(napi_env env, napi_callback_info info);
120     static napi_value GetDeviceRole(napi_env env, napi_callback_info info);
121     static napi_value SetDeviceRole(napi_env env, napi_callback_info info);
122     static napi_value GetDeviceType(napi_env env, napi_callback_info info);
123     static napi_value SetDeviceType(napi_env env, napi_callback_info info);
124 
125     static napi_status AddNamedProperty(napi_env env, napi_value object, const std::string name, int32_t enumValue);
126     static napi_value CreateAudioSampleFormatObject(napi_env env);
127     static napi_value CreateAudioChannelObject(napi_env env);
128     static napi_value CreateSamplingRateObject(napi_env env);
129     static napi_value CreateEncodingTypeObject(napi_env env);
130     static napi_value CreateContentTypeObject(napi_env env);
131     static napi_value CreateStreamUsageObject(napi_env env);
132     static napi_value CreateDeviceRoleObject(napi_env env);
133     static napi_value CreateDeviceTypeObject(napi_env env);
134     static napi_value CreateSourceTypeObject(napi_env env);
135 
136     static napi_ref sConstructor_;
137     static napi_ref audioChannel_;
138     static napi_ref samplingRate_;
139     static napi_ref encodingType_;
140     static napi_ref contentType_;
141     static napi_ref streamUsage_;
142     static napi_ref deviceRole_;
143     static napi_ref deviceType_;
144     static napi_ref sourceType_;
145 
146     static std::unique_ptr<AudioParameters> sAudioParameters_;
147 
148     std::unique_ptr<AudioParameters> audioParameters_;
149     napi_env env_;
150     napi_ref wrapper_;
151 };
152 } // namespace AudioStandard
153 } // namespace OHOS
154 #endif /* AUDIO_PARAMETERS_NAPI_H_ */