From 543185a53000cc6def5dcb555adc5e3a386167a7 Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Fri, 29 Nov 2024 23:33:28 +0100 Subject: [PATCH] prescale support for video --- client/widgets/VideoWidget.cpp | 22 +++++++++++++++++++++- docs/modders/HD_Graphics.md | 7 ++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/client/widgets/VideoWidget.cpp b/client/widgets/VideoWidget.cpp index 35fe4adcb..4c8b786f3 100644 --- a/client/widgets/VideoWidget.cpp +++ b/client/widgets/VideoWidget.cpp @@ -16,6 +16,7 @@ #include "../media/ISoundPlayer.h" #include "../media/IVideoPlayer.h" #include "../render/Canvas.h" +#include "../render/IScreenHandler.h" #include "../../lib/filesystem/Filesystem.h" @@ -45,7 +46,26 @@ void VideoWidgetBase::playVideo(const VideoPath & fileToPlay) else if(CResourceHandler::get()->existsResource(subTitlePathVideoDir)) subTitleData = JsonNode(subTitlePathVideoDir); - videoInstance = CCS->videoh->open(fileToPlay, scaleFactor); + float preScaleFactor = 1; + VideoPath videoFile = fileToPlay; + if(GH.screenHandler().getScalingFactor() > 1) + { + std::vector factorsToCheck = {GH.screenHandler().getScalingFactor(), 4, 3, 2}; + for(auto factorToCheck : factorsToCheck) + { + std::string name = boost::algorithm::to_upper_copy(videoFile.getName()); + boost::replace_all(name, "VIDEO/", std::string("VIDEO") + std::to_string(factorToCheck) + std::string("X/")); + auto p = VideoPath::builtin(name).addPrefix("VIDEO" + std::to_string(factorToCheck) + "X/"); + if(CResourceHandler::get()->existsResource(p)) + { + preScaleFactor = 1.0 / static_cast(factorToCheck); + videoFile = p; + break; + } + } + } + + videoInstance = CCS->videoh->open(videoFile, scaleFactor * preScaleFactor); if (videoInstance) { pos.w = videoInstance->size().x; diff --git a/docs/modders/HD_Graphics.md b/docs/modders/HD_Graphics.md index fc0f155e8..898dd243c 100644 --- a/docs/modders/HD_Graphics.md +++ b/docs/modders/HD_Graphics.md @@ -12,11 +12,12 @@ If user for example selects 3x resolution and only 2x exists in mod then the 2x ## Mod -For upscaled images you have to use following folders (next to `sprites` and `data` folders): +For upscaled images you have to use following folders (next to `sprites`, `data` and `video` folders): - `sprites2x`, `sprites3x`, `sprites4x` for sprites - `data2x`, `data3x`, `data4x` for images +- `video2x`, `video3x`, `video4x` for videos -The sprites should have the same name and folder structure as in `sprites` and `data` folder. All images that are missing in the upscaled folders are scaled with the selected upscaling filter instead of using prescaled images. +The sprites should have the same name and folder structure as in `sprites`, `data` and `video` folder. All images that are missing in the upscaled folders are scaled with the selected upscaling filter instead of using prescaled images. ### Shadows / Overlays @@ -31,4 +32,4 @@ Same for overlays with `-overlay`. But overlays are **necessary** for some anima Currently needed for: - Flaggable adventure map objects. Overlay must contain a transparent image with white flags on it and will be used to colorize flags to owning player -- Creature battle animations, idle and mouse hover group. Overlay must contain a transparent image with white outline of creature for highlighting on mouse hover) +- Creature battle animations, idle and mouse hover group. Overlay must contain a transparent image with white outline of creature for highlighting on mouse hover