encoder.java

来自「jpeg2000编解码」· Java 代码 · 共 1,102 行 · 第 1/3 页

JAVA
1,102
字号
                        FacilityManager.getMsgLogger().                            printmsg(MsgLogger.INFO,"JPEG 2000 file names"+                                     " end with .jp2 extension when using"+                                     " the file format of part 1. This "+                                     "extension is automatically"+                                     " added by JJ2000. Use "+                                     "'-disable_jp2_extension' to "+                                     "disable it.");                                                outname = outns+".jp2";                    }                }            }            if (pl.getParameter("tiles") == null) {                error("No tiles option specified",2);                return;            }            if (pl.getParameter("pph_tile").equals("on")){                pphTile = true;                                if(pl.getParameter("Psop").equals("off")){                    pl.put("Psop","on");                    tempSop = true;                }                if(pl.getParameter("Peph").equals("off")){                    pl.put("Peph","on");                    tempEph = true;                }                              }            if (pl.getParameter("pph_main").equals("on")){                pphMain = true;                                if(pl.getParameter("Psop").equals("off")){                    pl.put("Psop","on");                    tempSop = true;                }                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")!=defpl.getFloatParameter("rate"))                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");                if(rate==-1) {                    rate = Float.MAX_VALUE;                }            } 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;            }	    // **** Scrambling ****	    Scrambling scrambler = new Scrambling(rois,pl);            // **** EntropyCoder ****            try {                ecoder = EntropyCoder.createInstance(scrambler,pl,						     encSpec.cblks,                                                     encSpec.pss,encSpec.bms,                                                     encSpec.mqrs,encSpec.rts,                                                     encSpec.css,encSpec.sss,                                                     encSpec.lcs,encSpec.tts);            } 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;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?