9#include <ascii-chat/video/image.h>
10#include <ascii-chat/video/palette.h>
13extern char *
ascii_convert(image_t *original,
const ssize_t width,
const ssize_t height,
const bool color,
14 const bool _aspect_ratio,
const bool stretch,
const char *palette_chars,
15 const char luminance_palette[256]);
21static const char *WASM_PALETTE =
" ...',;:clodxkO0KXNWM";
22static const size_t WASM_PALETTE_LEN = 23;
25static char g_luminance_palette[256];
26static bool g_palette_initialized =
false;
29static void ensure_palette_initialized(
void) {
30 if (!g_palette_initialized) {
32 g_palette_initialized =
true;
40 int width,
int height,
int ascii_width,
int ascii_height) {
41 ensure_palette_initialized();
49 image.pixels = (rgb_pixel_t *)malloc(width * height *
sizeof(rgb_pixel_t));
55 for (
int i = 0; i < width * height; i++) {
56 image.pixels[i].r = rgba_data[i * 4 + 0];
57 image.pixels[i].g = rgba_data[i * 4 + 1];
58 image.pixels[i].b = rgba_data[i * 4 + 2];
64 char *result =
ascii_convert(&image, ascii_width, ascii_height,
68 WASM_PALETTE, g_luminance_palette);
char * ascii_convert(image_t *original, const ssize_t width, const ssize_t height, const bool color, const bool _aspect_ratio, const bool stretch, const char *palette_chars, const char luminance_palette[256])
EMSCRIPTEN_KEEPALIVE void free_ascii_buffer(char *buffer)
int build_client_luminance_palette(const char *palette_chars, size_t palette_len, char luminance_mapping[256])
EMSCRIPTEN_KEEPALIVE char * convert_frame_to_ascii(uint8_t *rgba_data, int width, int height, int ascii_width, int ascii_height)