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 16 #ifndef OH_AUDIO_RENDERER_H 17 #define OH_AUDIO_RENDERER_H 18 19 #include "native_audiorenderer.h" 20 #include "audio_renderer.h" 21 #include "audio_log.h" 22 23 namespace OHOS { 24 namespace AudioStandard { 25 class OHAudioRendererModeCallback : public AudioRendererWriteCallback { 26 public: OHAudioRendererModeCallback(OH_AudioRenderer_Callbacks callbacks,OH_AudioRenderer * audioRenderer,void * userData)27 OHAudioRendererModeCallback(OH_AudioRenderer_Callbacks callbacks, OH_AudioRenderer* audioRenderer, void* userData) 28 : callbacks_(callbacks), ohAudioRenderer_(audioRenderer), userData_(userData) 29 { 30 } 31 32 void OnWriteData(size_t length) override; 33 34 private: 35 OH_AudioRenderer_Callbacks callbacks_; 36 OH_AudioRenderer* ohAudioRenderer_; 37 void* userData_; 38 }; 39 40 class OHAudioRendererDeviceChangeCallback : public AudioRendererDeviceChangeCallback { 41 public: OHAudioRendererDeviceChangeCallback(OH_AudioRenderer_Callbacks callbacks,OH_AudioRenderer * audioRenderer,void * userData)42 OHAudioRendererDeviceChangeCallback(OH_AudioRenderer_Callbacks callbacks, OH_AudioRenderer* audioRenderer, 43 void* userData) : callbacks_(callbacks), ohAudioRenderer_(audioRenderer), userData_(userData) 44 { 45 } 46 47 void OnStateChange(const DeviceInfo &deviceInfo) override; RemoveAllCallbacks()48 void RemoveAllCallbacks() override {}; 49 private: 50 OH_AudioRenderer_Callbacks callbacks_; 51 OH_AudioRenderer* ohAudioRenderer_; 52 void* userData_; 53 }; 54 55 class OHAudioRendererCallback : public AudioRendererCallback { 56 public: OHAudioRendererCallback(OH_AudioRenderer_Callbacks callbacks,OH_AudioRenderer * audioRenderer,void * userData)57 OHAudioRendererCallback(OH_AudioRenderer_Callbacks callbacks, OH_AudioRenderer* audioRenderer, 58 void* userData) : callbacks_(callbacks), ohAudioRenderer_(audioRenderer), userData_(userData) 59 { 60 } 61 void OnInterrupt(const InterruptEvent &interruptEvent) override; OnStateChange(const RendererState state,const StateChangeCmdType cmdType)62 void OnStateChange(const RendererState state, const StateChangeCmdType __attribute__((unused)) cmdType) override 63 { 64 AUDIO_DEBUG_LOG("OHAudioRendererCallback:: OnStateChange"); 65 } 66 67 private: 68 OH_AudioRenderer_Callbacks callbacks_; 69 OH_AudioRenderer* ohAudioRenderer_; 70 void* userData_; 71 }; 72 73 class OHServiceDiedCallback : public AudioRendererPolicyServiceDiedCallback { 74 public: OHServiceDiedCallback(OH_AudioRenderer_Callbacks callbacks,OH_AudioRenderer * audioRenderer,void * userData)75 OHServiceDiedCallback(OH_AudioRenderer_Callbacks callbacks, OH_AudioRenderer* audioRenderer, 76 void* userData) : callbacks_(callbacks), ohAudioRenderer_(audioRenderer), userData_(userData) 77 { 78 } 79 80 void OnAudioPolicyServiceDied() override; 81 82 private: 83 OH_AudioRenderer_Callbacks callbacks_; 84 OH_AudioRenderer* ohAudioRenderer_; 85 void* userData_; 86 }; 87 88 class OHAudioRendererErrorCallback : public AudioRendererErrorCallback { 89 public: OHAudioRendererErrorCallback(OH_AudioRenderer_Callbacks callbacks,OH_AudioRenderer * audioRenderer,void * userData)90 OHAudioRendererErrorCallback(OH_AudioRenderer_Callbacks callbacks, OH_AudioRenderer* audioRenderer, 91 void* userData) : callbacks_(callbacks), ohAudioRenderer_(audioRenderer), userData_(userData) 92 { 93 } 94 95 void OnError(AudioErrors errorCode) override; 96 97 OH_AudioStream_Result GetErrorResult(AudioErrors errorCode) const; 98 99 private: 100 OH_AudioRenderer_Callbacks callbacks_; 101 OH_AudioRenderer* ohAudioRenderer_; 102 void* userData_; 103 }; 104 class OHAudioRenderer { 105 public: 106 OHAudioRenderer(); 107 ~OHAudioRenderer(); 108 bool Initialize(const AudioRendererOptions &rendererOptions); 109 bool Start(); 110 bool Pause(); 111 bool Stop(); 112 bool Flush(); 113 bool Release(); 114 RendererState GetCurrentState(); 115 void GetStreamId(uint32_t& streamId); 116 AudioChannel GetChannelCount(); 117 int32_t GetSamplingRate(); 118 AudioSampleFormat GetSampleFormat(); 119 AudioEncodingType GetEncodingType(); 120 int64_t GetFramesWritten(); 121 void GetRendererInfo(AudioRendererInfo& rendererInfo); 122 void GetAudioTime(Timestamp ×tamp, Timestamp::Timestampbase base); 123 int32_t GetFrameSizeInCallback(); 124 int32_t GetBufferDesc(BufferDesc &bufDesc) const; 125 int32_t Enqueue(const BufferDesc &bufDesc) const; 126 127 void SetRendererCallback(OH_AudioRenderer_Callbacks callbacks, void* userData); 128 129 private: 130 std::unique_ptr<AudioRenderer> audioRenderer_; 131 }; 132 } // namespace AudioStandard 133 } // namespace OHOS 134 135 #endif // OH_AUDIO_RENDERER_H 136