1 /*
2 * Copyright (c) 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 <cstring>
17 #include <string>
18 #include "audio_capturer_file_source.h"
19 #include "audio_capturer_source.h"
20 #include "audio_errors.h"
21 #include "audio_log.h"
22 #include "remote_audio_capturer_source.h"
23 #include "i_audio_capturer_source.h"
24
25 using namespace std;
26
27 namespace OHOS {
28 namespace AudioStandard {
GetInstance(const char * devceClass,const char * deviceNetworkId)29 IAudioCapturerSource *IAudioCapturerSource::GetInstance(const char *devceClass, const char *deviceNetworkId)
30 {
31 AUDIO_DEBUG_LOG("%{public}s Source:GetInstance[%{public}s]", devceClass, deviceNetworkId);
32 const char *g_deviceClassPrimary = "primary";
33 const char *g_deviceClassA2Dp = "a2dp";
34 const char *g_deviceClassFile = "file_io";
35 const char *g_deviceClassRemote = "remote";
36
37 if (!strcmp(devceClass, g_deviceClassPrimary)) {
38 return AudioCapturerSource::GetInstance();
39 }
40 if (!strcmp(devceClass, g_deviceClassA2Dp)) {
41 static AudioCapturerFileSource audioCapturer;
42 return &audioCapturer;
43 }
44 if (!strcmp(devceClass, g_deviceClassFile)) {
45 static AudioCapturerFileSource audioCapturer;
46 return &audioCapturer;
47 }
48 if (!strcmp(devceClass, g_deviceClassRemote)) {
49 std::string networkId = deviceNetworkId;
50 RemoteAudioCapturerSource *rSource = RemoteAudioCapturerSource::GetInstance(networkId);
51 return rSource;
52 }
53 return nullptr;
54 }
55 } // namespace AudioStandard
56 } // namesapce OHOS
57
58 #ifdef __cplusplus
59 extern "C" {
60 #endif
61
62 using namespace OHOS::AudioStandard;
63
FillinSourceWapper(const char * deviceClass,const char * deviceNetworkId,void ** wapper)64 int32_t FillinSourceWapper(const char *deviceClass, const char *deviceNetworkId, void **wapper)
65 {
66 IAudioCapturerSource *iSource = IAudioCapturerSource::GetInstance(deviceClass, deviceNetworkId);
67
68 if (iSource != nullptr) {
69 *wapper = static_cast<void *>(iSource);
70 return SUCCESS;
71 }
72 return ERROR;
73 }
74
75 IAudioCapturerSource *iAudioCapturerSource = nullptr;
76
IAudioCapturerSourceInit(void * wapper,IAudioSourceAttr * attr)77 int32_t IAudioCapturerSourceInit(void *wapper, IAudioSourceAttr *attr)
78 {
79 int32_t ret;
80
81 IAudioCapturerSource *iAudioCapturerSource = static_cast<IAudioCapturerSource *>(wapper);
82 CHECK_AND_RETURN_RET_LOG(iAudioCapturerSource != nullptr, ERR_INVALID_HANDLE, "null audioCapturerSource");
83 if (iAudioCapturerSource->IsInited())
84 return SUCCESS;
85
86 ret = iAudioCapturerSource->Init(*attr);
87
88 return ret;
89 }
90
IAudioCapturerSourceDeInit(void * wapper)91 void IAudioCapturerSourceDeInit(void *wapper)
92 {
93 IAudioCapturerSource *iAudioCapturerSource = static_cast<IAudioCapturerSource *>(wapper);
94 CHECK_AND_RETURN_LOG(iAudioCapturerSource != nullptr, "null audioCapturerSource");
95 if (iAudioCapturerSource->IsInited())
96 iAudioCapturerSource->DeInit();
97 }
98
IAudioCapturerSourceStop(void * wapper)99 int32_t IAudioCapturerSourceStop(void *wapper)
100 {
101 int32_t ret;
102
103 IAudioCapturerSource *iAudioCapturerSource = static_cast<IAudioCapturerSource *>(wapper);
104 CHECK_AND_RETURN_RET_LOG(iAudioCapturerSource != nullptr, ERR_INVALID_HANDLE, "null audioCapturerSource");
105 if (!iAudioCapturerSource->IsInited())
106 return SUCCESS;
107
108 ret = iAudioCapturerSource->Stop();
109
110 return ret;
111 }
112
IAudioCapturerSourceStart(void * wapper)113 int32_t IAudioCapturerSourceStart(void *wapper)
114 {
115 int32_t ret;
116
117 IAudioCapturerSource *iAudioCapturerSource = static_cast<IAudioCapturerSource *>(wapper);
118 CHECK_AND_RETURN_RET_LOG(iAudioCapturerSource != nullptr, ERR_INVALID_HANDLE, "null audioCapturerSource");
119 if (!iAudioCapturerSource->IsInited()) {
120 AUDIO_ERR_LOG("audioCapturer Not Inited! Init the capturer first\n");
121 return ERR_DEVICE_INIT;
122 }
123
124 ret = iAudioCapturerSource->Start();
125
126 return ret;
127 }
128
IAudioCapturerSourceFrame(void * wapper,char * frame,uint64_t requestBytes,uint64_t * replyBytes)129 int32_t IAudioCapturerSourceFrame(void *wapper, char *frame, uint64_t requestBytes, uint64_t *replyBytes)
130 {
131 int32_t ret;
132 IAudioCapturerSource *iAudioCapturerSource = static_cast<IAudioCapturerSource *>(wapper);
133 CHECK_AND_RETURN_RET_LOG(iAudioCapturerSource != nullptr, ERR_INVALID_HANDLE, "null audioCapturerSource");
134 if (!iAudioCapturerSource->IsInited()) {
135 AUDIO_ERR_LOG("audioCapturer Not Inited! Init the capturer first\n");
136 return ERR_DEVICE_INIT;
137 }
138
139 ret = iAudioCapturerSource->CaptureFrame(frame, requestBytes, *replyBytes);
140
141 return ret;
142 }
143
IAudioCapturerSourceSetVolume(void * wapper,float left,float right)144 int32_t IAudioCapturerSourceSetVolume(void *wapper, float left, float right)
145 {
146 int32_t ret;
147
148 IAudioCapturerSource *iAudioCapturerSource = static_cast<IAudioCapturerSource *>(wapper);
149 CHECK_AND_RETURN_RET_LOG(iAudioCapturerSource != nullptr, ERR_INVALID_HANDLE, "null audioCapturerSource");
150 if (!iAudioCapturerSource->IsInited()) {
151 AUDIO_ERR_LOG("audioCapturer Not Inited! Init the capturer first\n");
152 return ERR_DEVICE_INIT;
153 }
154
155 ret = iAudioCapturerSource->SetVolume(left, right);
156
157 return ret;
158 }
159
IAudioCapturerSourceGetVolume(void * wapper,float * left,float * right)160 int32_t IAudioCapturerSourceGetVolume(void *wapper, float *left, float *right)
161 {
162 int32_t ret;
163
164 IAudioCapturerSource *iAudioCapturerSource = static_cast<IAudioCapturerSource *>(wapper);
165 CHECK_AND_RETURN_RET_LOG(iAudioCapturerSource != nullptr, ERR_INVALID_HANDLE, "null audioCapturerSource");
166 if (!iAudioCapturerSource->IsInited()) {
167 AUDIO_ERR_LOG("audioCapturer Not Inited! Init the capturer first\n");
168 return ERR_DEVICE_INIT;
169 }
170 ret = iAudioCapturerSource->GetVolume(*left, *right);
171
172 return ret;
173 }
174
IAudioCapturerSourceIsMuteRequired(void * wapper)175 bool IAudioCapturerSourceIsMuteRequired(void *wapper)
176 {
177 bool muteStat = false;
178 IAudioCapturerSource *iAudioCapturerSource = static_cast<IAudioCapturerSource *>(wapper);
179 CHECK_AND_RETURN_RET_LOG(iAudioCapturerSource != nullptr, muteStat, "null audioCapturerSource");
180 if (!iAudioCapturerSource->IsInited()) {
181 AUDIO_ERR_LOG("audioCapturer Not Inited! Init the capturer first\n");
182 return muteStat;
183 }
184 iAudioCapturerSource->GetMute(muteStat);
185 return muteStat;
186 }
187
IAudioCapturerSourceSetMute(void * wapper,bool isMute)188 int32_t IAudioCapturerSourceSetMute(void *wapper, bool isMute)
189 {
190 int32_t ret;
191 IAudioCapturerSource *iAudioCapturerSource = static_cast<IAudioCapturerSource *>(wapper);
192 CHECK_AND_RETURN_RET_LOG(iAudioCapturerSource != nullptr, ERR_INVALID_HANDLE, "null audioCapturerSource");
193 if (!iAudioCapturerSource->IsInited()) {
194 AUDIO_ERR_LOG("audioCapturer Not Inited! Init the capturer first\n");
195 return ERR_DEVICE_INIT;
196 }
197
198 ret = iAudioCapturerSource->SetMute(isMute);
199
200 return ret;
201 }
202 #ifdef __cplusplus
203 }
204 #endif
205