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