From b0c0ea81aba2aa88568cf29659b0a93102f185ad Mon Sep 17 00:00:00 2001 From: Malin E Date: Tue, 21 Mar 2023 15:29:11 +0100 Subject: [PATCH] Make sure video player is initialized for each video renderable --- modules/video/include/screenspacevideo.h | 1 + modules/video/include/videoplayer.h | 2 ++ modules/video/src/renderablevideosphere.cpp | 2 ++ modules/video/src/screenspacevideo.cpp | 6 ++++++ modules/video/src/videoplayer.cpp | 3 +++ modules/video/src/videotileprovider.cpp | 6 ++++-- 6 files changed, 18 insertions(+), 2 deletions(-) diff --git a/modules/video/include/screenspacevideo.h b/modules/video/include/screenspacevideo.h index 788624ddbb..886c04bf40 100644 --- a/modules/video/include/screenspacevideo.h +++ b/modules/video/include/screenspacevideo.h @@ -40,6 +40,7 @@ class ScreenSpaceVideo : public ScreenSpaceRenderable { public: ScreenSpaceVideo(const ghoul::Dictionary& dictionary); + bool initializeGL() override; bool deinitializeGL() override; void update() override; void render() override; diff --git a/modules/video/include/videoplayer.h b/modules/video/include/videoplayer.h index abf0477493..f247f956f5 100644 --- a/modules/video/include/videoplayer.h +++ b/modules/video/include/videoplayer.h @@ -51,6 +51,8 @@ public: VideoPlayer(const ghoul::Dictionary& dictionary); ~VideoPlayer(); + void initialize(); + // Video interaction void pause(); void play(); diff --git a/modules/video/src/renderablevideosphere.cpp b/modules/video/src/renderablevideosphere.cpp index a0384ad64c..9710d0781a 100644 --- a/modules/video/src/renderablevideosphere.cpp +++ b/modules/video/src/renderablevideosphere.cpp @@ -224,6 +224,8 @@ void RenderableVideoSphere::initializeGL() { ); ghoul::opengl::updateUniformLocations(*_shader, _uniformCache, UniformNames); + + _videoPlayer.initialize(); } void RenderableVideoSphere::deinitializeGL() { diff --git a/modules/video/src/screenspacevideo.cpp b/modules/video/src/screenspacevideo.cpp index bd07f5637e..aeee5e30de 100644 --- a/modules/video/src/screenspacevideo.cpp +++ b/modules/video/src/screenspacevideo.cpp @@ -88,6 +88,12 @@ void ScreenSpaceVideo::render() { ScreenSpaceRenderable::render(); } +bool ScreenSpaceVideo::initializeGL() { + _videoPlayer.initialize(); + + return ScreenSpaceRenderable::initializeGL(); +} + bool ScreenSpaceVideo::deinitializeGL() { _videoPlayer.destroy(); diff --git a/modules/video/src/videoplayer.cpp b/modules/video/src/videoplayer.cpp index 0b69929f54..347e1ebdc4 100644 --- a/modules/video/src/videoplayer.cpp +++ b/modules/video/src/videoplayer.cpp @@ -360,6 +360,9 @@ void VideoPlayer::stepFrameBackward() { commandAsyncMpv(cmd); } +void VideoPlayer::initialize() { + initializeMpv(); +} void VideoPlayer::initializeMpv() { _mpvHandle = mpv_create(); diff --git a/modules/video/src/videotileprovider.cpp b/modules/video/src/videotileprovider.cpp index ba6bce6fd1..ae1c2b79ae 100644 --- a/modules/video/src/videotileprovider.cpp +++ b/modules/video/src/videotileprovider.cpp @@ -138,7 +138,7 @@ int VideoTileProvider::minLevel() { } int VideoTileProvider::maxLevel() { - // This is the level where above the tile is marked as unavailable and is no longer + // This is the level where above the tile is marked as unavailable and is no longer // displayed. Since we want to display the tiles at all times we set the max level return 1337; } @@ -147,7 +147,9 @@ float VideoTileProvider::noDataValueAsFloat() { return std::numeric_limits::min(); } -void VideoTileProvider::internalInitialize() {} +void VideoTileProvider::internalInitialize() { + _videoPlayer.initialize(); +} VideoTileProvider::~VideoTileProvider() {}