// // JSVideo_IOSImpl.cpp // conchRuntime // // Created by LayaBox on 2018/11/2. // Copyright © 2018 LayaBox. All rights reserved. // #ifdef __APPLE__ #include "JSVideo.h" #include "../../../CToObjectC.h" namespace laya { std::set JSVideo::ms_supportFormat = { "video/mp4", }; struct IOSVideoHandler : public IVideoHandler { IOSVideoHandler() { obj = nullptr; } virtual ~IOSVideoHandler() { } virtual bool isFrameUpdated() { if(!obj) return false; bool ret = false; CToObjectVideoPlayerIsFrameUpdate(obj, &ret); return ret; } virtual void updateBitmapData(BitmapData* bitmapData) { if(obj == nullptr) return; CToObjectVideoPlayerGetBitmap(obj, bitmapData); } void* obj; }; static inline void* GetObj(IVideoHandler* videoHandler) { IOSVideoHandler* pHandler = static_cast(videoHandler); return pHandler->obj; } static inline void** GetObjPtr(IVideoHandler* videoHandler) { IOSVideoHandler* pHandler = static_cast(videoHandler); return &pHandler->obj; } static inline void EmptyObj(IVideoHandler* videoHandler) { IOSVideoHandler* pHandler = static_cast(videoHandler); pHandler->obj = nullptr; } JSVideo::JSVideo() { Init(); AdjustAmountOfExternalAllocatedMemory(sizeof(JSVideo)); JCMemorySurvey::GetInstance()->newClass("JSVideo", sizeof(JSVideo), this); m_pVideoHandler = new IOSVideoHandler(); // released it by JCVideo in render thread CToObjectNewVideoPlayer(GetObjPtr(m_pVideoHandler), std::bind(&JSVideo::CallHandle, this, std::placeholders::_1)); m_pJCVideo->setVideoHandler(m_pVideoHandler); } JSVideo::~JSVideo() { Dispose(); JCMemorySurvey::GetInstance()->releaseClass("JSVideo", this); } void JSVideo::_releaseHandler() { CToObjectDisposeVideoPlayer(GetObj(m_pVideoHandler)); EmptyObj(m_pVideoHandler); } void JSVideo::LoadInternal(const std::string& path) { CToObjectVideoPlayerLoad(GetObj(m_pVideoHandler), path.c_str()); } void JSVideo::Play() { if(m_isDownloadWaitLoad) { m_isDownloadWaitPlay = true; return; } m_isDownloadWaitPlay = false; CToObjectVideoPlayerPlay(GetObj(m_pVideoHandler)); } void JSVideo::Pause() { m_isDownloadWaitPlay = false; CToObjectVideoPlayerPause(GetObj(m_pVideoHandler)); } void JSVideo::Stop() { NOT_IMPLEMENT(); } bool JSVideo::GetPaused() { bool ret = false; CToObjectVideoPlayerGetPaused(GetObj(m_pVideoHandler), &ret); return ret; } bool JSVideo::GetLoop() { bool ret = false; CToObjectVideoPlayerGetLoop(GetObj(m_pVideoHandler), &ret); return ret; } void JSVideo::SetLoop(bool value) { CToObjectVideoPlayerSetLoop(GetObj(m_pVideoHandler), value); } void JSVideo::SetX(double val) { CToObjectVideoPlayerSetX(GetObj(m_pVideoHandler), val); } double JSVideo::GetX() { NOT_IMPLEMENT_RET(0); } void JSVideo::SetY(double val) { CToObjectVideoPlayerSetY(GetObj(m_pVideoHandler), val); } double JSVideo::GetY() { NOT_IMPLEMENT_RET(0); } double JSVideo::GetVideoWidth() { double ret = 0; CToObjectVideoPlayerGetVideoWidth(GetObj(m_pVideoHandler), &ret); return ret; } double JSVideo::GetVideoHeight() { double ret = 0; CToObjectVideoPlayerGetVideoHeight(GetObj(m_pVideoHandler), &ret); return ret; } double JSVideo::GetWidth() { double ret = 0; CToObjectVideoPlayerGetWidth(GetObj(m_pVideoHandler), &ret); return ret; } void JSVideo::SetWidth(double val) { CToObjectVideoPlayerSetWidth(GetObj(m_pVideoHandler), val); } double JSVideo::GetHeight() { double ret = 0; CToObjectVideoPlayerGetHeight(GetObj(m_pVideoHandler), &ret); return ret; } void JSVideo::SetHeight(double val) { CToObjectVideoPlayerSetHeight(GetObj(m_pVideoHandler), val); } double JSVideo::GetCurrentTime() { double ret = 0; CToObjectVideoPlayerGetCurrentTime(GetObj(m_pVideoHandler), &ret); return ret; } void JSVideo::SetCurrentTime(double val) { CToObjectVideoPlayerSetCurrentTime(GetObj(m_pVideoHandler), val); } double JSVideo::GetDuration() { double ret = 0; CToObjectVideoPlayerGetDuration(GetObj(m_pVideoHandler), &ret); return ret; } double JSVideo::GetVolume() { double ret = 0; CToObjectVideoPlayerGetVolume(GetObj(m_pVideoHandler), &ret); return ret; } void JSVideo::SetVolume(double val) { CToObjectVideoPlayerSetVolume(GetObj(m_pVideoHandler), val); } int32_t JSVideo::GetReadyState() { int32_t ret = 0; CToObjectVideoPlayerGetReadyState(GetObj(m_pVideoHandler), &ret); return ret; } void JSVideo::SetAutoplay(bool val) { CToObjectVideoPlayerSetAutoplay(GetObj(m_pVideoHandler), val); } bool JSVideo::GetAutoplay() { bool ret = false; CToObjectVideoPlayerGetAutoplay(GetObj(m_pVideoHandler), &ret); return ret; } }; #endif