• 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     static constexpr size_t TIME_OUT_SECOND = 5;
40 
41 private:
42     static napi_value ConstructorCallback(napi_env env, napi_callback_info info);
43     static napi_value OnEvent(napi_env env, napi_callback_info info);
44     static napi_value OffEvent(napi_env env, napi_callback_info info);
45 
46     static napi_value SendControlCommand(napi_env env, napi_callback_info info);
47     static napi_value SendCustomData(napi_env env, napi_callback_info info);
48     static napi_value Start(napi_env env, napi_callback_info info);
49     static napi_value Prepare(napi_env env, napi_callback_info info);
50     static napi_value GetDuration(napi_env env, napi_callback_info info);
51     static napi_value GetCastAVPlaybackState(napi_env env, napi_callback_info info);
52     static napi_value GetSupportedDecoders(napi_env env, napi_callback_info info);
53     static napi_value GetRecommendedResolutionLevel(napi_env env, napi_callback_info info);
54     static napi_value GetSupportedHdrCapabilities(napi_env env, napi_callback_info info);
55     static napi_value GetSupportedPlaySpeeds(napi_env env, napi_callback_info info);
56     static napi_value GetCurrentItem(napi_env env, napi_callback_info info);
57     static napi_value GetValidCommands(napi_env env, napi_callback_info info);
58     static napi_value Release(napi_env env, napi_callback_info info);
59     static napi_value SetDisplaySurface(napi_env env, napi_callback_info info);
60     static napi_status SetCastPlaybackStateFilter(napi_env env, NapiAVCastController *napiCastController,
61         napi_value filter);
62     static napi_value ProcessMediaKeyResponse(napi_env env, napi_callback_info info);
63 
64     static napi_status OnPlaybackStateChange(napi_env env, NapiAVCastController* napiCastController,
65         napi_value param, napi_value callback);
66     static napi_status OnMediaItemChange(napi_env env, NapiAVCastController* napiCastController,
67         napi_value param, napi_value callback);
68 
69     static napi_status OnPlayNext(napi_env env, NapiAVCastController* napiCastController,
70         napi_value param, napi_value callback);
71     static napi_status OnPlayPrevious(napi_env env, NapiAVCastController* napiCastController,
72         napi_value param, napi_value callback);
73     static napi_status OnRequestPlay(napi_env env, NapiAVCastController* napiCastController,
74         napi_value param, napi_value callback);
75     static napi_status OnSeekDone(napi_env env, NapiAVCastController* napiCastController,
76         napi_value param, napi_value callback);
77     static napi_status OnValidCommandChange(napi_env env, NapiAVCastController* napiCastController,
78         napi_value param, napi_value callback);
79     static napi_status OnVideoSizeChange(napi_env env, NapiAVCastController* napiCastController,
80         napi_value param, napi_value callback);
81     static napi_status OnPlayerError(napi_env env, NapiAVCastController* napiCastController,
82         napi_value param, napi_value callback);
83     static napi_status OnCastControlGenericError(napi_env env, NapiAVCastController* napiCastController,
84         napi_value param, napi_value callback);
85     static napi_status OnCastControlIoError(napi_env env, NapiAVCastController* napiCastController,
86         napi_value param, napi_value callback);
87     static napi_status OnCastControlParsingError(napi_env env, NapiAVCastController* napiCastController,
88         napi_value param, napi_value callback);
89     static napi_status OnCastControlDecodingError(napi_env env, NapiAVCastController* napiCastController,
90         napi_value param, napi_value callback);
91     static napi_status OnCastControlAudioRendererError(napi_env env, NapiAVCastController* napiCastController,
92         napi_value param, napi_value callback);
93     static napi_status OnCastControlDrmError(napi_env env, NapiAVCastController* napiCastController,
94         napi_value param, napi_value callback);
95     static napi_status OnEndOfStream(napi_env env, NapiAVCastController* napiCastController,
96         napi_value param, napi_value callback);
97     static napi_status OnPlayRequest(napi_env env, NapiAVCastController* napiCastController,
98         napi_value param, napi_value callback);
99     static napi_status OnKeyRequest(napi_env env, NapiAVCastController* napiCastController,
100         napi_value param, napi_value callback);
101     static napi_status OnCustomData(napi_env env, NapiAVCastController* napiCastController,
102         napi_value param, napi_value callback);
103 
104     static napi_status OffPlaybackStateChange(napi_env env, NapiAVCastController* napiCastController,
105         napi_value callback);
106     static napi_status OffMediaItemChange(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
107     static napi_status OffPlayNext(napi_env env, NapiAVCastController* napiCastController,
108         napi_value callback);
109     static napi_status OffPlayPrevious(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
110     static napi_status OffRequestPlay(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
111     static napi_status OffSeekDone(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
112     static napi_status OffValidCommandChange(napi_env env, NapiAVCastController* napiCastController,
113         napi_value callback);
114     static napi_status OffVideoSizeChange(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
115     static napi_status OffPlayerError(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
116     static napi_status OffCastControlGenericError(napi_env env,
117         NapiAVCastController* napiCastController, napi_value callback);
118     static napi_status OffCastControlIoError(napi_env env,
119         NapiAVCastController* napiCastController, napi_value callback);
120     static napi_status OffCastControlParsingError(napi_env env,
121         NapiAVCastController* napiCastController, napi_value callback);
122     static napi_status OffCastControlDecodingError(napi_env env,
123         NapiAVCastController* napiCastController, napi_value callback);
124     static napi_status OffCastControlAudioRendererError(napi_env env,
125         NapiAVCastController* napiCastController, napi_value callback);
126     static napi_status OffCastControlDrmError(napi_env env,
127         NapiAVCastController* napiCastController, napi_value callback);
128     static napi_status OffEndOfStream(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
129     static napi_status OffPlayRequest(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
130     static napi_status OffKeyRequest(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
131     static napi_status OffCustomData(napi_env env, NapiAVCastController* napiCastController, napi_value callback);
132 
133     static std::function<void()> PrepareAsyncExecutor(std::shared_ptr<AVCastController> castController_,
134         AVQueueItem& avQueueItem);
135 
136     static void ErrCodeToMessage(int32_t errCode, std::string& message);
137     static napi_status RegisterCallback(napi_env env, const std::shared_ptr<ContextBase>& context,
138         const std::string& event, napi_value filter, napi_value callback);
139     static void ReportStartFailInfo(int error);
140     static void ReportSendControlCommandFailInfo(int error);
141     static std::string GetSendControlCommandErrMsg(int32_t error);
142     static void CheckSendCtrlCmdReportRadar(bool condition, int32_t error);
143     static void CheckStartReportRadar(bool condition, int32_t error);
144     static int32_t DownloadCastImg(std::shared_ptr<AVMediaDescription> description, const std::string& uri);
145 
146     static napi_status getDataSrc(napi_env env, napi_value avQueueItem,
147         std::shared_ptr<NapiAVCastControllerCallback> controllerCallback);
148     static napi_value readDataSrc(napi_env env, napi_value fileSize, napi_ref callback);
149 
150     napi_ref wrapperRef_ {};
151     std::shared_ptr<AVCastController> castController_;
152     std::shared_ptr<NapiAVCastControllerCallback> callback_;
153 
154     static constexpr size_t ARGC_ONE = 1;
155     static constexpr size_t ARGC_TWO = 2;
156     static constexpr size_t ARGC_THREE = 3;
157 
158     static constexpr size_t ARGV_FIRST = 0;
159     static constexpr size_t ARGV_SECOND = 1;
160     static constexpr size_t ARGV_THIRD = 2;
161 
162     static std::map<std::string, std::pair<OnEventHandlerType, OffEventHandlerType>> EventHandlers_;
163 };
164 } // namespace OHOS::AVSession
165 #endif // OHOS_NAPI_AVCAST_CONTROLLER_H
166