• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 AUDIO_LOOPBACK_PRIVATE_H
16 #define AUDIO_LOOPBACK_PRIVATE_H
17 
18 #include "audio_loopback.h"
19 #include "audio_renderer.h"
20 #include "audio_capturer.h"
21 namespace OHOS {
22 namespace AudioStandard {
23 
24 class AudioLoopbackPrivate : public AudioLoopback,
25                              public std::enable_shared_from_this<AudioLoopbackPrivate>,
26                              public AudioCapturerReadCallback,
27                              public AudioRendererWriteCallback {
28 public:
29     explicit AudioLoopbackPrivate(AudioLoopbackMode mode, const AppInfo &appInfo);
30     virtual ~AudioLoopbackPrivate();
31 
32     bool Enable(bool enable) override;
33     AudioLoopbackStatus GetStatus() override;
34     int32_t SetVolume(float volume) override;
35     int32_t SetAudioLoopbackCallback(const std::shared_ptr<AudioLoopbackCallback> &callback) override;
36     int32_t RemoveAudioLoopbackCallback() override;
37     void OnWriteData(size_t length) override;
38     void OnReadData(size_t length) override;
39 
40     bool SetReverbPreset(AudioLoopbackReverbPreset preset) override;
41     AudioLoopbackReverbPreset GetReverbPreset() override;
42     bool SetEqualizerPreset(AudioLoopbackEqualizerPreset preset) override;
43     AudioLoopbackEqualizerPreset GetEqualizerPreset() override;
44 
45 private:
46 
47     class RendererCallbackImpl : public AudioRendererCallback,
48                                  public AudioRendererOutputDeviceChangeCallback,
49                                  public AudioRendererFastStatusChangeCallback {
50     public:
51         explicit RendererCallbackImpl(AudioLoopbackPrivate &parent);
OnInterrupt(const InterruptEvent & interruptEvent)52         void OnInterrupt(const InterruptEvent &interruptEvent) override {}
53         void OnStateChange(const RendererState state, const StateChangeCmdType cmdType) override;
54         void OnOutputDeviceChange(const AudioDeviceDescriptor &deviceInfo,
55             const AudioStreamDeviceChangeReason reason) override;
56         void OnFastStatusChange(FastStatus status) override;
57 
58     private:
59         AudioLoopbackPrivate &parent_;
60     };
61 
62     class CapturerCallbackImpl : public AudioCapturerCallback,
63                                  public AudioCapturerDeviceChangeCallback,
64                                  public AudioCapturerFastStatusChangeCallback {
65     public:
66         explicit CapturerCallbackImpl(AudioLoopbackPrivate &parent);
OnInterrupt(const InterruptEvent & interruptEvent)67         void OnInterrupt(const InterruptEvent &interruptEvent) override {}
68         void OnStateChange(const CapturerState state) override;
69         void OnStateChange(const AudioDeviceDescriptor &deviceInfo) override;
70         void OnFastStatusChange(FastStatus status) override;
71 
72     private:
73         AudioLoopbackPrivate &parent_;
74     };
75     void InitStatus();
76     void InitializeCallbacks();
77     void UpdateStatus();
78     AudioLoopbackState GetCurrentState();
79     AudioRendererOptions GenerateRendererConfig();
80     AudioCapturerOptions GenerateCapturerConfig();
81 
82     void CreateAudioLoopback();
83     void DestroyAudioLoopback();
84     void DestroyAudioLoopbackInner();
85     bool IsAudioLoopbackSupported();
86     bool CheckDeviceSupport();
87     bool EnableLoopback();
88     void DisableLoopback();
89     AudioLoopbackStatus StateToStatus(AudioLoopbackState state);
90 
91     AudioRendererOptions rendererOptions_;
92     AudioCapturerOptions capturerOptions_;
93     AppInfo appInfo_ = {};
94     std::map<std::string, std::string> karaokeParams_ = {};
95     std::shared_ptr<AudioRenderer> audioRenderer_;
96     std::shared_ptr<AudioCapturer> audioCapturer_;
97     std::mutex loopbackMutex_;
98     std::mutex stateMutex_;
99     std::shared_ptr<AudioLoopbackCallback> statusCallback_;
100     AudioLoopbackState currentState_ = LOOPBACK_STATE_IDLE;
101     AudioLoopbackMode mode_ = LOOPBACK_HARDWARE;
102 
103     std::atomic<RendererState> rendererState_ = RENDERER_INVALID;
104     std::atomic<bool> isRendererUsb_ = false;
105     std::atomic<FastStatus> rendererFastStatus_ = FASTSTATUS_NORMAL;
106 
107     std::atomic<CapturerState> capturerState_ = CAPTURER_INVALID;
108     std::atomic<bool> isCapturerUsb_ = false;
109     std::atomic<FastStatus> capturerFastStatus_ = FASTSTATUS_NORMAL;
110     AudioLoopbackReverbPreset currentReverbPreset_ = REVERB_PRESET_THEATRE;
111     AudioLoopbackEqualizerPreset currentEqualizerPreset_ = EQUALIZER_PRESET_FULL;
112 };
113 }  // namespace AudioStandard
114 }  // namespace OHOS
115 #endif // AUDIO_LOOPBACK_PRIVATE_H
116