• 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") = 0;
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 I_AUDIO_STREAM_H
16 #define I_AUDIO_STREAM_H
17 
18 #include <map>
19 #include <memory>
20 #include "timestamp.h"
21 #include "audio_info.h"
22 #include "audio_capturer.h"
23 #include "audio_renderer.h"
24 #include "audio_stream_manager.h"
25 
26 namespace OHOS {
27 namespace AudioStandard {
28 class AudioStreamCallback {
29 public:
30     virtual ~AudioStreamCallback() = default;
31     /**
32      * Called when stream state is updated.
33      *
34      * @param state Indicates the InterruptEvent information needed by client.
35      * For details, refer InterruptEvent struct in audio_info.h
36      */
37     virtual void OnStateChange(const State state, const StateChangeCmdType cmdType = CMD_FROM_CLIENT) = 0;
38 };
39 class IAudioStream {
40 public:
41     enum StreamClass : uint32_t {
42         PA_STREAM = 0,
43         FAST_STREAM,
44     };
45 
46     struct SwitchInfo {
47         AudioStreamParams params;
48         AudioStreamType eStreamType;
49         int32_t appUid;
50         AudioRendererInfo rendererInfo;
51         AudioCapturerInfo capturerInfo;
52         State state;
53         uint32_t sessionId;
54         std::string cachePath = "";
55         uint32_t rendererSampleRate;
56         uint32_t underFlowCount;
57         AudioEffectMode effectMode;
58         AudioRenderMode renderMode;
59         AudioCaptureMode captureMode;
60         AudioRendererRate renderRate;
61         int32_t clientPid = 0;
62         int32_t clientUid = 0;
63         std::shared_ptr<AudioClientTracker> proxyObj;
64         AudioPrivacyType privacyType;
65         float volume;
66 
67         bool streamTrackerRegistered = false;
68 
69         uint64_t frameMarkPosition = 0;
70         uint64_t framePeriodNumber = 0;
71 
72         uint64_t totalBytesWritten = 0;
73         uint64_t framePeriodWritten = 0;
74         std::shared_ptr<RendererPositionCallback> renderPositionCb;
75         std::shared_ptr<RendererPeriodPositionCallback> renderPeriodPositionCb;
76 
77         uint64_t totalBytesRead = 0;
78         uint64_t framePeriodRead = 0;
79         std::shared_ptr<CapturerPositionCallback> capturePositionCb;
80         std::shared_ptr<CapturerPeriodPositionCallback> capturePeriodPositionCb;
81 
82         // callback info
83         std::shared_ptr<AudioStreamCallback> audioStreamCallback;
84         std::shared_ptr<AudioRendererWriteCallback> rendererWriteCallback;
85     };
86 
87     virtual ~IAudioStream() = default;
88 
89     static bool IsStreamSupported(int32_t streamFlags, const AudioStreamParams &params);
90     static std::shared_ptr<IAudioStream> GetPlaybackStream(StreamClass streamClass, AudioStreamParams params,
91         AudioStreamType eStreamType, int32_t appUid);
92     static std::shared_ptr<IAudioStream> GetRecordStream(StreamClass streamClass, AudioStreamParams params,
93         AudioStreamType eStreamType, int32_t appUid);
94 
95     static AudioStreamType GetStreamType(ContentType contentType, StreamUsage streamUsage);
96     static std::map<std::pair<ContentType, StreamUsage>, AudioStreamType> CreateStreamMap();
97     static const std::string GetEffectSceneName(AudioStreamType audioType);
98 
99     virtual void SetClientID(int32_t clientPid, int32_t clientUid) = 0;
100     virtual void SetRendererInfo(const AudioRendererInfo &rendererInfo) = 0;
101     virtual void SetCapturerInfo(const AudioCapturerInfo &capturerInfo) = 0;
102     virtual int32_t SetAudioStreamInfo(const AudioStreamParams info,
103         const std::shared_ptr<AudioClientTracker> &proxyObj) = 0;
104     virtual int32_t GetAudioStreamInfo(AudioStreamParams &info) = 0;
105     virtual bool CheckRecordingCreate(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid) = 0;
106     virtual bool CheckRecordingStateChange(uint32_t appTokenId, uint64_t appFullTokenId, int32_t appUid,
107         AudioPermissionState state) = 0;
108     virtual int32_t GetAudioSessionID(uint32_t &sessionID) = 0;
109     virtual State GetState() = 0;
110     virtual bool GetAudioTime(Timestamp &timestamp, Timestamp::Timestampbase base) = 0;
111     virtual int32_t GetBufferSize(size_t &bufferSize) = 0;
112     virtual int32_t GetFrameCount(uint32_t &frameCount) = 0;
113     virtual int32_t GetLatency(uint64_t &latency) = 0;
114     virtual int32_t SetAudioStreamType(AudioStreamType audioStreamType) = 0;
115     virtual int32_t SetVolume(float volume) = 0;
116     virtual float GetVolume() = 0;
117     virtual int32_t SetRenderRate(AudioRendererRate renderRate) = 0;
118     virtual AudioRendererRate GetRenderRate() = 0;
119     virtual int32_t SetStreamCallback(const std::shared_ptr<AudioStreamCallback> &callback) = 0;
120 
121     // callback mode api
122     virtual int32_t SetRenderMode(AudioRenderMode renderMode) = 0;
123     virtual AudioRenderMode GetRenderMode() = 0;
124     virtual int32_t SetRendererWriteCallback(const std::shared_ptr<AudioRendererWriteCallback> &callback) = 0;
125 
126     virtual int32_t SetCaptureMode(AudioCaptureMode captureMode) = 0;
127     virtual AudioCaptureMode GetCaptureMode() = 0;
128     virtual int32_t SetCapturerReadCallback(const std::shared_ptr<AudioCapturerReadCallback> &callback) = 0;
129 
130     virtual int32_t GetBufferDesc(BufferDesc &bufDesc) = 0;
131     virtual int32_t GetBufQueueState(BufferQueueState &bufState) = 0;
132     virtual int32_t Enqueue(const BufferDesc &bufDesc) = 0;
133     virtual int32_t Clear() = 0;
134 
135     virtual int32_t SetLowPowerVolume(float volume) = 0;
136     virtual float GetLowPowerVolume() = 0;
137     virtual float GetSingleStreamVolume() = 0;
138 
139     // for effect
140     virtual AudioEffectMode GetAudioEffectMode() = 0;
141     virtual int32_t SetAudioEffectMode(AudioEffectMode effectMode) = 0;
142 
143     virtual int64_t GetFramesWritten() = 0;
144     virtual int64_t GetFramesRead() = 0;
145 
146     // Common APIs
147     virtual bool StartAudioStream(StateChangeCmdType cmdType = CMD_FROM_CLIENT) = 0;
148     virtual bool PauseAudioStream(StateChangeCmdType cmdType = CMD_FROM_CLIENT) = 0;
149     virtual bool StopAudioStream() = 0;
150     virtual bool ReleaseAudioStream(bool releaseRunner = true) = 0;
151     virtual bool FlushAudioStream() = 0;
152 
153     // Playback related APIs
154     virtual bool DrainAudioStream() = 0;
155     virtual size_t Write(uint8_t *buffer, size_t buffer_size) = 0;
156 
157     // Recording related APIs
158     virtual int32_t Read(uint8_t &buffer, size_t userSize, bool isBlockingRead) = 0;
159 
160     // for inner capturer
161     virtual void SetInnerCapturerState(bool isInnerCapturer) = 0;
162     virtual void SetPrivacyType(AudioPrivacyType privacyType) = 0;
163 
164     virtual uint32_t GetUnderflowCount() = 0;
165 
166     virtual void SetRendererPositionCallback(int64_t markPosition,
167         const std::shared_ptr<RendererPositionCallback> &callback) = 0;
168     virtual void UnsetRendererPositionCallback() = 0;
169 
170     virtual void SetRendererPeriodPositionCallback(int64_t markPosition,
171         const std::shared_ptr<RendererPeriodPositionCallback> &callback) = 0;
172     virtual void UnsetRendererPeriodPositionCallback() = 0;
173 
174     virtual void SetCapturerPositionCallback(int64_t markPosition,
175         const std::shared_ptr<CapturerPositionCallback> &callback) = 0;
176     virtual void UnsetCapturerPositionCallback() = 0;
177 
178     virtual void SetCapturerPeriodPositionCallback(int64_t markPosition,
179         const std::shared_ptr<CapturerPeriodPositionCallback> &callback) = 0;
180 
181     virtual void UnsetCapturerPeriodPositionCallback() = 0;
182     virtual int32_t SetRendererSamplingRate(uint32_t sampleRate) = 0;
183     virtual uint32_t GetRendererSamplingRate() = 0;
184     virtual int32_t SetBufferSizeInMsec(int32_t bufferSizeInMsec) = 0;
185     virtual void SetApplicationCachePath(const std::string cachePath) = 0;
186 
187     virtual IAudioStream::StreamClass GetStreamClass() = 0;
188     virtual void SetStreamTrackerState(bool trackerRegisteredState) = 0;
189     virtual void GetSwitchInfo(SwitchInfo& info) = 0;
190 
191     //for wakeup capturer
192     virtual void SetWakeupCapturerState(bool isWakeupCapturer) = 0;
193 };
194 } // namespace AudioStandard
195 } // namespace OHOS
196 #endif // I_AUDIO_STREAM_H
197