/* This file is part of the Dandere2x project. Dandere2x is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Dandere2x is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Foobar. If not, see . */ /* ========= Copyright aka_katto 2018, All rights reserved. ============ Original Author: aka_katto Date: 4/11/20 Purpose: An abstract block matching class that will implement a block matching algorithm. The rigid structure of the abstract class forces certain features I want (memoization mostly) and being interchangeable when needed without much 'plumbing' work. All the book keeping for memoization is done in here. ===================================================================== */ #ifndef CPP_REWORK_ABSTRACTBLOCKMATCH_H #define CPP_REWORK_ABSTRACTBLOCKMATCH_H #include #include #include "../../../frame/Frame.h" #include "../Block.h" class AbstractBlockMatch { public: AbstractBlockMatch()= default;; // Set the current images so we can recycle the object pointer. void set_images(shared_ptr desired_image, shared_ptr input_image){ this->desired_image = std::move(desired_image); this->input_image = std::move(input_image); this->width = this->desired_image->get_width(); this->height = this->desired_image->get_height(); } // Any implementation assumes that desired_image and input_image is not null and already set. virtual Block match_block(int x, int y, int block_size) = 0; protected: shared_ptr desired_image = nullptr; shared_ptr input_image = nullptr; int width = 0; int height = 0; }; #endif //CPP_REWORK_ABSTRACTBLOCKMATCH_H