aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2024-08-06 09:48:37 +0200
committerdec05eba <dec05eba@protonmail.com>2024-08-06 09:48:37 +0200
commit09b44d9681eaf66670f77cbd440300cdc22f3df3 (patch)
tree831d6b9ad914560e61cb4cbba9869d0b78e0336c
parent53448dd1f4cff1bd2b638d7c63b18848f2462229 (diff)
Manga: convert webp images to png to make them viewable
m---------depends/mglpp0
-rw-r--r--include/AsyncImageLoader.hpp1
-rw-r--r--src/AsyncImageLoader.cpp4
-rw-r--r--src/QuickMedia.cpp9
4 files changed, 12 insertions, 2 deletions
diff --git a/depends/mglpp b/depends/mglpp
-Subproject fd15a6947741c997072df8b1ddf93cefc416c83
+Subproject 8cb04e1859588bb1fed003c369a9adb96c6c932
diff --git a/include/AsyncImageLoader.hpp b/include/AsyncImageLoader.hpp
index 672e0e6..7eed39e 100644
--- a/include/AsyncImageLoader.hpp
+++ b/include/AsyncImageLoader.hpp
@@ -38,6 +38,7 @@ namespace QuickMedia {
mgl::vec2i resize_target_size;
};
+ bool ffmpeg_convert_image_format(const Path &thumbnail_path, const Path &destination_path);
// If |symlink_if_no_resize| is false then a copy is made from |thumbnail_path| to |thumbnail_path_resized| instead of a symlink if |thumbnail_path| is not larger than |resize_target_size|.
// One example of why you might not want a symlink is if |thumbnail_path| is a temporary file.
bool create_thumbnail(const Path &thumbnail_path, const Path &thumbnail_path_resized, mgl::vec2i resize_target_size, ContentType content_type);
diff --git a/src/AsyncImageLoader.cpp b/src/AsyncImageLoader.cpp
index 1118ee6..14cfe6a 100644
--- a/src/AsyncImageLoader.cpp
+++ b/src/AsyncImageLoader.cpp
@@ -26,7 +26,7 @@
#pragma GCC diagnostic pop
namespace QuickMedia {
- static bool ffmpeg_image_to_png(const Path &thumbnail_path, const Path &destination_path) {
+ bool ffmpeg_convert_image_format(const Path &thumbnail_path, const Path &destination_path) {
const char *args[] = { "ffmpeg", "-y", "-v", "quiet", "-i", thumbnail_path.data.c_str(), "--", destination_path.data.c_str(), nullptr};
return exec_program(args, nullptr, nullptr) == 0;
}
@@ -37,7 +37,7 @@ namespace QuickMedia {
if(content_type == ContentType::IMAGE_WEBP || content_type == ContentType::IMAGE_AVIF) {
Path result_path_tmp = thumbnail_path_resized;
result_path_tmp.append(".tmp.png");
- if(!ffmpeg_image_to_png(thumbnail_path, result_path_tmp))
+ if(!ffmpeg_convert_image_format(thumbnail_path, result_path_tmp))
return false;
input_path = std::move(result_path_tmp);
}
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp
index 648f231..332308b 100644
--- a/src/QuickMedia.cpp
+++ b/src/QuickMedia.cpp
@@ -4230,6 +4230,15 @@ namespace QuickMedia {
}
}
+ {
+ FileAnalyzer file_analyzer;
+ if(file_analyzer.load_file(image_filepath_tmp.data.c_str(), false) && file_analyzer.get_content_type() == ContentType::IMAGE_WEBP) {
+ Path new_filepath = image_filepath_tmp.data + ".png";
+ if(ffmpeg_convert_image_format(image_filepath_tmp, new_filepath))
+ image_filepath_tmp = std::move(new_filepath);
+ }
+ }
+
bool rename_immediately = true;
if(upscale_image_action == UpscaleImageAction::LOW_RESOLUTION) {
int screen_width, screen_height;