• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 #ifndef FAST_AUDIO_STREAM_H
16 #define FAST_AUDIO_STREAM_H
17 
18 #include <mutex>
19 #include <condition_variable>
20 #include "timestamp.h"
21 #include "event_handler.h"
22 #include "event_runner.h"
23 #include "audio_info.h"
24 
25 #include "audio_process_in_client.h"
26 #include "audio_stream_tracker.h"
27 #include "i_audio_stream.h"
28 
29 namespace OHOS {
30 namespace AudioStandard {
31 class FastAudioStreamRenderCallback : public AudioDataCallback {
32 public:
FastAudioStreamRenderCallback(const std::shared_ptr<AudioRendererWriteCallback> & callback)33     FastAudioStreamRenderCallback(const std::shared_ptr<AudioRendererWriteCallback> &callback)
34         : rendererWriteCallback_(callback) {};
35     virtual ~FastAudioStreamRenderCallback() = default;
36 
37     void OnHandleData(size_t length) override;
38     std::shared_ptr<AudioRendererWriteCallback> GetRendererWriteCallback() const;
39 
40 private:
41     std::shared_ptr<AudioRendererWriteCallback> rendererWriteCallback_ = nullptr;
42 };
43 
44 class FastAudioStreamCaptureCallback : public AudioDataCallback {
45 public:
FastAudioStreamCaptureCallback(const std::shared_ptr<AudioCapturerReadCallback> & callback)46     FastAudioStreamCaptureCallback(const std::shared_ptr<AudioCapturerReadCallback> &callback)
47         : captureCallback_(callback) {};
48     virtual ~FastAudioStreamCaptureCallback() = default;
49 
50     void OnHandleData(size_t length) override;
51 private:
52     std::shared_ptr<AudioCapturerReadCallback> captureCallback_ = nullptr;
53 };
54 
55 class FastAudioStream : public IAudioStream {
56 public:
57     FastAudioStream(AudioStreamType eStreamType, AudioMode eMode, int32_t appUid);
58     virtual ~FastAudioStream();
59 
60     void SetClientID(int32_t clientPid, int32_t clientUid) override;
61 
62     void SetRendererInfo(const AudioRendererInfo &rendererInfo) override;
63     void SetCapturerInfo(const AudioCapturerInfo &capturerInfo) override;
64     int32_t SetAudioStreamInfo(const AudioStreamParams info,
65         const std::shared_ptr<AudioClientTracker> &proxyObj) override;
66     int32_t GetAudioStreamInfo(AudioStreamParams &info) override;
67     bool CheckRecordingCreate(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid) override;
68     bool CheckRecordingStateChange(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
69         AudioPermissionState state) override;
70     int32_t GetAudioSessionID(uint32_t &sessionID) override;
71     State GetState() override;
72     bool GetAudioTime(Timestamp &timestamp, Timestamp::Timestampbase base) override;
73     int32_t GetBufferSize(size_t &bufferSize) override;
74     int32_t GetFrameCount(uint32_t &frameCount) override;
75     int32_t GetLatency(uint64_t &latency) override;
76     int32_t SetAudioStreamType(AudioStreamType audioStreamType) override;
77     int32_t SetVolume(float volume) override;
78     float GetVolume() override;
79     int32_t SetRenderRate(AudioRendererRate renderRate) override;
80     AudioRendererRate GetRenderRate() override;
81     int32_t SetStreamCallback(const std::shared_ptr<AudioStreamCallback> &callback) override;
82 
83     // callback mode api
84     int32_t SetRenderMode(AudioRenderMode renderMode) override;
85     AudioRenderMode GetRenderMode() override;
86     int32_t SetRendererWriteCallback(const std::shared_ptr<AudioRendererWriteCallback> &callback) override;
87     int32_t SetCaptureMode(AudioCaptureMode captureMode) override;
88     AudioCaptureMode GetCaptureMode() override;
89     int32_t SetCapturerReadCallback(const std::shared_ptr<AudioCapturerReadCallback> &callback) override;
90     int32_t GetBufferDesc(BufferDesc &bufDesc) override;
91     int32_t GetBufQueueState(BufferQueueState &bufState) override;
92     int32_t Enqueue(const BufferDesc &bufDesc) override;
93     int32_t Clear() override;
94 
95     int32_t SetLowPowerVolume(float volume) override;
96     float GetLowPowerVolume() override;
97     float GetSingleStreamVolume() override;
98     AudioEffectMode GetAudioEffectMode() override;
99     int32_t SetAudioEffectMode(AudioEffectMode effectMode) override;
100     int64_t GetFramesWritten() override;
101     int64_t GetFramesRead() override;
102 
103     void SetInnerCapturerState(bool isInnerCapturer) override;
104     void SetWakeupCapturerState(bool isWakeupCapturer) override;
105     void SetPrivacyType(AudioPrivacyType privacyType) override;
106 
107     // Common APIs
108     bool StartAudioStream(StateChangeCmdType cmdType = CMD_FROM_CLIENT) override;
109     bool PauseAudioStream(StateChangeCmdType cmdType = CMD_FROM_CLIENT) override;
110     bool StopAudioStream() override;
111     bool ReleaseAudioStream(bool releaseRunner = true) override;
112     bool FlushAudioStream() override;
113 
114     // Playback related APIs
115     bool DrainAudioStream() override;
116     size_t Write(uint8_t *buffer, size_t buffer_size) override;
117 
118     // Recording related APIs
119     int32_t Read(uint8_t &buffer, size_t userSize, bool isBlockingRead) override;
120 
121     uint32_t GetUnderflowCount() override;
122     void SetRendererPositionCallback(int64_t markPosition, const std::shared_ptr<RendererPositionCallback> &callback)
123         override;
124     void UnsetRendererPositionCallback() override;
125     void SetRendererPeriodPositionCallback(int64_t markPosition,
126         const std::shared_ptr<RendererPeriodPositionCallback> &callback) override;
127     void UnsetRendererPeriodPositionCallback() override;
128     void SetCapturerPositionCallback(int64_t markPosition, const std::shared_ptr<CapturerPositionCallback> &callback)
129         override;
130     void UnsetCapturerPositionCallback() override;
131     void SetCapturerPeriodPositionCallback(int64_t markPosition,
132         const std::shared_ptr<CapturerPeriodPositionCallback> &callback) override;
133     void UnsetCapturerPeriodPositionCallback() override;
134     int32_t SetRendererSamplingRate(uint32_t sampleRate) override;
135     uint32_t GetRendererSamplingRate() override;
136     int32_t SetBufferSizeInMsec(int32_t bufferSizeInMsec) override;
137     void SetApplicationCachePath(const std::string cachePath) override;
138 
139     void SetStreamTrackerState(bool trackerRegisteredState) override;
140     void GetSwitchInfo(IAudioStream::SwitchInfo& info) override;
141 
142     IAudioStream::StreamClass GetStreamClass() override;
143 
144 private:
145     AudioStreamType eStreamType_;
146     AudioMode eMode_;
147     std::shared_ptr<AudioProcessInClient> processClient_ = nullptr;
148     std::shared_ptr<FastAudioStreamRenderCallback> spkProcClientCb_ = nullptr;
149     std::shared_ptr<FastAudioStreamCaptureCallback> micProcClientCb_ = nullptr;
150     std::unique_ptr<AudioStreamTracker> audioStreamTracker_;
151     AudioRendererInfo rendererInfo_;
152     AudioCapturerInfo capturerInfo_;
153     AudioStreamParams streamInfo_;
154     AudioProcessConfig processconfig_;
155     State state_;
156     uint32_t sessionId_;
157     std::string cachePath_ = "";
158     uint32_t underflowCount_;
159     AudioRenderMode renderMode_;
160     AudioCaptureMode captureMode_;
161     AudioRendererRate renderRate_ = RENDER_RATE_NORMAL;
162     int32_t clientPid_ = 0;
163     int32_t clientUid_ = 0;
164     bool streamTrackerRegistered_ = false;
165 };
166 } // namespace AudioStandard
167 } // namespace OHOS
168 #endif // FAST_AUDIO_STREAM_H
169