• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #undef LOG_TAG
16 #define LOG_TAG "NapiAudioLoopbackCallbackInner"
17 
18 #include "napi_audio_loopback_callback_inner.h"
19 
20 namespace OHOS {
21 namespace AudioStandard {
22 
SaveCallbackReferenceInner(const std::string & callbackName,napi_value args,std::function<void (std::shared_ptr<AutoRef> generatedCallback)> successed)23 void NapiAudioLoopbackCallbackInner::SaveCallbackReferenceInner(const std::string &callbackName, napi_value args,
24     std::function<void(std::shared_ptr<AutoRef> generatedCallback)> successed)
25 {
26     CHECK_AND_RETURN_LOG(CheckIfTargetCallbackName(callbackName),
27         "NapiAudioLoopbackCallbackInner-> SaveCallbackReferenceInner UnKnown callback type: %{public}s",
28         callbackName.c_str());
29     napi_ref callback = nullptr;
30     const int32_t refCount = 1;
31     napi_env env = GetEnv();
32     napi_status status = napi_create_reference(env, args, refCount, &callback);
33     CHECK_AND_RETURN_LOG(status == napi_ok && callback != nullptr, "Creating reference for callback fail");
34 
35     if (successed != nullptr) {
36         std::shared_ptr<AutoRef> cb = std::make_shared<AutoRef>(env, callback);
37         successed(cb);
38     }
39 }
40 
ContainSameJsCallbackInner(const std::string & callbackName,napi_value args)41 bool NapiAudioLoopbackCallbackInner::ContainSameJsCallbackInner(const std::string &callbackName, napi_value args)
42 {
43     CHECK_AND_RETURN_RET_LOG(CheckIfTargetCallbackName(callbackName), false,
44         "NapiAudioLoopbackCallbackInner->ContainSameJsCallbackInner Unknown callback type: %{public}s",
45         callbackName.c_str());
46     CHECK_AND_RETURN_RET_LOG(args != nullptr, false, "args is nullptr");
47     napi_env env = GetEnv();
48     std::shared_ptr<AutoRef> callbackCur = GetCallback(callbackName);
49     napi_value copyValue = nullptr;
50     CHECK_AND_RETURN_RET_LOG(env != nullptr, false, "env is null");
51     CHECK_AND_RETURN_RET_LOG(callbackCur != nullptr, false, "callbackCur is null");
52     CHECK_AND_RETURN_RET_LOG(callbackCur->cb_ != nullptr, false, "callbackCur.cb_ is null");
53 
54     napi_get_reference_value(env, callbackCur->cb_, &copyValue);
55     bool isEquals = false;
56     CHECK_AND_RETURN_RET_LOG(
57         napi_strict_equals(env, copyValue, args, &isEquals) == napi_ok, false, "Get napi_strict_equals failed");
58     return isEquals;
59 }
60 
RemoveCallbackReferenceInner(const std::string & callbackName,napi_env env,napi_value callback,std::function<void ()> successed)61 void NapiAudioLoopbackCallbackInner::RemoveCallbackReferenceInner(
62     const std::string &callbackName, napi_env env, napi_value callback, std::function<void()> successed)
63 {
64     CHECK_AND_RETURN_LOG(CheckIfTargetCallbackName(callbackName),
65         "NapiAudioRendererCallbackInner->RemoveCallbackReferenceInner Unknown callback type: %{public}s",
66         callbackName.c_str());
67     std::shared_ptr<AutoRef> callbackCur = GetCallback(callbackName);
68     if (callback == nullptr) {
69         callbackCur = nullptr;
70         if (successed != nullptr) {
71             successed();
72         }
73         return;
74     }
75 
76     CHECK_AND_RETURN_LOG(ContainSameJsCallbackInner(callbackName, callback),
77         "NapiAudioRendererCallbackInner->RemoveCallbackReferenceInner wrong callback to remove %{public}s",
78         callbackName.c_str());
79     callbackCur = nullptr;
80     if (successed != nullptr) {
81         successed();
82     }
83 }
84 }  // namespace AudioStandard
85 }  // namespace OHOS