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