• 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 "audio_proxy_common_fun_test.h"
17 #include <climits>
18 #include <unistd.h>
19 #include <gmock/gmock.h>
20 #include <gtest/gtest.h>
21 #include "hdf_remote_service.h"
22 
23 namespace comfun {
GetDynamicLibHandle(const std::string path)24 void *GetDynamicLibHandle(const std::string path)
25 {
26     char absPath[PATH_MAX] = {0};
27     if (realpath(path.c_str(), absPath) == nullptr) {
28         return nullptr;
29     }
30     void *handleSo = dlopen(absPath, RTLD_LAZY);
31     if (handleSo == nullptr) {
32         return nullptr;
33     }
34     return handleSo;
35 }
36 
InitPort(struct AudioPort & portIndex)37 int32_t InitPort(struct AudioPort &portIndex)
38 {
39     portIndex.dir = PORT_OUT;
40     portIndex.portId = 1;
41     portIndex.portName = "usb";
42     return HDF_SUCCESS;
43 }
44 
InitHwRender(struct AudioHwRender & hwRender,const struct AudioDeviceDescriptor & desc,const struct AudioSampleAttributes & attrs)45 int32_t InitHwRender(struct AudioHwRender &hwRender, const struct AudioDeviceDescriptor &desc,
46                      const struct AudioSampleAttributes &attrs)
47 {
48     hwRender.renderParam.renderMode.hwInfo.deviceDescript = desc;
49     hwRender.renderParam.frameRenderMode.attrs = attrs;
50     hwRender.renderParam.renderMode.ctlParam.audioGain.gainMax = 15; // gainMax 15
51     hwRender.renderParam.renderMode.ctlParam.audioGain.gainMin = 0;
52     hwRender.renderParam.frameRenderMode.frames = 0;
53     hwRender.renderParam.frameRenderMode.time.tvNSec = 0;
54     hwRender.renderParam.frameRenderMode.time.tvSec = 0;
55     hwRender.renderParam.frameRenderMode.byteRate = DEFAULT_RENDER_SAMPLING_RATE;
56     hwRender.renderParam.frameRenderMode.periodSize = DEEP_BUFFER_RENDER_PERIOD_SIZE;
57     hwRender.renderParam.frameRenderMode.periodCount = DEEP_BUFFER_RENDER_PERIOD_COUNT;
58     hwRender.renderParam.frameRenderMode.attrs.period = attrs.period;
59     hwRender.renderParam.frameRenderMode.attrs.frameSize = attrs.frameSize;
60     hwRender.renderParam.frameRenderMode.attrs.startThreshold = attrs.startThreshold;
61     hwRender.renderParam.frameRenderMode.attrs.stopThreshold = attrs.stopThreshold;
62     hwRender.renderParam.frameRenderMode.attrs.silenceThreshold = attrs.silenceThreshold;
63     hwRender.renderParam.frameRenderMode.attrs.isBigEndian = attrs.isBigEndian;
64     hwRender.renderParam.frameRenderMode.attrs.isSignedData = attrs.isSignedData;
65     return HDF_SUCCESS;
66 }
67 
InitHwCapture(struct AudioHwCapture & hwCapture,const struct AudioDeviceDescriptor & desc,const struct AudioSampleAttributes & attrs)68 int32_t InitHwCapture(struct AudioHwCapture &hwCapture, const struct AudioDeviceDescriptor &desc,
69                       const struct AudioSampleAttributes &attrs)
70 {
71     hwCapture.captureParam.captureMode.hwInfo.deviceDescript = desc;
72     hwCapture.captureParam.frameCaptureMode.attrs = attrs;
73     hwCapture.captureParam.captureMode.ctlParam.audioGain.gainMax = 15; // gainMax 15
74     hwCapture.captureParam.captureMode.ctlParam.audioGain.gainMin = 0;
75     hwCapture.captureParam.frameCaptureMode.frames = 0;
76     hwCapture.captureParam.frameCaptureMode.time.tvNSec = 0;
77     hwCapture.captureParam.frameCaptureMode.time.tvSec = 0;
78     hwCapture.captureParam.frameCaptureMode.byteRate = DEFAULT_RENDER_SAMPLING_RATE;
79     hwCapture.captureParam.frameCaptureMode.periodSize = DEEP_BUFFER_RENDER_PERIOD_SIZE;
80     hwCapture.captureParam.frameCaptureMode.periodCount = DEEP_BUFFER_RENDER_PERIOD_COUNT;
81     hwCapture.captureParam.frameCaptureMode.attrs.period = attrs.period;
82     hwCapture.captureParam.frameCaptureMode.attrs.frameSize = attrs.frameSize;
83     hwCapture.captureParam.frameCaptureMode.attrs.startThreshold = attrs.startThreshold;
84     hwCapture.captureParam.frameCaptureMode.attrs.stopThreshold = attrs.stopThreshold;
85     hwCapture.captureParam.frameCaptureMode.attrs.silenceThreshold = attrs.silenceThreshold;
86     hwCapture.captureParam.frameCaptureMode.attrs.isBigEndian = attrs.isBigEndian;
87     hwCapture.captureParam.frameCaptureMode.attrs.isSignedData = attrs.isSignedData;
88     return HDF_SUCCESS;
89 }
90 
InitAttrsCommon(struct AudioSampleAttributes & attrs)91 void InitAttrsCommon(struct AudioSampleAttributes &attrs)
92 {
93     /* Initialization of audio parameters for playback */
94     attrs.sampleRate = AUDIO_SAMPLE_RATE_48K;
95 }
96 
InitAttrs(struct AudioSampleAttributes & attrs)97 int32_t InitAttrs(struct AudioSampleAttributes &attrs)
98 {
99     InitAttrsCommon(attrs);
100     attrs.format = AUDIO_FORMAT_PCM_32_BIT;
101     attrs.channelCount = AUDIO_CHANNELCOUNT;
102     attrs.interleaved = 1;
103     attrs.type = AUDIO_IN_MEDIA;
104     attrs.silenceThreshold = 0;
105     return HDF_SUCCESS;
106 }
107 
InitDevDesc(struct AudioDeviceDescriptor & devDesc)108 int32_t InitDevDesc(struct AudioDeviceDescriptor &devDesc)
109 {
110     /* Initialization of audio parameters for playback */
111     devDesc.portId = 0;
112     devDesc.pins = PIN_OUT_SPEAKER;
113     devDesc.desc = NULL;
114     return HDF_SUCCESS;
115 }
116 
InitDevDesc(struct AudioDeviceDescriptor & devDesc,const uint32_t portId,int pins)117 int32_t InitDevDesc(struct AudioDeviceDescriptor &devDesc, const uint32_t portId, int pins)
118 {
119     devDesc.portId = portId;
120     devDesc.pins = (enum AudioPortPin)pins;
121     devDesc.desc = nullptr;
122     return HDF_SUCCESS;
123 }
124 
InitAttrsCapture(struct AudioSampleAttributes & attrs)125 int32_t InitAttrsCapture(struct AudioSampleAttributes &attrs)
126 {
127     InitAttrsCommon(attrs);
128     attrs.format = AUDIO_FORMAT_PCM_16_BIT;
129     attrs.channelCount = AUDIO_CAPTURE_CHANNELCOUNT;
130     attrs.silenceThreshold = SILENCE_THRESHOLD;
131     return HDF_SUCCESS;
132 }
133 
InitDevDescCapture(struct AudioDeviceDescriptor & devDesc)134 int32_t InitDevDescCapture(struct AudioDeviceDescriptor &devDesc)
135 {
136     /* Initialization of audio parameters for playback */
137     devDesc.portId = 0;
138     devDesc.pins = PIN_IN_MIC;
139     devDesc.desc = NULL;
140     return HDF_SUCCESS;
141 }
142 
AudioRenderCallbackUtTest(enum AudioCallbackType type,void * reserved,void * cookie)143 int32_t AudioRenderCallbackUtTest(enum AudioCallbackType type, void *reserved, void *cookie)
144 {
145     (void)reserved;
146     (void)cookie;
147     switch (type) {
148         case AUDIO_NONBLOCK_WRITE_COMPELETED:
149             return HDF_SUCCESS;
150         case AUDIO_RENDER_FULL:
151             return HDF_SUCCESS;
152         case AUDIO_FLUSH_COMPLETED:
153             return HDF_SUCCESS;
154         case AUDIO_ERROR_OCCUR:
155             return HDF_FAILURE;
156         case AUDIO_DRAIN_COMPELETED:
157             return HDF_FAILURE;
158         default:
159             return HDF_FAILURE;
160     }
161     return HDF_FAILURE;
162 }
163 
SwitchAdapter(struct AudioAdapterDescriptor * descs,const std::string & adapterNameCase,int portFlag,struct AudioPort * & audioPort,int size)164 int32_t SwitchAdapter(struct AudioAdapterDescriptor *descs, const std::string &adapterNameCase,
165                       int portFlag, struct AudioPort *&audioPort, int size)
166 {
167     if (descs == nullptr || size > ADAPTER_COUNT) {
168         return HDF_FAILURE;
169     }
170 
171     for (int index = 0; index < size; index++) {
172         struct AudioAdapterDescriptor *desc = &descs[index];
173         if (desc == nullptr || desc->adapterName == nullptr) {
174             continue;
175         }
176         if (strcmp(desc->adapterName, adapterNameCase.c_str())) {
177             continue;
178         }
179         for (uint32_t port = 0; port < desc->portNum; port++) {
180             if (desc->ports[port].dir == portFlag) {
181                 audioPort = &desc->ports[port];
182                 return index;
183             }
184         }
185     }
186     return HDF_FAILURE;
187 }
188 
GetAdapters(TestAudioManager * manager,struct AudioAdapterDescriptor ** descs,int & size)189 int32_t GetAdapters(TestAudioManager *manager, struct AudioAdapterDescriptor **descs, int &size)
190 {
191     int32_t ret = -1;
192     if (descs == nullptr) {
193         return AUDIO_HAL_ERR_INVALID_PARAM;
194     }
195     ret = manager->GetAllAdapters(manager, descs, &size);
196     if (ret < 0) {
197         return ret;
198     }
199     if (*descs == nullptr) {
200         return AUDIO_HAL_ERR_INTERNAL;
201     }
202     return AUDIO_HAL_SUCCESS;
203 }
204 
GetLoadAdapter(TestAudioManager * manager,int portType,const std::string & adapterName,struct AudioAdapter ** adapter,struct AudioPort * & audioPort)205 int32_t GetLoadAdapter(TestAudioManager *manager, int portType,
206                        const std::string &adapterName, struct AudioAdapter **adapter, struct AudioPort *&audioPort)
207 {
208     int32_t ret = -1;
209     int size = 0;
210     struct AudioAdapterDescriptor *desc = nullptr;
211     struct AudioAdapterDescriptor *descs = nullptr;
212     if (adapter == nullptr) {
213         return AUDIO_HAL_ERR_INVALID_PARAM;
214     }
215     ret = GetAdapters(manager, &descs, size);
216     if (ret < 0) {
217         return ret;
218     }
219     if (descs == nullptr) {
220         return AUDIO_HAL_ERR_INTERNAL;
221     }
222 
223     int index = SwitchAdapter(descs, adapterName, portType, audioPort, size);
224     if (index < 0) {
225         return AUDIO_HAL_ERR_INTERNAL;
226     }
227     desc = &descs[index];
228     if (desc == nullptr) {
229         return AUDIO_HAL_ERR_INVALID_PARAM;
230     }
231     ret = manager->LoadAdapter(manager, desc, adapter);
232     if (ret < 0) {
233         return ret;
234     }
235     if (*adapter == nullptr) {
236         return AUDIO_HAL_ERR_INTERNAL;
237     }
238     return AUDIO_HAL_SUCCESS;
239 }
240 }
241