1 /* 2 * Copyright (c) 2025 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 I_AUDIO_CAPTURE_SOURCE_H 17 #define I_AUDIO_CAPTURE_SOURCE_H 18 19 #include <iostream> 20 #include <string> 21 #include "audio_info.h" 22 #include "audio_errors.h" 23 #include "common/hdi_adapter_info.h" 24 25 #define SUCCESS_RET { return SUCCESS; } 26 #define NOT_SUPPORT_RET { return ERR_NOT_SUPPORTED; } 27 28 namespace OHOS { 29 namespace AudioStandard { 30 typedef struct IAudioSourceAttr { 31 const char *adapterName = ""; 32 uint32_t openMicSpeaker = 0; 33 AudioSampleFormat format = AudioSampleFormat::INVALID_WIDTH; 34 uint32_t sampleRate = 0; 35 uint32_t channel = 0; 36 float volume = 0.0f; 37 uint32_t bufferSize = 0; 38 bool isBigEndian = false; 39 const char *filePath = nullptr; 40 const char *deviceNetworkId = nullptr; 41 int32_t deviceType = 0; 42 int32_t sourceType = 0; 43 uint64_t channelLayout = 0; 44 int32_t audioStreamFlag = 0; 45 bool hasEcConfig = false; 46 AudioSampleFormat formatEc = AudioSampleFormat::INVALID_WIDTH; 47 uint32_t sampleRateEc = 0; 48 uint32_t channelEc = 0; 49 } IAudioSourceAttr; 50 51 typedef struct FrameDesc { 52 char *frame; 53 uint64_t frameLen; 54 } FrameDesc; 55 56 class IAudioSourceCallback { 57 public: 58 virtual ~IAudioSourceCallback() = default; OnCaptureSourceParamChange(const std::string & networkId,const AudioParamKey key,const std::string & condition,const std::string & value)59 virtual void OnCaptureSourceParamChange(const std::string &networkId, const AudioParamKey key, 60 const std::string &condition, const std::string &value) {} OnCaptureState(bool isActive)61 virtual void OnCaptureState(bool isActive) {} OnWakeupClose(void)62 virtual void OnWakeupClose(void) {} 63 }; 64 65 class IAudioCaptureSource { 66 public: 67 virtual ~IAudioCaptureSource() = default; 68 69 virtual int32_t Init(const IAudioSourceAttr &attr) = 0; 70 virtual void DeInit(void) = 0; 71 virtual bool IsInited(void) = 0; 72 73 virtual int32_t Start(void) = 0; 74 virtual int32_t Stop(void) = 0; 75 virtual int32_t Resume(void) = 0; 76 virtual int32_t Pause(void) = 0; 77 virtual int32_t Flush(void) = 0; 78 virtual int32_t Reset(void) = 0; 79 virtual int32_t CaptureFrame(char *frame, uint64_t requestBytes, uint64_t &replyBytes) = 0; 80 virtual int32_t CaptureFrameWithEc(FrameDesc *fdesc, uint64_t &replyBytes, FrameDesc *fdescEc, 81 uint64_t &replyBytesEc) = 0; 82 83 virtual std::string GetAudioParameter(const AudioParamKey key, const std::string &condition) = 0; 84 85 virtual int32_t SetVolume(float left, float right) = 0; 86 virtual int32_t GetVolume(float &left, float &right) = 0; 87 virtual int32_t SetMute(bool isMute) = 0; 88 virtual int32_t GetMute(bool &isMute) = 0; 89 90 virtual uint64_t GetTransactionId(void) = 0; 91 virtual int32_t GetPresentationPosition(uint64_t &frames, int64_t &timeSec, int64_t &timeNanoSec) = 0; 92 virtual float GetMaxAmplitude(void) = 0; 93 94 virtual int32_t SetAudioScene(AudioScene audioScene, DeviceType activeDevice) = 0; 95 96 virtual int32_t UpdateActiveDevice(DeviceType inputDevice) = 0; UpdateSourceType(SourceType sourceType)97 virtual int32_t UpdateSourceType(SourceType sourceType) SUCCESS_RET 98 virtual void RegistCallback(uint32_t type, IAudioSourceCallback *callback) {} RegistCallback(uint32_t type,std::shared_ptr<IAudioSourceCallback> callback)99 virtual void RegistCallback(uint32_t type, std::shared_ptr<IAudioSourceCallback> callback) {} 100 101 virtual int32_t UpdateAppsUid(const int32_t appsUid[PA_MAX_OUTPUTS_PER_SOURCE], const size_t size) = 0; 102 virtual int32_t UpdateAppsUid(const std::vector<int32_t> &appsUid) = 0; 103 SetAddress(const std::string & address)104 virtual void SetAddress(const std::string &address) {} 105 DumpInfo(std::string & dumpString)106 virtual void DumpInfo(std::string &dumpString) {} 107 108 // mmap extend function 109 virtual int32_t GetMmapBufferInfo(int &fd, uint32_t &totalSizeInframe, uint32_t &spanSizeInframe, 110 uint32_t &byteSizePerFrame) NOT_SUPPORT_RET 111 virtual int32_t GetMmapHandlePosition(uint64_t &frames, int64_t &timeSec, int64_t &timeNanoSec) NOT_SUPPORT_RET 112 }; 113 114 } // namespace AudioStandard 115 } // namespace OHOS 116 117 #endif // I_AUDIO_CAPTURE_SOURCE_H 118