2023-07-30 16:00:55 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <cstdint>
|
2023-10-06 02:01:31 +02:00
|
|
|
#include <map>
|
2023-07-30 16:00:55 +02:00
|
|
|
#include <vector>
|
2023-10-06 02:01:31 +02:00
|
|
|
#include <string>
|
2023-07-30 16:00:55 +02:00
|
|
|
|
|
|
|
struct ImageLoaderI {
|
|
|
|
virtual ~ImageLoaderI(void) {}
|
|
|
|
|
2023-10-09 21:17:00 +02:00
|
|
|
struct ImageInfo final {
|
2023-07-30 16:00:55 +02:00
|
|
|
uint32_t width {0};
|
|
|
|
uint32_t height {0};
|
2023-10-04 02:11:06 +02:00
|
|
|
const char* file_ext {nullptr};
|
2023-07-30 16:00:55 +02:00
|
|
|
};
|
|
|
|
virtual ImageInfo loadInfoFromMemory(const uint8_t* data, uint64_t data_size) = 0;
|
|
|
|
|
2023-10-09 21:17:00 +02:00
|
|
|
struct ImageResult final {
|
2023-07-30 16:00:55 +02:00
|
|
|
uint32_t width {0};
|
|
|
|
uint32_t height {0};
|
|
|
|
struct Frame {
|
|
|
|
int32_t ms {0};
|
|
|
|
std::vector<uint8_t> data;
|
|
|
|
};
|
|
|
|
std::vector<Frame> frames;
|
2023-10-04 02:11:06 +02:00
|
|
|
const char* file_ext {nullptr};
|
2023-10-09 21:17:00 +02:00
|
|
|
|
|
|
|
// only positive values are valid
|
|
|
|
ImageResult crop(int32_t c_x, int32_t c_y, int32_t c_w, int32_t c_h) const;
|
2023-07-30 16:00:55 +02:00
|
|
|
};
|
|
|
|
virtual ImageResult loadFromMemoryRGBA(const uint8_t* data, uint64_t data_size) = 0;
|
|
|
|
};
|
|
|
|
|
2023-10-06 02:01:31 +02:00
|
|
|
struct ImageEncoderI {
|
|
|
|
virtual ~ImageEncoderI(void) {}
|
|
|
|
|
|
|
|
using ImageResult = ImageLoaderI::ImageResult;
|
|
|
|
|
2023-10-06 13:16:45 +02:00
|
|
|
virtual std::vector<uint8_t> encodeToMemoryRGBA(const ImageResult& input_image, const std::map<std::string, float>& extra_options = {}) = 0;
|
2023-10-06 02:01:31 +02:00
|
|
|
};
|
|
|
|
|