Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (c) 2001-2003, David Janssens
  3.  * Copyright (c) 2002-2003, Yannick Verschueren
  4.  * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
  5.  * Copyright (c) 2005, HervĂ© Drolon, FreeImage Team
  6.  * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
  7.  * All rights reserved.
  8.  *
  9.  * Redistribution and use in source and binary forms, with or without
  10.  * modification, are permitted provided that the following conditions
  11.  * are met:
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in the
  16.  *    documentation and/or other materials provided with the distribution.
  17.  *
  18.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
  19.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  20.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  21.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  22.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  23.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  24.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  25.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  26.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  27.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  28.  * POSSIBILITY OF SUCH DAMAGE.
  29.  */
  30. #ifndef __T1_H
  31. #define __T1_H
  32. /**
  33. @file t1.h
  34. @brief Implementation of the tier-1 coding (coding of code-block coefficients) (T1)
  35.  
  36. The functions in T1.C have for goal to realize the tier-1 coding operation. The functions
  37. in T1.C are used by some function in TCD.C.
  38. */
  39.  
  40. /** @defgroup T1 T1 - Implementation of the tier-1 coding */
  41. /*@{*/
  42.  
  43. /* ----------------------------------------------------------------------- */
  44. #define T1_NMSEDEC_BITS 7
  45.  
  46. #define T1_MAXCBLKW 256 /*< Maximum size of code-block (width) */
  47. #define T1_MAXCBLKH 256 /*< Maximum size of code-block (heigth) */
  48. #define T1_MAXCBLKD 256 /*< Maximum size of code-block (depth) */
  49. #define T1_MINCBLKW 4           /*< Minimum size of code-block (width) */
  50. #define T1_MINCBLKH 4           /*< Minimum size of code-block (heigth) */
  51. #define T1_MINCBLKD 4           /*< Minimum size of code-block (depth) */
  52. #define T1_MAXWHD 18   
  53. #define T1_CBLKW 256
  54. #define T1_CBLKH 256
  55. #define T1_CBLKD 256
  56.  
  57. #define T1_SIG_NE 0x0001        /*< Context orientation : North-East direction */
  58. #define T1_SIG_SE 0x0002        /*< Context orientation : South-East direction */
  59. #define T1_SIG_SW 0x0004        /*< Context orientation : South-West direction */
  60. #define T1_SIG_NW 0x0008        /*< Context orientation : North-West direction */
  61. #define T1_SIG_N 0x0010         /*< Context orientation : North direction */
  62. #define T1_SIG_E 0x0020         /*< Context orientation : East direction */
  63. #define T1_SIG_S 0x0040         /*< Context orientation : South direction */
  64. #define T1_SIG_W 0x0080         /*< Context orientation : West direction */
  65. #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)
  66. #define T1_SIG_PRIM (T1_SIG_N|T1_SIG_E|T1_SIG_S|T1_SIG_W)
  67.  
  68. #define T1_SGN_N 0x0100
  69. #define T1_SGN_E 0x0200
  70. #define T1_SGN_S 0x0400
  71. #define T1_SGN_W 0x0800
  72. #define T1_SGN (T1_SGN_N|T1_SGN_E|T1_SGN_S|T1_SGN_W)
  73.  
  74. #define T1_SIG 0x1000
  75. #define T1_REFINE 0x2000
  76. #define T1_VISIT 0x4000
  77.  
  78. #define T1_NUMCTXS_AGG 1
  79. #define T1_NUMCTXS_ZC 9
  80. #define T1_NUMCTXS_MAG 3
  81. #define T1_NUMCTXS_SC 5
  82. #define T1_NUMCTXS_UNI 1
  83.  
  84. #define T1_CTXNO_AGG 0
  85. #define T1_CTXNO_ZC (T1_CTXNO_AGG+T1_NUMCTXS_AGG)
  86. #define T1_CTXNO_MAG (T1_CTXNO_ZC+T1_NUMCTXS_ZC)
  87. #define T1_CTXNO_SC (T1_CTXNO_MAG+T1_NUMCTXS_MAG)
  88. #define T1_CTXNO_UNI (T1_CTXNO_SC+T1_NUMCTXS_SC)
  89. #define T1_NUMCTXS (T1_CTXNO_UNI+T1_NUMCTXS_UNI)
  90.  
  91. #define T1_NMSEDEC_FRACBITS (T1_NMSEDEC_BITS-1)
  92.  
  93. #define T1_TYPE_MQ 0    /*< Normal coding using entropy coder */
  94. #define T1_TYPE_RAW 1   /*< No encoding the information is store under raw format in codestream (mode switch RAW)*/
  95.  
  96. /* ----------------------------------------------------------------------- */
  97.  
  98. /**
  99. Tier-1 coding (coding of code-block coefficients)
  100. */
  101. typedef struct opj_t1 {
  102.         /** codec context */
  103.         opj_common_ptr cinfo;
  104.  
  105.         /** MQC component */
  106.         opj_mqc_t *mqc;
  107.         /** RAW component */
  108.         opj_raw_t *raw;
  109.         /** LUTs for context-based coding */
  110.         int lut_ctxno_zc[1024];
  111.         int lut_ctxno_sc[256];
  112.         int lut_ctxno_mag[4096];
  113.         int lut_spb[256];
  114.         /** LUTs for decoding normalised MSE */
  115.         int lut_nmsedec_sig[1 << T1_NMSEDEC_BITS];
  116.         int lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS];
  117.         int lut_nmsedec_ref[1 << T1_NMSEDEC_BITS];
  118.         int lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS];
  119.         /** Codeblock data */
  120.         int data[T1_CBLKD][T1_CBLKH][T1_CBLKW];//int ***data;
  121.         /** Context information for each voxel in codeblock */
  122.         int flags[T1_CBLKD + 2][T1_CBLKH + 2][T1_CBLKH + 2];//int ***flags;
  123. } opj_t1_t;
  124.  
  125. /** @name Exported functions */
  126. /*@{*/
  127. /* ----------------------------------------------------------------------- */
  128. /**
  129. Create a new T1 handle
  130. and initialize the look-up tables of the Tier-1 coder/decoder
  131. @return Returns a new T1 handle if successful, returns NULL otherwise
  132. @see t1_init_luts
  133. */
  134. opj_t1_t* t1_create(opj_common_ptr cinfo);
  135. /**
  136. Destroy a previously created T1 handle
  137. @param t1 T1 handle to destroy
  138. */
  139. void t1_destroy(opj_t1_t *t1);
  140. /**
  141. Encode the code-blocks of a tile
  142. @param t1 T1 handle
  143. @param tile The tile to encode
  144. @param tcp Tile coding parameters
  145. */
  146. void t1_encode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp);
  147. /**
  148. Decode the code-blocks of a tile
  149. @param t1 T1 handle
  150. @param tile The tile to decode
  151. @param tcp Tile coding parameters
  152. */
  153. void t1_decode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp);
  154. /**
  155. Get weigths of MSE decoding
  156. @param nmsedec The normalized MSE reduction
  157. @param compno
  158. @param level
  159. @param orient
  160. @param bpno
  161. @param stepsize
  162. @param numcomps
  163. @param dwtid
  164. returns MSE associated to decoding pass
  165. */
  166. double t1_getwmsedec(int nmsedec, int compno, int level[3], int orient, int bpno, double stepsize, int numcomps, int dwtid[3]);
  167.  
  168. /* ----------------------------------------------------------------------- */
  169. /*@}*/
  170.  
  171. /*@}*/
  172.  
  173. #endif /* __T1_H */
  174.