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 #ifndef AUDIO_IDLHDI_COMMON_H 17 #define AUDIO_IDLHDI_COMMON_H 18 #include <inttypes.h> 19 #include <limits.h> 20 #include <pthread.h> 21 #include <securec.h> 22 #include <signal.h> 23 #include <stdio.h> 24 #include <stdlib.h> 25 #include <string> 26 #include <sys/mman.h> 27 #include <sys/time.h> 28 #include <unistd.h> 29 #include "hdf_base.h" 30 #include "v4_0/iaudio_manager.h" 31 #include "v4_0/audio_types.h" 32 33 namespace OHOS { 34 namespace Audio { 35 #ifdef AUDIO_ADM_PASSTHROUGH 36 constexpr bool IS_STUB = true; 37 #endif 38 #ifdef AUDIO_ADM_SERVICE 39 constexpr bool IS_STUB = false; 40 #endif 41 const std::string AUDIO_FILE = "/data/test/audiorendertest.wav"; 42 const std::string LOW_LATENCY_AUDIO_FILE = "/data/test/lowlatencyrendertest.wav"; 43 const std::string AUDIO_CAPTURE_FILE = "/data/test/audiocapture.wav"; 44 const std::string AUDIO_LOW_LATENCY_CAPTURE_FILE = "/data/test/lowlatencycapturetest.wav"; 45 46 const int AUDIO_ADAPTER_MAX_NUM = 5; 47 const std::string ADAPTER_NAME = "primary"; 48 const std::string ADAPTER_NAME_OUT = "primary_ext"; 49 using TestAudioManager = struct IAudioManager; 50 const std::string AUDIO_RIFF = "RIFF"; 51 const std::string AUDIO_WAVE = "WAVE"; 52 const std::string AUDIO_DATA = "data"; 53 const uint32_t INT_32_MAX = 0x7fffffff; 54 const uint32_t INDEX_END = 555; 55 const uint32_t MOVE_RIGHT_NUM = 3; 56 const int MOVE_LEFT_NUM = 8; 57 const int CHANNELCOUNT = 2; 58 const int SAMPLERATE = 48000; 59 const int DEEP_BUFFER_RENDER_PERIOD_SIZE = 4*1024; 60 const float GAIN_MIN = 0; 61 const float GAIN_MAX = 15; 62 const uint64_t INITIAL_VALUE = 0; 63 const int BUFFER_LENTH = 1024 * 16; 64 const int FILE_CAPTURE_SIZE = 1024 * 1024 * 1; 65 const uint64_t MEGABYTE = 1024; 66 const int FRAME_SIZE = 1024; 67 const int FRAME_COUNT = 4; 68 const int PCM_BYTE_MIN = 1024; 69 const int PCM_BYTE_MAX = 8 * 1024; 70 const int ADAPTER_COUNT = 32; 71 const int TRY_NUM_FRAME = 20; 72 const int AUDIO_WRITE_COMPLETED_VALUE = 1; 73 const int AUDIO_RENDER_FULL_VALUE = 2; 74 const int AUDIO_FLUSH_COMPLETED_VALUE = 3; 75 const int64_t SECTONSEC = 1000000000; 76 const int MICROSECOND = 1000000; 77 const int RANGE = 3; 78 const int OUT_OF_RANGE = 6; 79 const int32_t AUDIO_HAL_ERR_NOTREADY = -7001; /* audio adapter is not ready */ 80 const int32_t AUDIO_HAL_ERR_AI_BUSY = -7002; /* audio capture is busy now */ 81 const int32_t AUDIO_HAL_ERR_AO_BUSY = -7003; /* audio render is busy now */ 82 83 constexpr int PCM_8_BIT = 8; 84 constexpr int PCM_16_BIT = 16; 85 constexpr int PCM_24_BIT = 24; 86 constexpr int PCM_32_BIT = 32; 87 constexpr int SAMPLE_RATE_8000 = 8000; 88 constexpr int SAMPLE_RATE_11025 = 11025; 89 constexpr int SAMPLE_RATE_22050 = 22050; 90 constexpr int SAMPLE_RATE_32000 = 32000; 91 constexpr int SAMPLE_RATE_44100 = 44100; 92 constexpr int SAMPLE_RATE_48000 = 48000; 93 constexpr int SAMPLE_RATE_12000 = 12000; 94 constexpr int SAMPLE_RATE_16000 = 16000; 95 constexpr int SAMPLE_RATE_24000 = 24000; 96 constexpr int SAMPLE_RATE_64000 = 64000; 97 constexpr int SAMPLE_RATE_96000 = 96000; 98 constexpr int DOUBLE_CHANNEL_COUNT = 2; 99 constexpr int SINGLE_CHANNEL_COUNT = 1; 100 101 struct AudioCtlElemId { 102 const char *cardServiceName; 103 int32_t iface; 104 const char *itemName; /* ASCII name of item */ 105 }; 106 107 struct AudioCtlElemValue { 108 struct AudioCtlElemId id; 109 int32_t value[2]; 110 }; 111 112 struct AudioHeadInfo { 113 uint32_t testFileRiffId; 114 uint32_t testFileRiffSize; 115 uint32_t testFileFmt; 116 uint32_t audioFileFmtId; 117 uint32_t audioFileFmtSize; 118 uint16_t audioFileFormat; 119 uint16_t audioChannelNum; 120 uint32_t audioSampleRate; 121 uint32_t audioByteRate; 122 uint16_t audioBlockAlign; 123 uint16_t audioBitsPerSample; 124 uint32_t dataId; 125 uint32_t dataSize; 126 }; 127 128 struct AudioCharacteristic { 129 bool setmute; 130 bool getmute; 131 float setvolume; 132 float getvolume; 133 float setgain; 134 float getgain; 135 float gainthresholdmin; 136 float gainthresholdmax; 137 uint64_t getframes; 138 uint64_t getframesize; 139 uint64_t getframecount; 140 uint32_t getcurrentchannelId; 141 AudioChannelMode setmode; 142 AudioChannelMode getmode; 143 bool supported; 144 uint32_t latencyTime; 145 }; 146 147 struct PrepareAudioPara { 148 TestAudioManager *manager; 149 AudioPortDirection portType; 150 const char *adapterName; 151 struct IAudioAdapter *adapter; 152 struct AudioPort audioPort; 153 void *self; 154 void *result; 155 pthread_t tids; 156 AudioPortPin pins; 157 const char *path; 158 struct IAudioRender *render; 159 struct IAudioCapture *capture; 160 struct AudioHeadInfo headInfo; 161 struct AudioAdapterDescriptor *desc; 162 struct AudioAdapterDescriptor *descs; 163 char *frame; 164 uint64_t requestBytes; 165 uint32_t replyBytes; 166 uint64_t fileSize; 167 struct AudioSampleAttributes attrs; 168 struct AudioCharacteristic character; 169 struct AudioSampleAttributes attrsValue; 170 struct AudioSceneDescriptor scenes; 171 struct AudioPortCapability capability; 172 enum AudioPortPassthroughMode mode; 173 struct AudioTimeStamp time; 174 struct timeval start; 175 struct timeval end; 176 long delayTime; 177 long totalTime; 178 float averageDelayTime; 179 struct AudioDeviceDescriptor devDesc; 180 }; 181 182 int32_t InitAttrs(struct AudioSampleAttributes &attrs); 183 184 int32_t InitDevDesc(struct AudioDeviceDescriptor &devDesc, const uint32_t portId, int pins); 185 186 int32_t SwitchAdapter(struct AudioAdapterDescriptor *descs, const std::string &adapterNameCase, 187 int portFlag, struct AudioPort *&audioPort, int size); 188 189 uint32_t PcmFormatToBits(int format); 190 191 uint32_t PcmFramesToBytes(const struct AudioSampleAttributes attrs); 192 193 int32_t WavHeadAnalysis(struct AudioHeadInfo &wavHeadInfo, FILE *file, struct AudioSampleAttributes &attrs); 194 195 int32_t GetAdapters(TestAudioManager *manager, struct AudioAdapterDescriptor *&descs, uint32_t &size); 196 197 int32_t GetLoadAdapter(TestAudioManager *manager, int portType, 198 const std::string &adapterName, struct IAudioAdapter **adapter, struct AudioPort &audioPort); 199 200 int32_t AudioCreateRender(TestAudioManager *manager, int pins, const std::string &adapterName, 201 struct IAudioAdapter **adapter, struct IAudioRender **render, uint32_t *renderId); 202 203 #ifdef SUPPORT_OFFLOAD 204 int32_t AudioOffloadCreateRender(TestAudioManager *manager, int pins, const std::string &adapterName, 205 struct IAudioAdapter **adapter, struct IAudioRender **render, uint32_t *renderId); 206 #endif 207 208 int32_t AudioCreateCapture(TestAudioManager *manager, int pins, const std::string &adapterName, 209 struct IAudioAdapter **adapter, struct IAudioCapture **capture, uint32_t *captureId); 210 211 int32_t FrameStart(struct AudioHeadInfo wavHeadInfo, struct IAudioRender *render, FILE *file, 212 struct AudioSampleAttributes attrs); 213 214 int32_t FrameStartCapture(struct IAudioCapture *capture, FILE *file, const struct AudioSampleAttributes attrs); 215 216 int32_t RenderFramePrepare(const std::string &path, char *&frame, uint64_t &numRead); 217 218 void FrameStatus(int status); 219 220 int32_t StartRecord(struct IAudioCapture *capture, FILE *file, uint64_t filesize); 221 222 int32_t AudioRenderStartAndOneFrame(struct IAudioRender *render); 223 224 int32_t StopAudio(struct PrepareAudioPara &audiopara); 225 226 int32_t ThreadRelease(struct PrepareAudioPara &audiopara); 227 228 int32_t AudioCaptureStartAndOneFrame(struct IAudioCapture *capture); 229 230 int32_t PlayAudioFile(struct PrepareAudioPara &audiopara); 231 232 int32_t RecordAudio(struct PrepareAudioPara &audiopara); 233 234 int32_t InitAttrsUpdate(struct AudioSampleAttributes &attrs, int format, uint32_t channelCount, 235 uint32_t sampleRate, uint32_t silenceThreshold = BUFFER_LENTH); 236 237 int32_t AudioRenderSetGetSampleAttributes(struct AudioSampleAttributes attrs, struct AudioSampleAttributes &attrsValue, 238 struct IAudioRender *render); 239 240 int32_t AudioCaptureSetGetSampleAttributes(struct AudioSampleAttributes attrs, struct AudioSampleAttributes &attrsValue, 241 struct IAudioCapture *capture); 242 243 int32_t InitMmapDesc(const std::string &path, struct AudioMmapBufferDescriptor &desc, int32_t &reqSize, bool flag); 244 245 int32_t PlayMapAudioFile(struct PrepareAudioPara &audiopara); 246 247 int32_t RecordMapAudio(struct PrepareAudioPara &audiopara); 248 249 int32_t AudioRenderCallback(struct IAudioCallback *self, enum AudioCallbackType type, int8_t* reserved, 250 int8_t* cookie); 251 252 int32_t CheckFlushValue(); 253 254 int32_t CheckRenderFullValue(); 255 256 int32_t CheckWriteCompleteValue(); 257 258 void TestReleaseAdapterDescs(struct AudioAdapterDescriptor **descs, uint32_t descsLen); 259 260 void TestAudioPortCapabilityFree(struct AudioPortCapability *dataBlock, bool freeSelf); 261 262 int32_t ReleaseCaptureSource(TestAudioManager *manager, struct IAudioAdapter *&adapter, 263 struct IAudioCapture *&capture, uint32_t captureId); 264 265 int32_t ReleaseRenderSource(TestAudioManager *manager, struct IAudioAdapter *&adapter, struct IAudioRender *&render, 266 uint32_t renderId); 267 268 int32_t GetCaptureBufferSize(struct IAudioCapture *capture, uint32_t &bufferSize); 269 } 270 } 271 #endif // AUDIO_IDLHDI_COMMON_H 272