aboutsummaryrefslogtreecommitdiffstats
path: root/src/jbig2.c
diff options
context:
space:
mode:
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;
+}