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