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 050import java.util.*; 051 052/** 053 * This class contains location of code-blocks' piece of codewords 054 * (there is one piece per layer) and some other information. 055 * 056 * */ 057public class CBlkInfo{ 058 059 /** Upper-left x-coordinate of the code-block (relative to the 060 tile) */ 061 public int ulx; 062 063 /** Upper-left y-coordinate of the code-block (relative to the 064 tile) */ 065 public int uly; 066 067 /** Width of the code-block */ 068 public int w; 069 070 /** Height of the code-block */ 071 public int h; 072 073 /** The number of most significant bits which are skipped for this 074 * code-block (= Mb-1-bitDepth). See VM text */ 075 public int msbSkipped; 076 077 /** Length of each piece of code-block's codewords */ 078 public int[] len; 079 080 /** Offset of each piece of code-block's codewords in the file */ 081 public int[] off; 082 083 /** The number of truncation point for each layer */ 084 public int[] ntp; 085 086 /** The cumulative number of truncation points */ 087 public int ctp; 088 089 /** The length of each segment (used with regular termination or 090 * in selective arithmetic bypass coding mode) */ 091 public int[][] segLen; 092 093 /** Index of the packet where each layer has been found */ 094 public int[] pktIdx; 095 096 /** 097 * Constructs a new instance with specified number of layers and 098 * code-block coordinates. The number corresponds to the maximum 099 * piece of codeword for one code-block. 100 * 101 * @param ulx The uper-left x-coordinate 102 * 103 * @param uly The uper-left y-coordinate 104 * 105 * @param w Width of the code-block 106 * 107 * @param h Height of the code-block 108 * 109 * @param nl The number of layers 110 * 111 */ 112 public CBlkInfo(int ulx,int uly,int w,int h,int nl){ 113 this.ulx = ulx; 114 this.uly = uly; 115 this.w = w; 116 this.h = h; 117 off = new int[nl]; 118 len = new int[nl]; 119 ntp = new int[nl]; 120 segLen = new int[nl][]; 121 pktIdx = new int[nl]; 122 for(int i=nl-1;i>=0;i--) 123 pktIdx[i] = -1; 124 } 125 126 /** 127 * Adds the number of new truncation for specified layer. 128 * 129 * @param l layer index 130 * 131 * @param newtp Number of new truncation points 132 * 133 */ 134 public void addNTP(int l,int newtp){ 135 ntp[l] = newtp; 136 ctp = 0; 137 for(int lIdx=0; lIdx<=l; lIdx++){ 138 ctp += ntp[lIdx]; 139 } 140 } 141 142 /** 143 * Object information in a string. 144 * 145 * @return Object information 146 * 147 */ 148 public String toString(){ 149 String string = "(ulx,uly,w,h)= "+ulx+","+uly+","+w+","+h; 150 string += ", "+msbSkipped+" MSB bit(s) skipped\n"; 151 if( len!=null ) 152 for(int i=0; i<len.length; i++){ 153 string += "\tl:"+i+", start:"+off[i]+ 154 ", len:"+len[i]+", ntp:"+ntp[i]+", pktIdx="+ 155 pktIdx[i]; 156 if(segLen!=null && segLen[i]!=null){ 157 string += " { "; 158 for(int j=0; j<segLen[i].length; j++) 159 string += segLen[i][j]+" "; 160 string += "}"; 161 } 162 string += "\n"; 163 } 164 string += "\tctp="+ctp; 165 return string; 166 } 167}