• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 #include "webview_media_ffi.h"
17 
18 #include "webview_utils.h"
19 #include "nweb_helper.h"
20 #include "nweb_init_params.h"
21 #include "web_errors.h"
22 #include "webview_log.h"
23 #include "parameters.h"
24 #include "cj_lambda.h"
25 #include "webview_utils.h"
26 #include "web_native_media_player.h"
27 #include "web_runtime_delegate.h"
28 
29 using namespace OHOS::FFI;
30 using namespace OHOS::NWeb;
31 
32 namespace OHOS {
33 namespace Webview {
34 extern "C" {
35     // NativeMediaPlayerBridge
FfiOHOSNativeMediaPlayerBridgeRegisterCJFuncs(AtCMediaPlayer cjFuncs)36     void FfiOHOSNativeMediaPlayerBridgeRegisterCJFuncs(AtCMediaPlayer cjFuncs)
37     {
38         bool result = WebRuntimeDelegate::GetInstance().RegisterCJFuncs(cjFuncs);
39         if (!result) {
40             WEBVIEWLOGE("AtCMediaPlayer register failed");
41         }
42     }
43 
44     // NativeMediaPlayerHandler
FfiOHOSNmphConstructor()45     int64_t FfiOHOSNmphConstructor()
46     {
47         auto Nmph = FFIData::Create<NativeMediaPlayerHandlerImpl>();
48         if (Nmph == nullptr) {
49             return -1;
50         }
51         return Nmph->GetID();
52     }
53 
FfiOHOSNmphhandleVideoSizeChanged(int64_t id,double width,double height)54     int32_t FfiOHOSNmphhandleVideoSizeChanged(int64_t id, double width, double height)
55     {
56         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
57         if (Nmph == nullptr) {
58             return NWebError::INIT_ERROR;
59         }
60         Nmph->HandleVideoSizeChanged(width, height);
61         return NWebError::NO_ERROR;
62     }
63 
FfiOHOSNmphhandleError(int64_t id,int32_t error,const char * errorMessage)64     int32_t FfiOHOSNmphhandleError(int64_t id, int32_t error, const char* errorMessage)
65     {
66         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
67         if (Nmph == nullptr) {
68             return NWebError::INIT_ERROR;
69         }
70         Nmph->HandleError(static_cast<NWeb::MediaError>(error), errorMessage);
71         return NWebError::NO_ERROR;
72     }
73 
FfiOHOSNmphhandleSeekFinished(int64_t id)74     int32_t FfiOHOSNmphhandleSeekFinished(int64_t id)
75     {
76         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
77         if (Nmph == nullptr) {
78             return NWebError::INIT_ERROR;
79         }
80         Nmph->HandleSeekFinished();
81         return NWebError::NO_ERROR;
82     }
83 
FfiOHOSNmphhandleSeeking(int64_t id)84     int32_t FfiOHOSNmphhandleSeeking(int64_t id)
85     {
86         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
87         if (Nmph == nullptr) {
88             return NWebError::INIT_ERROR;
89         }
90         Nmph->HandleSeeking();
91         return NWebError::NO_ERROR;
92     }
93 
FfiOHOSNmphhandleFullscreenChanged(int64_t id,bool fullscreen)94     int32_t FfiOHOSNmphhandleFullscreenChanged(int64_t id, bool fullscreen)
95     {
96         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
97         if (Nmph == nullptr) {
98             return NWebError::INIT_ERROR;
99         }
100         Nmph->HandleFullScreenChanged(fullscreen);
101         return NWebError::NO_ERROR;
102     }
103 
FfiOHOSNmphhandleReadyStateChanged(int64_t id,int32_t state)104     int32_t FfiOHOSNmphhandleReadyStateChanged(int64_t id, int32_t state)
105     {
106         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
107         if (Nmph == nullptr) {
108             return NWebError::INIT_ERROR;
109         }
110         Nmph->HandleReadyStateChanged(static_cast<NWeb::ReadyState>(state));
111         return NWebError::NO_ERROR;
112     }
113 
FfiOHOSNmphhandleNetworkStateChanged(int64_t id,int32_t state)114     int32_t FfiOHOSNmphhandleNetworkStateChanged(int64_t id, int32_t state)
115     {
116         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
117         if (Nmph == nullptr) {
118             return NWebError::INIT_ERROR;
119         }
120         Nmph->HandleNetworkStateChanged(static_cast<NWeb::NetworkState>(state));
121         return NWebError::NO_ERROR;
122     }
123 
FfiOHOSNmphhandleEnded(int64_t id)124     int32_t FfiOHOSNmphhandleEnded(int64_t id)
125     {
126         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
127         if (Nmph == nullptr) {
128             return NWebError::INIT_ERROR;
129         }
130         Nmph->HandleEnded();
131         return NWebError::NO_ERROR;
132     }
133 
FfiOHOSNmphhandleBufferedEndTimeChanged(int64_t id,double bufferedEndTime)134     int32_t FfiOHOSNmphhandleBufferedEndTimeChanged(int64_t id, double bufferedEndTime)
135     {
136         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
137         if (Nmph == nullptr) {
138             return NWebError::INIT_ERROR;
139         }
140         Nmph->HandleBufferedEndTimeChanged(bufferedEndTime);
141         return NWebError::NO_ERROR;
142     }
143 
FfiOHOSNmphhandleTimeUpdate(int64_t id,double currentPlayTime)144     int32_t FfiOHOSNmphhandleTimeUpdate(int64_t id, double currentPlayTime)
145     {
146         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
147         if (Nmph == nullptr) {
148             return NWebError::INIT_ERROR;
149         }
150         Nmph->HandleTimeUpdate(currentPlayTime);
151         return NWebError::NO_ERROR;
152     }
153 
FfiOHOSNmphhandleDurationChanged(int64_t id,double duration)154     int32_t FfiOHOSNmphhandleDurationChanged(int64_t id, double duration)
155     {
156         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
157         if (Nmph == nullptr) {
158             return NWebError::INIT_ERROR;
159         }
160         Nmph->HandleDurationChanged(duration);
161         return NWebError::NO_ERROR;
162     }
163 
FfiOHOSNmphhandlePlaybackRateChanged(int64_t id,double playbackRate)164     int32_t FfiOHOSNmphhandlePlaybackRateChanged(int64_t id, double playbackRate)
165     {
166         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
167         if (Nmph == nullptr) {
168             return NWebError::INIT_ERROR;
169         }
170         Nmph->HandlePlaybackRateChanged(playbackRate);
171         return NWebError::NO_ERROR;
172     }
173 
FfiOHOSNmphhandleMutedChanged(int64_t id,bool muted)174     int32_t FfiOHOSNmphhandleMutedChanged(int64_t id, bool muted)
175     {
176         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
177         if (Nmph == nullptr) {
178             return NWebError::INIT_ERROR;
179         }
180         Nmph->HandleMutedChanged(muted);
181         return NWebError::NO_ERROR;
182     }
183 
FfiOHOSNmphhandleVolumeChanged(int64_t id,double volume)184     int32_t FfiOHOSNmphhandleVolumeChanged(int64_t id, double volume)
185     {
186         auto Nmph = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
187         if (Nmph == nullptr) {
188             return NWebError::INIT_ERROR;
189         }
190         Nmph->HandleVolumeChanged(volume);
191         return NWebError::NO_ERROR;
192     }
193 
FfiOHOSNmphhandleStatusChanged(int64_t id,int32_t status)194     int32_t FfiOHOSNmphhandleStatusChanged(int64_t id, int32_t status)
195     {
196         if (status < static_cast<int32_t>(NWeb::PlaybackStatus::PAUSED)
197         || status > static_cast<int32_t>(NWeb::PlaybackStatus::PLAYING)) {
198             return NWebError::TYPE_NOT_MATCH_WITCH_VALUE;
199         }
200 
201         auto nativeMediaPlayerHandlerImpl = FFIData::GetData<NativeMediaPlayerHandlerImpl>(id);
202         if (nativeMediaPlayerHandlerImpl == nullptr) {
203             return NWebError::INIT_ERROR;
204         }
205         nativeMediaPlayerHandlerImpl->HandleStatusChanged(static_cast<NWeb::PlaybackStatus>(status));
206         return NWebError::NO_ERROR;
207     }
208 }
209 }
210 }