diff options
author | dec05eba <dec05eba@protonmail.com> | 2021-10-17 05:53:22 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2021-11-17 09:53:11 +0100 |
commit | fc49d40c0d2f6edbbe9dde1f1b53d6a17e9d9f7d (patch) | |
tree | 5913c49b84a27927a33e3e712b4911ffba419661 /include | |
parent | 5a073cf9cc4f9a58e39bcbe1ee1786e8d925d6bb (diff) |
Limit image loading to one thread in async image loader
Diffstat (limited to 'include')
-rw-r--r-- | include/AsyncImageLoader.hpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/include/AsyncImageLoader.hpp b/include/AsyncImageLoader.hpp index 94b225d..7556fbc 100644 --- a/include/AsyncImageLoader.hpp +++ b/include/AsyncImageLoader.hpp @@ -15,6 +15,7 @@ namespace QuickMedia { enum class LoadingState { NOT_LOADED, LOADING, + READY_TO_LOAD, FINISHED_LOADING, APPLIED_TO_TEXTURE }; @@ -24,6 +25,7 @@ namespace QuickMedia { sf::Texture texture; std::unique_ptr<sf::Image> image; // Set in another thread. This should be .reset after loading it into |texture|, to save memory size_t counter = 0; + Path thumbnail_path; }; struct ThumbnailLoadData { @@ -70,19 +72,25 @@ namespace QuickMedia { // set |resize_target_size| to {0, 0} to disable resizing. // Note: this method is not thread-safe - void load_thumbnail(const std::string &url, bool local, sf::Vector2i resize_target_size, std::shared_ptr<ThumbnailData> thumbnail_data); + bool load_thumbnail(const std::string &url, bool local, sf::Vector2i resize_target_size, std::shared_ptr<ThumbnailData> thumbnail_data, Path &thumbnail_path); // Returns -1 if all threads are busy int get_free_load_index() const; + void load_create_thumbnail(const Path &thumbnail_path, const Path &thumbnail_path_resized, ThumbnailData *thumbnail_data, sf::Vector2i resize_target_size); + void process_thumbnail(ThumbnailLoadData &thumbnail_load_data); + private: void reset_download(Download &download); private: std::mutex download_mutex; // TODO: Use curl single-threaded multi-download feature instead Download downloads[NUM_IMAGE_LOAD_PARALLEL]; AsyncTask<void> load_thread; - MessageQueue<ThumbnailLoadData> image_load_queue; + MessageQueue<ThumbnailLoadData> image_thumbnail_create_queue; std::unordered_map<std::string, std::shared_ptr<ThumbnailData>> thumbnails; size_t counter = 0; + + std::mutex image_load_mutex; + ThumbnailLoadData current_loading_image; }; } |