1 /* 2 * Copyright (c) 2023-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 NAPI_AUDIO_STREAM_MANAGER_H 16 #define NAPI_AUDIO_STREAM_MANAGER_H 17 18 #include <iostream> 19 #include <map> 20 #include <vector> 21 #include "napi/native_api.h" 22 #include "napi/native_node_api.h" 23 #include "napi_async_work.h" 24 #include "audio_policy_interface.h" 25 #include "audio_system_manager.h" 26 #include "audio_stream_manager.h" 27 28 namespace OHOS { 29 namespace AudioStandard { 30 const std::string AUDIO_STREAM_MGR_NAPI_CLASS_NAME = "AudioStreamManager"; 31 const std::string RENDERERCHANGE_CALLBACK_NAME = "audioRendererChange"; 32 const std::string CAPTURERCHANGE_CALLBACK_NAME = "audioCapturerChange"; 33 34 class NapiAudioStreamMgr { 35 public: 36 NapiAudioStreamMgr(); 37 ~NapiAudioStreamMgr(); 38 39 static napi_value Init(napi_env env, napi_value exports); 40 static napi_value CreateStreamManagerWrapper(napi_env env); 41 42 private: 43 struct AudioStreamMgrAsyncContext : public ContextBase { 44 int32_t intValue; 45 int32_t volType; 46 int32_t contentType; 47 int32_t streamUsage; 48 bool isTrue; 49 bool isLowLatencySupported; 50 bool isActive; 51 AudioStreamInfo audioStreamInfo; 52 NapiAudioStreamMgr *objectInfo; 53 std::vector<std::shared_ptr<AudioRendererChangeInfo>> audioRendererChangeInfos; 54 std::vector<std::shared_ptr<AudioCapturerChangeInfo>> audioCapturerChangeInfos; 55 AudioSceneEffectInfo audioSceneEffectInfo; 56 }; 57 58 static napi_value Construct(napi_env env, napi_callback_info info); 59 static void Destructor(napi_env env, void *nativeObject, void *finalizeHint); 60 static bool CheckContextStatus(std::shared_ptr<AudioStreamMgrAsyncContext> context); 61 static bool CheckAudioStreamManagerStatus(NapiAudioStreamMgr *napi, 62 std::shared_ptr<AudioStreamMgrAsyncContext> context); 63 static NapiAudioStreamMgr* GetParamWithSync(const napi_env &env, napi_callback_info info, 64 size_t &argc, napi_value *args); 65 static napi_value GetCurrentAudioRendererInfos(napi_env env, napi_callback_info info); 66 static napi_value GetCurrentAudioRendererInfosSync(napi_env env, napi_callback_info info); 67 static napi_value GetCurrentAudioCapturerInfos(napi_env env, napi_callback_info info); 68 static napi_value GetCurrentAudioCapturerInfosSync(napi_env env, napi_callback_info info); 69 static napi_value IsStreamActive(napi_env env, napi_callback_info info); 70 static napi_value IsStreamActiveSync(napi_env env, napi_callback_info info); 71 static napi_value IsStreamActiveByStreamUsage(napi_env env, napi_callback_info info); 72 static napi_value GetEffectInfoArray(napi_env env, napi_callback_info info); 73 static napi_value GetEffectInfoArraySync(napi_env env, napi_callback_info info); 74 static napi_value GetSupportedAudioEffectProperty(napi_env env, napi_callback_info info); 75 static napi_value GetSupportedAudioEnhanceProperty(napi_env env, napi_callback_info info); 76 static napi_value SetAudioEnhanceProperty(napi_env env, napi_callback_info info); 77 static napi_value GetAudioEnhanceProperty(napi_env env, napi_callback_info info); 78 static napi_value GetAudioEffectProperty(napi_env env, napi_callback_info info); 79 static napi_value SetAudioEffectProperty(napi_env env, napi_callback_info info); 80 static napi_value GetHardwareOutputSamplingRate(napi_env env, napi_callback_info info); 81 static napi_value On(napi_env env, napi_callback_info info); 82 static napi_value Off(napi_env env, napi_callback_info info); 83 static napi_value IsAcousticEchoCancelerSupported(napi_env env, napi_callback_info info); 84 static napi_value IsRecordingAvailable(napi_env env, napi_callback_info info); 85 static napi_value IsAudioLoopbackSupported(napi_env env, napi_callback_info info); 86 static void RegisterCallback(napi_env env, napi_value jsThis, 87 napi_value *args, const std::string &cbName); 88 static void RegisterCapturerStateChangeCallback(napi_env env, napi_value *args, 89 const std::string &cbName, NapiAudioStreamMgr *napiStreamMgr); 90 static void RegisterRendererStateChangeCallback(napi_env env, napi_value *args, 91 const std::string &cbName, NapiAudioStreamMgr *napiStreamMgr); 92 static void UnregisterCallback(napi_env env, napi_value jsThis, size_t argc, napi_value *args, 93 const std::string &cbName); 94 static void UnregisterRendererChangeCallback(NapiAudioStreamMgr *napiStreamMgr, size_t argc, napi_value *args); 95 static void UnregisterCapturerChangeCallback(NapiAudioStreamMgr *napiStreamMgr, size_t argc, napi_value *args); 96 97 napi_env env_; 98 AudioStreamManager *audioStreamMngr_; 99 int32_t cachedClientId_ = -1; 100 std::shared_ptr<AudioRendererStateChangeCallback> rendererStateChangeCallbackNapi_ = nullptr; 101 std::shared_ptr<AudioCapturerStateChangeCallback> capturerStateChangeCallbackNapi_ = nullptr; 102 }; 103 } // namespace AudioStandard 104 } // namespace OHOS 105 #endif /* NAPI_AUDIO_STREAM_MANAGER_H */ 106