1 /* 2 * Copyright (c) 2023-2024 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 OHOS_AUDIO_CAPTURE_EXT_IMPL_H 17 #define OHOS_AUDIO_CAPTURE_EXT_IMPL_H 18 19 #include <cmath> 20 #include <mutex> 21 #include <string> 22 23 #include <v1_0/audio_types.h> 24 #include <v1_0/iaudio_capture.h> 25 #include <v2_0/id_audio_manager.h> 26 27 #include "ashmem.h" 28 #include "audio_capture_interface_impl_base.h" 29 #include "daudio_utils.h" 30 31 namespace OHOS { 32 namespace HDI { 33 namespace DistributedAudio { 34 namespace Audio { 35 namespace V1_0 { 36 using OHOS::HDI::DistributedAudio::Audioext::V2_0::AudioData; 37 using OHOS::HDI::DistributedAudio::Audioext::V2_0::AudioParameter; 38 using OHOS::HDI::DistributedAudio::Audioext::V2_0::CurrentTime; 39 using OHOS::HDI::DistributedAudio::Audioext::V2_0::DAudioEvent; 40 using OHOS::HDI::DistributedAudio::Audioext::V2_0::IDAudioCallback; 41 class AudioCaptureExtImpl : public AudioCaptureInterfaceImplBase { 42 public: 43 AudioCaptureExtImpl(); 44 ~AudioCaptureExtImpl() override; 45 46 int32_t CaptureFrame(std::vector<int8_t> &frame, uint64_t &replyBytes) override; 47 int32_t GetCapturePosition(uint64_t &frames, AudioTimeStamp &time) override; 48 int32_t CheckSceneCapability(const AudioSceneDescriptor &scene, bool &supported) override; 49 int32_t SelectScene(const AudioSceneDescriptor &scene) override; 50 int32_t SetMute(bool mute) override; 51 int32_t GetMute(bool &mute) override; 52 int32_t SetVolume(float volume) override; 53 int32_t GetVolume(float &volume) override; 54 int32_t GetGainThreshold(float &min, float &max) override; 55 int32_t GetGain(float &gain) override; 56 int32_t SetGain(float gain) override; 57 int32_t GetFrameSize(uint64_t &size) override; 58 int32_t GetFrameCount(uint64_t &count) override; 59 int32_t SetSampleAttributes(const AudioSampleAttributes &attrs) override; 60 int32_t GetSampleAttributes(AudioSampleAttributes &attrs) override; 61 int32_t GetCurrentChannelId(uint32_t &channelId) override; 62 int32_t SetExtraParams(const std::string &keyValueList) override; 63 int32_t GetExtraParams(std::string &keyValueList) override; 64 int32_t ReqMmapBuffer(int32_t reqSize, AudioMmapBufferDescriptor &desc) override; 65 int32_t GetMmapPosition(uint64_t &frames, AudioTimeStamp &time) override; 66 int32_t AddAudioEffect(uint64_t effectid) override; 67 int32_t RemoveAudioEffect(uint64_t effectid) override; 68 int32_t GetFrameBufferSize(uint64_t &bufferSize) override; 69 int32_t Start() override; 70 int32_t Stop() override; 71 int32_t Pause() override; 72 int32_t Resume() override; 73 int32_t Flush() override; 74 int32_t TurnStandbyMode() override; 75 int32_t AudioDevDump(int32_t range, int32_t fd) override; 76 int32_t IsSupportsPauseAndResume(bool &supportPause, bool &supportResume) override; 77 const AudioDeviceDescriptor &GetCaptureDesc() override; 78 void SetAttrs(const std::string &adpName, const AudioDeviceDescriptor &desc, const AudioSampleAttributes &attrs, 79 const sptr<IDAudioCallback> &callback, const int32_t dhId) override; 80 void SetDumpFlagInner() override; 81 82 private: 83 int32_t InitAshmem(int32_t ashmemLength); 84 void UnInitAshmem(); 85 private: 86 std::string adapterName_; 87 int32_t dhId_ = 0; 88 uint32_t captureId_ = 0; 89 AudioDeviceDescriptor devDesc_ = {}; 90 AudioSampleAttributes devAttrs_ = {}; 91 uint32_t timeInterval_ = AUDIO_MMAP_NOIRQ_INTERVAL; 92 uint32_t minTimeInterval_ = 30; 93 uint32_t maxTimeInterval_ = 80; 94 95 std::mutex captureMtx_; 96 AudioCaptureStatus captureStatus_ = CAPTURE_STATUS_CLOSE; 97 sptr<IDAudioCallback> audioExtCallback_ = nullptr; 98 OHOS::sptr<OHOS::Ashmem> ashmem_ = nullptr; 99 int32_t ashmemLength_ = 0; 100 int32_t lengthPerTrans_ = 0; 101 int32_t fd_ = 0; 102 }; 103 104 #ifdef __cplusplus 105 extern "C" { 106 #endif 107 __attribute__((visibility("default"))) AudioCaptureInterfaceImplBase *GetCaptureImplExt(); 108 #ifdef __cplusplus 109 } 110 #endif 111 } // namespace V1_0 112 } // namespace Audio 113 } // namespace DistributedAudio 114 } // namespace HDI 115 } // namespace OHOS 116 #endif // OHOS_AUDIO_CAPTURE_EXT_IMPL_H 117