#pragma once #include #include "constants.h" #include "pixels.h" #include "typedefs.h" #define USER_PTR class Pixels; // TODO: template struct Image { Image() = default; Image(Image &other) = delete; Image(Image &&other) = delete; Image &operator=(Image &&other) = default; using radxa_row_t = std::array; using radxa_data_t = std::array; using row_t = std::array; using data_t = std::array; using rotated_row_t = std::array; using column_t = rotated_row_t; using rotated_data_t = std::array; alignas(128) data_t data; alignas(128) rotated_data_t rotated_cw; std::optional pixels{}; uint16_t width{0}; uint16_t height{0}; libcamera::PixelFormat pixelFormat{0}; Counters counters{}; bool hasInputData{false}; QElapsedTimer t; void rotate(); // std::shared_ptr sharedPixels(); // FIXME: is not thread-safe: processing can be triggered from multiple // threads at the same time Pixels &getPixels(); void copyFromData(const void* src, size_t size); /*! * \brief reset - reset counters and invalidate pixels */ void reset(); static void copy(data_t &dst, const radxa_data_t &src); private: Image &operator=(Image &other) = delete; };