ref: b4a79ae0689d180927fd1869b5b1725459408265
dir: /f_jbig2.c/
#include <u.h> #include <libc.h> #include "pdf.h" /* 7.4.7 JBIG2Decode filter */ static u8int bh[] = { /* id string */ 0x97, 0x4a, 0x42, 0x32, 0x0d, 0x0a, 0x1a, 0x0a, /* sequential */ 0x01, /* one page */ 0x00, 0x00, 0x00, 0x01, }; static void * memimage(Buffer *b) { char *argv[] = {"jbig2", nil}; return buf2memimage(b, "/bin/jbig2", argv); } static int flreadall(void *aux, Buffer *bi, Buffer *bo) { Stream *s; s = aux; bufput(bo, bh, sizeof(bh)); if(s != nil) bufput(bo, s->buf.b, s->buf.sz); bufput(bo, bi->b, bi->sz); bi->off = bi->sz; bo->memimage = memimage; return 0; } static int flopen(Filter *f, Object *o) { Object *parms, *so; Stream *s; parms = dictget(o, "DecodeParms"); s = nil; if((so = dictget(parms, "JBIG2Globals")) != &null && (s = Sopen(so)) == nil) return -1; f->aux = s; return 0; } static void flclose(Filter *f) { Sclose(f->aux); } Filter filterJBIG2 = { .name = "JBIG2Decode", .readall = flreadall, .open = flopen, .close = flclose, };