001/* 002 * $RCSfile: DecoderSpecs.java,v $ 003 * $Revision: 1.1 $ 004 * $Date: 2005/02/11 05:02:03 $ 005 * $State: Exp $ 006 * 007 * Class: DecoderSpecs 008 * 009 * Description: Hold all decoder specifications 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 * */ 044package jj2000.j2k.decoder; 045 046import jj2000.j2k.codestream.reader.*; 047import jj2000.j2k.wavelet.synthesis.*; 048import jj2000.j2k.quantization.*; 049import jj2000.j2k.entropy.*; 050import jj2000.j2k.wavelet.*; 051import jj2000.j2k.image.*; 052import jj2000.j2k.util.*; 053import jj2000.j2k.roi.*; 054import jj2000.j2k.*; 055 056/** 057 * This class holds references to each module specifications used in the 058 * decoding chain. This avoid big amount of arguments in method calls. A 059 * specification contains values of each tile-component for one module. All 060 * members must be instance of ModuleSpec class (or its children). 061 * 062 * @see ModuleSpec 063 * */ 064public class DecoderSpecs implements Cloneable { 065 066 /** ICC Profiling specifications */ 067 public ModuleSpec iccs; 068 069 /** ROI maxshift value specifications */ 070 public MaxShiftSpec rois; 071 072 /** Quantization type specifications */ 073 public QuantTypeSpec qts; 074 075 /** Quantization normalized base step size specifications */ 076 public QuantStepSizeSpec qsss; 077 078 /** Number of guard bits specifications */ 079 public GuardBitsSpec gbs; 080 081 /** Analysis wavelet filters specifications */ 082 public SynWTFilterSpec wfs; 083 084 /** Number of decomposition levels specifications */ 085 public IntegerSpec dls; 086 087 /** Number of layers specifications */ 088 public IntegerSpec nls; 089 090 /** Progression order specifications */ 091 public IntegerSpec pos; 092 093 /** The Entropy decoder options specifications */ 094 public ModuleSpec ecopts; 095 096 /** The component transformation specifications */ 097 public CompTransfSpec cts; 098 099 /** The progression changes specifications */ 100 public ModuleSpec pcs; 101 102 /** The error resilience specifications concerning the entropy 103 * decoder */ 104 public ModuleSpec ers; 105 106 /** Precinct partition specifications */ 107 public PrecinctSizeSpec pss; 108 109 /** The Start Of Packet (SOP) markers specifications */ 110 public ModuleSpec sops; 111 112 /** The End of Packet Headers (EPH) markers specifications */ 113 public ModuleSpec ephs; 114 115 /** Code-blocks sizes specification */ 116 public CBlkSizeSpec cblks; 117 118 /** Packed packet header specifications */ 119 public ModuleSpec pphs; 120 121 /** 122 * Returns a copy of the current object. 123 * */ 124 public DecoderSpecs getCopy() { 125 DecoderSpecs decSpec2; 126 try { 127 decSpec2 = (DecoderSpecs)this.clone(); 128 } catch (CloneNotSupportedException e) { 129 throw new Error("Cannot clone the DecoderSpecs instance"); 130 } 131 // Quantization 132 decSpec2.qts = (QuantTypeSpec)qts.getCopy(); 133 decSpec2.qsss = (QuantStepSizeSpec)qsss.getCopy(); 134 decSpec2.gbs = (GuardBitsSpec)gbs.getCopy(); 135 // Wavelet transform 136 decSpec2.wfs = (SynWTFilterSpec)wfs.getCopy(); 137 decSpec2.dls = (IntegerSpec)dls.getCopy(); 138 // Component transformation 139 decSpec2.cts = (CompTransfSpec)cts.getCopy(); 140 // ROI 141 if(rois!=null) { 142 decSpec2.rois = (MaxShiftSpec)rois.getCopy(); 143 } 144 return decSpec2; 145 } 146 147 148 /** 149 * Initialize all members with the given number of tiles and components. 150 * 151 * @param nt Number of tiles 152 * 153 * @param nc Number of components 154 * */ 155 public DecoderSpecs(int nt,int nc){ 156 // Quantization 157 qts = new QuantTypeSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE_COMP); 158 qsss = new QuantStepSizeSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE_COMP); 159 gbs = new GuardBitsSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE_COMP); 160 161 // Wavelet transform 162 wfs = new SynWTFilterSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE_COMP); 163 dls = new IntegerSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE_COMP); 164 165 // Component transformation 166 cts = new CompTransfSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE_COMP); 167 168 // Entropy decoder 169 ecopts = new ModuleSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE_COMP); 170 ers = new ModuleSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE_COMP); 171 cblks = new CBlkSizeSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE_COMP); 172 173 // Precinct partition 174 pss = new PrecinctSizeSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE_COMP,dls); 175 176 // Codestream 177 nls = new IntegerSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE); 178 pos = new IntegerSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE); 179 pcs = new ModuleSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE); 180 sops = new ModuleSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE); 181 ephs = new ModuleSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE); 182 pphs = new ModuleSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE); 183 iccs = new ModuleSpec(nt,nc,ModuleSpec.SPEC_TYPE_TILE); 184 pphs.setDefault(new Boolean(false)); 185 } 186}