OpenJPEG  1.5.0
t1.h
Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
00003  * Copyright (c) 2002-2007, Professor Benoit Macq
00004  * Copyright (c) 2001-2003, David Janssens
00005  * Copyright (c) 2002-2003, Yannick Verschueren
00006  * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
00007  * Copyright (c) 2005, Herve Drolon, FreeImage Team
00008  * All rights reserved.
00009  *
00010  * Redistribution and use in source and binary forms, with or without
00011  * modification, are permitted provided that the following conditions
00012  * are met:
00013  * 1. Redistributions of source code must retain the above copyright
00014  *    notice, this list of conditions and the following disclaimer.
00015  * 2. Redistributions in binary form must reproduce the above copyright
00016  *    notice, this list of conditions and the following disclaimer in the
00017  *    documentation and/or other materials provided with the distribution.
00018  *
00019  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
00020  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00021  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00022  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00023  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00024  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00025  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00026  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00027  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00028  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00029  * POSSIBILITY OF SUCH DAMAGE.
00030  */
00031 #ifndef __T1_H
00032 #define __T1_H
00033 
00043 
00044 /* ----------------------------------------------------------------------- */
00045 #define T1_NMSEDEC_BITS 7
00046 
00047 #define T1_SIG_NE 0x0001        
00048 #define T1_SIG_SE 0x0002        
00049 #define T1_SIG_SW 0x0004        
00050 #define T1_SIG_NW 0x0008        
00051 #define T1_SIG_N 0x0010         
00052 #define T1_SIG_E 0x0020         
00053 #define T1_SIG_S 0x0040         
00054 #define T1_SIG_W 0x0080         
00055 #define T1_SIG_OTH (T1_SIG_N|T1_SIG_NE|T1_SIG_E|T1_SIG_SE|T1_SIG_S|T1_SIG_SW|T1_SIG_W|T1_SIG_NW)
00056 #define T1_SIG_PRIM (T1_SIG_N|T1_SIG_E|T1_SIG_S|T1_SIG_W)
00057 
00058 #define T1_SGN_N 0x0100
00059 #define T1_SGN_E 0x0200
00060 #define T1_SGN_S 0x0400
00061 #define T1_SGN_W 0x0800
00062 #define T1_SGN (T1_SGN_N|T1_SGN_E|T1_SGN_S|T1_SGN_W)
00063 
00064 #define T1_SIG 0x1000
00065 #define T1_REFINE 0x2000
00066 #define T1_VISIT 0x4000
00067 
00068 #define T1_NUMCTXS_ZC 9
00069 #define T1_NUMCTXS_SC 5
00070 #define T1_NUMCTXS_MAG 3
00071 #define T1_NUMCTXS_AGG 1
00072 #define T1_NUMCTXS_UNI 1
00073 
00074 #define T1_CTXNO_ZC 0
00075 #define T1_CTXNO_SC (T1_CTXNO_ZC+T1_NUMCTXS_ZC)
00076 #define T1_CTXNO_MAG (T1_CTXNO_SC+T1_NUMCTXS_SC)
00077 #define T1_CTXNO_AGG (T1_CTXNO_MAG+T1_NUMCTXS_MAG)
00078 #define T1_CTXNO_UNI (T1_CTXNO_AGG+T1_NUMCTXS_AGG)
00079 #define T1_NUMCTXS (T1_CTXNO_UNI+T1_NUMCTXS_UNI)
00080 
00081 #define T1_NMSEDEC_FRACBITS (T1_NMSEDEC_BITS-1)
00082 
00083 #define T1_TYPE_MQ 0    
00084 #define T1_TYPE_RAW 1   
00086 /* ----------------------------------------------------------------------- */
00087 
00088 typedef short flag_t;
00089 
00093 typedef struct opj_t1 {
00095         opj_common_ptr cinfo;
00096 
00098         opj_mqc_t *mqc;
00100         opj_raw_t *raw;
00101 
00102         int *data;
00103         flag_t *flags;
00104         int w;
00105         int h;
00106         int datasize;
00107         int flagssize;
00108         int flags_stride;
00109 } opj_t1_t;
00110 
00111 #define MACRO_t1_flags(x,y) t1->flags[((x)*(t1->flags_stride))+(y)]
00112 
00115 /* ----------------------------------------------------------------------- */
00122 opj_t1_t* t1_create(opj_common_ptr cinfo);
00127 void t1_destroy(opj_t1_t *t1);
00134 void t1_encode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp);
00141 void t1_decode_cblks(opj_t1_t* t1, opj_tcd_tilecomp_t* tilec, opj_tccp_t* tccp);
00142 /* ----------------------------------------------------------------------- */
00146 
00147 #endif /* __T1_H */