1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The copyright in this software is being made available under the 2-clauses
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * BSD License, included below. This software may be subject to other third
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * party and contributor rights, including patent rights, and no such rights
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * are granted under this license.
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2002-2014, Professor Benoit Macq
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2001-2003, David Janssens
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2002-2003, Yannick Verschueren
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2003-2007, Francois-Olivier Devaux
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2003-2014, Antonin Descampe
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2005, Herve Drolon, FreeImage Team
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * All rights reserved.
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Redistribution and use in source and binary forms, with or without
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * modification, are permitted provided that the following conditions
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * are met:
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 1. Redistributions of source code must retain the above copyright
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *    notice, this list of conditions and the following disclaimer.
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 2. Redistributions in binary form must reproduce the above copyright
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *    notice, this list of conditions and the following disclaimer in the
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *    documentation and/or other materials provided with the distribution.
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * POSSIBILITY OF SUCH DAMAGE.
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef __T1_H
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define __T1_H
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@file t1.h
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@brief Implementation of the tier-1 coding (coding of code-block coefficients) (T1)
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovThe functions in T1.C have for goal to realize the tier-1 coding operation. The functions
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovin T1.C are used by some function in TCD.C.
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** @defgroup T1 T1 - Implementation of the tier-1 coding */
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@{*/
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ----------------------------------------------------------------------- */
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_NMSEDEC_BITS 7
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SIG_NE 0x0001	/**< Context orientation : North-East direction */
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SIG_SE 0x0002	/**< Context orientation : South-East direction */
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SIG_SW 0x0004	/**< Context orientation : South-West direction */
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SIG_NW 0x0008	/**< Context orientation : North-West direction */
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SIG_N 0x0010		/**< Context orientation : North direction */
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SIG_E 0x0020		/**< Context orientation : East direction */
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SIG_S 0x0040		/**< Context orientation : South direction */
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SIG_W 0x0080		/**< Context orientation : West direction */
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#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)
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SIG_PRIM (T1_SIG_N|T1_SIG_E|T1_SIG_S|T1_SIG_W)
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SGN_N 0x0100
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SGN_E 0x0200
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SGN_S 0x0400
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SGN_W 0x0800
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SGN (T1_SGN_N|T1_SGN_E|T1_SGN_S|T1_SGN_W)
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_SIG 0x1000
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_REFINE 0x2000
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_VISIT 0x4000
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_NUMCTXS_ZC 9
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_NUMCTXS_SC 5
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_NUMCTXS_MAG 3
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_NUMCTXS_AGG 1
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_NUMCTXS_UNI 1
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_CTXNO_ZC 0
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_CTXNO_SC (T1_CTXNO_ZC+T1_NUMCTXS_ZC)
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_CTXNO_MAG (T1_CTXNO_SC+T1_NUMCTXS_SC)
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_CTXNO_AGG (T1_CTXNO_MAG+T1_NUMCTXS_MAG)
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_CTXNO_UNI (T1_CTXNO_AGG+T1_NUMCTXS_AGG)
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_NUMCTXS (T1_CTXNO_UNI+T1_NUMCTXS_UNI)
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_NMSEDEC_FRACBITS (T1_NMSEDEC_BITS-1)
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_TYPE_MQ 0	/**< Normal coding using entropy coder */
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T1_TYPE_RAW 1	/**< No encoding the information is store under raw format in codestream (mode switch RAW)*/
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ----------------------------------------------------------------------- */
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef OPJ_INT16 opj_flag_t;
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovTier-1 coding (coding of code-block coefficients)
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct opj_t1 {
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** MQC component */
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_mqc_t *mqc;
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	/** RAW component */
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_raw_t *raw;
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_INT32  *data;
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	opj_flag_t *flags;
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 w;
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 h;
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 datasize;
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 flagssize;
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	OPJ_UINT32 flags_stride;
113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_UINT32 data_stride;
114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	OPJ_BOOL   encoder;
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} opj_t1_t;
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define MACRO_t1_flags(x,y) t1->flags[((x)*(t1->flags_stride))+(y)]
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** @name Exported functions */
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@{*/
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ----------------------------------------------------------------------- */
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovEncode the code-blocks of a tile
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param t1 T1 handle
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param tile The tile to encode
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param tcp Tile coding parameters
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param mct_norms  FIXME DOC
129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov@param mct_numcomps Number of components used for MCT
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_t1_encode_cblks(   opj_t1_t *t1,
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                opj_tcd_tile_t *tile,
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                opj_tcp_t *tcp,
134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov                                const OPJ_FLOAT64 * mct_norms,
135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov                                OPJ_UINT32 mct_numcomps);
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDecode the code-blocks of a tile
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param t1 T1 handle
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param tilec The tile to decode
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param tccp Tile coding parameters
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL opj_t1_decode_cblks(   opj_t1_t* t1,
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                opj_tcd_tilecomp_t* tilec,
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                opj_tccp_t* tccp);
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Creates a new Tier 1 handle
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * and initializes the look-up tables of the Tier-1 coder/decoder
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @return a new T1 handle if successful, returns NULL otherwise
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovopj_t1_t* opj_t1_create(OPJ_BOOL isEncoder);
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Destroys a previously created T1 handle
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_t1 Tier 1 handle to destroy
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid opj_t1_destroy(opj_t1_t *p_t1);
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ----------------------------------------------------------------------- */
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@}*/
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@}*/
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* __T1_H */
168