aboutsummaryrefslogblamecommitdiffstats
path: root/src/jbig2.c
blob: 9b3a9be4d8541137f275c73f80992b5641072b6b (plain) (tree)


































                                                                                      
/*
 * 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;
}