forked from KolibriOS/kolibrios
Remove unused 'include' folder
git-svn-id: svn://kolibrios.org@8435 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
cfbe80f87b
commit
0524045ec1
@ -6,7 +6,7 @@ LDFLAGS = -static -nostdlib -T $(SDK_DIR)/sources/newlib/app.lds --image-base 0
|
|||||||
|
|
||||||
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32
|
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32
|
||||||
|
|
||||||
INCLUDES = -I ../SYSCALL/include -I $(SDK_DIR)/sources/newlib/libc/include -I $(SDK_DIR)/sources/freetype/include -I $(SDK_DIR)/sources/zlib -I ../include -I ../fitz -I ../pdf
|
INCLUDES = -I ../SYSCALL/include -I $(SDK_DIR)/sources/newlib/libc/include -I $(SDK_DIR)/sources/freetype/include -I $(SDK_DIR)/sources/zlib -I ../fitz -I ../pdf
|
||||||
LIBPATH = -L $(SDK_DIR)/lib -L /home/autobuild/tools/win32/mingw32/lib -L ../lib
|
LIBPATH = -L $(SDK_DIR)/lib -L /home/autobuild/tools/win32/mingw32/lib -L ../lib
|
||||||
|
|
||||||
APPS_SRC := $(notdir $(wildcard *.c))
|
APPS_SRC := $(notdir $(wildcard *.c))
|
||||||
|
@ -110,14 +110,14 @@ void winreloadfile(pdfapp_t *app)
|
|||||||
void winclose(pdfapp_t *app)
|
void winclose(pdfapp_t *app)
|
||||||
{
|
{
|
||||||
pdfapp_close(&gapp);
|
pdfapp_close(&gapp);
|
||||||
__menuet__sys_exit();
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunOpenApp(char name[])
|
void RunOpenApp(char name[])
|
||||||
{
|
{
|
||||||
char cmd[250] = "*pdf* ";
|
char cmd[250] = "*pdf* ";
|
||||||
strcat(cmd, name);
|
strcat(cmd, name);
|
||||||
RunApp("/sys/lod", cmd);
|
RunApp("/sys/lod", cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -371,7 +371,7 @@ int main (int argc, char* argv[])
|
|||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
kol_board_puts("uPDF: no param set, showing OpenDialog");
|
kol_board_puts("uPDF: no param set, showing OpenDialog");
|
||||||
RunOpenApp(argv[0]);
|
RunOpenApp(argv[0]);
|
||||||
__menuet__sys_exit();
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
kol_board_puts(argv[1]);
|
kol_board_puts(argv[1]);
|
||||||
@ -398,78 +398,77 @@ int main (int argc, char* argv[])
|
|||||||
__menuet__get_screen_max(&screen_max_x, &screen_max_y);
|
__menuet__get_screen_max(&screen_max_x, &screen_max_y);
|
||||||
__menuet__set_bitfield_for_wanted_events(EVENT_REDRAW+EVENT_KEY+EVENT_BUTTON+EVENT_MOUSE_CHANGE);
|
__menuet__set_bitfield_for_wanted_events(EVENT_REDRAW+EVENT_KEY+EVENT_BUTTON+EVENT_MOUSE_CHANGE);
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
|
||||||
|
|
||||||
switch(__menuet__wait_for_event())
|
|
||||||
{
|
{
|
||||||
case evReDraw:
|
switch(__menuet__wait_for_event())
|
||||||
// gapp.shrinkwrap = 2;
|
{
|
||||||
__menuet__window_redraw(1);
|
case evReDraw:
|
||||||
__menuet__define_window(screen_max_x / 2 - 350-50+kos_random(50),
|
// gapp.shrinkwrap = 2;
|
||||||
screen_max_y / 2 - 300-50+kos_random(50),
|
__menuet__window_redraw(1);
|
||||||
700, 600, 0x73000000, 0x800000FF, Title);
|
__menuet__define_window(screen_max_x / 2 - 350-50+kos_random(50),
|
||||||
__menuet__window_redraw(2);
|
screen_max_y / 2 - 300-50+kos_random(50),
|
||||||
__menuet__get_process_table(&Form, PID_WHOAMI);
|
700, 600, 0x73000000, 0x800000FF, Title);
|
||||||
if (Form.window_state > 2) continue; //fix rolled up
|
__menuet__window_redraw(2);
|
||||||
Form.client_width++; //fix for Menuet kernel bug
|
__menuet__get_process_table(&Form, PID_WHOAMI);
|
||||||
Form.client_height++; //fix for Menuet kernel bug
|
if (Form.window_state > 2) continue; //fix rolled up
|
||||||
DrawWindow();
|
Form.client_width++; //fix for Menuet kernel bug
|
||||||
break;
|
Form.client_height++; //fix for Menuet kernel bug
|
||||||
|
DrawWindow();
|
||||||
case evKey:
|
|
||||||
key = __menuet__getkey();
|
|
||||||
if (key_mode_enter_page_number)
|
|
||||||
{
|
|
||||||
HandleNewPageNumber(key);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
if (key==ASCII_KEY_ESC) DrawWindow(); //close help
|
|
||||||
if (key==ASCII_KEY_PGDN) pdfapp_onkey(&gapp, ']');
|
|
||||||
if (key==ASCII_KEY_PGUP) pdfapp_onkey(&gapp, '[');
|
|
||||||
if (key==ASCII_KEY_HOME) pdfapp_onkey(&gapp, 'g');
|
|
||||||
if (key==ASCII_KEY_END ) pdfapp_onkey(&gapp, 'G');
|
|
||||||
if (key=='g' ) pdfapp_onkey(&gapp, 'c');
|
|
||||||
if ((key=='[' ) || (key=='l')) PageRotateLeft();
|
|
||||||
if ((key==']' ) || (key=='r')) PageRotateRight();
|
|
||||||
if (key==ASCII_KEY_DOWN ) PageScrollDown();
|
|
||||||
if (key==ASCII_KEY_UP ) PageScrollUp();
|
|
||||||
if (key=='-') PageZoomOut();
|
|
||||||
if ((key=='=') || (key=='+')) PageZoomIn();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case evButton:
|
case evKey:
|
||||||
butt = __menuet__get_button_id();
|
key = __menuet__getkey();
|
||||||
if(butt==1) __menuet__sys_exit();
|
if (key_mode_enter_page_number)
|
||||||
if(butt==10) RunOpenApp(argv[0]);
|
{
|
||||||
if(butt==11) PageZoomOut(); //magnify -
|
HandleNewPageNumber(key);
|
||||||
if(butt==12) PageZoomIn(); //magnify +
|
break;
|
||||||
if(butt==13) //show help
|
|
||||||
{
|
|
||||||
kol_paint_bar(0, TOOLBAR_HEIGHT, Form.client_width, Form.client_height - TOOLBAR_HEIGHT, 0xF2F2F2);
|
|
||||||
__menuet__write_text(20, TOOLBAR_HEIGHT + 20 , 0x90000000, "uPDF for KolibriOS v1.2", 0);
|
|
||||||
__menuet__write_text(21, TOOLBAR_HEIGHT + 20 , 0x90000000, "uPDF for KolibriOS v1.2", 0);
|
|
||||||
for (ii=0; help[ii]!=0; ii++) {
|
|
||||||
__menuet__write_text(20, TOOLBAR_HEIGHT + 60 + ii * 15, 0x80000000, help[ii], 0);
|
|
||||||
}
|
}
|
||||||
}
|
if (key==ASCII_KEY_ESC) DrawWindow(); //close help
|
||||||
if(butt==14) pdfapp_onkey(&gapp, '['); //previous page
|
if (key==ASCII_KEY_PGDN) pdfapp_onkey(&gapp, ']');
|
||||||
if(butt==15) pdfapp_onkey(&gapp, ']'); //next page
|
if (key==ASCII_KEY_PGUP) pdfapp_onkey(&gapp, '[');
|
||||||
if(butt==16) PageRotateLeft();
|
if (key==ASCII_KEY_HOME) pdfapp_onkey(&gapp, 'g');
|
||||||
if(butt==17) PageRotateRight();
|
if (key==ASCII_KEY_END ) pdfapp_onkey(&gapp, 'G');
|
||||||
if(butt==20) GetNewPageNumber();
|
if (key=='g' ) pdfapp_onkey(&gapp, 'c');
|
||||||
break;
|
if ((key=='[' ) || (key=='l')) PageRotateLeft();
|
||||||
|
if ((key==']' ) || (key=='r')) PageRotateRight();
|
||||||
|
if (key==ASCII_KEY_DOWN ) PageScrollDown();
|
||||||
|
if (key==ASCII_KEY_UP ) PageScrollUp();
|
||||||
|
if (key=='-') PageZoomOut();
|
||||||
|
if ((key=='=') || (key=='+')) PageZoomIn();
|
||||||
|
break;
|
||||||
|
|
||||||
case evMouse:
|
case evButton:
|
||||||
if (mouse_wheels_state = kos_get_mouse_wheels())
|
butt = __menuet__get_button_id();
|
||||||
{
|
if(butt==1) exit(0);
|
||||||
if (mouse_wheels_state==1) { PageScrollDown(); PageScrollDown(); }
|
if(butt==10) RunOpenApp(argv[0]);
|
||||||
if (mouse_wheels_state==-1) { PageScrollUp(); PageScrollUp(); }
|
if(butt==11) PageZoomOut(); //magnify -
|
||||||
}
|
if(butt==12) PageZoomIn(); //magnify +
|
||||||
//sprintf (debugstr, "mouse_wheels_state: %d \n", mouse_wheels_state);
|
if(butt==13) //show help
|
||||||
//kol_board_puts(debugstr);
|
{
|
||||||
//pdfapp_onmouse(&gapp, int x, int y, int btn, int modifiers, int state)
|
kol_paint_bar(0, TOOLBAR_HEIGHT, Form.client_width, Form.client_height - TOOLBAR_HEIGHT, 0xF2F2F2);
|
||||||
break;
|
__menuet__write_text(20, TOOLBAR_HEIGHT + 20 , 0x90000000, "uPDF for KolibriOS v1.2", 0);
|
||||||
|
__menuet__write_text(21, TOOLBAR_HEIGHT + 20 , 0x90000000, "uPDF for KolibriOS v1.2", 0);
|
||||||
|
for (ii=0; help[ii]!=0; ii++) {
|
||||||
|
__menuet__write_text(20, TOOLBAR_HEIGHT + 60 + ii * 15, 0x80000000, help[ii], 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(butt==14) pdfapp_onkey(&gapp, '['); //previous page
|
||||||
|
if(butt==15) pdfapp_onkey(&gapp, ']'); //next page
|
||||||
|
if(butt==16) PageRotateLeft();
|
||||||
|
if(butt==17) PageRotateRight();
|
||||||
|
if(butt==20) GetNewPageNumber();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case evMouse:
|
||||||
|
if (mouse_wheels_state = kos_get_mouse_wheels())
|
||||||
|
{
|
||||||
|
if (mouse_wheels_state==1) { PageScrollDown(); PageScrollDown(); }
|
||||||
|
if (mouse_wheels_state==-1) { PageScrollUp(); PageScrollUp(); }
|
||||||
|
}
|
||||||
|
//sprintf (debugstr, "mouse_wheels_state: %d \n", mouse_wheels_state);
|
||||||
|
//kol_board_puts(debugstr);
|
||||||
|
//pdfapp_onmouse(&gapp, int x, int y, int btn, int modifiers, int state)
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "fitz.h"
|
#include "fitz.h"
|
||||||
#include "mupdf.h"
|
#include "mupdf.h"
|
||||||
#include "pdfapp.h"
|
#include "pdfapp.h"
|
||||||
|
#include "kolibri.h"
|
||||||
|
|
||||||
#include <ctype.h> /* for tolower() */
|
#include <ctype.h> /* for tolower() */
|
||||||
|
|
||||||
@ -109,12 +110,12 @@ static void pdfapp_open_pdf(pdfapp_t *app, char *filename, int fd)
|
|||||||
/*
|
/*
|
||||||
* Open PDF and load xref table
|
* Open PDF and load xref table
|
||||||
*/
|
*/
|
||||||
__menuet__debug_out("FZ OPEN\n");
|
kol_board_puts("FZ OPEN\n");
|
||||||
//file = fz_open_fd(fd);
|
//file = fz_open_fd(fd);
|
||||||
__menuet__debug_out("FZ ready\n");
|
kol_board_puts("FZ ready\n");
|
||||||
error = pdf_open_xref(&app->xref, filename, NULL);
|
error = pdf_open_xref(&app->xref, filename, NULL);
|
||||||
if (error){
|
if (error){
|
||||||
__menuet__debug_out("FZ can't open\n");
|
kol_board_puts("FZ can't open\n");
|
||||||
pdfapp_error(app, fz_rethrow(error, "cannot open document '%s'", filename));}
|
pdfapp_error(app, fz_rethrow(error, "cannot open document '%s'", filename));}
|
||||||
fz_close(file);
|
fz_close(file);
|
||||||
|
|
||||||
@ -160,16 +161,16 @@ __menuet__debug_out("FZ OPEN\n");
|
|||||||
/*
|
/*
|
||||||
* Start at first page
|
* Start at first page
|
||||||
*/
|
*/
|
||||||
__menuet__debug_out("Start at first page\n");
|
kol_board_puts("Start at first page\n");
|
||||||
|
|
||||||
error = pdf_load_page_tree(app->xref);
|
error = pdf_load_page_tree(app->xref);
|
||||||
if (error) {
|
if (error) {
|
||||||
__menuet__debug_out("Can't load tree\n");
|
kol_board_puts("Can't load tree\n");
|
||||||
pdfapp_error(app, fz_rethrow(error, "cannot load page tree"));}
|
pdfapp_error(app, fz_rethrow(error, "cannot load page tree"));}
|
||||||
|
|
||||||
__menuet__debug_out("Page counter\n");
|
kol_board_puts("Page counter\n");
|
||||||
app->pagecount = pdf_count_pages(app->xref);
|
app->pagecount = pdf_count_pages(app->xref);
|
||||||
__menuet__debug_out("All is set!\n");
|
kol_board_puts("All is set!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void pdfapp_open(pdfapp_t *app, char *filename, int fd, int reload)
|
void pdfapp_open(pdfapp_t *app, char *filename, int fd, int reload)
|
||||||
@ -375,7 +376,7 @@ static void pdfapp_showpage(pdfapp_t *app, int loadpage, int drawpage, int repai
|
|||||||
|
|
||||||
if (app->shrinkwrap)
|
if (app->shrinkwrap)
|
||||||
{
|
{
|
||||||
__menuet__debug_out ("SHRINK\n");
|
kol_board_puts ("SHRINK\n");
|
||||||
int w = app->image->w;
|
int w = app->image->w;
|
||||||
int h = app->image->h;
|
int h = app->image->h;
|
||||||
if (app->winw == w)
|
if (app->winw == w)
|
||||||
|
@ -2,12 +2,10 @@ CC = kos32-gcc
|
|||||||
LD = kos32-ld
|
LD = kos32-ld
|
||||||
|
|
||||||
SDK_DIR = $(abspath ../../../sdk)
|
SDK_DIR = $(abspath ../../../sdk)
|
||||||
LDFLAGS = -call_shared -nostdlib -T $(SDK_DIR)/sources/newlib/app-dynamic.lds --image-base 0
|
|
||||||
|
|
||||||
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32
|
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32
|
||||||
|
|
||||||
INCLUDES = -I $(SDK_DIR)/sources/newlib/libc/include -I ../fitz
|
INCLUDES = -I $(SDK_DIR)/sources/newlib/libc/include -I ../fitz
|
||||||
LIBPATH = -L $(SDK_DIR)/lib -L /home/autobuild/tools/win32/mingw32/lib
|
|
||||||
|
|
||||||
DRAW_SRC := $(notdir $(wildcard *.c))
|
DRAW_SRC := $(notdir $(wildcard *.c))
|
||||||
OBJECTS = $(patsubst %.c, %.o, $(DRAW_SRC))
|
OBJECTS = $(patsubst %.c, %.o, $(DRAW_SRC))
|
||||||
|
@ -5,7 +5,7 @@ SDK_DIR = $(abspath ../../../sdk)
|
|||||||
|
|
||||||
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32
|
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32
|
||||||
|
|
||||||
INCLUDES = -I $(SDK_DIR)/sources/newlib/libc/include -I $(SDK_DIR)/sources/freetype/include -I $(SDK_DIR)/sources/zlib -I ../libopenjpeg -I ../include
|
INCLUDES = -I $(SDK_DIR)/sources/newlib/libc/include -I $(SDK_DIR)/sources/freetype/include -I $(SDK_DIR)/sources/libjpeg -I $(SDK_DIR)/sources/zlib -I ../libopenjpeg -I ../libjbig2dec
|
||||||
|
|
||||||
FITZ_SRC := $(notdir $(wildcard *.c))
|
FITZ_SRC := $(notdir $(wildcard *.c))
|
||||||
OBJECTS = $(patsubst %.c, %.o, $(FITZ_SRC))
|
OBJECTS = $(patsubst %.c, %.o, $(FITZ_SRC))
|
||||||
|
@ -1,446 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
|
|
||||||
* Copyright (c) 2002-2007, Professor Benoit Macq
|
|
||||||
* Copyright (c) 2001-2003, David Janssens
|
|
||||||
* Copyright (c) 2002-2003, Yannick Verschueren
|
|
||||||
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
|
|
||||||
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
|
||||||
* Copyright (c) 2006-2007, Parvatha Elangovan
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
#ifndef __J2K_H
|
|
||||||
#define __J2K_H
|
|
||||||
/**
|
|
||||||
@file j2k.h
|
|
||||||
@brief The JPEG-2000 Codestream Reader/Writer (J2K)
|
|
||||||
|
|
||||||
The functions in J2K.C have for goal to read/write the several parts of the codestream: markers and data.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup J2K J2K - JPEG-2000 codestream reader/writer */
|
|
||||||
/*@{*/
|
|
||||||
|
|
||||||
#define J2K_CP_CSTY_PRT 0x01
|
|
||||||
#define J2K_CP_CSTY_SOP 0x02
|
|
||||||
#define J2K_CP_CSTY_EPH 0x04
|
|
||||||
#define J2K_CCP_CSTY_PRT 0x01
|
|
||||||
#define J2K_CCP_CBLKSTY_LAZY 0x01 /**< Selective arithmetic coding bypass */
|
|
||||||
#define J2K_CCP_CBLKSTY_RESET 0x02 /**< Reset context probabilities on coding pass boundaries */
|
|
||||||
#define J2K_CCP_CBLKSTY_TERMALL 0x04 /**< Termination on each coding pass */
|
|
||||||
#define J2K_CCP_CBLKSTY_VSC 0x08 /**< Vertically stripe causal context */
|
|
||||||
#define J2K_CCP_CBLKSTY_PTERM 0x10 /**< Predictable termination */
|
|
||||||
#define J2K_CCP_CBLKSTY_SEGSYM 0x20 /**< Segmentation symbols are used */
|
|
||||||
#define J2K_CCP_QNTSTY_NOQNT 0
|
|
||||||
#define J2K_CCP_QNTSTY_SIQNT 1
|
|
||||||
#define J2K_CCP_QNTSTY_SEQNT 2
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
#define J2K_MS_SOC 0xff4f /**< SOC marker value */
|
|
||||||
#define J2K_MS_SOT 0xff90 /**< SOT marker value */
|
|
||||||
#define J2K_MS_SOD 0xff93 /**< SOD marker value */
|
|
||||||
#define J2K_MS_EOC 0xffd9 /**< EOC marker value */
|
|
||||||
#define J2K_MS_SIZ 0xff51 /**< SIZ marker value */
|
|
||||||
#define J2K_MS_COD 0xff52 /**< COD marker value */
|
|
||||||
#define J2K_MS_COC 0xff53 /**< COC marker value */
|
|
||||||
#define J2K_MS_RGN 0xff5e /**< RGN marker value */
|
|
||||||
#define J2K_MS_QCD 0xff5c /**< QCD marker value */
|
|
||||||
#define J2K_MS_QCC 0xff5d /**< QCC marker value */
|
|
||||||
#define J2K_MS_POC 0xff5f /**< POC marker value */
|
|
||||||
#define J2K_MS_TLM 0xff55 /**< TLM marker value */
|
|
||||||
#define J2K_MS_PLM 0xff57 /**< PLM marker value */
|
|
||||||
#define J2K_MS_PLT 0xff58 /**< PLT marker value */
|
|
||||||
#define J2K_MS_PPM 0xff60 /**< PPM marker value */
|
|
||||||
#define J2K_MS_PPT 0xff61 /**< PPT marker value */
|
|
||||||
#define J2K_MS_SOP 0xff91 /**< SOP marker value */
|
|
||||||
#define J2K_MS_EPH 0xff92 /**< EPH marker value */
|
|
||||||
#define J2K_MS_CRG 0xff63 /**< CRG marker value */
|
|
||||||
#define J2K_MS_COM 0xff64 /**< COM marker value */
|
|
||||||
/* UniPG>> */
|
|
||||||
#ifdef USE_JPWL
|
|
||||||
#define J2K_MS_EPC 0xff68 /**< EPC marker value (Part 11: JPEG 2000 for Wireless) */
|
|
||||||
#define J2K_MS_EPB 0xff66 /**< EPB marker value (Part 11: JPEG 2000 for Wireless) */
|
|
||||||
#define J2K_MS_ESD 0xff67 /**< ESD marker value (Part 11: JPEG 2000 for Wireless) */
|
|
||||||
#define J2K_MS_RED 0xff69 /**< RED marker value (Part 11: JPEG 2000 for Wireless) */
|
|
||||||
#endif /* USE_JPWL */
|
|
||||||
#ifdef USE_JPSEC
|
|
||||||
#define J2K_MS_SEC 0xff65 /**< SEC marker value (Part 8: Secure JPEG 2000) */
|
|
||||||
#define J2K_MS_INSEC 0xff94 /**< INSEC marker value (Part 8: Secure JPEG 2000) */
|
|
||||||
#endif /* USE_JPSEC */
|
|
||||||
/* <<UniPG */
|
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
/**
|
|
||||||
Values that specify the status of the decoding process when decoding the main header.
|
|
||||||
These values may be combined with a | operator.
|
|
||||||
*/
|
|
||||||
typedef enum J2K_STATUS {
|
|
||||||
J2K_STATE_MHSOC = 0x0001, /**< a SOC marker is expected */
|
|
||||||
J2K_STATE_MHSIZ = 0x0002, /**< a SIZ marker is expected */
|
|
||||||
J2K_STATE_MH = 0x0004, /**< the decoding process is in the main header */
|
|
||||||
J2K_STATE_TPHSOT = 0x0008, /**< the decoding process is in a tile part header and expects a SOT marker */
|
|
||||||
J2K_STATE_TPH = 0x0010, /**< the decoding process is in a tile part header */
|
|
||||||
J2K_STATE_MT = 0x0020, /**< the EOC marker has just been read */
|
|
||||||
J2K_STATE_NEOC = 0x0040, /**< the decoding process must not expect a EOC marker because the codestream is truncated */
|
|
||||||
J2K_STATE_ERR = 0x0080 /**< the decoding process has encountered an error */
|
|
||||||
} J2K_STATUS;
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
/**
|
|
||||||
T2 encoding mode
|
|
||||||
*/
|
|
||||||
typedef enum T2_MODE {
|
|
||||||
THRESH_CALC = 0, /** Function called in Rate allocation process*/
|
|
||||||
FINAL_PASS = 1 /** Function called in Tier 2 process*/
|
|
||||||
}J2K_T2_MODE;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Quantization stepsize
|
|
||||||
*/
|
|
||||||
typedef struct opj_stepsize {
|
|
||||||
/** exponent */
|
|
||||||
int expn;
|
|
||||||
/** mantissa */
|
|
||||||
int mant;
|
|
||||||
} opj_stepsize_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Tile-component coding parameters
|
|
||||||
*/
|
|
||||||
typedef struct opj_tccp {
|
|
||||||
/** coding style */
|
|
||||||
int csty;
|
|
||||||
/** number of resolutions */
|
|
||||||
int numresolutions;
|
|
||||||
/** code-blocks width */
|
|
||||||
int cblkw;
|
|
||||||
/** code-blocks height */
|
|
||||||
int cblkh;
|
|
||||||
/** code-block coding style */
|
|
||||||
int cblksty;
|
|
||||||
/** discrete wavelet transform identifier */
|
|
||||||
int qmfbid;
|
|
||||||
/** quantisation style */
|
|
||||||
int qntsty;
|
|
||||||
/** stepsizes used for quantization */
|
|
||||||
opj_stepsize_t stepsizes[J2K_MAXBANDS];
|
|
||||||
/** number of guard bits */
|
|
||||||
int numgbits;
|
|
||||||
/** Region Of Interest shift */
|
|
||||||
int roishift;
|
|
||||||
/** precinct width */
|
|
||||||
int prcw[J2K_MAXRLVLS];
|
|
||||||
/** precinct height */
|
|
||||||
int prch[J2K_MAXRLVLS];
|
|
||||||
} opj_tccp_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Tile coding parameters :
|
|
||||||
this structure is used to store coding/decoding parameters common to all
|
|
||||||
tiles (information like COD, COC in main header)
|
|
||||||
*/
|
|
||||||
typedef struct opj_tcp {
|
|
||||||
/** 1 : first part-tile of a tile */
|
|
||||||
int first;
|
|
||||||
/** coding style */
|
|
||||||
int csty;
|
|
||||||
/** progression order */
|
|
||||||
OPJ_PROG_ORDER prg;
|
|
||||||
/** number of layers */
|
|
||||||
int numlayers;
|
|
||||||
/** multi-component transform identifier */
|
|
||||||
int mct;
|
|
||||||
/** rates of layers */
|
|
||||||
float rates[100];
|
|
||||||
/** number of progression order changes */
|
|
||||||
int numpocs;
|
|
||||||
/** indicates if a POC marker has been used O:NO, 1:YES */
|
|
||||||
int POC;
|
|
||||||
/** progression order changes */
|
|
||||||
opj_poc_t pocs[32];
|
|
||||||
/** packet header store there for futur use in t2_decode_packet */
|
|
||||||
unsigned char *ppt_data;
|
|
||||||
/** pointer remaining on the first byte of the first header if ppt is used */
|
|
||||||
unsigned char *ppt_data_first;
|
|
||||||
/** If ppt == 1 --> there was a PPT marker for the present tile */
|
|
||||||
int ppt;
|
|
||||||
/** used in case of multiple marker PPT (number of info already stored) */
|
|
||||||
int ppt_store;
|
|
||||||
/** ppmbug1 */
|
|
||||||
int ppt_len;
|
|
||||||
/** add fixed_quality */
|
|
||||||
float distoratio[100];
|
|
||||||
/** tile-component coding parameters */
|
|
||||||
opj_tccp_t *tccps;
|
|
||||||
} opj_tcp_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Coding parameters
|
|
||||||
*/
|
|
||||||
typedef struct opj_cp {
|
|
||||||
/** Digital cinema profile*/
|
|
||||||
OPJ_CINEMA_MODE cinema;
|
|
||||||
/** Maximum rate for each component. If == 0, component size limitation is not considered */
|
|
||||||
int max_comp_size;
|
|
||||||
/** Size of the image in bits*/
|
|
||||||
int img_size;
|
|
||||||
/** Rsiz*/
|
|
||||||
OPJ_RSIZ_CAPABILITIES rsiz;
|
|
||||||
/** Enabling Tile part generation*/
|
|
||||||
char tp_on;
|
|
||||||
/** Flag determining tile part generation*/
|
|
||||||
char tp_flag;
|
|
||||||
/** Position of tile part flag in progression order*/
|
|
||||||
int tp_pos;
|
|
||||||
/** allocation by rate/distortion */
|
|
||||||
int disto_alloc;
|
|
||||||
/** allocation by fixed layer */
|
|
||||||
int fixed_alloc;
|
|
||||||
/** add fixed_quality */
|
|
||||||
int fixed_quality;
|
|
||||||
/** if != 0, then original dimension divided by 2^(reduce); if == 0 or not used, image is decoded to the full resolution */
|
|
||||||
int reduce;
|
|
||||||
/** if != 0, then only the first "layer" layers are decoded; if == 0 or not used, all the quality layers are decoded */
|
|
||||||
int layer;
|
|
||||||
/** if == NO_LIMITATION, decode entire codestream; if == LIMIT_TO_MAIN_HEADER then only decode the main header */
|
|
||||||
OPJ_LIMIT_DECODING limit_decoding;
|
|
||||||
/** XTOsiz */
|
|
||||||
int tx0;
|
|
||||||
/** YTOsiz */
|
|
||||||
int ty0;
|
|
||||||
/** XTsiz */
|
|
||||||
int tdx;
|
|
||||||
/** YTsiz */
|
|
||||||
int tdy;
|
|
||||||
/** comment for coding */
|
|
||||||
char *comment;
|
|
||||||
/** number of tiles in width */
|
|
||||||
int tw;
|
|
||||||
/** number of tiles in heigth */
|
|
||||||
int th;
|
|
||||||
/** ID number of the tiles present in the codestream */
|
|
||||||
int *tileno;
|
|
||||||
/** size of the vector tileno */
|
|
||||||
int tileno_size;
|
|
||||||
/** packet header store there for futur use in t2_decode_packet */
|
|
||||||
unsigned char *ppm_data;
|
|
||||||
/** pointer remaining on the first byte of the first header if ppm is used */
|
|
||||||
unsigned char *ppm_data_first;
|
|
||||||
/** if ppm == 1 --> there was a PPM marker for the present tile */
|
|
||||||
int ppm;
|
|
||||||
/** use in case of multiple marker PPM (number of info already store) */
|
|
||||||
int ppm_store;
|
|
||||||
/** use in case of multiple marker PPM (case on non-finished previous info) */
|
|
||||||
int ppm_previous;
|
|
||||||
/** ppmbug1 */
|
|
||||||
int ppm_len;
|
|
||||||
/** tile coding parameters */
|
|
||||||
opj_tcp_t *tcps;
|
|
||||||
/** fixed layer */
|
|
||||||
int *matrice;
|
|
||||||
/* UniPG>> */
|
|
||||||
#ifdef USE_JPWL
|
|
||||||
/** enables writing of EPC in MH, thus activating JPWL */
|
|
||||||
bool epc_on;
|
|
||||||
/** enables writing of EPB, in case of activated JPWL */
|
|
||||||
bool epb_on;
|
|
||||||
/** enables writing of ESD, in case of activated JPWL */
|
|
||||||
bool esd_on;
|
|
||||||
/** enables writing of informative techniques of ESD, in case of activated JPWL */
|
|
||||||
bool info_on;
|
|
||||||
/** enables writing of RED, in case of activated JPWL */
|
|
||||||
bool red_on;
|
|
||||||
/** error protection method for MH (0,1,16,32,37-128) */
|
|
||||||
int hprot_MH;
|
|
||||||
/** tile number of header protection specification (>=0) */
|
|
||||||
int hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
|
|
||||||
/** error protection methods for TPHs (0,1,16,32,37-128) */
|
|
||||||
int hprot_TPH[JPWL_MAX_NO_TILESPECS];
|
|
||||||
/** tile number of packet protection specification (>=0) */
|
|
||||||
int pprot_tileno[JPWL_MAX_NO_PACKSPECS];
|
|
||||||
/** packet number of packet protection specification (>=0) */
|
|
||||||
int pprot_packno[JPWL_MAX_NO_PACKSPECS];
|
|
||||||
/** error protection methods for packets (0,1,16,32,37-128) */
|
|
||||||
int pprot[JPWL_MAX_NO_PACKSPECS];
|
|
||||||
/** enables writing of ESD, (0/2/4 bytes) */
|
|
||||||
int sens_size;
|
|
||||||
/** sensitivity addressing size (0=auto/2/4 bytes) */
|
|
||||||
int sens_addr;
|
|
||||||
/** sensitivity range (0-3) */
|
|
||||||
int sens_range;
|
|
||||||
/** sensitivity method for MH (-1,0-7) */
|
|
||||||
int sens_MH;
|
|
||||||
/** tile number of sensitivity specification (>=0) */
|
|
||||||
int sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
|
|
||||||
/** sensitivity methods for TPHs (-1,0-7) */
|
|
||||||
int sens_TPH[JPWL_MAX_NO_TILESPECS];
|
|
||||||
/** enables JPWL correction at the decoder */
|
|
||||||
bool correct;
|
|
||||||
/** expected number of components at the decoder */
|
|
||||||
int exp_comps;
|
|
||||||
/** maximum number of tiles at the decoder */
|
|
||||||
int max_tiles;
|
|
||||||
#endif /* USE_JPWL */
|
|
||||||
/* <<UniPG */
|
|
||||||
} opj_cp_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
JPEG-2000 codestream reader/writer
|
|
||||||
*/
|
|
||||||
typedef struct opj_j2k {
|
|
||||||
/** codec context */
|
|
||||||
opj_common_ptr cinfo;
|
|
||||||
|
|
||||||
/** locate in which part of the codestream the decoder is (main header, tile header, end) */
|
|
||||||
int state;
|
|
||||||
/** number of the tile curently concern by coding/decoding */
|
|
||||||
int curtileno;
|
|
||||||
/** Tile part number*/
|
|
||||||
int tp_num;
|
|
||||||
/** Tilepart number currently coding*/
|
|
||||||
int cur_tp_num;
|
|
||||||
/** Total number of tileparts of the current tile*/
|
|
||||||
int *cur_totnum_tp;
|
|
||||||
/**
|
|
||||||
locate the start position of the TLM marker
|
|
||||||
after encoding the tilepart, a jump (in j2k_write_sod) is done to the TLM marker to store the value of its length.
|
|
||||||
*/
|
|
||||||
int tlm_start;
|
|
||||||
/** Total num of tile parts in whole image = num tiles* num tileparts in each tile*/
|
|
||||||
/** used in TLMmarker*/
|
|
||||||
int totnum_tp;
|
|
||||||
/**
|
|
||||||
locate the position of the end of the tile in the codestream,
|
|
||||||
used to detect a truncated codestream (in j2k_read_sod)
|
|
||||||
*/
|
|
||||||
unsigned char *eot;
|
|
||||||
/**
|
|
||||||
locate the start position of the SOT marker of the current coded tile:
|
|
||||||
after encoding the tile, a jump (in j2k_write_sod) is done to the SOT marker to store the value of its length.
|
|
||||||
*/
|
|
||||||
int sot_start;
|
|
||||||
int sod_start;
|
|
||||||
/**
|
|
||||||
as the J2K-file is written in several parts during encoding,
|
|
||||||
it enables to make the right correction in position return by cio_tell
|
|
||||||
*/
|
|
||||||
int pos_correction;
|
|
||||||
/** array used to store the data of each tile */
|
|
||||||
unsigned char **tile_data;
|
|
||||||
/** array used to store the length of each tile */
|
|
||||||
int *tile_len;
|
|
||||||
/**
|
|
||||||
decompression only :
|
|
||||||
store decoding parameters common to all tiles (information like COD, COC in main header)
|
|
||||||
*/
|
|
||||||
opj_tcp_t *default_tcp;
|
|
||||||
/** pointer to the encoded / decoded image */
|
|
||||||
opj_image_t *image;
|
|
||||||
/** pointer to the coding parameters */
|
|
||||||
opj_cp_t *cp;
|
|
||||||
/** helper used to write the index file */
|
|
||||||
opj_codestream_info_t *cstr_info;
|
|
||||||
/** pointer to the byte i/o stream */
|
|
||||||
opj_cio_t *cio;
|
|
||||||
} opj_j2k_t;
|
|
||||||
|
|
||||||
/** @name Exported functions */
|
|
||||||
/*@{*/
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
/**
|
|
||||||
Creates a J2K decompression structure
|
|
||||||
@param cinfo Codec context info
|
|
||||||
@return Returns a handle to a J2K decompressor if successful, returns NULL otherwise
|
|
||||||
*/
|
|
||||||
opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo);
|
|
||||||
/**
|
|
||||||
Destroy a J2K decompressor handle
|
|
||||||
@param j2k J2K decompressor handle to destroy
|
|
||||||
*/
|
|
||||||
void j2k_destroy_decompress(opj_j2k_t *j2k);
|
|
||||||
/**
|
|
||||||
Setup the decoder decoding parameters using user parameters.
|
|
||||||
Decoding parameters are returned in j2k->cp.
|
|
||||||
@param j2k J2K decompressor handle
|
|
||||||
@param parameters decompression parameters
|
|
||||||
*/
|
|
||||||
void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters);
|
|
||||||
/**
|
|
||||||
Decode an image from a JPEG-2000 codestream
|
|
||||||
@param j2k J2K decompressor handle
|
|
||||||
@param cio Input buffer stream
|
|
||||||
@param cstr_info Codestream information structure if required, NULL otherwise
|
|
||||||
@return Returns a decoded image if successful, returns NULL otherwise
|
|
||||||
*/
|
|
||||||
opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
|
|
||||||
/**
|
|
||||||
Decode an image form a JPT-stream (JPEG 2000, JPIP)
|
|
||||||
@param j2k J2K decompressor handle
|
|
||||||
@param cio Input buffer stream
|
|
||||||
@param cstr_info Codestream information structure if required, NULL otherwise
|
|
||||||
@return Returns a decoded image if successful, returns NULL otherwise
|
|
||||||
*/
|
|
||||||
opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
|
|
||||||
/**
|
|
||||||
Creates a J2K compression structure
|
|
||||||
@param cinfo Codec context info
|
|
||||||
@return Returns a handle to a J2K compressor if successful, returns NULL otherwise
|
|
||||||
*/
|
|
||||||
opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo);
|
|
||||||
/**
|
|
||||||
Destroy a J2K compressor handle
|
|
||||||
@param j2k J2K compressor handle to destroy
|
|
||||||
*/
|
|
||||||
void j2k_destroy_compress(opj_j2k_t *j2k);
|
|
||||||
/**
|
|
||||||
Setup the encoder parameters using the current image and using user parameters.
|
|
||||||
Coding parameters are returned in j2k->cp.
|
|
||||||
@param j2k J2K compressor handle
|
|
||||||
@param parameters compression parameters
|
|
||||||
@param image input filled image
|
|
||||||
*/
|
|
||||||
void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_t *image);
|
|
||||||
/**
|
|
||||||
Converts an enum type progression order to string type
|
|
||||||
*/
|
|
||||||
char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order);
|
|
||||||
/**
|
|
||||||
Encode an image into a JPEG-2000 codestream
|
|
||||||
@param j2k J2K compressor handle
|
|
||||||
@param cio Output buffer stream
|
|
||||||
@param image Image to encode
|
|
||||||
@param cstr_info Codestream information structure if required, NULL otherwise
|
|
||||||
@return Returns true if successful, returns false otherwise
|
|
||||||
*/
|
|
||||||
bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
/*@}*/
|
|
||||||
|
|
||||||
/*@}*/
|
|
||||||
|
|
||||||
#endif /* __J2K_H */
|
|
@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2005, Hervé Drolon, FreeImage Team
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
#ifndef __J2K_LIB_H
|
|
||||||
#define __J2K_LIB_H
|
|
||||||
/**
|
|
||||||
@file j2k_lib.h
|
|
||||||
@brief Internal functions
|
|
||||||
|
|
||||||
The functions in J2K_LIB.C are internal utilities mainly used for timing.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup MISC MISC - Miscellaneous internal functions */
|
|
||||||
/*@{*/
|
|
||||||
|
|
||||||
/** @name Exported functions */
|
|
||||||
/*@{*/
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
/**
|
|
||||||
Difference in successive opj_clock() calls tells you the elapsed time
|
|
||||||
@return Returns time in seconds
|
|
||||||
*/
|
|
||||||
double opj_clock(void);
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
/*@}*/
|
|
||||||
|
|
||||||
/*@}*/
|
|
||||||
|
|
||||||
#endif /* __J2K_LIB_H */
|
|
||||||
|
|
@ -1,135 +0,0 @@
|
|||||||
/*
|
|
||||||
jbig2dec
|
|
||||||
|
|
||||||
Copyright (C) 2002-2005 Artifex Software, Inc.
|
|
||||||
|
|
||||||
This software is distributed under license and may not
|
|
||||||
be copied, modified or distributed except as expressly
|
|
||||||
authorized under the terms of the license contained in
|
|
||||||
the file LICENSE in this distribution.
|
|
||||||
|
|
||||||
For further licensing information refer to http://artifex.com/ or
|
|
||||||
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
|
|
||||||
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _JBIG2_H
|
|
||||||
#define _JBIG2_H
|
|
||||||
|
|
||||||
/* warning levels */
|
|
||||||
typedef enum {
|
|
||||||
JBIG2_SEVERITY_DEBUG,
|
|
||||||
JBIG2_SEVERITY_INFO,
|
|
||||||
JBIG2_SEVERITY_WARNING,
|
|
||||||
JBIG2_SEVERITY_FATAL
|
|
||||||
} Jbig2Severity;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
JBIG2_OPTIONS_EMBEDDED = 1
|
|
||||||
} Jbig2Options;
|
|
||||||
|
|
||||||
/* forward public structure declarations */
|
|
||||||
typedef struct _Jbig2Allocator Jbig2Allocator;
|
|
||||||
typedef struct _Jbig2Ctx Jbig2Ctx;
|
|
||||||
typedef struct _Jbig2GlobalCtx Jbig2GlobalCtx;
|
|
||||||
typedef struct _Jbig2Segment Jbig2Segment;
|
|
||||||
typedef struct _Jbig2Image Jbig2Image;
|
|
||||||
|
|
||||||
/* private structures */
|
|
||||||
typedef struct _Jbig2Page Jbig2Page;
|
|
||||||
typedef struct _Jbig2SymbolDictionary Jbig2SymbolDictionary;
|
|
||||||
|
|
||||||
/*
|
|
||||||
this is the general image structure used by the jbig2dec library
|
|
||||||
images are 1 bpp, packed into rows a byte at a time. stride gives
|
|
||||||
the byte offset to the next row, while width and height define
|
|
||||||
the size of the image area in pixels.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct _Jbig2Image {
|
|
||||||
int width, height, stride;
|
|
||||||
uint8_t *data;
|
|
||||||
int refcount;
|
|
||||||
};
|
|
||||||
|
|
||||||
Jbig2Image* jbig2_image_new(Jbig2Ctx *ctx, int width, int height);
|
|
||||||
Jbig2Image* jbig2_image_clone(Jbig2Ctx *ctx, Jbig2Image *image);
|
|
||||||
void jbig2_image_release(Jbig2Ctx *ctx, Jbig2Image *image);
|
|
||||||
void jbig2_image_free(Jbig2Ctx *ctx, Jbig2Image *image);
|
|
||||||
void jbig2_image_clear(Jbig2Ctx *ctx, Jbig2Image *image, int value);
|
|
||||||
Jbig2Image *jbig2_image_resize(Jbig2Ctx *ctx, Jbig2Image *image,
|
|
||||||
int width, int height);
|
|
||||||
|
|
||||||
/* errors are returned from the library via a callback. If no callback
|
|
||||||
is provided (a NULL argument is passed ot jbig2_ctx_new) a default
|
|
||||||
handler is used which prints fatal errors to the stderr stream. */
|
|
||||||
|
|
||||||
/* error callback */
|
|
||||||
typedef int (*Jbig2ErrorCallback) (void *data,
|
|
||||||
const char *msg, Jbig2Severity severity,
|
|
||||||
int32_t seg_idx);
|
|
||||||
|
|
||||||
/* memory allocation is likewise done via a set of callbacks so that
|
|
||||||
clients can better control memory usage. If a NULL is passed for
|
|
||||||
this argumennt of jbig2_ctx_new, a default allocator based on malloc()
|
|
||||||
is used. */
|
|
||||||
|
|
||||||
/* dynamic memory callbacks */
|
|
||||||
struct _Jbig2Allocator {
|
|
||||||
void *(*alloc) (Jbig2Allocator *allocator, size_t size);
|
|
||||||
void (*free) (Jbig2Allocator *allocator, void *p);
|
|
||||||
void *(*realloc) (Jbig2Allocator *allocator, void *p, size_t size);
|
|
||||||
};
|
|
||||||
|
|
||||||
/* decoder context */
|
|
||||||
Jbig2Ctx *jbig2_ctx_new (Jbig2Allocator *allocator,
|
|
||||||
Jbig2Options options,
|
|
||||||
Jbig2GlobalCtx *global_ctx,
|
|
||||||
Jbig2ErrorCallback error_callback,
|
|
||||||
void *error_callback_data);
|
|
||||||
void jbig2_ctx_free (Jbig2Ctx *ctx);
|
|
||||||
|
|
||||||
/* global context for embedded streams */
|
|
||||||
Jbig2GlobalCtx *jbig2_make_global_ctx (Jbig2Ctx *ctx);
|
|
||||||
void jbig2_global_ctx_free (Jbig2GlobalCtx *global_ctx);
|
|
||||||
|
|
||||||
/* submit data to the decoder */
|
|
||||||
int jbig2_data_in (Jbig2Ctx *ctx, const unsigned char *data, size_t size);
|
|
||||||
|
|
||||||
/* get the next available decoded page image. NULL means there isn't one. */
|
|
||||||
Jbig2Image *jbig2_page_out (Jbig2Ctx *ctx);
|
|
||||||
/* mark a returned page image as no longer needed. */
|
|
||||||
int jbig2_release_page (Jbig2Ctx *ctx, Jbig2Image *image);
|
|
||||||
/* mark the current page as complete, simulating an end-of-page segment (for broken streams) */
|
|
||||||
int jbig2_complete_page (Jbig2Ctx *ctx);
|
|
||||||
|
|
||||||
|
|
||||||
/* segment header routines */
|
|
||||||
|
|
||||||
struct _Jbig2Segment {
|
|
||||||
uint32_t number;
|
|
||||||
uint8_t flags;
|
|
||||||
uint32_t page_association;
|
|
||||||
size_t data_length;
|
|
||||||
int referred_to_segment_count;
|
|
||||||
uint32_t *referred_to_segments;
|
|
||||||
void *result;
|
|
||||||
};
|
|
||||||
|
|
||||||
Jbig2Segment *jbig2_parse_segment_header (Jbig2Ctx *ctx, uint8_t *buf, size_t buf_size,
|
|
||||||
size_t *p_header_size);
|
|
||||||
int jbig2_parse_segment (Jbig2Ctx *ctx, Jbig2Segment *segment,
|
|
||||||
const uint8_t *segment_data);
|
|
||||||
void jbig2_free_segment (Jbig2Ctx *ctx, Jbig2Segment *segment);
|
|
||||||
|
|
||||||
Jbig2Segment *jbig2_find_segment(Jbig2Ctx *ctx, uint32_t number);
|
|
||||||
|
|
||||||
#endif /* _JBIG2_H */
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
jbig2dec
|
|
||||||
|
|
||||||
Copyright (C) 2001 Artifex Software, Inc.
|
|
||||||
|
|
||||||
This software is distributed under license and may not
|
|
||||||
be copied, modified or distributed except as expressly
|
|
||||||
authorized under the terms of the license contained in
|
|
||||||
the file LICENSE in this distribution.
|
|
||||||
|
|
||||||
For further licensing information refer to http://artifex.com/ or
|
|
||||||
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
|
|
||||||
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct _Jbig2ArithState Jbig2ArithState;
|
|
||||||
|
|
||||||
/* An arithmetic coding context is stored as a single byte, with the
|
|
||||||
index in the low order 7 bits (actually only 6 are used), and the
|
|
||||||
MPS in the top bit. */
|
|
||||||
typedef unsigned char Jbig2ArithCx;
|
|
||||||
|
|
||||||
/* allocate and initialize a new arithmetic coding state */
|
|
||||||
Jbig2ArithState *
|
|
||||||
jbig2_arith_new (Jbig2Ctx *ctx, Jbig2WordStream *ws);
|
|
||||||
|
|
||||||
/* decode a bit */
|
|
||||||
bool
|
|
||||||
jbig2_arith_decode (Jbig2ArithState *as, Jbig2ArithCx *pcx);
|
|
||||||
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
|||||||
/*
|
|
||||||
jbig2dec
|
|
||||||
|
|
||||||
Copyright (C) 2001 Artifex Software, Inc.
|
|
||||||
|
|
||||||
This software is distributed under license and may not
|
|
||||||
be copied, modified or distributed except as expressly
|
|
||||||
authorized under the terms of the license contained in
|
|
||||||
the file LICENSE in this distribution.
|
|
||||||
|
|
||||||
For further licensing information refer to http://artifex.com/ or
|
|
||||||
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
|
|
||||||
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct _Jbig2ArithIaidCtx Jbig2ArithIaidCtx;
|
|
||||||
|
|
||||||
Jbig2ArithIaidCtx *
|
|
||||||
jbig2_arith_iaid_ctx_new(Jbig2Ctx *ctx, int SBSYMCODELEN);
|
|
||||||
|
|
||||||
int
|
|
||||||
jbig2_arith_iaid_decode(Jbig2ArithIaidCtx *ctx, Jbig2ArithState *as,
|
|
||||||
int32_t *p_result);
|
|
||||||
|
|
||||||
void
|
|
||||||
jbig2_arith_iaid_ctx_free(Jbig2Ctx *ctx, Jbig2ArithIaidCtx *iax);
|
|
@ -1,26 +0,0 @@
|
|||||||
/*
|
|
||||||
jbig2dec
|
|
||||||
|
|
||||||
Copyright (C) 2001 Artifex Software, Inc.
|
|
||||||
|
|
||||||
This software is distributed under license and may not
|
|
||||||
be copied, modified or distributed except as expressly
|
|
||||||
authorized under the terms of the license contained in
|
|
||||||
the file LICENSE in this distribution.
|
|
||||||
|
|
||||||
For further licensing information refer to http://artifex.com/ or
|
|
||||||
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
|
|
||||||
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct _Jbig2ArithIntCtx Jbig2ArithIntCtx;
|
|
||||||
|
|
||||||
Jbig2ArithIntCtx *
|
|
||||||
jbig2_arith_int_ctx_new(Jbig2Ctx *ctx);
|
|
||||||
|
|
||||||
int
|
|
||||||
jbig2_arith_int_decode(Jbig2ArithIntCtx *ctx, Jbig2ArithState *as,
|
|
||||||
int32_t *p_result);
|
|
||||||
|
|
||||||
void
|
|
||||||
jbig2_arith_int_ctx_free(Jbig2Ctx *ctx, Jbig2ArithIntCtx *iax);
|
|
@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
jbig2dec
|
|
||||||
|
|
||||||
Copyright (C) 2002-2004 Artifex Software, Inc.
|
|
||||||
|
|
||||||
This software is distributed under license and may not
|
|
||||||
be copied, modified or distributed except as expressly
|
|
||||||
authorized under the terms of the license contained in
|
|
||||||
the file LICENSE in this distribution.
|
|
||||||
|
|
||||||
For further licensing information refer to http://artifex.com/ or
|
|
||||||
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
|
|
||||||
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Headers for Generic and Generic Refinement region handling
|
|
||||||
**/
|
|
||||||
|
|
||||||
/* 6.4 Table 2 */
|
|
||||||
typedef struct {
|
|
||||||
bool MMR;
|
|
||||||
/* GBW */
|
|
||||||
/* GBH */
|
|
||||||
int GBTEMPLATE;
|
|
||||||
bool TPGDON;
|
|
||||||
bool USESKIP;
|
|
||||||
/* SKIP */
|
|
||||||
int8_t gbat[8];
|
|
||||||
} Jbig2GenericRegionParams;
|
|
||||||
|
|
||||||
/* return the appropriate context size for the given template */
|
|
||||||
int
|
|
||||||
jbig2_generic_stats_size(Jbig2Ctx *ctx, int template);
|
|
||||||
|
|
||||||
int
|
|
||||||
jbig2_decode_generic_region(Jbig2Ctx *ctx,
|
|
||||||
Jbig2Segment *segment,
|
|
||||||
const Jbig2GenericRegionParams *params,
|
|
||||||
Jbig2ArithState *as,
|
|
||||||
Jbig2Image *image,
|
|
||||||
Jbig2ArithCx *GB_stats);
|
|
||||||
|
|
||||||
|
|
||||||
/* 6.3 Table 6 */
|
|
||||||
typedef struct {
|
|
||||||
/* GRW */
|
|
||||||
/* GRH */
|
|
||||||
bool GRTEMPLATE;
|
|
||||||
Jbig2Image *reference;
|
|
||||||
int32_t DX, DY;
|
|
||||||
bool TPGRON;
|
|
||||||
int8_t grat[4];
|
|
||||||
} Jbig2RefinementRegionParams;
|
|
||||||
|
|
||||||
int
|
|
||||||
jbig2_decode_refinement_region(Jbig2Ctx *ctx,
|
|
||||||
Jbig2Segment *segment,
|
|
||||||
const Jbig2RefinementRegionParams *params,
|
|
||||||
Jbig2ArithState *as,
|
|
||||||
Jbig2Image *image,
|
|
||||||
Jbig2ArithCx *GB_stats);
|
|
@ -1,105 +0,0 @@
|
|||||||
/*
|
|
||||||
jbig2dec
|
|
||||||
|
|
||||||
Copyright (C) 2001-2005 Artifex Software, Inc.
|
|
||||||
|
|
||||||
This software is distributed under license and may not
|
|
||||||
be copied, modified or distributed except as expressly
|
|
||||||
authorized under the terms of the license contained in
|
|
||||||
the file LICENSE in this distribution.
|
|
||||||
|
|
||||||
For further licensing information refer to http://artifex.com/ or
|
|
||||||
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
|
|
||||||
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef JBIG2_HUFFMAN_H
|
|
||||||
#define JBIG2_HUFFMAN_H
|
|
||||||
|
|
||||||
/* Huffman coder interface */
|
|
||||||
|
|
||||||
typedef struct _Jbig2HuffmanEntry Jbig2HuffmanEntry;
|
|
||||||
typedef struct _Jbig2HuffmanState Jbig2HuffmanState;
|
|
||||||
typedef struct _Jbig2HuffmanTable Jbig2HuffmanTable;
|
|
||||||
typedef struct _Jbig2HuffmanParams Jbig2HuffmanParams;
|
|
||||||
|
|
||||||
struct _Jbig2HuffmanEntry {
|
|
||||||
union {
|
|
||||||
int32_t RANGELOW;
|
|
||||||
Jbig2HuffmanTable *ext_table;
|
|
||||||
} u;
|
|
||||||
byte PREFLEN;
|
|
||||||
byte RANGELEN;
|
|
||||||
byte flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _Jbig2HuffmanTable {
|
|
||||||
int log_table_size;
|
|
||||||
Jbig2HuffmanEntry *entries;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _Jbig2HuffmanLine Jbig2HuffmanLine;
|
|
||||||
|
|
||||||
struct _Jbig2HuffmanLine {
|
|
||||||
int PREFLEN;
|
|
||||||
int RANGELEN;
|
|
||||||
int RANGELOW;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _Jbig2HuffmanParams {
|
|
||||||
bool HTOOB;
|
|
||||||
int n_lines;
|
|
||||||
const Jbig2HuffmanLine *lines;
|
|
||||||
};
|
|
||||||
|
|
||||||
Jbig2HuffmanState *
|
|
||||||
jbig2_huffman_new (Jbig2Ctx *ctx, Jbig2WordStream *ws);
|
|
||||||
|
|
||||||
void
|
|
||||||
jbig2_huffman_free (Jbig2Ctx *ctx, Jbig2HuffmanState *hs);
|
|
||||||
|
|
||||||
void
|
|
||||||
jbig2_huffman_skip(Jbig2HuffmanState *hs);
|
|
||||||
|
|
||||||
void jbig2_huffman_advance(Jbig2HuffmanState *hs, int offset);
|
|
||||||
|
|
||||||
int
|
|
||||||
jbig2_huffman_offset(Jbig2HuffmanState *hs);
|
|
||||||
|
|
||||||
int32_t
|
|
||||||
jbig2_huffman_get (Jbig2HuffmanState *hs,
|
|
||||||
const Jbig2HuffmanTable *table, bool *oob);
|
|
||||||
|
|
||||||
int32_t
|
|
||||||
jbig2_huffman_get_bits (Jbig2HuffmanState *hs, const int bits);
|
|
||||||
|
|
||||||
#ifdef JBIG2_DEBUG
|
|
||||||
void jbig2_dump_huffman_state(Jbig2HuffmanState *hs);
|
|
||||||
void jbig2_dump_huffman_binary(Jbig2HuffmanState *hs);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Jbig2HuffmanTable *
|
|
||||||
jbig2_build_huffman_table (Jbig2Ctx *ctx, const Jbig2HuffmanParams *params);
|
|
||||||
|
|
||||||
void
|
|
||||||
jbig2_release_huffman_table (Jbig2Ctx *ctx, Jbig2HuffmanTable *table);
|
|
||||||
|
|
||||||
/* standard Huffman templates defined by the specification */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_A; /* Table B.1 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_B; /* Table B.2 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_C; /* Table B.3 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_D; /* Table B.4 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_E; /* Table B.5 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_F; /* Table B.6 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_G; /* Table B.7 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_H; /* Table B.8 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_I; /* Table B.9 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_J; /* Table B.10 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_K; /* Table B.11 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_L; /* Table B.12 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_M; /* Table B.13 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_N; /* Table B.14 */
|
|
||||||
extern const Jbig2HuffmanParams jbig2_huffman_params_O; /* Table B.15 */
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* JBIG2_HUFFMAN_H */
|
|
@ -1,335 +0,0 @@
|
|||||||
/*
|
|
||||||
jbig2dec
|
|
||||||
|
|
||||||
Copyright (C) 2001-2005 Artifex Software, Inc.
|
|
||||||
|
|
||||||
This software is distributed under license and may not
|
|
||||||
be copied, modified or distributed except as expressly
|
|
||||||
authorized under the terms of the license contained in
|
|
||||||
the file LICENSE in this distribution.
|
|
||||||
|
|
||||||
For further licensing information refer to http://artifex.com/ or
|
|
||||||
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
|
|
||||||
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* predefined Huffman table definitions
|
|
||||||
-- See Annex B of the JBIG2 specification */
|
|
||||||
|
|
||||||
#ifndef JBIG2_HUFFTAB_H
|
|
||||||
#define JBIG2_HUFFTAB_H
|
|
||||||
|
|
||||||
/* types are in jbig2_huffman.h, you must include that first */
|
|
||||||
|
|
||||||
|
|
||||||
/* Table B.1 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_A[] = {
|
|
||||||
{ 1, 4, 0 },
|
|
||||||
{ 2, 8, 16 },
|
|
||||||
{ 3, 16, 272 },
|
|
||||||
{ 0, 32, -1 }, /* low */
|
|
||||||
{ 3, 32, 65808 } /* high */
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_A = { FALSE, 5, jbig2_huffman_lines_A };
|
|
||||||
|
|
||||||
/* Table B.2 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_B[] = {
|
|
||||||
{ 1, 0, 0 },
|
|
||||||
{ 2, 0, 1 },
|
|
||||||
{ 3, 0, 2 },
|
|
||||||
{ 4, 3, 3 },
|
|
||||||
{ 5, 6, 11 },
|
|
||||||
{ 0, 32, -1 }, /* low */
|
|
||||||
{ 6, 32, 75 }, /* high */
|
|
||||||
{ 6, 0, 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_B = { TRUE, 8, jbig2_huffman_lines_B };
|
|
||||||
|
|
||||||
/* Table B.3 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_C[] = {
|
|
||||||
{ 8, 8, -256 },
|
|
||||||
{ 1, 0, 0 },
|
|
||||||
{ 2, 0, 1 },
|
|
||||||
{ 3, 0, 2 },
|
|
||||||
{ 4, 3, 3 },
|
|
||||||
{ 5, 6, 11 },
|
|
||||||
{ 8, 32, -257 }, /* low */
|
|
||||||
{ 7, 32, 75 }, /* high */
|
|
||||||
{ 6, 0, 0 } /* OOB */
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_C = { TRUE, 9, jbig2_huffman_lines_C };
|
|
||||||
|
|
||||||
/* Table B.4 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_D[] = {
|
|
||||||
{ 1, 0, 1 },
|
|
||||||
{ 2, 0, 2 },
|
|
||||||
{ 3, 0, 3 },
|
|
||||||
{ 4, 3, 4 },
|
|
||||||
{ 5, 6, 12 },
|
|
||||||
{ 0, 32, -1 }, /* low */
|
|
||||||
{ 5, 32, 76 }, /* high */
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_D = { FALSE, 7, jbig2_huffman_lines_D };
|
|
||||||
|
|
||||||
/* Table B.5 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_E[] = {
|
|
||||||
{7, 8, -255},
|
|
||||||
{1, 0, 1},
|
|
||||||
{2, 0, 2},
|
|
||||||
{3, 0, 3},
|
|
||||||
{4, 3, 4},
|
|
||||||
{5, 6, 12},
|
|
||||||
{7, 32, -256}, /* low */
|
|
||||||
{6, 32, 76} /* high */
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_E = { FALSE, 8, jbig2_huffman_lines_E };
|
|
||||||
|
|
||||||
/* Table B.6 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_F[] = {
|
|
||||||
{5, 10, -2048},
|
|
||||||
{4, 9, -1024},
|
|
||||||
{4, 8, -512},
|
|
||||||
{4, 7, -256},
|
|
||||||
{5, 6, -128},
|
|
||||||
{5, 5, -64},
|
|
||||||
{4, 5, -32},
|
|
||||||
{2, 7, 0},
|
|
||||||
{3, 7, 128},
|
|
||||||
{3, 8, 256},
|
|
||||||
{4, 9, 512},
|
|
||||||
{4, 10, 1024},
|
|
||||||
{6, 32, -2049}, /* low */
|
|
||||||
{6, 32, 2048} /* high */
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_F = { FALSE, 14, jbig2_huffman_lines_F };
|
|
||||||
|
|
||||||
/* Table B.7 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_G[] = {
|
|
||||||
{4, 9, -1024},
|
|
||||||
{3, 8, -512},
|
|
||||||
{4, 7, -256},
|
|
||||||
{5, 6, -128},
|
|
||||||
{5, 5, -64},
|
|
||||||
{4, 5, -32},
|
|
||||||
{4, 5, 0},
|
|
||||||
{5, 5, 32},
|
|
||||||
{5, 6, 64},
|
|
||||||
{4, 7, 128},
|
|
||||||
{3, 8, 256},
|
|
||||||
{3, 9, 512},
|
|
||||||
{3, 10, 1024},
|
|
||||||
{5, 32, -1025}, /* low */
|
|
||||||
{5, 32, 2048} /* high */
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_G = { FALSE, 15, jbig2_huffman_lines_G };
|
|
||||||
|
|
||||||
/* Table B.8 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_H[] = {
|
|
||||||
{8, 3, -15},
|
|
||||||
{9, 1, -7},
|
|
||||||
{8, 1, -5},
|
|
||||||
{9, 0, -3},
|
|
||||||
{7, 0, -2},
|
|
||||||
{4, 0, -1},
|
|
||||||
{2, 1, 0},
|
|
||||||
{5, 0, 2},
|
|
||||||
{6, 0, 3},
|
|
||||||
{3, 4, 4},
|
|
||||||
{6, 1, 20},
|
|
||||||
{4, 4, 22},
|
|
||||||
{4, 5, 38},
|
|
||||||
{5, 6, 70},
|
|
||||||
{5, 7, 134},
|
|
||||||
{6, 7, 262},
|
|
||||||
{7, 8, 390},
|
|
||||||
{6, 10, 646},
|
|
||||||
{9, 32, -16}, /* low */
|
|
||||||
{9, 32, 1670}, /* high */
|
|
||||||
{2, 0, 0} /* OOB */
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_H = { TRUE, 21, jbig2_huffman_lines_H };
|
|
||||||
|
|
||||||
/* Table B.9 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_I[] = {
|
|
||||||
{8, 4, -31},
|
|
||||||
{9, 2, -15},
|
|
||||||
{8, 2, -11},
|
|
||||||
{9, 1, -7},
|
|
||||||
{7, 1, -5},
|
|
||||||
{4, 1, -3},
|
|
||||||
{3, 1, -1},
|
|
||||||
{3, 1, 1},
|
|
||||||
{5, 1, 3},
|
|
||||||
{6, 1, 5},
|
|
||||||
{3, 5, 7},
|
|
||||||
{6, 2, 39},
|
|
||||||
{4, 5, 43},
|
|
||||||
{4, 6, 75},
|
|
||||||
{5, 7, 139},
|
|
||||||
{5, 8, 267},
|
|
||||||
{6, 8, 523},
|
|
||||||
{7, 9, 779},
|
|
||||||
{6, 11, 1291},
|
|
||||||
{9, 32, -32}, /* low */
|
|
||||||
{9, 32, 3339}, /* high */
|
|
||||||
{2, 0, 0} /* OOB */
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_I = { TRUE, 22, jbig2_huffman_lines_I };
|
|
||||||
|
|
||||||
/* Table B.10 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_J[] = {
|
|
||||||
{7, 4, -21},
|
|
||||||
{8, 0, -5},
|
|
||||||
{7, 0, -4},
|
|
||||||
{5, 0, -3},
|
|
||||||
{2, 2, -2},
|
|
||||||
{5, 0, 2},
|
|
||||||
{6, 0, 3},
|
|
||||||
{7, 0, 4},
|
|
||||||
{8, 0, 5},
|
|
||||||
{2, 6, 6},
|
|
||||||
{5, 5, 70},
|
|
||||||
{6, 5, 102},
|
|
||||||
{6, 6, 134},
|
|
||||||
{6, 7, 198},
|
|
||||||
{6, 8, 326},
|
|
||||||
{6, 9, 582},
|
|
||||||
{6, 10, 1094},
|
|
||||||
{7, 11, 2118},
|
|
||||||
{8, 32, -22}, /* low */
|
|
||||||
{8, 32, 4166}, /* high */
|
|
||||||
{2, 0, 0} /* OOB */
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_J = { TRUE, 21, jbig2_huffman_lines_J };
|
|
||||||
|
|
||||||
/* Table B.11 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_K[] = {
|
|
||||||
{1, 0, 1},
|
|
||||||
{2, 1, 2},
|
|
||||||
{4, 0, 3},
|
|
||||||
{4, 1, 5},
|
|
||||||
{5, 1, 7},
|
|
||||||
{5, 2, 9},
|
|
||||||
{6, 2, 13},
|
|
||||||
{7, 2, 17},
|
|
||||||
{7, 3, 21},
|
|
||||||
{7, 4, 29},
|
|
||||||
{7, 5, 45},
|
|
||||||
{7, 6, 77},
|
|
||||||
{7, 32, 141} /* high */
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_K = { FALSE, 13, jbig2_huffman_lines_K };
|
|
||||||
|
|
||||||
/* Table B.12 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_L[] = {
|
|
||||||
{1, 0, 1},
|
|
||||||
{2, 0, 2},
|
|
||||||
{3, 1, 3},
|
|
||||||
{5, 0, 5},
|
|
||||||
{5, 1, 6},
|
|
||||||
{6, 1, 8},
|
|
||||||
{7, 0, 10},
|
|
||||||
{7, 1, 11},
|
|
||||||
{7, 2, 13},
|
|
||||||
{7, 3, 17},
|
|
||||||
{7, 4, 25},
|
|
||||||
{8, 5, 41},
|
|
||||||
{8, 32, 73}
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_L = { FALSE, 13, jbig2_huffman_lines_L };
|
|
||||||
|
|
||||||
|
|
||||||
/* Table B.13 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_M[] = {
|
|
||||||
{1, 0, 1},
|
|
||||||
{3, 0, 2},
|
|
||||||
{4, 0, 3},
|
|
||||||
{5, 0, 4},
|
|
||||||
{4, 1, 5},
|
|
||||||
{3, 3, 7},
|
|
||||||
{6, 1, 15},
|
|
||||||
{6, 2, 17},
|
|
||||||
{6, 3, 21},
|
|
||||||
{6, 4, 29},
|
|
||||||
{6, 5, 45},
|
|
||||||
{7, 6, 77},
|
|
||||||
{7, 32, 141} /* high */
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_M = { FALSE, 13, jbig2_huffman_lines_M };
|
|
||||||
|
|
||||||
/* Table B.14 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_N[] = {
|
|
||||||
{ 3, 0, -2 },
|
|
||||||
{ 3, 0, -1 },
|
|
||||||
{ 1, 0, 0 },
|
|
||||||
{ 3, 3, 1 },
|
|
||||||
{ 3, 6, 2 },
|
|
||||||
{ 0, 32, -1 }, /* low */
|
|
||||||
{ 0, 32, 3 }, /* high */
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_N = { FALSE, 7, jbig2_huffman_lines_N };
|
|
||||||
|
|
||||||
/* Table B.15 */
|
|
||||||
const Jbig2HuffmanLine
|
|
||||||
jbig2_huffman_lines_O[] = {
|
|
||||||
{7, 4, -24},
|
|
||||||
{6, 2, -8},
|
|
||||||
{5, 1, -4},
|
|
||||||
{4, 0, -2},
|
|
||||||
{3, 0, -1},
|
|
||||||
{1, 0, 0},
|
|
||||||
{3, 0, 1},
|
|
||||||
{4, 0, 2},
|
|
||||||
{5, 1, 3},
|
|
||||||
{6, 2, 5},
|
|
||||||
{7, 4, 9},
|
|
||||||
{7, 32, -25}, /* low */
|
|
||||||
{7, 32, 25} /* high */
|
|
||||||
};
|
|
||||||
|
|
||||||
const Jbig2HuffmanParams
|
|
||||||
jbig2_huffman_params_O = { FALSE, 13, jbig2_huffman_lines_O };
|
|
||||||
|
|
||||||
#endif /* JBIG2_HUFFTAB_H */
|
|
@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
jbig2dec
|
|
||||||
|
|
||||||
Copyright (C) 2001-2002 Artifex Software, Inc.
|
|
||||||
|
|
||||||
This software is distributed under license and may not
|
|
||||||
be copied, modified or distributed except as expressly
|
|
||||||
authorized under the terms of the license contained in
|
|
||||||
the file LICENSE in this distribution.
|
|
||||||
|
|
||||||
For further licensing information refer to http://artifex.com/ or
|
|
||||||
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
|
|
||||||
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _JBIG2_IMAGE_H
|
|
||||||
#define _JBIG2_IMAGE_H
|
|
||||||
|
|
||||||
int jbig2_image_get_pixel(Jbig2Image *image, int x, int y);
|
|
||||||
int jbig2_image_set_pixel(Jbig2Image *image, int x, int y, int value);
|
|
||||||
|
|
||||||
/* routines for dumping the image data in various formats */
|
|
||||||
/* FIXME: should these be in the client instead? */
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
int jbig2_image_write_pbm_file(Jbig2Image *image, char *filename);
|
|
||||||
int jbig2_image_write_pbm(Jbig2Image *image, FILE *out);
|
|
||||||
Jbig2Image *jbig2_image_read_pbm_file(Jbig2Ctx *ctx, char *filename);
|
|
||||||
Jbig2Image *jbig2_image_read_pbm(Jbig2Ctx *ctx, FILE *in);
|
|
||||||
|
|
||||||
#ifdef HAVE_LIBPNG
|
|
||||||
int jbig2_image_write_png_file(Jbig2Image *image, char *filename);
|
|
||||||
int jbig2_image_write_png(Jbig2Image *image, FILE *out);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _JBIG2_IMAGE_H */
|
|
@ -1,48 +0,0 @@
|
|||||||
/*
|
|
||||||
jbig2dec
|
|
||||||
|
|
||||||
Copyright (C) 2003 Artifex Software, Inc.
|
|
||||||
|
|
||||||
This software is distributed under license and may not
|
|
||||||
be copied, modified or distributed except as expressly
|
|
||||||
authorized under the terms of the license contained in
|
|
||||||
the file LICENSE in this distribution.
|
|
||||||
|
|
||||||
For further licensing information refer to http://artifex.com/ or
|
|
||||||
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
|
|
||||||
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _JBIG2_METADATA_H
|
|
||||||
#define _JBIG2_METADATA_H
|
|
||||||
|
|
||||||
/* metadata from extension segments */
|
|
||||||
|
|
||||||
/* these bits should be moved to jbig2.h for public access */
|
|
||||||
typedef enum {
|
|
||||||
JBIG2_ENCODING_ASCII,
|
|
||||||
JBIG2_ENCODING_UCS16
|
|
||||||
} Jbig2Encoding;
|
|
||||||
|
|
||||||
typedef struct _Jbig2Metadata Jbig2Metadata;
|
|
||||||
|
|
||||||
Jbig2Metadata *jbig2_metadata_new(Jbig2Ctx *ctx, Jbig2Encoding encoding);
|
|
||||||
void jbig2_metadata_free(Jbig2Ctx *ctx, Jbig2Metadata *md);
|
|
||||||
int jbig2_metadata_add(Jbig2Ctx *ctx, Jbig2Metadata *md,
|
|
||||||
const char *key, const int key_length,
|
|
||||||
const char *value, const int value_length);
|
|
||||||
|
|
||||||
struct _Jbig2Metadata {
|
|
||||||
Jbig2Encoding encoding;
|
|
||||||
char **keys, **values;
|
|
||||||
int entries, max_entries;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* these bits can go to jbig2_priv.h */
|
|
||||||
int jbig2_comment_ascii(Jbig2Ctx *ctx, Jbig2Segment *segment,
|
|
||||||
const uint8_t *segment_data);
|
|
||||||
int jbig2_comment_unicode(Jbig2Ctx *ctx, Jbig2Segment *segment,
|
|
||||||
const uint8_t *segment_data);
|
|
||||||
|
|
||||||
#endif /* _JBIG2_METADATA_H */
|
|
@ -1,22 +0,0 @@
|
|||||||
/*
|
|
||||||
jbig2dec
|
|
||||||
|
|
||||||
Copyright (C) 2001 Artifex Software, Inc.
|
|
||||||
|
|
||||||
This software is distributed under license and may not
|
|
||||||
be copied, modified or distributed except as expressly
|
|
||||||
authorized under the terms of the license contained in
|
|
||||||
the file LICENSE in this distribution.
|
|
||||||
|
|
||||||
For further licensing information refer to http://artifex.com/ or
|
|
||||||
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
|
|
||||||
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
jbig2_decode_generic_mmr(Jbig2Ctx *ctx,
|
|
||||||
Jbig2Segment *segment,
|
|
||||||
const Jbig2GenericRegionParams *params,
|
|
||||||
const byte *data, size_t size,
|
|
||||||
Jbig2Image *image);
|
|
||||||
|
|
@ -1,177 +0,0 @@
|
|||||||
/*
|
|
||||||
jbig2dec
|
|
||||||
|
|
||||||
Copyright (C) 2002 Artifex Software, Inc.
|
|
||||||
|
|
||||||
This software is distributed under license and may not
|
|
||||||
be copied, modified or distributed except as expressly
|
|
||||||
authorized under the terms of the license contained in
|
|
||||||
the file LICENSE in this distribution.
|
|
||||||
|
|
||||||
For further licensing information refer to http://artifex.com/ or
|
|
||||||
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
|
|
||||||
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* library internals */
|
|
||||||
|
|
||||||
typedef uint8_t byte;
|
|
||||||
typedef int bool;
|
|
||||||
|
|
||||||
#ifndef TRUE
|
|
||||||
#define TRUE 1
|
|
||||||
#endif
|
|
||||||
#ifndef FALSE
|
|
||||||
#define FALSE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef NULL
|
|
||||||
#define NULL ((void*)0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
JBIG2_FILE_HEADER,
|
|
||||||
JBIG2_FILE_SEQUENTIAL_HEADER,
|
|
||||||
JBIG2_FILE_SEQUENTIAL_BODY,
|
|
||||||
JBIG2_FILE_RANDOM_HEADERS,
|
|
||||||
JBIG2_FILE_RANDOM_BODIES,
|
|
||||||
JBIG2_FILE_EOF
|
|
||||||
} Jbig2FileState;
|
|
||||||
|
|
||||||
struct _Jbig2Ctx {
|
|
||||||
Jbig2Allocator *allocator;
|
|
||||||
Jbig2Options options;
|
|
||||||
const Jbig2Ctx *global_ctx;
|
|
||||||
Jbig2ErrorCallback error_callback;
|
|
||||||
void *error_callback_data;
|
|
||||||
|
|
||||||
byte *buf;
|
|
||||||
size_t buf_size;
|
|
||||||
unsigned int buf_rd_ix;
|
|
||||||
unsigned int buf_wr_ix;
|
|
||||||
|
|
||||||
Jbig2FileState state;
|
|
||||||
|
|
||||||
uint8_t file_header_flags;
|
|
||||||
int32_t n_pages;
|
|
||||||
|
|
||||||
int n_segments_max;
|
|
||||||
Jbig2Segment **segments;
|
|
||||||
int n_segments; /* index of last segment header parsed */
|
|
||||||
int segment_index; /* index of last segment body parsed */
|
|
||||||
|
|
||||||
/* list of decoded pages, including the one in progress,
|
|
||||||
currently stored as a contiguous, 0-indexed array. */
|
|
||||||
int current_page;
|
|
||||||
int max_page_index;
|
|
||||||
Jbig2Page *pages;
|
|
||||||
};
|
|
||||||
|
|
||||||
int32_t
|
|
||||||
jbig2_get_int32 (const byte *buf);
|
|
||||||
|
|
||||||
int16_t
|
|
||||||
jbig2_get_int16 (const byte *buf);
|
|
||||||
|
|
||||||
/* dynamic memory management */
|
|
||||||
void *
|
|
||||||
jbig2_alloc (Jbig2Allocator *allocator, size_t size);
|
|
||||||
|
|
||||||
void
|
|
||||||
jbig2_free (Jbig2Allocator *allocator, void *p);
|
|
||||||
|
|
||||||
void *
|
|
||||||
jbig2_realloc (Jbig2Allocator *allocator, void *p, size_t size);
|
|
||||||
|
|
||||||
#define jbig2_new(ctx, t, size) ((t *)jbig2_alloc(ctx->allocator, (size) * sizeof(t)))
|
|
||||||
|
|
||||||
#define jbig2_renew(ctx, p, t, size) ((t *)jbig2_realloc(ctx->allocator, (p), (size) * sizeof(t)))
|
|
||||||
|
|
||||||
int
|
|
||||||
jbig2_error (Jbig2Ctx *ctx, Jbig2Severity severity, int32_t seg_idx,
|
|
||||||
const char *fmt, ...);
|
|
||||||
|
|
||||||
/* the page structure handles decoded page
|
|
||||||
results. it's allocated by a 'page info'
|
|
||||||
segement and marked complete by an 'end of page'
|
|
||||||
segment.
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
JBIG2_PAGE_FREE,
|
|
||||||
JBIG2_PAGE_NEW,
|
|
||||||
JBIG2_PAGE_COMPLETE,
|
|
||||||
JBIG2_PAGE_RETURNED,
|
|
||||||
JBIG2_PAGE_RELEASED
|
|
||||||
} Jbig2PageState;
|
|
||||||
|
|
||||||
struct _Jbig2Page {
|
|
||||||
Jbig2PageState state;
|
|
||||||
uint32_t number;
|
|
||||||
uint32_t height, width; /* in pixels */
|
|
||||||
uint32_t x_resolution,
|
|
||||||
y_resolution; /* in pixels per meter */
|
|
||||||
uint16_t stripe_size;
|
|
||||||
bool striped;
|
|
||||||
int end_row;
|
|
||||||
uint8_t flags;
|
|
||||||
Jbig2Image *image;
|
|
||||||
};
|
|
||||||
|
|
||||||
int jbig2_page_info (Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data);
|
|
||||||
int jbig2_end_of_stripe(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data);
|
|
||||||
int jbig2_end_of_page(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data);
|
|
||||||
int jbig2_extension_segment(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data);
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
JBIG2_COMPOSE_OR = 0,
|
|
||||||
JBIG2_COMPOSE_AND = 1,
|
|
||||||
JBIG2_COMPOSE_XOR = 2,
|
|
||||||
JBIG2_COMPOSE_XNOR = 3,
|
|
||||||
JBIG2_COMPOSE_REPLACE = 4
|
|
||||||
} Jbig2ComposeOp;
|
|
||||||
|
|
||||||
int jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int y, Jbig2ComposeOp op);
|
|
||||||
int jbig2_page_add_result(Jbig2Ctx *ctx, Jbig2Page *page, Jbig2Image *src, int x, int y, Jbig2ComposeOp op);
|
|
||||||
|
|
||||||
/* region segment info */
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int32_t width;
|
|
||||||
int32_t height;
|
|
||||||
int32_t x;
|
|
||||||
int32_t y;
|
|
||||||
Jbig2ComposeOp op;
|
|
||||||
uint8_t flags;
|
|
||||||
} Jbig2RegionSegmentInfo;
|
|
||||||
|
|
||||||
void jbig2_get_region_segment_info(Jbig2RegionSegmentInfo *info, const uint8_t *segment_data);
|
|
||||||
int jbig2_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data);
|
|
||||||
|
|
||||||
/* 7.4 */
|
|
||||||
int jbig2_immediate_generic_region(Jbig2Ctx *ctx, Jbig2Segment *segment,
|
|
||||||
const uint8_t *segment_data);
|
|
||||||
int jbig2_refinement_region(Jbig2Ctx *ctx, Jbig2Segment *segment,
|
|
||||||
const byte *segment_data);
|
|
||||||
|
|
||||||
int jbig2_pattern_dictionary(Jbig2Ctx *ctx, Jbig2Segment *segment,
|
|
||||||
const byte *segment_data);
|
|
||||||
int jbig2_halftone_region(Jbig2Ctx *ctx, Jbig2Segment *segment,
|
|
||||||
const byte *segment_data);
|
|
||||||
|
|
||||||
|
|
||||||
/* The word stream design is a compromise between simplicity and
|
|
||||||
trying to amortize the number of method calls. Each ::get_next_word
|
|
||||||
invocation pulls 4 bytes from the stream, packed big-endian into a
|
|
||||||
32 bit word. The offset argument is provided as a convenience. It
|
|
||||||
begins at 0 and increments by 4 for each successive invocation. */
|
|
||||||
typedef struct _Jbig2WordStream Jbig2WordStream;
|
|
||||||
|
|
||||||
struct _Jbig2WordStream {
|
|
||||||
uint32_t (*get_next_word) (Jbig2WordStream *self, int offset);
|
|
||||||
};
|
|
||||||
|
|
||||||
Jbig2WordStream *
|
|
||||||
jbig2_word_stream_buf_new(Jbig2Ctx *ctx, const byte *data, size_t size);
|
|
||||||
|
|
||||||
void
|
|
||||||
jbig2_word_stream_buf_free(Jbig2Ctx *ctx, Jbig2WordStream *ws);
|
|
@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
jbig2dec
|
|
||||||
|
|
||||||
Copyright (C) 2001-2002 Artifex Software, Inc.
|
|
||||||
|
|
||||||
This software is distributed under license and may not
|
|
||||||
be copied, modified or distributed except as expressly
|
|
||||||
authorized under the terms of the license contained in
|
|
||||||
the file LICENSE in this distribution.
|
|
||||||
|
|
||||||
For further licensing information refer to http://artifex.com/ or
|
|
||||||
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
|
|
||||||
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* symbol dictionary header */
|
|
||||||
|
|
||||||
/* the results of decoding a symbol dictionary */
|
|
||||||
typedef struct {
|
|
||||||
int n_symbols;
|
|
||||||
Jbig2Image **glyphs;
|
|
||||||
} Jbig2SymbolDict;
|
|
||||||
|
|
||||||
/* decode a symbol dictionary segment and store the results */
|
|
||||||
int
|
|
||||||
jbig2_symbol_dictionary(Jbig2Ctx *ctx, Jbig2Segment *segment,
|
|
||||||
const byte *segment_data);
|
|
||||||
|
|
||||||
/* get a particular glyph by index */
|
|
||||||
Jbig2Image *
|
|
||||||
jbig2_sd_glyph(Jbig2SymbolDict *dict, unsigned int id);
|
|
||||||
|
|
||||||
/* return a new empty symbol dict */
|
|
||||||
Jbig2SymbolDict *
|
|
||||||
jbig2_sd_new(Jbig2Ctx *ctx, int n_symbols);
|
|
||||||
|
|
||||||
/* release the memory associated with a symbol dict */
|
|
||||||
void
|
|
||||||
jbig2_sd_release(Jbig2Ctx *ctx, Jbig2SymbolDict *dict);
|
|
||||||
|
|
||||||
/* generate a new symbol dictionary by concatenating a list of
|
|
||||||
existing dictionaries */
|
|
||||||
Jbig2SymbolDict *
|
|
||||||
jbig2_sd_cat(Jbig2Ctx *ctx, int n_dicts,
|
|
||||||
Jbig2SymbolDict **dicts);
|
|
||||||
|
|
||||||
/* count the number of dictionary segments referred
|
|
||||||
to by the given segment */
|
|
||||||
int
|
|
||||||
jbig2_sd_count_referred(Jbig2Ctx *ctx, Jbig2Segment *segment);
|
|
||||||
|
|
||||||
/* return an array of pointers to symbol dictionaries referred
|
|
||||||
to by a segment */
|
|
||||||
Jbig2SymbolDict **
|
|
||||||
jbig2_sd_list_referred(Jbig2Ctx *ctx, Jbig2Segment *segment);
|
|
||||||
|
|
@ -1,73 +0,0 @@
|
|||||||
/*
|
|
||||||
jbig2dec
|
|
||||||
|
|
||||||
Copyright (C) 2002-2004 Artifex Software, Inc.
|
|
||||||
|
|
||||||
This software is distributed under license and may not
|
|
||||||
be copied, modified or distributed except as expressly
|
|
||||||
authorized under the terms of the license contained in
|
|
||||||
the file LICENSE in this distribution.
|
|
||||||
|
|
||||||
For further licensing information refer to http://artifex.com/ or
|
|
||||||
contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
|
|
||||||
San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Headers for Text region handling
|
|
||||||
**/
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
JBIG2_CORNER_BOTTOMLEFT = 0,
|
|
||||||
JBIG2_CORNER_TOPLEFT = 1,
|
|
||||||
JBIG2_CORNER_BOTTOMRIGHT = 2,
|
|
||||||
JBIG2_CORNER_TOPRIGHT = 3
|
|
||||||
} Jbig2RefCorner;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
bool SBHUFF;
|
|
||||||
bool SBREFINE;
|
|
||||||
bool SBDEFPIXEL;
|
|
||||||
Jbig2ComposeOp SBCOMBOP;
|
|
||||||
bool TRANSPOSED;
|
|
||||||
Jbig2RefCorner REFCORNER;
|
|
||||||
int SBDSOFFSET;
|
|
||||||
/* int SBW; */
|
|
||||||
/* int SBH; */
|
|
||||||
uint32_t SBNUMINSTANCES;
|
|
||||||
int LOGSBSTRIPS;
|
|
||||||
int SBSTRIPS;
|
|
||||||
/* int SBNUMSYMS; */
|
|
||||||
/* SBSYMCODES */
|
|
||||||
/* SBSYMCODELEN */
|
|
||||||
/* SBSYMS */
|
|
||||||
Jbig2HuffmanTable *SBHUFFFS;
|
|
||||||
Jbig2HuffmanTable *SBHUFFDS;
|
|
||||||
Jbig2HuffmanTable *SBHUFFDT;
|
|
||||||
Jbig2HuffmanTable *SBHUFFRDW;
|
|
||||||
Jbig2HuffmanTable *SBHUFFRDH;
|
|
||||||
Jbig2HuffmanTable *SBHUFFRDX;
|
|
||||||
Jbig2HuffmanTable *SBHUFFRDY;
|
|
||||||
Jbig2HuffmanTable *SBHUFFRSIZE;
|
|
||||||
Jbig2ArithIntCtx *IADT;
|
|
||||||
Jbig2ArithIntCtx *IAFS;
|
|
||||||
Jbig2ArithIntCtx *IADS;
|
|
||||||
Jbig2ArithIntCtx *IAIT;
|
|
||||||
Jbig2ArithIaidCtx *IAID;
|
|
||||||
Jbig2ArithIntCtx *IARI;
|
|
||||||
Jbig2ArithIntCtx *IARDW;
|
|
||||||
Jbig2ArithIntCtx *IARDH;
|
|
||||||
Jbig2ArithIntCtx *IARDX;
|
|
||||||
Jbig2ArithIntCtx *IARDY;
|
|
||||||
bool SBRTEMPLATE;
|
|
||||||
int8_t sbrat[4];
|
|
||||||
} Jbig2TextRegionParams;
|
|
||||||
|
|
||||||
int
|
|
||||||
jbig2_decode_text_region(Jbig2Ctx *ctx, Jbig2Segment *segment,
|
|
||||||
const Jbig2TextRegionParams *params,
|
|
||||||
const Jbig2SymbolDict * const *dicts, const int n_dicts,
|
|
||||||
Jbig2Image *image,
|
|
||||||
const byte *data, const size_t size,
|
|
||||||
Jbig2ArithCx *GR_stats,
|
|
||||||
Jbig2ArithState *as, Jbig2WordStream *ws);
|
|
@ -1,38 +0,0 @@
|
|||||||
/* jconfig.dj --- jconfig.h for DJGPP (Delorie's GNU C port) on MS-DOS. */
|
|
||||||
/* see jconfig.doc for explanations */
|
|
||||||
|
|
||||||
#define HAVE_PROTOTYPES
|
|
||||||
#define HAVE_UNSIGNED_CHAR
|
|
||||||
#define HAVE_UNSIGNED_SHORT
|
|
||||||
/* #define void char */
|
|
||||||
/* #define const */
|
|
||||||
#undef CHAR_IS_UNSIGNED
|
|
||||||
#define HAVE_STDDEF_H
|
|
||||||
#define HAVE_STDLIB_H
|
|
||||||
#undef NEED_BSD_STRINGS
|
|
||||||
#undef NEED_SYS_TYPES_H
|
|
||||||
#undef NEED_FAR_POINTERS /* DJGPP uses flat 32-bit addressing */
|
|
||||||
#undef NEED_SHORT_EXTERNAL_NAMES
|
|
||||||
#undef INCOMPLETE_TYPES_BROKEN
|
|
||||||
|
|
||||||
#ifdef JPEG_INTERNALS
|
|
||||||
|
|
||||||
#undef RIGHT_SHIFT_IS_UNSIGNED
|
|
||||||
|
|
||||||
#endif /* JPEG_INTERNALS */
|
|
||||||
|
|
||||||
#ifdef JPEG_CJPEG_DJPEG
|
|
||||||
|
|
||||||
#define BMP_SUPPORTED /* BMP image file format */
|
|
||||||
#define GIF_SUPPORTED /* GIF image file format */
|
|
||||||
#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */
|
|
||||||
#undef RLE_SUPPORTED /* Utah RLE image file format */
|
|
||||||
#define TARGA_SUPPORTED /* Targa image file format */
|
|
||||||
|
|
||||||
#undef TWO_FILE_COMMANDLINE /* optional */
|
|
||||||
#define USE_SETMODE /* Needed to make one-file style work in DJGPP */
|
|
||||||
#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */
|
|
||||||
#undef DONT_USE_B_MODE
|
|
||||||
#undef PROGRESS_REPORT /* optional */
|
|
||||||
|
|
||||||
#endif /* JPEG_CJPEG_DJPEG */
|
|
@ -1,363 +0,0 @@
|
|||||||
/*
|
|
||||||
* jmorecfg.h
|
|
||||||
*
|
|
||||||
* Copyright (C) 1991-1997, Thomas G. Lane.
|
|
||||||
* This file is part of the Independent JPEG Group's software.
|
|
||||||
* For conditions of distribution and use, see the accompanying README file.
|
|
||||||
*
|
|
||||||
* This file contains additional configuration options that customize the
|
|
||||||
* JPEG software for special applications or support machine-dependent
|
|
||||||
* optimizations. Most users will not need to touch this file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define BITS_IN_JSAMPLE as either
|
|
||||||
* 8 for 8-bit sample values (the usual setting)
|
|
||||||
* 12 for 12-bit sample values
|
|
||||||
* Only 8 and 12 are legal data precisions for lossy JPEG according to the
|
|
||||||
* JPEG standard, and the IJG code does not support anything else!
|
|
||||||
* We do not support run-time selection of data precision, sorry.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Maximum number of components (color channels) allowed in JPEG image.
|
|
||||||
* To meet the letter of the JPEG spec, set this to 255. However, darn
|
|
||||||
* few applications need more than 4 channels (maybe 5 for CMYK + alpha
|
|
||||||
* mask). We recommend 10 as a reasonable compromise; use 4 if you are
|
|
||||||
* really short on memory. (Each allowed component costs a hundred or so
|
|
||||||
* bytes of storage, whether actually used in an image or not.)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define MAX_COMPONENTS 10 /* maximum number of image components */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Basic data types.
|
|
||||||
* You may need to change these if you have a machine with unusual data
|
|
||||||
* type sizes; for example, "char" not 8 bits, "short" not 16 bits,
|
|
||||||
* or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits,
|
|
||||||
* but it had better be at least 16.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Representation of a single sample (pixel element value).
|
|
||||||
* We frequently allocate large arrays of these, so it's important to keep
|
|
||||||
* them small. But if you have memory to burn and access to char or short
|
|
||||||
* arrays is very slow on your hardware, you might want to change these.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if BITS_IN_JSAMPLE == 8
|
|
||||||
/* JSAMPLE should be the smallest type that will hold the values 0..255.
|
|
||||||
* You can use a signed char by having GETJSAMPLE mask it with 0xFF.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_UNSIGNED_CHAR
|
|
||||||
|
|
||||||
typedef unsigned char JSAMPLE;
|
|
||||||
#define GETJSAMPLE(value) ((int) (value))
|
|
||||||
|
|
||||||
#else /* not HAVE_UNSIGNED_CHAR */
|
|
||||||
|
|
||||||
typedef char JSAMPLE;
|
|
||||||
#ifdef CHAR_IS_UNSIGNED
|
|
||||||
#define GETJSAMPLE(value) ((int) (value))
|
|
||||||
#else
|
|
||||||
#define GETJSAMPLE(value) ((int) (value) & 0xFF)
|
|
||||||
#endif /* CHAR_IS_UNSIGNED */
|
|
||||||
|
|
||||||
#endif /* HAVE_UNSIGNED_CHAR */
|
|
||||||
|
|
||||||
#define MAXJSAMPLE 255
|
|
||||||
#define CENTERJSAMPLE 128
|
|
||||||
|
|
||||||
#endif /* BITS_IN_JSAMPLE == 8 */
|
|
||||||
|
|
||||||
|
|
||||||
#if BITS_IN_JSAMPLE == 12
|
|
||||||
/* JSAMPLE should be the smallest type that will hold the values 0..4095.
|
|
||||||
* On nearly all machines "short" will do nicely.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef short JSAMPLE;
|
|
||||||
#define GETJSAMPLE(value) ((int) (value))
|
|
||||||
|
|
||||||
#define MAXJSAMPLE 4095
|
|
||||||
#define CENTERJSAMPLE 2048
|
|
||||||
|
|
||||||
#endif /* BITS_IN_JSAMPLE == 12 */
|
|
||||||
|
|
||||||
|
|
||||||
/* Representation of a DCT frequency coefficient.
|
|
||||||
* This should be a signed value of at least 16 bits; "short" is usually OK.
|
|
||||||
* Again, we allocate large arrays of these, but you can change to int
|
|
||||||
* if you have memory to burn and "short" is really slow.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef short JCOEF;
|
|
||||||
|
|
||||||
|
|
||||||
/* Compressed datastreams are represented as arrays of JOCTET.
|
|
||||||
* These must be EXACTLY 8 bits wide, at least once they are written to
|
|
||||||
* external storage. Note that when using the stdio data source/destination
|
|
||||||
* managers, this is also the data type passed to fread/fwrite.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_UNSIGNED_CHAR
|
|
||||||
|
|
||||||
typedef unsigned char JOCTET;
|
|
||||||
#define GETJOCTET(value) (value)
|
|
||||||
|
|
||||||
#else /* not HAVE_UNSIGNED_CHAR */
|
|
||||||
|
|
||||||
typedef char JOCTET;
|
|
||||||
#ifdef CHAR_IS_UNSIGNED
|
|
||||||
#define GETJOCTET(value) (value)
|
|
||||||
#else
|
|
||||||
#define GETJOCTET(value) ((value) & 0xFF)
|
|
||||||
#endif /* CHAR_IS_UNSIGNED */
|
|
||||||
|
|
||||||
#endif /* HAVE_UNSIGNED_CHAR */
|
|
||||||
|
|
||||||
|
|
||||||
/* These typedefs are used for various table entries and so forth.
|
|
||||||
* They must be at least as wide as specified; but making them too big
|
|
||||||
* won't cost a huge amount of memory, so we don't provide special
|
|
||||||
* extraction code like we did for JSAMPLE. (In other words, these
|
|
||||||
* typedefs live at a different point on the speed/space tradeoff curve.)
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* UINT8 must hold at least the values 0..255. */
|
|
||||||
|
|
||||||
#ifdef HAVE_UNSIGNED_CHAR
|
|
||||||
typedef unsigned char UINT8;
|
|
||||||
#else /* not HAVE_UNSIGNED_CHAR */
|
|
||||||
#ifdef CHAR_IS_UNSIGNED
|
|
||||||
typedef char UINT8;
|
|
||||||
#else /* not CHAR_IS_UNSIGNED */
|
|
||||||
typedef short UINT8;
|
|
||||||
#endif /* CHAR_IS_UNSIGNED */
|
|
||||||
#endif /* HAVE_UNSIGNED_CHAR */
|
|
||||||
|
|
||||||
/* UINT16 must hold at least the values 0..65535. */
|
|
||||||
|
|
||||||
#ifdef HAVE_UNSIGNED_SHORT
|
|
||||||
typedef unsigned short UINT16;
|
|
||||||
#else /* not HAVE_UNSIGNED_SHORT */
|
|
||||||
typedef unsigned int UINT16;
|
|
||||||
#endif /* HAVE_UNSIGNED_SHORT */
|
|
||||||
|
|
||||||
/* INT16 must hold at least the values -32768..32767. */
|
|
||||||
|
|
||||||
#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */
|
|
||||||
typedef short INT16;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* INT32 must hold at least signed 32-bit values. */
|
|
||||||
|
|
||||||
#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */
|
|
||||||
typedef long INT32;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Datatype used for image dimensions. The JPEG standard only supports
|
|
||||||
* images up to 64K*64K due to 16-bit fields in SOF markers. Therefore
|
|
||||||
* "unsigned int" is sufficient on all machines. However, if you need to
|
|
||||||
* handle larger images and you don't mind deviating from the spec, you
|
|
||||||
* can change this datatype.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef unsigned int JDIMENSION;
|
|
||||||
|
|
||||||
#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */
|
|
||||||
|
|
||||||
|
|
||||||
/* These macros are used in all function definitions and extern declarations.
|
|
||||||
* You could modify them if you need to change function linkage conventions;
|
|
||||||
* in particular, you'll need to do that to make the library a Windows DLL.
|
|
||||||
* Another application is to make all functions global for use with debuggers
|
|
||||||
* or code profilers that require it.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* a function called through method pointers: */
|
|
||||||
#define METHODDEF(type) static type
|
|
||||||
/* a function used only in its module: */
|
|
||||||
#define LOCAL(type) static type
|
|
||||||
/* a function referenced thru EXTERNs: */
|
|
||||||
#define GLOBAL(type) type
|
|
||||||
/* a reference to a GLOBAL function: */
|
|
||||||
#define EXTERN(type) extern type
|
|
||||||
|
|
||||||
|
|
||||||
/* This macro is used to declare a "method", that is, a function pointer.
|
|
||||||
* We want to supply prototype parameters if the compiler can cope.
|
|
||||||
* Note that the arglist parameter must be parenthesized!
|
|
||||||
* Again, you can customize this if you need special linkage keywords.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_PROTOTYPES
|
|
||||||
#define JMETHOD(type,methodname,arglist) type (*methodname) arglist
|
|
||||||
#else
|
|
||||||
#define JMETHOD(type,methodname,arglist) type (*methodname) ()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Here is the pseudo-keyword for declaring pointers that must be "far"
|
|
||||||
* on 80x86 machines. Most of the specialized coding for 80x86 is handled
|
|
||||||
* by just saying "FAR *" where such a pointer is needed. In a few places
|
|
||||||
* explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef NEED_FAR_POINTERS
|
|
||||||
#define FAR far
|
|
||||||
#else
|
|
||||||
#define FAR
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* On a few systems, type boolean and/or its values FALSE, TRUE may appear
|
|
||||||
* in standard header files. Or you may have conflicts with application-
|
|
||||||
* specific header files that you want to include together with these files.
|
|
||||||
* Defining HAVE_BOOLEAN before including jpeglib.h should make it work.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef HAVE_BOOLEAN
|
|
||||||
typedef int boolean;
|
|
||||||
#endif
|
|
||||||
#ifndef FALSE /* in case these macros already exist */
|
|
||||||
#define FALSE 0 /* values of boolean */
|
|
||||||
#endif
|
|
||||||
#ifndef TRUE
|
|
||||||
#define TRUE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The remaining options affect code selection within the JPEG library,
|
|
||||||
* but they don't need to be visible to most applications using the library.
|
|
||||||
* To minimize application namespace pollution, the symbols won't be
|
|
||||||
* defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef JPEG_INTERNALS
|
|
||||||
#define JPEG_INTERNAL_OPTIONS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef JPEG_INTERNAL_OPTIONS
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* These defines indicate whether to include various optional functions.
|
|
||||||
* Undefining some of these symbols will produce a smaller but less capable
|
|
||||||
* library. Note that you can leave certain source files out of the
|
|
||||||
* compilation/linking process if you've #undef'd the corresponding symbols.
|
|
||||||
* (You may HAVE to do that if your compiler doesn't like null source files.)
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */
|
|
||||||
|
|
||||||
/* Capability options common to encoder and decoder: */
|
|
||||||
|
|
||||||
#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */
|
|
||||||
#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */
|
|
||||||
#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */
|
|
||||||
|
|
||||||
/* Encoder capability options: */
|
|
||||||
|
|
||||||
#undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */
|
|
||||||
#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
|
|
||||||
#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/
|
|
||||||
#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */
|
|
||||||
/* Note: if you selected 12-bit data precision, it is dangerous to turn off
|
|
||||||
* ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit
|
|
||||||
* precision, so jchuff.c normally uses entropy optimization to compute
|
|
||||||
* usable tables for higher precision. If you don't want to do optimization,
|
|
||||||
* you'll have to supply different default Huffman tables.
|
|
||||||
* The exact same statements apply for progressive JPEG: the default tables
|
|
||||||
* don't work for progressive mode. (This may get fixed, however.)
|
|
||||||
*/
|
|
||||||
#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */
|
|
||||||
|
|
||||||
/* Decoder capability options: */
|
|
||||||
|
|
||||||
#undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */
|
|
||||||
#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
|
|
||||||
#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/
|
|
||||||
#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */
|
|
||||||
#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */
|
|
||||||
#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */
|
|
||||||
#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */
|
|
||||||
#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */
|
|
||||||
#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */
|
|
||||||
#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */
|
|
||||||
|
|
||||||
/* more capability options later, no doubt */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Ordering of RGB data in scanlines passed to or from the application.
|
|
||||||
* If your application wants to deal with data in the order B,G,R, just
|
|
||||||
* change these macros. You can also deal with formats such as R,G,B,X
|
|
||||||
* (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing
|
|
||||||
* the offsets will also change the order in which colormap data is organized.
|
|
||||||
* RESTRICTIONS:
|
|
||||||
* 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats.
|
|
||||||
* 2. These macros only affect RGB<=>YCbCr color conversion, so they are not
|
|
||||||
* useful if you are using JPEG color spaces other than YCbCr or grayscale.
|
|
||||||
* 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE
|
|
||||||
* is not 3 (they don't understand about dummy color components!). So you
|
|
||||||
* can't use color quantization if you change that value.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define RGB_RED 0 /* Offset of Red in an RGB scanline element */
|
|
||||||
#define RGB_GREEN 1 /* Offset of Green */
|
|
||||||
#define RGB_BLUE 2 /* Offset of Blue */
|
|
||||||
#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */
|
|
||||||
|
|
||||||
|
|
||||||
/* Definitions for speed-related optimizations. */
|
|
||||||
|
|
||||||
|
|
||||||
/* If your compiler supports inline functions, define INLINE
|
|
||||||
* as the inline keyword; otherwise define it as empty.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef INLINE
|
|
||||||
#ifdef __GNUC__ /* for instance, GNU C knows about inline */
|
|
||||||
#define INLINE __inline__
|
|
||||||
#endif
|
|
||||||
#ifndef INLINE
|
|
||||||
#define INLINE /* default is to define it as empty */
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying
|
|
||||||
* two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER
|
|
||||||
* as short on such a machine. MULTIPLIER must be at least 16 bits wide.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MULTIPLIER
|
|
||||||
#define MULTIPLIER int /* type for fastest integer multiply */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* FAST_FLOAT should be either float or double, whichever is done faster
|
|
||||||
* by your compiler. (Note that this type is only used in the floating point
|
|
||||||
* DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.)
|
|
||||||
* Typically, float is faster in ANSI C compilers, while double is faster in
|
|
||||||
* pre-ANSI compilers (because they insist on converting to double anyway).
|
|
||||||
* The code below therefore chooses float if we have ANSI-style prototypes.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef FAST_FLOAT
|
|
||||||
#ifdef HAVE_PROTOTYPES
|
|
||||||
#define FAST_FLOAT float
|
|
||||||
#else
|
|
||||||
#define FAST_FLOAT double
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* JPEG_INTERNAL_OPTIONS */
|
|
@ -1,231 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
|
|
||||||
* Copyright (c) 2002-2007, Professor Benoit Macq
|
|
||||||
* Copyright (c) 2002-2003, Yannick Verschueren
|
|
||||||
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
#ifndef __JP2_H
|
|
||||||
#define __JP2_H
|
|
||||||
/**
|
|
||||||
@file jp2.h
|
|
||||||
@brief The JPEG-2000 file format Reader/Writer (JP2)
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */
|
|
||||||
/*@{*/
|
|
||||||
|
|
||||||
#define JPIP_JPIP 0x6a706970
|
|
||||||
|
|
||||||
#define JP2_JP 0x6a502020 /**< JPEG 2000 signature box */
|
|
||||||
#define JP2_FTYP 0x66747970 /**< File type box */
|
|
||||||
#define JP2_JP2H 0x6a703268 /**< JP2 header box */
|
|
||||||
#define JP2_IHDR 0x69686472 /**< Image header box */
|
|
||||||
#define JP2_COLR 0x636f6c72 /**< Colour specification box */
|
|
||||||
#define JP2_JP2C 0x6a703263 /**< Contiguous codestream box */
|
|
||||||
#define JP2_URL 0x75726c20 /**< URL box */
|
|
||||||
#define JP2_DTBL 0x6474626c /**< Data Reference box */
|
|
||||||
#define JP2_BPCC 0x62706363 /**< Bits per component box */
|
|
||||||
#define JP2_JP2 0x6a703220 /**< File type fields */
|
|
||||||
#define JP2_PCLR 0x70636c72 /**< Palette box */
|
|
||||||
#define JP2_CMAP 0x636d6170 /**< Component Mapping box */
|
|
||||||
#define JP2_CDEF 0x63646566 /**< Channel Definition box */
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
/**
|
|
||||||
Channel description: channel index, type, assocation
|
|
||||||
*/
|
|
||||||
typedef struct opj_jp2_cdef_info
|
|
||||||
{
|
|
||||||
unsigned short cn, typ, asoc;
|
|
||||||
} opj_jp2_cdef_info_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Channel descriptions and number of descriptions
|
|
||||||
*/
|
|
||||||
typedef struct opj_jp2_cdef
|
|
||||||
{
|
|
||||||
opj_jp2_cdef_info_t *info;
|
|
||||||
unsigned short n;
|
|
||||||
} opj_jp2_cdef_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Component mappings: channel index, mapping type, palette index
|
|
||||||
*/
|
|
||||||
typedef struct opj_jp2_cmap_comp
|
|
||||||
{
|
|
||||||
unsigned short cmp;
|
|
||||||
unsigned char mtyp, pcol;
|
|
||||||
} opj_jp2_cmap_comp_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Palette data: table entries, palette columns
|
|
||||||
*/
|
|
||||||
typedef struct opj_jp2_pclr
|
|
||||||
{
|
|
||||||
unsigned int *entries;
|
|
||||||
unsigned char *channel_sign;
|
|
||||||
unsigned char *channel_size;
|
|
||||||
opj_jp2_cmap_comp_t *cmap;
|
|
||||||
unsigned short nr_entries, nr_channels;
|
|
||||||
} opj_jp2_pclr_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Collector for ICC profile, palette, component mapping, channel description
|
|
||||||
*/
|
|
||||||
typedef struct opj_jp2_color
|
|
||||||
{
|
|
||||||
unsigned char *icc_profile_buf;
|
|
||||||
int icc_profile_len;
|
|
||||||
|
|
||||||
opj_jp2_cdef_t *jp2_cdef;
|
|
||||||
opj_jp2_pclr_t *jp2_pclr;
|
|
||||||
unsigned char jp2_has_colr;
|
|
||||||
} opj_jp2_color_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
JP2 component
|
|
||||||
*/
|
|
||||||
typedef struct opj_jp2_comps {
|
|
||||||
int depth;
|
|
||||||
int sgnd;
|
|
||||||
int bpcc;
|
|
||||||
} opj_jp2_comps_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
JPEG-2000 file format reader/writer
|
|
||||||
*/
|
|
||||||
typedef struct opj_jp2 {
|
|
||||||
/** codec context */
|
|
||||||
opj_common_ptr cinfo;
|
|
||||||
/** handle to the J2K codec */
|
|
||||||
opj_j2k_t *j2k;
|
|
||||||
unsigned int w;
|
|
||||||
unsigned int h;
|
|
||||||
unsigned int numcomps;
|
|
||||||
unsigned int bpc;
|
|
||||||
unsigned int C;
|
|
||||||
unsigned int UnkC;
|
|
||||||
unsigned int IPR;
|
|
||||||
unsigned int meth;
|
|
||||||
unsigned int approx;
|
|
||||||
unsigned int enumcs;
|
|
||||||
unsigned int precedence;
|
|
||||||
unsigned int brand;
|
|
||||||
unsigned int minversion;
|
|
||||||
unsigned int numcl;
|
|
||||||
unsigned int *cl;
|
|
||||||
opj_jp2_comps_t *comps;
|
|
||||||
unsigned int j2k_codestream_offset;
|
|
||||||
unsigned int j2k_codestream_length;
|
|
||||||
} opj_jp2_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
JP2 Box
|
|
||||||
*/
|
|
||||||
typedef struct opj_jp2_box {
|
|
||||||
int length;
|
|
||||||
int type;
|
|
||||||
int init_pos;
|
|
||||||
} opj_jp2_box_t;
|
|
||||||
|
|
||||||
/** @name Exported functions */
|
|
||||||
/*@{*/
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
/**
|
|
||||||
Write the JP2H box - JP2 Header box (used in MJ2)
|
|
||||||
@param jp2 JP2 handle
|
|
||||||
@param cio Output buffer stream
|
|
||||||
*/
|
|
||||||
void jp2_write_jp2h(opj_jp2_t *jp2, opj_cio_t *cio);
|
|
||||||
/**
|
|
||||||
Read the JP2H box - JP2 Header box (used in MJ2)
|
|
||||||
@param jp2 JP2 handle
|
|
||||||
@param cio Input buffer stream
|
|
||||||
@param ext Collector for profile, cdef and pclr data
|
|
||||||
@return Returns true if successful, returns false otherwise
|
|
||||||
*/
|
|
||||||
bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color);
|
|
||||||
/**
|
|
||||||
Creates a JP2 decompression structure
|
|
||||||
@param cinfo Codec context info
|
|
||||||
@return Returns a handle to a JP2 decompressor if successful, returns NULL otherwise
|
|
||||||
*/
|
|
||||||
opj_jp2_t* jp2_create_decompress(opj_common_ptr cinfo);
|
|
||||||
/**
|
|
||||||
Destroy a JP2 decompressor handle
|
|
||||||
@param jp2 JP2 decompressor handle to destroy
|
|
||||||
*/
|
|
||||||
void jp2_destroy_decompress(opj_jp2_t *jp2);
|
|
||||||
/**
|
|
||||||
Setup the decoder decoding parameters using user parameters.
|
|
||||||
Decoding parameters are returned in jp2->j2k->cp.
|
|
||||||
@param jp2 JP2 decompressor handle
|
|
||||||
@param parameters decompression parameters
|
|
||||||
*/
|
|
||||||
void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters);
|
|
||||||
/**
|
|
||||||
Decode an image from a JPEG-2000 file stream
|
|
||||||
@param jp2 JP2 decompressor handle
|
|
||||||
@param cio Input buffer stream
|
|
||||||
@param cstr_info Codestream information structure if required, NULL otherwise
|
|
||||||
@return Returns a decoded image if successful, returns NULL otherwise
|
|
||||||
*/
|
|
||||||
opj_image_t* jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
|
|
||||||
/**
|
|
||||||
Creates a JP2 compression structure
|
|
||||||
@param cinfo Codec context info
|
|
||||||
@return Returns a handle to a JP2 compressor if successful, returns NULL otherwise
|
|
||||||
*/
|
|
||||||
opj_jp2_t* jp2_create_compress(opj_common_ptr cinfo);
|
|
||||||
/**
|
|
||||||
Destroy a JP2 compressor handle
|
|
||||||
@param jp2 JP2 compressor handle to destroy
|
|
||||||
*/
|
|
||||||
void jp2_destroy_compress(opj_jp2_t *jp2);
|
|
||||||
/**
|
|
||||||
Setup the encoder parameters using the current image and using user parameters.
|
|
||||||
Coding parameters are returned in jp2->j2k->cp.
|
|
||||||
@param jp2 JP2 compressor handle
|
|
||||||
@param parameters compression parameters
|
|
||||||
@param image input filled image
|
|
||||||
*/
|
|
||||||
void jp2_setup_encoder(opj_jp2_t *jp2, opj_cparameters_t *parameters, opj_image_t *image);
|
|
||||||
/**
|
|
||||||
Encode an image into a JPEG-2000 file stream
|
|
||||||
@param jp2 JP2 compressor handle
|
|
||||||
@param cio Output buffer stream
|
|
||||||
@param image Image to encode
|
|
||||||
@param cstr_info Codestream information structure if required, NULL otherwise
|
|
||||||
@return Returns true if successful, returns false otherwise
|
|
||||||
*/
|
|
||||||
bool jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
/*@}*/
|
|
||||||
|
|
||||||
/*@}*/
|
|
||||||
|
|
||||||
#endif /* __JP2_H */
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
|
|
||||||
* Copyright (c) 2002-2007, Professor Benoit Macq
|
|
||||||
* Copyright (c) 2002-2003, Yannick Verschueren
|
|
||||||
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __JPT_H
|
|
||||||
#define __JPT_H
|
|
||||||
/**
|
|
||||||
@file jpt.h
|
|
||||||
@brief JPT-stream reader (JPEG 2000, JPIP)
|
|
||||||
|
|
||||||
JPT-stream functions are implemented in J2K.C.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
Message Header JPT stream structure
|
|
||||||
*/
|
|
||||||
typedef struct opj_jpt_msg_header {
|
|
||||||
/** In-class Identifier */
|
|
||||||
unsigned int Id;
|
|
||||||
/** Last byte information */
|
|
||||||
unsigned int last_byte;
|
|
||||||
/** Class Identifier */
|
|
||||||
unsigned int Class_Id;
|
|
||||||
/** CSn : index identifier */
|
|
||||||
unsigned int CSn_Id;
|
|
||||||
/** Message offset */
|
|
||||||
unsigned int Msg_offset;
|
|
||||||
/** Message length */
|
|
||||||
unsigned int Msg_length;
|
|
||||||
/** Auxiliary for JPP case */
|
|
||||||
unsigned int Layer_nb;
|
|
||||||
} opj_jpt_msg_header_t;
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
/**
|
|
||||||
Initialize the value of the message header structure
|
|
||||||
@param header Message header structure
|
|
||||||
*/
|
|
||||||
void jpt_init_msg_header(opj_jpt_msg_header_t * header);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Read the message header for a JPP/JPT - stream
|
|
||||||
@param cinfo Codec context info
|
|
||||||
@param cio CIO handle
|
|
||||||
@param header Message header structure
|
|
||||||
*/
|
|
||||||
void jpt_read_msg_header(opj_common_ptr cinfo, opj_cio_t *cio, opj_jpt_msg_header_t *header);
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,915 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
|
|
||||||
* Copyright (c) 2002-2007, Professor Benoit Macq
|
|
||||||
* Copyright (c) 2001-2003, David Janssens
|
|
||||||
* Copyright (c) 2002-2003, Yannick Verschueren
|
|
||||||
* Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
|
|
||||||
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
|
||||||
* Copyright (c) 2006-2007, Parvatha Elangovan
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
#ifndef OPENJPEG_H
|
|
||||||
#define OPENJPEG_H
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
==========================================================
|
|
||||||
Compiler directives
|
|
||||||
==========================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(OPJ_STATIC) || !defined(_WIN32)
|
|
||||||
#define OPJ_API
|
|
||||||
#define OPJ_CALLCONV
|
|
||||||
#else
|
|
||||||
#define OPJ_CALLCONV __stdcall
|
|
||||||
/*
|
|
||||||
The following ifdef block is the standard way of creating macros which make exporting
|
|
||||||
from a DLL simpler. All files within this DLL are compiled with the OPJ_EXPORTS
|
|
||||||
symbol defined on the command line. this symbol should not be defined on any project
|
|
||||||
that uses this DLL. This way any other project whose source files include this file see
|
|
||||||
OPJ_API functions as being imported from a DLL, wheras this DLL sees symbols
|
|
||||||
defined with this macro as being exported.
|
|
||||||
*/
|
|
||||||
#if defined(OPJ_EXPORTS) || defined(DLL_EXPORT)
|
|
||||||
#define OPJ_API __declspec(dllexport)
|
|
||||||
#else
|
|
||||||
#define OPJ_API __declspec(dllimport)
|
|
||||||
#endif /* OPJ_EXPORTS */
|
|
||||||
#endif /* !OPJ_STATIC || !_WIN32 */
|
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#if defined(HAVE_STDBOOL_H)
|
|
||||||
/*
|
|
||||||
The C language implementation does correctly provide the standard header
|
|
||||||
file "stdbool.h".
|
|
||||||
*/
|
|
||||||
#include <stdbool.h>
|
|
||||||
#else
|
|
||||||
/*
|
|
||||||
The C language implementation does not provide the standard header file
|
|
||||||
"stdbool.h" as required by ISO/IEC 9899:1999. Try to compensate for this
|
|
||||||
braindamage below.
|
|
||||||
*/
|
|
||||||
#if !defined(bool)
|
|
||||||
#define bool int
|
|
||||||
#endif
|
|
||||||
#if !defined(true)
|
|
||||||
#define true 1
|
|
||||||
#endif
|
|
||||||
#if !defined(false)
|
|
||||||
#define false 0
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
||||||
/*
|
|
||||||
==========================================================
|
|
||||||
Useful constant definitions
|
|
||||||
==========================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define OPJ_PATH_LEN 4096 /**< Maximum allowed size for filenames */
|
|
||||||
|
|
||||||
#define J2K_MAXRLVLS 33 /**< Number of maximum resolution level authorized */
|
|
||||||
#define J2K_MAXBANDS (3*J2K_MAXRLVLS-2) /**< Number of maximum sub-band linked to number of resolution level */
|
|
||||||
|
|
||||||
/* UniPG>> */
|
|
||||||
#define JPWL_MAX_NO_TILESPECS 16 /**< Maximum number of tile parts expected by JPWL: increase at your will */
|
|
||||||
#define JPWL_MAX_NO_PACKSPECS 16 /**< Maximum number of packet parts expected by JPWL: increase at your will */
|
|
||||||
#define JPWL_MAX_NO_MARKERS 512 /**< Maximum number of JPWL markers: increase at your will */
|
|
||||||
#define JPWL_PRIVATEINDEX_NAME "jpwl_index_privatefilename" /**< index file name used when JPWL is on */
|
|
||||||
#define JPWL_EXPECTED_COMPONENTS 3 /**< Expect this number of components, so you'll find better the first EPB */
|
|
||||||
#define JPWL_MAXIMUM_TILES 8192 /**< Expect this maximum number of tiles, to avoid some crashes */
|
|
||||||
#define JPWL_MAXIMUM_HAMMING 2 /**< Expect this maximum number of bit errors in marker id's */
|
|
||||||
#define JPWL_MAXIMUM_EPB_ROOM 65450 /**< Expect this maximum number of bytes for composition of EPBs */
|
|
||||||
/* <<UniPG */
|
|
||||||
|
|
||||||
/*
|
|
||||||
==========================================================
|
|
||||||
enum definitions
|
|
||||||
==========================================================
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
Rsiz Capabilities
|
|
||||||
*/
|
|
||||||
typedef enum RSIZ_CAPABILITIES {
|
|
||||||
STD_RSIZ = 0, /** Standard JPEG2000 profile*/
|
|
||||||
CINEMA2K = 3, /** Profile name for a 2K image*/
|
|
||||||
CINEMA4K = 4 /** Profile name for a 4K image*/
|
|
||||||
} OPJ_RSIZ_CAPABILITIES;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Digital cinema operation mode
|
|
||||||
*/
|
|
||||||
typedef enum CINEMA_MODE {
|
|
||||||
OFF = 0, /** Not Digital Cinema*/
|
|
||||||
CINEMA2K_24 = 1, /** 2K Digital Cinema at 24 fps*/
|
|
||||||
CINEMA2K_48 = 2, /** 2K Digital Cinema at 48 fps*/
|
|
||||||
CINEMA4K_24 = 3 /** 4K Digital Cinema at 24 fps*/
|
|
||||||
}OPJ_CINEMA_MODE;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Progression order
|
|
||||||
*/
|
|
||||||
typedef enum PROG_ORDER {
|
|
||||||
PROG_UNKNOWN = -1, /**< place-holder */
|
|
||||||
LRCP = 0, /**< layer-resolution-component-precinct order */
|
|
||||||
RLCP = 1, /**< resolution-layer-component-precinct order */
|
|
||||||
RPCL = 2, /**< resolution-precinct-component-layer order */
|
|
||||||
PCRL = 3, /**< precinct-component-resolution-layer order */
|
|
||||||
CPRL = 4 /**< component-precinct-resolution-layer order */
|
|
||||||
} OPJ_PROG_ORDER;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Supported image color spaces
|
|
||||||
*/
|
|
||||||
typedef enum COLOR_SPACE {
|
|
||||||
CLRSPC_UNKNOWN = -1, /**< not supported by the library */
|
|
||||||
CLRSPC_UNSPECIFIED = 0, /**< not specified in the codestream */
|
|
||||||
CLRSPC_SRGB = 1, /**< sRGB */
|
|
||||||
CLRSPC_GRAY = 2, /**< grayscale */
|
|
||||||
CLRSPC_SYCC = 3 /**< YUV */
|
|
||||||
} OPJ_COLOR_SPACE;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Supported codec
|
|
||||||
*/
|
|
||||||
typedef enum CODEC_FORMAT {
|
|
||||||
CODEC_UNKNOWN = -1, /**< place-holder */
|
|
||||||
CODEC_J2K = 0, /**< JPEG-2000 codestream : read/write */
|
|
||||||
CODEC_JPT = 1, /**< JPT-stream (JPEG 2000, JPIP) : read only */
|
|
||||||
CODEC_JP2 = 2 /**< JPEG-2000 file format : read/write */
|
|
||||||
} OPJ_CODEC_FORMAT;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Limit decoding to certain portions of the codestream.
|
|
||||||
*/
|
|
||||||
typedef enum LIMIT_DECODING {
|
|
||||||
NO_LIMITATION = 0, /**< No limitation for the decoding. The entire codestream will de decoded */
|
|
||||||
LIMIT_TO_MAIN_HEADER = 1, /**< The decoding is limited to the Main Header */
|
|
||||||
DECODE_ALL_BUT_PACKETS = 2 /**< Decode everything except the JPEG 2000 packets */
|
|
||||||
} OPJ_LIMIT_DECODING;
|
|
||||||
|
|
||||||
/*
|
|
||||||
==========================================================
|
|
||||||
event manager typedef definitions
|
|
||||||
==========================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
Callback function prototype for events
|
|
||||||
@param msg Event message
|
|
||||||
@param client_data
|
|
||||||
*/
|
|
||||||
typedef void (*opj_msg_callback) (const char *msg, void *client_data);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Message handler object
|
|
||||||
used for
|
|
||||||
<ul>
|
|
||||||
<li>Error messages
|
|
||||||
<li>Warning messages
|
|
||||||
<li>Debugging messages
|
|
||||||
</ul>
|
|
||||||
*/
|
|
||||||
typedef struct opj_event_mgr {
|
|
||||||
/** Error message callback if available, NULL otherwise */
|
|
||||||
opj_msg_callback error_handler;
|
|
||||||
/** Warning message callback if available, NULL otherwise */
|
|
||||||
opj_msg_callback warning_handler;
|
|
||||||
/** Debug message callback if available, NULL otherwise */
|
|
||||||
opj_msg_callback info_handler;
|
|
||||||
} opj_event_mgr_t;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
==========================================================
|
|
||||||
codec typedef definitions
|
|
||||||
==========================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
Progression order changes
|
|
||||||
*/
|
|
||||||
typedef struct opj_poc {
|
|
||||||
/** Resolution num start, Component num start, given by POC */
|
|
||||||
int resno0, compno0;
|
|
||||||
/** Layer num end,Resolution num end, Component num end, given by POC */
|
|
||||||
int layno1, resno1, compno1;
|
|
||||||
/** Layer num start,Precinct num start, Precinct num end */
|
|
||||||
int layno0, precno0, precno1;
|
|
||||||
/** Progression order enum*/
|
|
||||||
OPJ_PROG_ORDER prg1,prg;
|
|
||||||
/** Progression order string*/
|
|
||||||
char progorder[5];
|
|
||||||
/** Tile number */
|
|
||||||
int tile;
|
|
||||||
/** Start and end values for Tile width and height*/
|
|
||||||
int tx0,tx1,ty0,ty1;
|
|
||||||
/** Start value, initialised in pi_initialise_encode*/
|
|
||||||
int layS, resS, compS, prcS;
|
|
||||||
/** End value, initialised in pi_initialise_encode */
|
|
||||||
int layE, resE, compE, prcE;
|
|
||||||
/** Start and end values of Tile width and height, initialised in pi_initialise_encode*/
|
|
||||||
int txS,txE,tyS,tyE,dx,dy;
|
|
||||||
/** Temporary values for Tile parts, initialised in pi_create_encode */
|
|
||||||
int lay_t, res_t, comp_t, prc_t,tx0_t,ty0_t;
|
|
||||||
} opj_poc_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Compression parameters
|
|
||||||
*/
|
|
||||||
typedef struct opj_cparameters {
|
|
||||||
/** size of tile: tile_size_on = false (not in argument) or = true (in argument) */
|
|
||||||
bool tile_size_on;
|
|
||||||
/** XTOsiz */
|
|
||||||
int cp_tx0;
|
|
||||||
/** YTOsiz */
|
|
||||||
int cp_ty0;
|
|
||||||
/** XTsiz */
|
|
||||||
int cp_tdx;
|
|
||||||
/** YTsiz */
|
|
||||||
int cp_tdy;
|
|
||||||
/** allocation by rate/distortion */
|
|
||||||
int cp_disto_alloc;
|
|
||||||
/** allocation by fixed layer */
|
|
||||||
int cp_fixed_alloc;
|
|
||||||
/** add fixed_quality */
|
|
||||||
int cp_fixed_quality;
|
|
||||||
/** fixed layer */
|
|
||||||
int *cp_matrice;
|
|
||||||
/** comment for coding */
|
|
||||||
char *cp_comment;
|
|
||||||
/** csty : coding style */
|
|
||||||
int csty;
|
|
||||||
/** progression order (default LRCP) */
|
|
||||||
OPJ_PROG_ORDER prog_order;
|
|
||||||
/** progression order changes */
|
|
||||||
opj_poc_t POC[32];
|
|
||||||
/** number of progression order changes (POC), default to 0 */
|
|
||||||
int numpocs;
|
|
||||||
/** number of layers */
|
|
||||||
int tcp_numlayers;
|
|
||||||
/** rates of layers */
|
|
||||||
float tcp_rates[100];
|
|
||||||
/** different psnr for successive layers */
|
|
||||||
float tcp_distoratio[100];
|
|
||||||
/** number of resolutions */
|
|
||||||
int numresolution;
|
|
||||||
/** initial code block width, default to 64 */
|
|
||||||
int cblockw_init;
|
|
||||||
/** initial code block height, default to 64 */
|
|
||||||
int cblockh_init;
|
|
||||||
/** mode switch (cblk_style) */
|
|
||||||
int mode;
|
|
||||||
/** 1 : use the irreversible DWT 9-7, 0 : use lossless compression (default) */
|
|
||||||
int irreversible;
|
|
||||||
/** region of interest: affected component in [0..3], -1 means no ROI */
|
|
||||||
int roi_compno;
|
|
||||||
/** region of interest: upshift value */
|
|
||||||
int roi_shift;
|
|
||||||
/* number of precinct size specifications */
|
|
||||||
int res_spec;
|
|
||||||
/** initial precinct width */
|
|
||||||
int prcw_init[J2K_MAXRLVLS];
|
|
||||||
/** initial precinct height */
|
|
||||||
int prch_init[J2K_MAXRLVLS];
|
|
||||||
|
|
||||||
/**@name command line encoder parameters (not used inside the library) */
|
|
||||||
/*@{*/
|
|
||||||
/** input file name */
|
|
||||||
char infile[OPJ_PATH_LEN];
|
|
||||||
/** output file name */
|
|
||||||
char outfile[OPJ_PATH_LEN];
|
|
||||||
/** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */
|
|
||||||
int index_on;
|
|
||||||
/** DEPRECATED. Index generation is now handeld with the opj_encode_with_info() function. Set to NULL */
|
|
||||||
char index[OPJ_PATH_LEN];
|
|
||||||
/** subimage encoding: origin image offset in x direction */
|
|
||||||
int image_offset_x0;
|
|
||||||
/** subimage encoding: origin image offset in y direction */
|
|
||||||
int image_offset_y0;
|
|
||||||
/** subsampling value for dx */
|
|
||||||
int subsampling_dx;
|
|
||||||
/** subsampling value for dy */
|
|
||||||
int subsampling_dy;
|
|
||||||
/** input file format 0: PGX, 1: PxM, 2: BMP 3:TIF*/
|
|
||||||
int decod_format;
|
|
||||||
/** output file format 0: J2K, 1: JP2, 2: JPT */
|
|
||||||
int cod_format;
|
|
||||||
/*@}*/
|
|
||||||
|
|
||||||
/* UniPG>> */
|
|
||||||
/**@name JPWL encoding parameters */
|
|
||||||
/*@{*/
|
|
||||||
/** enables writing of EPC in MH, thus activating JPWL */
|
|
||||||
bool jpwl_epc_on;
|
|
||||||
/** error protection method for MH (0,1,16,32,37-128) */
|
|
||||||
int jpwl_hprot_MH;
|
|
||||||
/** tile number of header protection specification (>=0) */
|
|
||||||
int jpwl_hprot_TPH_tileno[JPWL_MAX_NO_TILESPECS];
|
|
||||||
/** error protection methods for TPHs (0,1,16,32,37-128) */
|
|
||||||
int jpwl_hprot_TPH[JPWL_MAX_NO_TILESPECS];
|
|
||||||
/** tile number of packet protection specification (>=0) */
|
|
||||||
int jpwl_pprot_tileno[JPWL_MAX_NO_PACKSPECS];
|
|
||||||
/** packet number of packet protection specification (>=0) */
|
|
||||||
int jpwl_pprot_packno[JPWL_MAX_NO_PACKSPECS];
|
|
||||||
/** error protection methods for packets (0,1,16,32,37-128) */
|
|
||||||
int jpwl_pprot[JPWL_MAX_NO_PACKSPECS];
|
|
||||||
/** enables writing of ESD, (0=no/1/2 bytes) */
|
|
||||||
int jpwl_sens_size;
|
|
||||||
/** sensitivity addressing size (0=auto/2/4 bytes) */
|
|
||||||
int jpwl_sens_addr;
|
|
||||||
/** sensitivity range (0-3) */
|
|
||||||
int jpwl_sens_range;
|
|
||||||
/** sensitivity method for MH (-1=no,0-7) */
|
|
||||||
int jpwl_sens_MH;
|
|
||||||
/** tile number of sensitivity specification (>=0) */
|
|
||||||
int jpwl_sens_TPH_tileno[JPWL_MAX_NO_TILESPECS];
|
|
||||||
/** sensitivity methods for TPHs (-1=no,0-7) */
|
|
||||||
int jpwl_sens_TPH[JPWL_MAX_NO_TILESPECS];
|
|
||||||
/*@}*/
|
|
||||||
/* <<UniPG */
|
|
||||||
|
|
||||||
/** Digital Cinema compliance 0-not compliant, 1-compliant*/
|
|
||||||
OPJ_CINEMA_MODE cp_cinema;
|
|
||||||
/** Maximum rate for each component. If == 0, component size limitation is not considered */
|
|
||||||
int max_comp_size;
|
|
||||||
/** Profile name*/
|
|
||||||
OPJ_RSIZ_CAPABILITIES cp_rsiz;
|
|
||||||
/** Tile part generation*/
|
|
||||||
char tp_on;
|
|
||||||
/** Flag for Tile part generation*/
|
|
||||||
char tp_flag;
|
|
||||||
/** MCT (multiple component transform) */
|
|
||||||
char tcp_mct;
|
|
||||||
} opj_cparameters_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Decompression parameters
|
|
||||||
*/
|
|
||||||
typedef struct opj_dparameters {
|
|
||||||
/**
|
|
||||||
Set the number of highest resolution levels to be discarded.
|
|
||||||
The image resolution is effectively divided by 2 to the power of the number of discarded levels.
|
|
||||||
The reduce factor is limited by the smallest total number of decomposition levels among tiles.
|
|
||||||
if != 0, then original dimension divided by 2^(reduce);
|
|
||||||
if == 0 or not used, image is decoded to the full resolution
|
|
||||||
*/
|
|
||||||
int cp_reduce;
|
|
||||||
/**
|
|
||||||
Set the maximum number of quality layers to decode.
|
|
||||||
If there are less quality layers than the specified number, all the quality layers are decoded.
|
|
||||||
if != 0, then only the first "layer" layers are decoded;
|
|
||||||
if == 0 or not used, all the quality layers are decoded
|
|
||||||
*/
|
|
||||||
int cp_layer;
|
|
||||||
|
|
||||||
/**@name command line encoder parameters (not used inside the library) */
|
|
||||||
/*@{*/
|
|
||||||
/** input file name */
|
|
||||||
char infile[OPJ_PATH_LEN];
|
|
||||||
/** output file name */
|
|
||||||
char outfile[OPJ_PATH_LEN];
|
|
||||||
/** input file format 0: J2K, 1: JP2, 2: JPT */
|
|
||||||
int decod_format;
|
|
||||||
/** output file format 0: PGX, 1: PxM, 2: BMP */
|
|
||||||
int cod_format;
|
|
||||||
/*@}*/
|
|
||||||
|
|
||||||
/* UniPG>> */
|
|
||||||
/**@name JPWL decoding parameters */
|
|
||||||
/*@{*/
|
|
||||||
/** activates the JPWL correction capabilities */
|
|
||||||
bool jpwl_correct;
|
|
||||||
/** expected number of components */
|
|
||||||
int jpwl_exp_comps;
|
|
||||||
/** maximum number of tiles */
|
|
||||||
int jpwl_max_tiles;
|
|
||||||
/*@}*/
|
|
||||||
/* <<UniPG */
|
|
||||||
|
|
||||||
/**
|
|
||||||
Specify whether the decoding should be done on the entire codestream, or be limited to the main header
|
|
||||||
Limiting the decoding to the main header makes it possible to extract the characteristics of the codestream
|
|
||||||
if == NO_LIMITATION, the entire codestream is decoded;
|
|
||||||
if == LIMIT_TO_MAIN_HEADER, only the main header is decoded;
|
|
||||||
*/
|
|
||||||
OPJ_LIMIT_DECODING cp_limit_decoding;
|
|
||||||
|
|
||||||
} opj_dparameters_t;
|
|
||||||
|
|
||||||
/** Common fields between JPEG-2000 compression and decompression master structs. */
|
|
||||||
|
|
||||||
#define opj_common_fields \
|
|
||||||
opj_event_mgr_t *event_mgr; /**< pointer to the event manager */\
|
|
||||||
void * client_data; /**< Available for use by application */\
|
|
||||||
bool is_decompressor; /**< So common code can tell which is which */\
|
|
||||||
OPJ_CODEC_FORMAT codec_format; /**< selected codec */\
|
|
||||||
void *j2k_handle; /**< pointer to the J2K codec */\
|
|
||||||
void *jp2_handle; /**< pointer to the JP2 codec */\
|
|
||||||
void *mj2_handle /**< pointer to the MJ2 codec */
|
|
||||||
|
|
||||||
/* Routines that are to be used by both halves of the library are declared
|
|
||||||
* to receive a pointer to this structure. There are no actual instances of
|
|
||||||
* opj_common_struct_t, only of opj_cinfo_t and opj_dinfo_t.
|
|
||||||
*/
|
|
||||||
typedef struct opj_common_struct {
|
|
||||||
opj_common_fields; /* Fields common to both master struct types */
|
|
||||||
/* Additional fields follow in an actual opj_cinfo_t or
|
|
||||||
* opj_dinfo_t. All three structs must agree on these
|
|
||||||
* initial fields! (This would be a lot cleaner in C++.)
|
|
||||||
*/
|
|
||||||
} opj_common_struct_t;
|
|
||||||
|
|
||||||
typedef opj_common_struct_t * opj_common_ptr;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Compression context info
|
|
||||||
*/
|
|
||||||
typedef struct opj_cinfo {
|
|
||||||
/** Fields shared with opj_dinfo_t */
|
|
||||||
opj_common_fields;
|
|
||||||
/* other specific fields go here */
|
|
||||||
} opj_cinfo_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Decompression context info
|
|
||||||
*/
|
|
||||||
typedef struct opj_dinfo {
|
|
||||||
/** Fields shared with opj_cinfo_t */
|
|
||||||
opj_common_fields;
|
|
||||||
/* other specific fields go here */
|
|
||||||
} opj_dinfo_t;
|
|
||||||
|
|
||||||
/*
|
|
||||||
==========================================================
|
|
||||||
I/O stream typedef definitions
|
|
||||||
==========================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Stream open flags.
|
|
||||||
*/
|
|
||||||
/** The stream was opened for reading. */
|
|
||||||
#define OPJ_STREAM_READ 0x0001
|
|
||||||
/** The stream was opened for writing. */
|
|
||||||
#define OPJ_STREAM_WRITE 0x0002
|
|
||||||
|
|
||||||
/**
|
|
||||||
Byte input-output stream (CIO)
|
|
||||||
*/
|
|
||||||
typedef struct opj_cio {
|
|
||||||
/** codec context */
|
|
||||||
opj_common_ptr cinfo;
|
|
||||||
|
|
||||||
/** open mode (read/write) either OPJ_STREAM_READ or OPJ_STREAM_WRITE */
|
|
||||||
int openmode;
|
|
||||||
/** pointer to the start of the buffer */
|
|
||||||
unsigned char *buffer;
|
|
||||||
/** buffer size in bytes */
|
|
||||||
int length;
|
|
||||||
|
|
||||||
/** pointer to the start of the stream */
|
|
||||||
unsigned char *start;
|
|
||||||
/** pointer to the end of the stream */
|
|
||||||
unsigned char *end;
|
|
||||||
/** pointer to the current position */
|
|
||||||
unsigned char *bp;
|
|
||||||
} opj_cio_t;
|
|
||||||
|
|
||||||
/*
|
|
||||||
==========================================================
|
|
||||||
image typedef definitions
|
|
||||||
==========================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
Defines a single image component
|
|
||||||
*/
|
|
||||||
typedef struct opj_image_comp {
|
|
||||||
/** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */
|
|
||||||
int dx;
|
|
||||||
/** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */
|
|
||||||
int dy;
|
|
||||||
/** data width */
|
|
||||||
int w;
|
|
||||||
/** data height */
|
|
||||||
int h;
|
|
||||||
/** x component offset compared to the whole image */
|
|
||||||
int x0;
|
|
||||||
/** y component offset compared to the whole image */
|
|
||||||
int y0;
|
|
||||||
/** precision */
|
|
||||||
int prec;
|
|
||||||
/** image depth in bits */
|
|
||||||
int bpp;
|
|
||||||
/** signed (1) / unsigned (0) */
|
|
||||||
int sgnd;
|
|
||||||
/** number of decoded resolution */
|
|
||||||
int resno_decoded;
|
|
||||||
/** number of division by 2 of the out image compared to the original size of image */
|
|
||||||
int factor;
|
|
||||||
/** image component data */
|
|
||||||
int *data;
|
|
||||||
} opj_image_comp_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Defines image data and characteristics
|
|
||||||
*/
|
|
||||||
typedef struct opj_image {
|
|
||||||
/** XOsiz: horizontal offset from the origin of the reference grid to the left side of the image area */
|
|
||||||
int x0;
|
|
||||||
/** YOsiz: vertical offset from the origin of the reference grid to the top side of the image area */
|
|
||||||
int y0;
|
|
||||||
/** Xsiz: width of the reference grid */
|
|
||||||
int x1;
|
|
||||||
/** Ysiz: height of the reference grid */
|
|
||||||
int y1;
|
|
||||||
/** number of components in the image */
|
|
||||||
int numcomps;
|
|
||||||
/** color space: sRGB, Greyscale or YUV */
|
|
||||||
OPJ_COLOR_SPACE color_space;
|
|
||||||
/** image components */
|
|
||||||
opj_image_comp_t *comps;
|
|
||||||
/** 'restricted' ICC profile */
|
|
||||||
unsigned char *icc_profile_buf;
|
|
||||||
/** size of ICC profile */
|
|
||||||
int icc_profile_len;
|
|
||||||
} opj_image_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Component parameters structure used by the opj_image_create function
|
|
||||||
*/
|
|
||||||
typedef struct opj_image_comptparm {
|
|
||||||
/** XRsiz: horizontal separation of a sample of ith component with respect to the reference grid */
|
|
||||||
int dx;
|
|
||||||
/** YRsiz: vertical separation of a sample of ith component with respect to the reference grid */
|
|
||||||
int dy;
|
|
||||||
/** data width */
|
|
||||||
int w;
|
|
||||||
/** data height */
|
|
||||||
int h;
|
|
||||||
/** x component offset compared to the whole image */
|
|
||||||
int x0;
|
|
||||||
/** y component offset compared to the whole image */
|
|
||||||
int y0;
|
|
||||||
/** precision */
|
|
||||||
int prec;
|
|
||||||
/** image depth in bits */
|
|
||||||
int bpp;
|
|
||||||
/** signed (1) / unsigned (0) */
|
|
||||||
int sgnd;
|
|
||||||
} opj_image_cmptparm_t;
|
|
||||||
|
|
||||||
/*
|
|
||||||
==========================================================
|
|
||||||
Information on the JPEG 2000 codestream
|
|
||||||
==========================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
Index structure : Information concerning a packet inside tile
|
|
||||||
*/
|
|
||||||
typedef struct opj_packet_info {
|
|
||||||
/** packet start position (including SOP marker if it exists) */
|
|
||||||
int start_pos;
|
|
||||||
/** end of packet header position (including EPH marker if it exists)*/
|
|
||||||
int end_ph_pos;
|
|
||||||
/** packet end position */
|
|
||||||
int end_pos;
|
|
||||||
/** packet distorsion */
|
|
||||||
double disto;
|
|
||||||
} opj_packet_info_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Index structure : Information concerning tile-parts
|
|
||||||
*/
|
|
||||||
typedef struct opj_tp_info {
|
|
||||||
/** start position of tile part */
|
|
||||||
int tp_start_pos;
|
|
||||||
/** end position of tile part header */
|
|
||||||
int tp_end_header;
|
|
||||||
/** end position of tile part */
|
|
||||||
int tp_end_pos;
|
|
||||||
/** start packet of tile part */
|
|
||||||
int tp_start_pack;
|
|
||||||
/** number of packets of tile part */
|
|
||||||
int tp_numpacks;
|
|
||||||
} opj_tp_info_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Index structure : information regarding tiles
|
|
||||||
*/
|
|
||||||
typedef struct opj_tile_info {
|
|
||||||
/** value of thresh for each layer by tile cfr. Marcela */
|
|
||||||
double *thresh;
|
|
||||||
/** number of tile */
|
|
||||||
int tileno;
|
|
||||||
/** start position */
|
|
||||||
int start_pos;
|
|
||||||
/** end position of the header */
|
|
||||||
int end_header;
|
|
||||||
/** end position */
|
|
||||||
int end_pos;
|
|
||||||
/** precinct number for each resolution level (width) */
|
|
||||||
int pw[33];
|
|
||||||
/** precinct number for each resolution level (height) */
|
|
||||||
int ph[33];
|
|
||||||
/** precinct size (in power of 2), in X for each resolution level */
|
|
||||||
int pdx[33];
|
|
||||||
/** precinct size (in power of 2), in Y for each resolution level */
|
|
||||||
int pdy[33];
|
|
||||||
/** information concerning packets inside tile */
|
|
||||||
opj_packet_info_t *packet;
|
|
||||||
/** add fixed_quality */
|
|
||||||
int numpix;
|
|
||||||
/** add fixed_quality */
|
|
||||||
double distotile;
|
|
||||||
/** number of tile parts */
|
|
||||||
int num_tps;
|
|
||||||
/** information concerning tile parts */
|
|
||||||
opj_tp_info_t *tp;
|
|
||||||
} opj_tile_info_t;
|
|
||||||
|
|
||||||
/* UniPG>> */
|
|
||||||
/**
|
|
||||||
Marker structure
|
|
||||||
*/
|
|
||||||
typedef struct opj_marker_info_t {
|
|
||||||
/** marker type */
|
|
||||||
unsigned short int type;
|
|
||||||
/** position in codestream */
|
|
||||||
int pos;
|
|
||||||
/** length, marker val included */
|
|
||||||
int len;
|
|
||||||
} opj_marker_info_t;
|
|
||||||
/* <<UniPG */
|
|
||||||
|
|
||||||
/**
|
|
||||||
Index structure of the codestream
|
|
||||||
*/
|
|
||||||
typedef struct opj_codestream_info {
|
|
||||||
/** maximum distortion reduction on the whole image (add for Marcela) */
|
|
||||||
double D_max;
|
|
||||||
/** packet number */
|
|
||||||
int packno;
|
|
||||||
/** writing the packet in the index with t2_encode_packets */
|
|
||||||
int index_write;
|
|
||||||
/** image width */
|
|
||||||
int image_w;
|
|
||||||
/** image height */
|
|
||||||
int image_h;
|
|
||||||
/** progression order */
|
|
||||||
OPJ_PROG_ORDER prog;
|
|
||||||
/** tile size in x */
|
|
||||||
int tile_x;
|
|
||||||
/** tile size in y */
|
|
||||||
int tile_y;
|
|
||||||
/** */
|
|
||||||
int tile_Ox;
|
|
||||||
/** */
|
|
||||||
int tile_Oy;
|
|
||||||
/** number of tiles in X */
|
|
||||||
int tw;
|
|
||||||
/** number of tiles in Y */
|
|
||||||
int th;
|
|
||||||
/** component numbers */
|
|
||||||
int numcomps;
|
|
||||||
/** number of layer */
|
|
||||||
int numlayers;
|
|
||||||
/** number of decomposition for each component */
|
|
||||||
int *numdecompos;
|
|
||||||
/* UniPG>> */
|
|
||||||
/** number of markers */
|
|
||||||
int marknum;
|
|
||||||
/** list of markers */
|
|
||||||
opj_marker_info_t *marker;
|
|
||||||
/** actual size of markers array */
|
|
||||||
int maxmarknum;
|
|
||||||
/* <<UniPG */
|
|
||||||
/** main header position */
|
|
||||||
int main_head_start;
|
|
||||||
/** main header position */
|
|
||||||
int main_head_end;
|
|
||||||
/** codestream's size */
|
|
||||||
int codestream_size;
|
|
||||||
/** information regarding tiles inside image */
|
|
||||||
opj_tile_info_t *tile;
|
|
||||||
} opj_codestream_info_t;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
==========================================================
|
|
||||||
openjpeg version
|
|
||||||
==========================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
OPJ_API const char * OPJ_CALLCONV opj_version(void);
|
|
||||||
|
|
||||||
/*
|
|
||||||
==========================================================
|
|
||||||
image functions definitions
|
|
||||||
==========================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
Create an image
|
|
||||||
@param numcmpts number of components
|
|
||||||
@param cmptparms components parameters
|
|
||||||
@param clrspc image color space
|
|
||||||
@return returns a new image structure if successful, returns NULL otherwise
|
|
||||||
*/
|
|
||||||
OPJ_API opj_image_t* OPJ_CALLCONV opj_image_create(int numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Deallocate any resources associated with an image
|
|
||||||
@param image image to be destroyed
|
|
||||||
*/
|
|
||||||
OPJ_API void OPJ_CALLCONV opj_image_destroy(opj_image_t *image);
|
|
||||||
|
|
||||||
/*
|
|
||||||
==========================================================
|
|
||||||
stream functions definitions
|
|
||||||
==========================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
Open and allocate a memory stream for read / write.
|
|
||||||
On reading, the user must provide a buffer containing encoded data. The buffer will be
|
|
||||||
wrapped by the returned CIO handle.
|
|
||||||
On writing, buffer parameters must be set to 0: a buffer will be allocated by the library
|
|
||||||
to contain encoded data.
|
|
||||||
@param cinfo Codec context info
|
|
||||||
@param buffer Reading: buffer address. Writing: NULL
|
|
||||||
@param length Reading: buffer length. Writing: 0
|
|
||||||
@return Returns a CIO handle if successful, returns NULL otherwise
|
|
||||||
*/
|
|
||||||
OPJ_API opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Close and free a CIO handle
|
|
||||||
@param cio CIO handle to free
|
|
||||||
*/
|
|
||||||
OPJ_API void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Get position in byte stream
|
|
||||||
@param cio CIO handle
|
|
||||||
@return Returns the position in bytes
|
|
||||||
*/
|
|
||||||
OPJ_API int OPJ_CALLCONV cio_tell(opj_cio_t *cio);
|
|
||||||
/**
|
|
||||||
Set position in byte stream
|
|
||||||
@param cio CIO handle
|
|
||||||
@param pos Position, in number of bytes, from the beginning of the stream
|
|
||||||
*/
|
|
||||||
OPJ_API void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos);
|
|
||||||
|
|
||||||
/*
|
|
||||||
==========================================================
|
|
||||||
event manager functions definitions
|
|
||||||
==========================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
OPJ_API opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context);
|
|
||||||
|
|
||||||
/*
|
|
||||||
==========================================================
|
|
||||||
codec functions definitions
|
|
||||||
==========================================================
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
Creates a J2K/JPT/JP2 decompression structure
|
|
||||||
@param format Decoder to select
|
|
||||||
@return Returns a handle to a decompressor if successful, returns NULL otherwise
|
|
||||||
*/
|
|
||||||
OPJ_API opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format);
|
|
||||||
/**
|
|
||||||
Destroy a decompressor handle
|
|
||||||
@param dinfo decompressor handle to destroy
|
|
||||||
*/
|
|
||||||
OPJ_API void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo);
|
|
||||||
/**
|
|
||||||
Set decoding parameters to default values
|
|
||||||
@param parameters Decompression parameters
|
|
||||||
*/
|
|
||||||
OPJ_API void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters);
|
|
||||||
/**
|
|
||||||
Setup the decoder decoding parameters using user parameters.
|
|
||||||
Decoding parameters are returned in j2k->cp.
|
|
||||||
@param dinfo decompressor handle
|
|
||||||
@param parameters decompression parameters
|
|
||||||
*/
|
|
||||||
OPJ_API void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters);
|
|
||||||
/**
|
|
||||||
Decode an image from a JPEG-2000 codestream
|
|
||||||
@param dinfo decompressor handle
|
|
||||||
@param cio Input buffer stream
|
|
||||||
@return Returns a decoded image if successful, returns NULL otherwise
|
|
||||||
*/
|
|
||||||
OPJ_API opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Decode an image from a JPEG-2000 codestream and extract the codestream information
|
|
||||||
@param dinfo decompressor handle
|
|
||||||
@param cio Input buffer stream
|
|
||||||
@param cstr_info Codestream information structure if needed afterwards, NULL otherwise
|
|
||||||
@return Returns a decoded image if successful, returns NULL otherwise
|
|
||||||
*/
|
|
||||||
OPJ_API opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_codestream_info_t *cstr_info);
|
|
||||||
/**
|
|
||||||
Creates a J2K/JP2 compression structure
|
|
||||||
@param format Coder to select
|
|
||||||
@return Returns a handle to a compressor if successful, returns NULL otherwise
|
|
||||||
*/
|
|
||||||
OPJ_API opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format);
|
|
||||||
/**
|
|
||||||
Destroy a compressor handle
|
|
||||||
@param cinfo compressor handle to destroy
|
|
||||||
*/
|
|
||||||
OPJ_API void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo);
|
|
||||||
/**
|
|
||||||
Set encoding parameters to default values, that means :
|
|
||||||
<ul>
|
|
||||||
<li>Lossless
|
|
||||||
<li>1 tile
|
|
||||||
<li>Size of precinct : 2^15 x 2^15 (means 1 precinct)
|
|
||||||
<li>Size of code-block : 64 x 64
|
|
||||||
<li>Number of resolutions: 6
|
|
||||||
<li>No SOP marker in the codestream
|
|
||||||
<li>No EPH marker in the codestream
|
|
||||||
<li>No sub-sampling in x or y direction
|
|
||||||
<li>No mode switch activated
|
|
||||||
<li>Progression order: LRCP
|
|
||||||
<li>No index file
|
|
||||||
<li>No ROI upshifted
|
|
||||||
<li>No offset of the origin of the image
|
|
||||||
<li>No offset of the origin of the tiles
|
|
||||||
<li>Reversible DWT 5-3
|
|
||||||
</ul>
|
|
||||||
@param parameters Compression parameters
|
|
||||||
*/
|
|
||||||
OPJ_API void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters);
|
|
||||||
/**
|
|
||||||
Setup the encoder parameters using the current image and using user parameters.
|
|
||||||
@param cinfo Compressor handle
|
|
||||||
@param parameters Compression parameters
|
|
||||||
@param image Input filled image
|
|
||||||
*/
|
|
||||||
OPJ_API void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_image_t *image);
|
|
||||||
/**
|
|
||||||
Encode an image into a JPEG-2000 codestream
|
|
||||||
@param cinfo compressor handle
|
|
||||||
@param cio Output buffer stream
|
|
||||||
@param image Image to encode
|
|
||||||
@param index Depreacted -> Set to NULL. To extract index, used opj_encode_wci()
|
|
||||||
@return Returns true if successful, returns false otherwise
|
|
||||||
*/
|
|
||||||
OPJ_API bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index);
|
|
||||||
/**
|
|
||||||
Encode an image into a JPEG-2000 codestream and extract the codestream information
|
|
||||||
@param cinfo compressor handle
|
|
||||||
@param cio Output buffer stream
|
|
||||||
@param image Image to encode
|
|
||||||
@param cstr_info Codestream information structure if needed afterwards, NULL otherwise
|
|
||||||
@return Returns true if successful, returns false otherwise
|
|
||||||
*/
|
|
||||||
OPJ_API bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
|
|
||||||
/**
|
|
||||||
Destroy Codestream information after compression or decompression
|
|
||||||
@param cstr_info Codestream information structure
|
|
||||||
*/
|
|
||||||
OPJ_API void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* OPENJPEG_H */
|
|
@ -2,12 +2,10 @@ CC = kos32-gcc
|
|||||||
LD = kos32-ld
|
LD = kos32-ld
|
||||||
|
|
||||||
SDK_DIR = $(abspath ../../../sdk)
|
SDK_DIR = $(abspath ../../../sdk)
|
||||||
LDFLAGS = -call_shared -nostdlib -T $(SDK_DIR)/sources/newlib/app-dynamic.lds --image-base 0
|
|
||||||
|
|
||||||
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32
|
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32
|
||||||
|
|
||||||
INCLUDES = -I $(SDK_DIR)/sources/newlib/libc/include -I ../fitz -I $(SDK_DIR)/sources/freetype/include
|
INCLUDES = -I $(SDK_DIR)/sources/newlib/libc/include -I ../fitz -I $(SDK_DIR)/sources/freetype/include
|
||||||
LIBPATH = -L $(SDK_DIR)/lib -L /home/autobuild/tools/win32/mingw32/lib
|
|
||||||
|
|
||||||
PDF_SRC := $(notdir $(wildcard *.c))
|
PDF_SRC := $(notdir $(wildcard *.c))
|
||||||
OBJECTS = $(patsubst %.c, %.o, $(PDF_SRC))
|
OBJECTS = $(patsubst %.c, %.o, $(PDF_SRC))
|
||||||
|
Loading…
Reference in New Issue
Block a user