📄 encoder.java
字号:
if(pl.getParameter("Psop").equals("off")){ pl.put("Psop","on"); tempSop = true; } if(pl.getParameter("Peph").equals("off")){ pl.put("Peph","on"); tempEph = true; tempSop = true; } } if (pl.getParameter("pph_main").equals("on")){ pphMain = true; tempSop = true; if(pl.getParameter("Psop").equals("off")){ pl.put("Psop","on"); } if(pl.getParameter("Peph").equals("off")){ pl.put("Peph","on"); tempEph = true; } } if(pphTile && pphMain) error("Can't have packed packet headers in both main and"+ " tile headers",2); if(pl.getBooleanParameter("lossless") && pl.getParameter("rate")!=null && pl.getFloatParameter("rate")!=100 ) throw new IllegalArgumentException("Cannot use '-rate' and "+ "'-lossless' option at "+ " the same time."); if (pl.getParameter("rate") == null) { error("Target bitrate not specified",2); return; } try { rate = pl.getFloatParameter("rate"); } catch (NumberFormatException e) { error("Invalid value in 'rate' option: "+ pl.getParameter("rate"),2); if(pl.getParameter("debug").equals("on")) e.printStackTrace(); else { error("Use '-debug' option for more details",2); } return; } try { pktspertp = pl.getIntParameter("tile_parts"); if(pktspertp != 0){ if(pl.getParameter("Psop").equals("off")){ pl.put("Psop","on"); tempSop = true; } if(pl.getParameter("Peph").equals("off")){ pl.put("Peph","on"); tempEph = true; } } } catch (NumberFormatException e) { error("Invalid value in 'tile_parts' option: "+ pl.getParameter("tile_parts"),2); if(pl.getParameter("debug").equals("on")) e.printStackTrace(); else { error("Use '-debug' option for more details",2); } return; } // **** ImgReader **** sgtok = new StringTokenizer(pl.getParameter("i")); ncomp = 0; ppminput = false; imreadervec = new Vector(); int nTokens = sgtok.countTokens(); for(int n=0; n<nTokens; n++){ infile = sgtok.nextToken(); try { if (imreadervec.size() < ncomp) { error("With PPM input format only 1 input file can "+ "be specified",2); return; } if (infile.lastIndexOf('.') != -1) { inext = infile.substring(infile.lastIndexOf('.'), infile.length()); } else { inext = null; } if (".PGM".equalsIgnoreCase(inext)) { // PGM file imreadervec.addElement(new ImgReaderPGM(infile)); ncomp += 1; } else if (".PPM".equalsIgnoreCase(inext)) { // PPM file if (ncomp > 0) { error("With PPM input format only 1 input "+ "file can be specified",2); return; } imreadervec.addElement(new ImgReaderPPM(infile)); ppminput = true; ncomp += 3; } else { // Should be PGX imreadervec.addElement(new ImgReaderPGX(infile)); ncomp+=1; } } catch (IOException e) { error("Could not open or read from file "+infile + ((e.getMessage() != null) ? (":\n"+e.getMessage()) : ""),3); if(pl.getParameter("debug").equals("on")) e.printStackTrace(); else { error("Use '-debug' option for more details",2); } return; } finally { if (exitCode != 0) { // Close the other files while (imreadervec.size() > 0) { try { ((ImgReader)imreadervec. elementAt(imreadervec.size()-1)).close(); imreadervec. removeElementAt(imreadervec.size()-1); } catch (Exception e) { } } } } } imreader = new ImgReader[imreadervec.size()]; imreadervec.copyInto(imreader); imreadervec.removeAllElements(); imreadervec = null; imsigned = new boolean[ncomp]; // **** ImgDataJoiner (if needed) **** if (ppminput || ncomp == 1) { // Just one input imgsrc = imreader[0]; for (i=0; i<ncomp; i++) { imsigned[i] = imreader[0].isOrigSigned(i); } } else { // More than one reader => join all readers into 1 imgcmpidxs = new int[ncomp]; for (i=0; i<ncomp; i++) { imsigned[i] = imreader[i].isOrigSigned(0); } imgsrc = new ImgDataJoiner(imreader,imgcmpidxs); } // **** Tiler **** // get nominal tile dimensions stok = new StreamTokenizer(new StringReader(pl. getParameter("tiles"))); stok.eolIsSignificant(false); stok.nextToken(); if (stok.ttype != StreamTokenizer.TT_NUMBER) { error("An error occurred while parsing the tiles option: "+ pl.getParameter("tiles"),2); return; } tw = (int) stok.nval; stok.nextToken(); if (stok.ttype != StreamTokenizer.TT_NUMBER) { error("An error occurred while parsing the tiles option: "+ pl.getParameter("tiles"),2); return; } th = (int) stok.nval; // Get image reference point sgtok = new StringTokenizer(pl.getParameter("ref")); try { refx = Integer.parseInt(sgtok.nextToken()); refy = Integer.parseInt(sgtok.nextToken()); } catch (NoSuchElementException e) { throw new IllegalArgumentException("Error while parsing 'ref' "+ "option"); } catch (NumberFormatException e) { throw new IllegalArgumentException("Invalid number type in "+ "'ref' option"); } if (refx < 0 || refy < 0) { throw new IllegalArgumentException("Invalid value in 'ref' "+ "option "); } // Get tiling reference point sgtok = new StringTokenizer(pl.getParameter("tref")); try { trefx = Integer.parseInt(sgtok.nextToken()); trefy = Integer.parseInt(sgtok.nextToken()); } catch (NoSuchElementException e) { throw new IllegalArgumentException("Error while parsing 'tref' "+ "option"); } catch (NumberFormatException e) { throw new IllegalArgumentException("Invalid number type in "+ "'tref' option"); } if (trefx < 0 || trefy < 0 || trefx > refx || trefy > refy) { throw new IllegalArgumentException("Invalid value in 'tref' "+ "option "); } // Instantiate tiler try { imgtiler = new Tiler(imgsrc,refx,refy,trefx,trefy,tw,th); } catch (IllegalArgumentException e) { error("Could not tile image"+ ((e.getMessage() != null) ? (":\n"+e.getMessage()) : ""),2); if(pl.getParameter("debug").equals("on")) e.printStackTrace(); else { error("Use '-debug' option for more details",2); } return; } int ntiles = imgtiler.getNumTiles(); // **** Encoder specifications **** encSpec = new EncoderSpecs(ntiles, ncomp, imgsrc, pl); // **** Component transformation **** if (ppminput && pl.getParameter("Mct") != null && pl.getParameter("Mct").equals("off")) { FacilityManager.getMsgLogger(). printmsg(MsgLogger.WARNING, "Input image is RGB and no color transform has "+ "been specified. Compression performance and "+ "image quality might be greatly degraded. Use "+ "the 'Mct' option to specify a color transform"); } try { fctransf = new ForwCompTransf(imgtiler,encSpec); } catch (IllegalArgumentException e) { error("Could not instantiate forward component "+ "transformation"+ ((e.getMessage() != null) ? (":\n"+e.getMessage()) : ""),2); if(pl.getParameter("debug").equals("on")) e.printStackTrace(); else { error("Use '-debug' option for more details",2); } return; } // **** ImgDataConverter **** converter = new ImgDataConverter(fctransf); // **** ForwardWT **** try { dwt = ForwardWT.createInstance(converter,pl,encSpec); } catch (IllegalArgumentException e) { error("Could not instantiate wavelet transform"+ ((e.getMessage() != null) ? (":\n"+e.getMessage()) : ""),2); if(pl.getParameter("debug").equals("on")) e.printStackTrace(); else { error("Use '-debug' option for more details",2); } return; } // **** Quantizer **** try{ quant = Quantizer.createInstance(dwt,encSpec); } catch(IllegalArgumentException e) { error("Could not instantiate quantizer"+ ((e.getMessage() != null) ? (":\n"+e.getMessage()) : ""),2); if(pl.getParameter("debug").equals("on")) e.printStackTrace(); else { error("Use '-debug' option for more details",2); } return; } // **** ROIScaler **** try{ rois = ROIScaler.createInstance(quant,pl,encSpec); } catch (IllegalArgumentException e) { error("Could not instantiate ROI scaler"+ ((e.getMessage() != null) ? (":\n"+e.getMessage()) : ""),2); if(pl.getParameter("debug").equals("on")) e.printStackTrace(); else { error("Use '-debug' option for more details",2); } return; } // **** EntropyCoder **** try { ecoder = EntropyCoder.createInstance(rois,encSpec,pl); } catch (IllegalArgumentException e) { error("Could not instantiate entropy coder"+ ((e.getMessage() != null) ? (":\n"+e.getMessage()) : ""),2); if(pl.getParameter("debug").equals("on")) e.printStackTrace(); else { error("Use '-debug' option for more details",2); } return; } // **** CodestreamWriter **** try { // Rely on rate allocator to limit amount of data bwriter = new FileCodestreamWriter(outname,Integer.MAX_VALUE); } catch (IOException e) { error("Could not open output file"+ ((e.getMessage() != null) ? (":\n"+e.getMessage()) : ""),2); if(pl.getParameter("debug").equals("on")) e.printStackTrace(); else { error("Use '-debug' option for more details",2); } return; } // **** Rate allocator **** try { ralloc = PostCompRateAllocator.createInstance(ecoder,pl,rate, bwriter,encSpec); } catch (IllegalArgumentException e) { error("Could not instantiate rate allocator"+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -