#include #include #define QOI_IMPLEMENTATION #include "qoi.h" using namespace emscripten; struct QoiOptions {}; thread_local const val Uint8Array = val::global("Uint8Array"); val encode(std::string buffer, int width, int height, QoiOptions options) { int compressedSizeInBytes; qoi_desc desc; desc.width = width; desc.height = height; desc.channels = 4; desc.colorspace = QOI_SRGB; void* encodedData = qoi_encode(buffer.c_str(), &desc, &compressedSizeInBytes); if (encodedData == NULL) return val::null(); auto js_result = Uint8Array.new_(typed_memory_view(compressedSizeInBytes, (const uint8_t*)encodedData)); return js_result; } EMSCRIPTEN_BINDINGS(my_module) { value_object("QoiOptions"); function("encode", &encode); }