• 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 
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 OHAudioRendererDeviceChangeCallbackWithInfo : public AudioRendererOutputDeviceChangeCallback {
56 public:
OHAudioRendererDeviceChangeCallbackWithInfo(OH_AudioRenderer_OutputDeviceChangeCallback callback,OH_AudioRenderer * audioRenderer,void * userData)57     OHAudioRendererDeviceChangeCallbackWithInfo(OH_AudioRenderer_OutputDeviceChangeCallback callback,
58         OH_AudioRenderer* audioRenderer, void* userData)
59         : callback_(callback), ohAudioRenderer_(audioRenderer), userData_(userData)
60     {
61     }
62 
63     void OnOutputDeviceChange(const DeviceInfo &deviceInfo, const AudioStreamDeviceChangeReason reason) override;
64 private:
65     OH_AudioRenderer_OutputDeviceChangeCallback callback_;
66     OH_AudioRenderer* ohAudioRenderer_;
67     void* userData_;
68 };
69 
70 class OHAudioRendererCallback : public AudioRendererCallback {
71 public:
OHAudioRendererCallback(OH_AudioRenderer_Callbacks callbacks,OH_AudioRenderer * audioRenderer,void * userData)72     OHAudioRendererCallback(OH_AudioRenderer_Callbacks callbacks, OH_AudioRenderer* audioRenderer,
73         void* userData) : callbacks_(callbacks), ohAudioRenderer_(audioRenderer), userData_(userData)
74     {
75     }
76     void OnInterrupt(const InterruptEvent &interruptEvent) override;
OnStateChange(const RendererState state,const StateChangeCmdType cmdType)77     void OnStateChange(const RendererState state, const StateChangeCmdType __attribute__((unused)) cmdType) override
78     {
79         AUDIO_DEBUG_LOG("OHAudioRendererCallback:: OnStateChange");
80     }
81 
82 private:
83     OH_AudioRenderer_Callbacks callbacks_;
84     OH_AudioRenderer* ohAudioRenderer_;
85     void* userData_;
86 };
87 
88 class OHServiceDiedCallback : public AudioRendererPolicyServiceDiedCallback {
89 public:
OHServiceDiedCallback(OH_AudioRenderer_Callbacks callbacks,OH_AudioRenderer * audioRenderer,void * userData)90     OHServiceDiedCallback(OH_AudioRenderer_Callbacks callbacks, OH_AudioRenderer* audioRenderer,
91         void* userData) : callbacks_(callbacks), ohAudioRenderer_(audioRenderer), userData_(userData)
92     {
93     }
94 
95     void OnAudioPolicyServiceDied() override;
96 
97 private:
98     OH_AudioRenderer_Callbacks callbacks_;
99     OH_AudioRenderer* ohAudioRenderer_;
100     void* userData_;
101 };
102 
103 class OHAudioRendererErrorCallback : public AudioRendererErrorCallback {
104 public:
OHAudioRendererErrorCallback(OH_AudioRenderer_Callbacks callbacks,OH_AudioRenderer * audioRenderer,void * userData)105     OHAudioRendererErrorCallback(OH_AudioRenderer_Callbacks callbacks, OH_AudioRenderer* audioRenderer,
106         void* userData) : callbacks_(callbacks), ohAudioRenderer_(audioRenderer), userData_(userData)
107     {
108     }
109 
110     void OnError(AudioErrors errorCode) override;
111 
112     OH_AudioStream_Result GetErrorResult(AudioErrors errorCode) const;
113 
114 private:
115     OH_AudioRenderer_Callbacks callbacks_;
116     OH_AudioRenderer* ohAudioRenderer_;
117     void* userData_;
118 };
119 class OHAudioRenderer {
120     public:
121         OHAudioRenderer();
122         ~OHAudioRenderer();
123         bool Initialize(const AudioRendererOptions &rendererOptions);
124         bool Start();
125         bool Pause();
126         bool Stop();
127         bool Flush();
128         bool Release();
129         RendererState GetCurrentState();
130         void GetStreamId(uint32_t& streamId);
131         AudioChannel GetChannelCount();
132         int32_t GetSamplingRate();
133         AudioSampleFormat GetSampleFormat();
134         AudioEncodingType GetEncodingType();
135         int64_t GetFramesWritten();
136         void GetRendererInfo(AudioRendererInfo& rendererInfo);
137         bool GetAudioTime(Timestamp &timestamp, Timestamp::Timestampbase base);
138         int32_t GetFrameSizeInCallback();
139         int32_t GetBufferDesc(BufferDesc &bufDesc) const;
140         int32_t Enqueue(const BufferDesc &bufDesc) const;
141         int32_t SetSpeed(float speed);
142         float GetSpeed();
143 
144         void SetRendererCallback(OH_AudioRenderer_Callbacks callbacks, void* userData);
145         void SetPreferredFrameSize(int32_t frameSize);
146 
147         void SetRendererOutputDeviceChangeCallback(OH_AudioRenderer_OutputDeviceChangeCallback callback,
148             void *userData);
149         bool IsFastRenderer();
150     private:
151         std::unique_ptr<AudioRenderer> audioRenderer_;
152         std::shared_ptr<AudioRendererCallback> audioRendererCallback_;
153         std::shared_ptr<OHAudioRendererDeviceChangeCallbackWithInfo> audioRendererDeviceChangeCallbackWithInfo_;
154 };
155 }  // namespace AudioStandard
156 }  // namespace OHOS
157 
158 #endif // OH_AUDIO_RENDERER_H
159