• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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