code_scanner/scanner/img_process/img_process.h

107 lines
2.2 KiB
C++

#pragma once
// image process interface classes
//
// created on 2022-12-14
//
#include "../../common/referer.h"
#include "../../common/packet.h"
enum img_proc_param
{
IMG_PROC_PARAM_DPI = 1, // double
IMG_PROC_PARAM_BPP, // uint8_t
IMG_PROC_PARAM_CHANNEL, // uint8_t
IMG_PROC_PARAM_COLOR, // uint8_t
IMG_PROC_PARAM_GAMMA, // (char*), custom structure
IMG_PROC_PARAM_BRIGHT, // double
IMG_PROC_PARAM_CONTRAST, // double
};
class parameter : public refer
{
data_type type_;
size_t bytes_;
union
{
bool b_val;
uint8_t n8_val;
uint16_t n16_val;
uint32_t n32_val;
uint64_t n64_val;
double d_val;
char *dyn_val;
}val_;
void clear(void);
void copy(const parameter& r);
protected:
virtual ~parameter();
public:
parameter();
parameter(bool val);
parameter(uint8_t val);
parameter(uint16_t val);
parameter(uint32_t val);
parameter(uint64_t val);
parameter(double val);
parameter(char* val, size_t bytes = 0);
parameter(parameter& r);
public:
parameter& operator=(bool val);
parameter& operator=(uint8_t val);
parameter& operator=(uint16_t val);
parameter& operator=(uint32_t val);
parameter& operator=(uint64_t val);
parameter& operator=(double val);
parameter& operator=(const char* val);
parameter& operator=(const std::string& val);
parameter& operator=(const parameter& r);
void* reset_buf(size_t bytes); // reset data type to string and with bytes space
void* value(size_t* len);
data_type type(void);
};
class paremeter_get : public refer
{
protected:
paremeter_get()
{}
virtual ~paremeter_get()
{}
public:
virtual parameter* get_parameter(img_proc_param ipp) = 0;
};
class event_handler;
class img_processor : public sane_cfg_provider
{
paremeter_get* param_get_;
event_handler* handler_;
public:
img_processor(paremeter_get*, event_handler*);
protected:
~img_processor();
// sane_cfg_provider
public:
virtual int32_t get_config(void* buf, size_t* len, const char* cfg_name = nullptr) override;
virtual int32_t set_config(const char* cfg_name, void* data, size_t* len) override;
public:
int32_t push_image(LPPACKIMAGE img, uint8_t* data, size_t len);
int32_t stop(void);
int32_t set_speed_first(bool first); // start as many threads as possible if 'first' was true, or down to ONE thread
};