• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_1/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_1::AudioData;
37 using OHOS::HDI::DistributedAudio::Audioext::V2_1::AudioParameter;
38 using OHOS::HDI::DistributedAudio::Audioext::V2_1::CurrentTime;
39 using OHOS::HDI::DistributedAudio::Audioext::V2_1::DAudioEvent;
40 using OHOS::HDI::DistributedAudio::Audioext::V2_1::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     AudioCaptureStatus GetCaptureStatus() override;
82     void SetCaptureStatus(AudioCaptureStatus status) override;
83 
84 private:
85     int32_t InitAshmem(int32_t ashmemLength);
86     void UnInitAshmem();
87 private:
88     std::string adapterName_;
89     int32_t dhId_ = 0;
90     uint32_t captureId_ = 0;
91     AudioDeviceDescriptor devDesc_ = {};
92     AudioSampleAttributes devAttrs_ = {};
93     uint32_t timeInterval_ = AUDIO_MMAP_NOIRQ_INTERVAL;
94     uint32_t minTimeInterval_ = 30;
95     uint32_t maxTimeInterval_ = 80;
96 
97     std::mutex captureMtx_;
98     AudioCaptureStatus captureStatus_ = CAPTURE_STATUS_CLOSE;
99     sptr<IDAudioCallback> audioExtCallback_ = nullptr;
100     OHOS::sptr<OHOS::Ashmem> ashmem_ = nullptr;
101     int32_t ashmemLength_ = 0;
102     int32_t lengthPerTrans_ = 0;
103     int32_t fd_ = 0;
104 };
105 
106 #ifdef __cplusplus
107 extern "C" {
108 #endif
109 __attribute__((visibility("default"))) AudioCaptureInterfaceImplBase *GetCaptureImplExt();
110 #ifdef __cplusplus
111 }
112 #endif
113 } // namespace V1_0
114 } // namespace Audio
115 } // namespace DistributedAudio
116 } // namespace HDI
117 } // namespace OHOS
118 #endif // OHOS_AUDIO_CAPTURE_EXT_IMPL_H
119