From 61824c1f7d76f8a46e4db398f0835138ff410915 Mon Sep 17 00:00:00 2001 From: Ylva Selling Date: Fri, 13 Jan 2023 12:16:28 -0500 Subject: [PATCH] Add some initialization values, print meta data and get resolution of video --- .../src/tileprovider/ffmpegtileprovider.cpp | 34 +++++++++++++++++++ .../src/tileprovider/ffmpegtileprovider.h | 6 ++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/modules/globebrowsing/src/tileprovider/ffmpegtileprovider.cpp b/modules/globebrowsing/src/tileprovider/ffmpegtileprovider.cpp index c9dba5460b..1b1e5e571f 100644 --- a/modules/globebrowsing/src/tileprovider/ffmpegtileprovider.cpp +++ b/modules/globebrowsing/src/tileprovider/ffmpegtileprovider.cpp @@ -150,6 +150,10 @@ FfmpegTileProvider::FfmpegTileProvider(const ghoul::Dictionary& dictionary) { Tile FfmpegTileProvider::tile(const TileIndex& tileIndex) { ZoneScoped + if (!_isInitialized) { + return Tile(); + } + // Look for tile in cache cache::ProviderTileKey key = { tileIndex, _prevVideoTime }; // TODO: Improve caching with a better id cache::MemoryAwareTileCache* tileCache = @@ -577,6 +581,36 @@ void FfmpegTileProvider::internalInitialize() { //Observe video parameters mpv_observe_property(_mpvHandle, 0, "video-params", MPV_FORMAT_NODE); + // Print meta data + mpv_node node; + mpv_get_property(_mpvHandle, "metadata", MPV_FORMAT_NODE, &node); + if (node.format == MPV_FORMAT_NODE_MAP) { + for (int n = 0; n < node.u.list->num; n++) { + if (node.u.list->values[n].format == MPV_FORMAT_STRING) { + LINFO(node.u.list->values[n].u.string); + } + } + } + else { + LWARNING("No meta data could be read"); + } + + // Get resolution of video + int64_t width, height = 0; + result = mpv_get_property(_mpvHandle, "width", MPV_FORMAT_INT64, &width); + int result2 = mpv_get_property(_mpvHandle, "height", MPV_FORMAT_INT64, &height); + if (!checkMpvError(result) || !checkMpvError(result2)) + { + LWARNING("Could not load video resolution"); + } + + if (width > 0 && height > 0) { + _resolution = { width, height }; + } + else { + LWARNING("Invalid video resolution"); + } + //Create FBO to render video into createFBO(_resolution.x, _resolution.y); diff --git a/modules/globebrowsing/src/tileprovider/ffmpegtileprovider.h b/modules/globebrowsing/src/tileprovider/ffmpegtileprovider.h index a95b9433ab..327b2e941a 100644 --- a/modules/globebrowsing/src/tileprovider/ffmpegtileprovider.h +++ b/modules/globebrowsing/src/tileprovider/ffmpegtileprovider.h @@ -86,10 +86,10 @@ private: glm::ivec2 _resolution = { 2048, 1024 }; // libmpv - mpv_handle* _mpvHandle; - mpv_render_context* _mpvRenderContext; - GLuint _fbo = 0; + mpv_handle* _mpvHandle = nullptr; + mpv_render_context* _mpvRenderContext = nullptr; ghoul::opengl::Texture* _frameTexture = nullptr; + GLuint _fbo = 0; TileTextureInitData::HashKey _frameTextureHashKey; };