001/* 002 * $RCSfile: CBlkInfo.java,v $ 003 * $Revision: 1.1 $ 004 * $Date: 2005/02/11 05:02:01 $ 005 * $State: Exp $ 006 * 007 * Class: CBlkInfo 008 * 009 * Description: Object containing code-block informations. 010 * 011 * 012 * 013 * COPYRIGHT: 014 * 015 * This software module was originally developed by Raphaël Grosbois and 016 * Diego Santa Cruz (Swiss Federal Institute of Technology-EPFL); Joel 017 * Askelöf (Ericsson Radio Systems AB); and Bertrand Berthelot, David 018 * Bouchard, Félix Henry, Gerard Mozelle and Patrice Onno (Canon Research 019 * Centre France S.A) in the course of development of the JPEG2000 020 * standard as specified by ISO/IEC 15444 (JPEG 2000 Standard). This 021 * software module is an implementation of a part of the JPEG 2000 022 * Standard. Swiss Federal Institute of Technology-EPFL, Ericsson Radio 023 * Systems AB and Canon Research Centre France S.A (collectively JJ2000 024 * Partners) agree not to assert against ISO/IEC and users of the JPEG 025 * 2000 Standard (Users) any of their rights under the copyright, not 026 * including other intellectual property rights, for this software module 027 * with respect to the usage by ISO/IEC and Users of this software module 028 * or modifications thereof for use in hardware or software products 029 * claiming conformance to the JPEG 2000 Standard. Those intending to use 030 * this software module in hardware or software products are advised that 031 * their use may infringe existing patents. The original developers of 032 * this software module, JJ2000 Partners and ISO/IEC assume no liability 033 * for use of this software module or modifications thereof. No license 034 * or right to this software module is granted for non JPEG 2000 Standard 035 * conforming products. JJ2000 Partners have full right to use this 036 * software module for his/her own purpose, assign or donate this 037 * software module to any third party and to inhibit third parties from 038 * using this software module for non JPEG 2000 Standard conforming 039 * products. This copyright notice must be included in all copies or 040 * derivative works of this software module. 041 * 042 * Copyright (c) 1999/2000 JJ2000 Partners. 043 * 044 * 045 * 046 */ 047 048package jj2000.j2k.codestream.reader; 049 050 051/** 052 * This class contains location of code-blocks' piece of codewords 053 * (there is one piece per layer) and some other information. 054 * 055 * */ 056public class CBlkInfo{ 057 058 /** Upper-left x-coordinate of the code-block (relative to the 059 tile) */ 060 public int ulx; 061 062 /** Upper-left y-coordinate of the code-block (relative to the 063 tile) */ 064 public int uly; 065 066 /** Width of the code-block */ 067 public int w; 068 069 /** Height of the code-block */ 070 public int h; 071 072 /** The number of most significant bits which are skipped for this 073 * code-block (= Mb-1-bitDepth). See VM text */ 074 public int msbSkipped; 075 076 /** Length of each piece of code-block's codewords */ 077 public int[] len; 078 079 /** Offset of each piece of code-block's codewords in the file */ 080 public int[] off; 081 082 /** The number of truncation point for each layer */ 083 public int[] ntp; 084 085 /** The cumulative number of truncation points */ 086 public int ctp; 087 088 /** The length of each segment (used with regular termination or 089 * in selective arithmetic bypass coding mode) */ 090 public int[][] segLen; 091 092 /** Index of the packet where each layer has been found */ 093 public int[] pktIdx; 094 095 /** 096 * Constructs a new instance with specified number of layers and 097 * code-block coordinates. The number corresponds to the maximum 098 * piece of codeword for one code-block. 099 * 100 * @param ulx The uper-left x-coordinate 101 * 102 * @param uly The uper-left y-coordinate 103 * 104 * @param w Width of the code-block 105 * 106 * @param h Height of the code-block 107 * 108 * @param nl The number of layers 109 * 110 */ 111 public CBlkInfo(int ulx,int uly,int w,int h,int nl){ 112 this.ulx = ulx; 113 this.uly = uly; 114 this.w = w; 115 this.h = h; 116 off = new int[nl]; 117 len = new int[nl]; 118 ntp = new int[nl]; 119 segLen = new int[nl][]; 120 pktIdx = new int[nl]; 121 for(int i=nl-1;i>=0;i--) 122 pktIdx[i] = -1; 123 } 124 125 /** 126 * Adds the number of new truncation for specified layer. 127 * 128 * @param l layer index 129 * 130 * @param newtp Number of new truncation points 131 * 132 */ 133 public void addNTP(int l,int newtp){ 134 ntp[l] = newtp; 135 ctp = 0; 136 for(int lIdx=0; lIdx<=l; lIdx++){ 137 ctp += ntp[lIdx]; 138 } 139 } 140 141 /** 142 * Object information in a string. 143 * 144 * @return Object information 145 * 146 */ 147 public String toString(){ 148 String string = "(ulx,uly,w,h)= "+ulx+","+uly+","+w+","+h; 149 string += ", "+msbSkipped+" MSB bit(s) skipped\n"; 150 if( len!=null ) 151 for(int i=0; i<len.length; i++){ 152 string += "\tl:"+i+", start:"+off[i]+ 153 ", len:"+len[i]+", ntp:"+ntp[i]+", pktIdx="+ 154 pktIdx[i]; 155 if(segLen!=null && segLen[i]!=null){ 156 string += " { "; 157 for(int j=0; j<segLen[i].length; j++) 158 string += segLen[i][j]+" "; 159 string += "}"; 160 } 161 string += "\n"; 162 } 163 string += "\tctp="+ctp; 164 return string; 165 } 166}