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 AUDIO_SPATIALIZATION_MANAGER_CALLBACK_NAPI_H 16 #define AUDIO_SPATIALIZATION_MANAGER_CALLBACK_NAPI_H 17 18 #include <uv.h> 19 #include "napi/native_api.h" 20 #include "napi/native_node_api.h" 21 #include "napi_async_work.h" 22 #include "napi_audio_manager.h" 23 #include "audio_system_manager.h" 24 #include "audio_spatialization_manager.h" 25 26 namespace OHOS { 27 namespace AudioStandard { 28 const std::string SPATIALIZATION_ENABLED_CHANGE_CALLBACK_NAME = "spatializationEnabledChange"; 29 const std::string SPATIALIZATION_ENABLED_CHANGE_FOR_ANY_DEVICES_CALLBACK_NAME = 30 "spatializationEnabledChangeForAnyDevice"; 31 const std::string HEAD_TRACKING_ENABLED_CHANGE_CALLBACK_NAME = "headTrackingEnabledChange"; 32 const std::string HEAD_TRACKING_ENABLED_CHANGE_FOR_ANY_DEVICES_CALLBACK_NAME = 33 "headTrackingEnabledChangeForAnyDevice"; 34 class NapiAudioSpatializationEnabledChangeCallback : public AudioSpatializationEnabledChangeCallback { 35 public: 36 explicit NapiAudioSpatializationEnabledChangeCallback(napi_env env); 37 virtual ~NapiAudioSpatializationEnabledChangeCallback(); 38 void SaveSpatializationEnabledChangeCallbackReference(napi_value args, const std::string &cbName); 39 void RemoveSpatializationEnabledChangeCallbackReference(napi_env env, napi_value args, const std::string &cbName); 40 void RemoveAllSpatializationEnabledChangeCallbackReference(const std::string &cbName); 41 int32_t GetSpatializationEnabledChangeCbListSize(const std::string &cbName); 42 void OnSpatializationEnabledChange(const bool &enabled) override; 43 void OnSpatializationEnabledChangeForAnyDevice(const sptr<AudioDeviceDescriptor> &deviceDescriptor, 44 const bool &enabled) override; 45 46 private: 47 struct AudioSpatializationEnabledJsCallback { 48 std::shared_ptr<AutoRef> callback = nullptr; 49 sptr<AudioDeviceDescriptor> deviceDescriptor; 50 bool enabled; 51 }; 52 53 void OnJsCallbackSpatializationEnabled(std::unique_ptr<AudioSpatializationEnabledJsCallback> &jsCb); 54 static void WorkCallbackInterruptDone(uv_work_t *work, int status); 55 56 std::mutex mutex_; 57 napi_env env_ = nullptr; 58 std::list<std::shared_ptr<AutoRef>> spatializationEnabledChangeCbList_; 59 std::list<std::shared_ptr<AutoRef>> spatializationEnabledChangeCbForAnyDeviceList_; 60 static bool onSpatializationEnabledChangeFlag_; 61 }; 62 63 class NapiAudioHeadTrackingEnabledChangeCallback : public AudioHeadTrackingEnabledChangeCallback { 64 public: 65 explicit NapiAudioHeadTrackingEnabledChangeCallback(napi_env env); 66 virtual ~NapiAudioHeadTrackingEnabledChangeCallback(); 67 void SaveHeadTrackingEnabledChangeCallbackReference(napi_value args, const std::string &cbName); 68 void RemoveHeadTrackingEnabledChangeCallbackReference(napi_env env, napi_value args, const std::string &cbName); 69 void RemoveAllHeadTrackingEnabledChangeCallbackReference(const std::string &cbName); 70 int32_t GetHeadTrackingEnabledChangeCbListSize(const std::string &cbName); 71 void OnHeadTrackingEnabledChange(const bool &enabled) override; 72 void OnHeadTrackingEnabledChangeForAnyDevice(const sptr<AudioDeviceDescriptor> &deviceDescriptor, 73 const bool &enabled) override; 74 75 private: 76 struct AudioHeadTrackingEnabledJsCallback { 77 std::shared_ptr<AutoRef> callback = nullptr; 78 sptr<AudioDeviceDescriptor> deviceDescriptor; 79 bool enabled; 80 }; 81 82 void OnJsCallbackHeadTrackingEnabled(std::unique_ptr<AudioHeadTrackingEnabledJsCallback> &jsCb); 83 static void WorkCallbackInterruptDone(uv_work_t *work, int status); 84 85 std::mutex mutex_; 86 napi_env env_ = nullptr; 87 std::list<std::shared_ptr<AutoRef>> headTrackingEnabledChangeCbList_; 88 std::list<std::shared_ptr<AutoRef>> headTrackingEnabledChangeCbForAnyDeviceList_; 89 static bool onHeadTrackingEnabledChangeFlag_; 90 }; 91 } // namespace AudioStandard 92 } // namespace OHOS 93 #endif /* AUDIO_SPATIALIZATION_MANAGER_CALLBACK_NAPI_H */