You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.6 KiB
58 lines
1.6 KiB
#ifndef SIXEL_H |
|
#define SIXEL_H |
|
|
|
#define DECSIXEL_PARAMS_MAX 16 |
|
#define DECSIXEL_PALETTE_MAX 1024 |
|
#define DECSIXEL_PARAMVALUE_MAX 65535 |
|
#define DECSIXEL_WIDTH_MAX 4096 |
|
#define DECSIXEL_HEIGHT_MAX 4096 |
|
|
|
typedef unsigned short sixel_color_no_t; |
|
typedef unsigned int sixel_color_t; |
|
|
|
typedef struct sixel_image_buffer { |
|
sixel_color_no_t *data; |
|
int width; |
|
int height; |
|
sixel_color_t palette[DECSIXEL_PALETTE_MAX]; |
|
sixel_color_no_t ncolors; |
|
int palette_modified; |
|
int use_private_register; |
|
} sixel_image_t; |
|
|
|
typedef enum parse_state { |
|
PS_ESC = 1, /* ESC */ |
|
PS_DECSIXEL = 2, /* DECSIXEL body part ", $, -, ? ... ~ */ |
|
PS_DECGRA = 3, /* DECGRA Set Raster Attributes " Pan; Pad; Ph; Pv */ |
|
PS_DECGRI = 4, /* DECGRI Graphics Repeat Introducer ! Pn Ch */ |
|
PS_DECGCI = 5, /* DECGCI Graphics Color Introducer # Pc; Pu; Px; Py; Pz */ |
|
} parse_state_t; |
|
|
|
typedef struct parser_context { |
|
parse_state_t state; |
|
int pos_x; |
|
int pos_y; |
|
int max_x; |
|
int max_y; |
|
int attributed_pan; |
|
int attributed_pad; |
|
int attributed_ph; |
|
int attributed_pv; |
|
int repeat_count; |
|
int color_index; |
|
int bgindex; |
|
int grid_width; |
|
int grid_height; |
|
int param; |
|
int nparams; |
|
int params[DECSIXEL_PARAMS_MAX]; |
|
sixel_image_t image; |
|
} sixel_state_t; |
|
|
|
int sixel_parser_init(sixel_state_t *st, sixel_color_t fgcolor, sixel_color_t bgcolor, unsigned char use_private_register, int cell_width, int cell_height); |
|
int sixel_parser_parse(sixel_state_t *st, unsigned char *p, size_t len); |
|
int sixel_parser_set_default_color(sixel_state_t *st); |
|
int sixel_parser_finalize(sixel_state_t *st, unsigned char *pixels); |
|
void sixel_parser_deinit(sixel_state_t *st); |
|
|
|
#endif
|
|
|