• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 #ifndef OHOS_NAPI_AVCAST_CONTROLLER_H
17 #define OHOS_NAPI_AVCAST_CONTROLLER_H
18 
19 #include "avcast_controller.h"
20 #include "avsession_log.h"
21 #include "avsession_manager.h"
22 #include "napi/native_api.h"
23 #include "napi/native_node_api.h"
24 #include "napi_avcast_controller_callback.h"
25 #include "napi_async_work.h"
26 
27 namespace OHOS::AVSession {
28 class NapiAVCastController {
29 public:
30     NapiAVCastController();
31     ~NapiAVCastController();
32 
33     static napi_value Init(napi_env env, napi_value exports);
34     static napi_status NewInstance(napi_env env, std::shared_ptr<AVCastController>& nativeController,
35         napi_value& out);
36 
37     using OnEventHandlerType = std::function<napi_status(napi_env, NapiAVCastController*, napi_value, napi_value)>;
38     using OffEventHandlerType = std::function<napi_status(napi_env, NapiAVCastController*, napi_value)>;
39 
40 private:
41     static napi_value ConstructorCallback(napi_env env, napi_callback_info info);
42     static napi_value OnEvent(napi_env env, napi_callback_info info);
43     static napi_value OffEvent(napi_env env, napi_callback_info info);
44 
45     static napi_value SendControlCommand(napi_env env, napi_callback_info info);
46     static napi_value Start(napi_env env, napi_callback_info info);
47     static napi_value Prepare(napi_env env, napi_callback_info info);
48     static napi_value GetDuration(napi_env env, napi_callback_info info);
49     static napi_value GetCastAVPlaybackState(napi_env env, napi_callback_info info);
50     static napi_value GetCurrentItem(napi_env env, napi_callback_info info);
51     static napi_value SetDisplaySurface(napi_env env, napi_callback_info info);
52     static napi_status SetCastPlaybackStateFilter(napi_env env, NapiAVCastController *napiCastController,
53         napi_value filter);
54 
55     static napi_status OnPlaybackStateChange(napi_env env, NapiAVCastController* napiCastController,
56         napi_value param, napi_value callback);
57     static napi_status OnMediaItemChange(napi_env env, NapiAVCastController* napiCastController,
58         napi_value param, napi_value callback);
59 
60     static napi_status OnPlayNext(napi_env env, NapiAVCastController* napiCastController,
61         napi_value param, napi_value callback);
62     static napi_status OnPlayPrevious(napi_env env, NapiAVCastController* napiCastController,
63         napi_value param, napi_value callback);
64     static napi_status OnSeekDone(napi_env env, NapiAVCastController* napiCastController,
65         napi_value param, napi_value callback);
66     static napi_status OnVideoSizeChange(napi_env env, NapiAVCastController* napiCastController,
67         napi_value param, napi_value callback);
68     static napi_status OnPlayerError(napi_env env, NapiAVCastController* napiCastController,
69         napi_value param, napi_value callback);
70     static napi_status OnEndOfStream(napi_env env, NapiAVCastController* napiCastController,
71         napi_value param, napi_value callback);
72 
73     static napi_status OffPlaybackStateChange(napi_env env, NapiAVCastController* napiCastController,
74         napi_value callback);
75     static napi_status OffMediaItemChange(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
76     static napi_status OffPlayNext(napi_env env, NapiAVCastController* napiCastController,
77         napi_value callback);
78     static napi_status OffPlayPrevious(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
79     static napi_status OffSeekDone(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
80     static napi_status OffVideoSizeChange(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
81     static napi_status OffPlayerError(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
82     static napi_status OffEndOfStream(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
83 
84     static void ErrCodeToMessage(int32_t errCode, std::string& message);
85     static napi_status RegisterCallback(napi_env env, const std::shared_ptr<ContextBase>& context,
86         const std::string& event, napi_value filter, napi_value callback);
87 
88     napi_ref wrapperRef_ {};
89     std::shared_ptr<AVCastController> castController_;
90     std::shared_ptr<NapiAVCastControllerCallback> callback_;
91 
92     static constexpr size_t ARGC_ONE = 1;
93     static constexpr size_t ARGC_TWO = 2;
94     static constexpr size_t ARGC_THREE = 3;
95 
96     static constexpr size_t ARGV_FIRST = 0;
97     static constexpr size_t ARGV_SECOND = 1;
98     static constexpr size_t ARGV_THIRD = 2;
99 
100     static std::map<std::string, std::pair<OnEventHandlerType, OffEventHandlerType>> EventHandlers_;
101 };
102 } // namespace OHOS::AVSession
103 #endif // OHOS_NAPI_AVCAST_CONTROLLER_H
104