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 }