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_SPATIALIZATION_MANAGER_H 16 #define NAPI_AUDIO_SPATIALIZATION_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_spatialization_manager.h" 26 27 namespace OHOS { 28 namespace AudioStandard { 29 const std::string AUDIO_SPATIALIZATION_MANAGER_NAPI_CLASS_NAME = "AudioSpatializationManager"; 30 class NapiAudioSpatializationManager { 31 public: 32 NapiAudioSpatializationManager(); 33 ~NapiAudioSpatializationManager(); 34 35 static napi_value Init(napi_env env, napi_value exports); 36 static napi_value CreateSpatializationManagerWrapper(napi_env env); 37 38 private: 39 struct AudioSpatializationManagerAsyncContext : public ContextBase { 40 sptr<AudioDeviceDescriptor> deviceDescriptor = new(std::nothrow) AudioDeviceDescriptor(); 41 bool spatializationEnable; 42 bool headTrackingEnable; 43 int32_t intValue; 44 AudioSpatialDeviceState spatialDeviceState; 45 }; 46 static bool CheckContextStatus(std::shared_ptr<AudioSpatializationManagerAsyncContext> context); 47 static bool CheckAudioSpatializationManagerStatus(NapiAudioSpatializationManager *napi, 48 std::shared_ptr<AudioSpatializationManagerAsyncContext> context); 49 static NapiAudioSpatializationManager* GetParamWithSync(const napi_env &env, napi_callback_info info, 50 size_t &argc, napi_value *args); 51 static void Destructor(napi_env env, void *nativeObject, void *finalizeHint); 52 static napi_value Construct(napi_env env, napi_callback_info info); 53 static napi_value IsSpatializationEnabled(napi_env env, napi_callback_info info); 54 static napi_value SetSpatializationEnabled(napi_env env, napi_callback_info info); 55 static napi_value IsHeadTrackingEnabled(napi_env env, napi_callback_info info); 56 static napi_value SetHeadTrackingEnabled(napi_env env, napi_callback_info info); 57 static napi_value IsSpatializationSupported(napi_env env, napi_callback_info info); 58 static napi_value IsSpatializationSupportedForDevice(napi_env env, napi_callback_info info); 59 static napi_value IsHeadTrackingSupported(napi_env env, napi_callback_info info); 60 static napi_value IsHeadTrackingSupportedForDevice(napi_env env, napi_callback_info info); 61 static napi_value UpdateSpatialDeviceState(napi_env env, napi_callback_info info); 62 static napi_value GetSpatializationSceneType(napi_env env, napi_callback_info info); 63 static napi_value SetSpatializationSceneType(napi_env env, napi_callback_info info); 64 static napi_value On(napi_env env, napi_callback_info info); 65 static napi_value Off(napi_env env, napi_callback_info info); 66 static void RegisterCallback(napi_env env, napi_value jsThis, 67 napi_value *args, const std::string &cbName); 68 static void RegisterSpatializationEnabledChangeCallback(napi_env env, napi_value *args, 69 const std::string &cbName, NapiAudioSpatializationManager *napiAudioSpatializationManager); 70 static void RegisterHeadTrackingEnabledChangeCallback(napi_env env, napi_value *args, 71 const std::string &cbName, NapiAudioSpatializationManager *napiAudioSpatializationManager); 72 static void UnRegisterCallback(napi_env env, napi_value jsThis, 73 napi_value *args, const std::string &cbName); 74 static void UnregisterSpatializationEnabledChangeCallback(napi_env env, napi_value callback, 75 const std::string &cbName, NapiAudioSpatializationManager *napiAudioSpatializationManager); 76 static void UnregisterHeadTrackingEnabledChangeCallback(napi_env env, napi_value callback, 77 const std::string &cbName, NapiAudioSpatializationManager *napiAudioSpatializationManager); 78 static napi_value updateSpatializationEnabled(napi_env env, const std::size_t argc, 79 std::shared_ptr<AudioSpatializationManagerAsyncContext> &context); 80 static napi_value updateHeadTrackingEnabled(napi_env env, const std::size_t argc, 81 std::shared_ptr<AudioSpatializationManagerAsyncContext> &context); 82 83 AudioSpatializationManager *audioSpatializationMngr_; 84 std::shared_ptr<AudioSpatializationEnabledChangeCallback> spatializationEnabledChangeCallbackNapi_ = nullptr; 85 std::shared_ptr<AudioHeadTrackingEnabledChangeCallback> headTrackingEnabledChangeCallbackNapi_ = nullptr; 86 87 napi_env env_; 88 }; 89 } // namespace AudioStandard 90 } // namespace OHOS 91 #endif /* NAPI_AUDIO_SPATIALIZATION_MANAGER_H */ 92