• 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 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 &timestamp, 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