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 ×tamp, 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