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