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 #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_system_manager.h" 25 #include "audio_stream_manager.h" 26 27 namespace OHOS { 28 namespace AudioStandard { 29 const std::string AUDIO_STREAM_MGR_NAPI_CLASS_NAME = "AudioStreamManager"; 30 const std::string RENDERERCHANGE_CALLBACK_NAME = "audioRendererChange"; 31 const std::string CAPTURERCHANGE_CALLBACK_NAME = "audioCapturerChange"; 32 33 class NapiAudioStreamMgr { 34 public: 35 NapiAudioStreamMgr(); 36 ~NapiAudioStreamMgr(); 37 38 static napi_value Init(napi_env env, napi_value exports); 39 static napi_value CreateStreamManagerWrapper(napi_env env); 40 41 private: 42 struct AudioStreamMgrAsyncContext : public ContextBase { 43 int32_t intValue; 44 int32_t volType; 45 int32_t contentType; 46 int32_t streamUsage; 47 bool isTrue; 48 bool isLowLatencySupported; 49 bool isActive; 50 AudioStreamInfo audioStreamInfo; 51 NapiAudioStreamMgr *objectInfo; 52 std::vector<std::unique_ptr<AudioRendererChangeInfo>> audioRendererChangeInfos; 53 std::vector<std::unique_ptr<AudioCapturerChangeInfo>> audioCapturerChangeInfos; 54 AudioSceneEffectInfo audioSceneEffectInfo; 55 }; 56 57 static napi_value Construct(napi_env env, napi_callback_info info); 58 static void Destructor(napi_env env, void *nativeObject, void *finalizeHint); 59 static bool CheckContextStatus(std::shared_ptr<AudioStreamMgrAsyncContext> context); 60 static bool CheckAudioStreamManagerStatus(NapiAudioStreamMgr *napi, 61 std::shared_ptr<AudioStreamMgrAsyncContext> context); 62 static NapiAudioStreamMgr* GetParamWithSync(const napi_env &env, napi_callback_info info, 63 size_t &argc, napi_value *args); 64 static napi_value GetCurrentAudioRendererInfos(napi_env env, napi_callback_info info); 65 static napi_value GetCurrentAudioRendererInfosSync(napi_env env, napi_callback_info info); 66 static napi_value GetCurrentAudioCapturerInfos(napi_env env, napi_callback_info info); 67 static napi_value GetCurrentAudioCapturerInfosSync(napi_env env, napi_callback_info info); 68 static napi_value IsAudioRendererLowLatencySupported(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 GetEffectInfoArray(napi_env env, napi_callback_info info); 72 static napi_value GetEffectInfoArraySync(napi_env env, napi_callback_info info); 73 static napi_value GetHardwareOutputSamplingRate(napi_env env, napi_callback_info info); 74 static napi_value On(napi_env env, napi_callback_info info); 75 static napi_value Off(napi_env env, napi_callback_info info); 76 static void RegisterCallback(napi_env env, napi_value jsThis, 77 napi_value *args, const std::string &cbName); 78 static void RegisterCapturerStateChangeCallback(napi_env env, napi_value *args, 79 const std::string &cbName, NapiAudioStreamMgr *napiStreamMgr); 80 static void RegisterRendererStateChangeCallback(napi_env env, napi_value *args, 81 const std::string &cbName, NapiAudioStreamMgr *napiStreamMgr); 82 static void UnregisterCallback(napi_env env, napi_value jsThis, const std::string &cbName); 83 84 napi_env env_; 85 AudioStreamManager *audioStreamMngr_; 86 int32_t cachedClientId_ = -1; 87 std::shared_ptr<AudioRendererStateChangeCallback> rendererStateChangeCallbackNapi_ = nullptr; 88 std::shared_ptr<AudioCapturerStateChangeCallback> capturerStateChangeCallbackNapi_ = nullptr; 89 }; 90 } // namespace AudioStandard 91 } // namespace OHOS 92 #endif /* NAPI_AUDIO_STREAM_MANAGER_H */ 93