aboutsummaryrefslogtreecommitdiffstats
path: root/src/jbig2.c
diff options
context:
space:
mode:
authoryzrh <yzrh@noema.org>2022-12-22 19:47:40 +0000
committeryzrh <yzrh@noema.org>2022-12-24 23:29:56 +0000
commit9c1f1d0b75de0d2ed299842d3025941f3e681c16 (patch)
tree302f6d4a2235acfe8872a3c0c1c216fecc323b95 /src/jbig2.c
parentac3b1dda63944f2cc8caaa52344774255e1956c8 (diff)
downloadmelon-9c1f1d0b75de0d2ed299842d3025941f3e681c16.tar.gz
melon-9c1f1d0b75de0d2ed299842d3025941f3e681c16.tar.zst
Fix HN conversion and add JBIG2 support.
Signed-off-by: yzrh <yzrh@noema.org>
Diffstat (limited to 'src/jbig2.c')
-rw-r--r--src/jbig2.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/jbig2.c b/src/jbig2.c
new file mode 100644
index 0000000..9b3a9be
--- /dev/null
+++ b/src/jbig2.c
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2022, yzrh <yzrh@noema.org>
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <jbig2.h>
+
+int
+strdec_jbig2(char **bitmap,
+ const char * restrict jbig2, int jbig2_size)
+{
+ Jbig2Ctx *ctx = jbig2_ctx_new(NULL, JBIG2_OPTIONS_EMBEDDED, NULL, NULL, NULL);
+
+ jbig2_data_in(ctx, (unsigned char *) jbig2, jbig2_size);
+
+ jbig2_complete_page(ctx);
+
+ Jbig2Image *image = jbig2_page_out(ctx);
+
+ int width_padded = (image->width + 7) / 8;
+ unsigned char *data = image->data;
+
+ for (unsigned int i = 0; i < image->height; i++) {
+ memcpy(*bitmap + i * width_padded, data, width_padded);
+ data += image->stride;
+ }
+
+ jbig2_release_page(ctx, image);
+ return 0;
+}