⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pktdecoder.java

📁 jpeg2000编解码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                return cbI;    }        /**      * Retrives precincts and code-blocks coordinates in the given resolution,     * level and component. Finishes TagTreeEncoder initialization as well.     *     * @param c Component index.     *     * @param r Resolution level index.     *     * @param mdl Number of decomposition level in component <tt>c</tt>.     * */    private void fillPrecInfo(int c,int r,int mdl) {        if(ppinfo[c][r].length==0) return; // No precinct in this        // resolution level        Coord tileI = src.getTile(null);        Coord nTiles = src.getNumTiles(null);        int xsiz,ysiz,x0siz,y0siz;        int xt0siz,yt0siz;        int xtsiz,ytsiz;        xt0siz = src.getTilePartULX();        yt0siz = src.getTilePartULY();        xtsiz = src.getNomTileWidth();        ytsiz = src.getNomTileHeight();        x0siz = hd.getImgULX();        y0siz = hd.getImgULY();        xsiz = hd.getImgWidth();        ysiz = hd.getImgHeight();        int tx0 = (tileI.x==0) ? x0siz : xt0siz+tileI.x*xtsiz;        int ty0 = (tileI.y==0) ? y0siz : yt0siz+tileI.y*ytsiz;        int tx1 = (tileI.x!=nTiles.x-1) ? xt0siz+(tileI.x+1)*xtsiz : xsiz;        int ty1 = (tileI.y!=nTiles.y-1) ? yt0siz+(tileI.y+1)*ytsiz : ysiz;        int xrsiz = hd.getCompSubsX(c);        int yrsiz = hd.getCompSubsY(c);        int tcx0 = src.getResULX(c,mdl);        int tcy0 = src.getResULY(c,mdl);        int tcx1 = tcx0 + src.getTileCompWidth(tIdx,c,mdl);        int tcy1 = tcy0 + src.getTileCompHeight(tIdx,c,mdl);        int ndl = mdl-r;        int trx0 = (int)Math.ceil(tcx0/(double)(1<<ndl));        int try0 = (int)Math.ceil(tcy0/(double)(1<<ndl));        int trx1 = (int)Math.ceil(tcx1/(double)(1<<ndl));        int try1 = (int)Math.ceil(tcy1/(double)(1<<ndl));        int cb0x = src.getCbULX();        int cb0y = src.getCbULY();        double twoppx = (double)getPPX(tIdx,c,r);        double twoppy = (double)getPPY(tIdx,c,r);        int twoppx2 = (int)(twoppx/2);        int twoppy2 = (int)(twoppy/2);        // Precincts are located at (cb0x+i*twoppx,cb0y+j*twoppy)        // Valid precincts are those which intersect with the current        // resolution level        int maxPrec = ppinfo[c][r].length;        int nPrec = 0;                int istart = (int)Math.floor((try0-cb0y)/twoppy);        int iend = (int)Math.floor((try1-1-cb0y)/twoppy);        int jstart = (int)Math.floor((trx0-cb0x)/twoppx);        int jend = (int)Math.floor((trx1-1-cb0x)/twoppx);        int acb0x,acb0y;                SubbandSyn root = src.getSynSubbandTree(tIdx,c);        SubbandSyn sb = null;        int p0x,p0y,p1x,p1y; // Precinct projection in subband        int s0x,s0y,s1x,s1y; // Active subband portion        int cw,ch;        int kstart,kend,lstart,lend,k0,l0;        int prg_ulx,prg_uly;        int prg_w = (int)twoppx<<ndl;        int prg_h = (int)twoppy<<ndl;        int tmp1,tmp2;        CBlkCoordInfo cb;        for(int i=istart; i<=iend; i++) { // Vertical precincts            for(int j=jstart; j<=jend; j++,nPrec++) { // Horizontal precincts                if(j==jstart && (trx0-cb0x)%(xrsiz*((int)twoppx))!=0) {                    prg_ulx = tx0;                } else {                    prg_ulx = cb0x+j*xrsiz*((int)twoppx<<ndl);                }                if(i==istart && (try0-cb0y)%(yrsiz*((int)twoppy))!=0) {                    prg_uly = ty0;                } else {                    prg_uly = cb0y+i*yrsiz*((int)twoppy<<ndl);                }                ppinfo[c][r][nPrec] =                     new PrecInfo(r,(int)(cb0x+j*twoppx),(int)(cb0y+i*twoppy),                                 (int)twoppx,(int)twoppy,                                 prg_ulx,prg_uly,prg_w,prg_h);                if(r==0) { // LL subband                    acb0x = cb0x;                    acb0y = cb0y;                                        p0x = acb0x+j*(int)twoppx;                    p1x = p0x + (int)twoppx;                    p0y = acb0y+i*(int)twoppy;                    p1y = p0y + (int)twoppy;                                        sb = (SubbandSyn)root.getSubbandByIdx(0,0);                    s0x = (p0x<sb.ulcx) ? sb.ulcx : p0x;                    s1x = (p1x>sb.ulcx+sb.w) ? sb.ulcx+sb.w : p1x;                    s0y = (p0y<sb.ulcy) ? sb.ulcy : p0y;                    s1y = (p1y>sb.ulcy+sb.h) ? sb.ulcy+sb.h : p1y;                                        // Code-blocks are located at (acb0x+k*cw,acb0y+l*ch)                    cw = sb.nomCBlkW;                    ch = sb.nomCBlkH;                    k0 = (int)Math.floor((sb.ulcy-acb0y)/(double)ch);                    kstart = (int)Math.floor((s0y-acb0y)/(double)ch);                    kend = (int)Math.floor((s1y-1-acb0y)/(double)ch);                    l0 = (int)Math.floor((sb.ulcx-acb0x)/(double)cw);                    lstart = (int)Math.floor((s0x-acb0x)/(double)cw);                    lend = (int)Math.floor((s1x-1-acb0x)/(double)cw);                                        if(s1x-s0x<=0 || s1y-s0y<=0) {                        ppinfo[c][r][nPrec].nblk[0] = 0;                        ttIncl[c][r][nPrec][0] = new TagTreeDecoder(0,0);                        ttMaxBP[c][r][nPrec][0] = new TagTreeDecoder(0,0);                    } else {                        ttIncl[c][r][nPrec][0] =                             new TagTreeDecoder(kend-kstart+1,lend-lstart+1);                        ttMaxBP[c][r][nPrec][0] =                             new TagTreeDecoder(kend-kstart+1,lend-lstart+1);                        ppinfo[c][r][nPrec].cblk[0] =                             new CBlkCoordInfo[kend-kstart+1][lend-lstart+1];                        ppinfo[c][r][nPrec].                            nblk[0] = (kend-kstart+1)*(lend-lstart+1);                                                for(int k=kstart; k<=kend; k++) { // Vertical cblks                            for(int l=lstart; l<=lend; l++) { // Horiz. cblks                                cb = new CBlkCoordInfo(k-k0,l-l0);                                if(l==l0) {                                    cb.ulx = sb.ulx;                                } else {                                    cb.ulx = sb.ulx+l*cw-(sb.ulcx-acb0x);                                }                                if(k==k0) {                                    cb.uly = sb.uly;                                } else {                                    cb.uly = sb.uly+k*ch-(sb.ulcy-acb0y);                                }                                tmp1 = acb0x+l*cw;                                tmp1 = (tmp1>sb.ulcx) ? tmp1 : sb.ulcx;                                tmp2 = acb0x+(l+1)*cw;                                tmp2 = (tmp2>sb.ulcx+sb.w) ?                                    sb.ulcx+sb.w : tmp2;                                cb.w = tmp2-tmp1;                                tmp1 = acb0y+k*ch;                                tmp1 = (tmp1>sb.ulcy) ? tmp1 : sb.ulcy;                                tmp2 = acb0y+(k+1)*ch;                                tmp2 = (tmp2>sb.ulcy+sb.h) ?                                    sb.ulcy+sb.h : tmp2;                                cb.h = tmp2-tmp1;                                ppinfo[c][r][nPrec].                                    cblk[0][k-kstart][l-lstart] = cb;                            } // Horizontal code-blocks                        } // Vertical code-blocks                    }                } else { // HL, LH and HH subbands                    // HL subband                    acb0x = 0;                    acb0y = cb0y;                                        p0x = acb0x+j*twoppx2;                    p1x = p0x + twoppx2;                    p0y = acb0y+i*twoppy2;                    p1y = p0y + twoppy2;                                        sb = (SubbandSyn)root.getSubbandByIdx(r,1);                    s0x = (p0x<sb.ulcx) ? sb.ulcx : p0x;                    s1x = (p1x>sb.ulcx+sb.w) ? sb.ulcx+sb.w : p1x;                    s0y = (p0y<sb.ulcy) ? sb.ulcy : p0y;                    s1y = (p1y>sb.ulcy+sb.h) ? sb.ulcy+sb.h : p1y;                                        // Code-blocks are located at (acb0x+k*cw,acb0y+l*ch)                    cw = sb.nomCBlkW;                    ch = sb.nomCBlkH;                    k0 = (int)Math.floor((sb.ulcy-acb0y)/(double)ch);                    kstart = (int)Math.floor((s0y-acb0y)/(double)ch);                    kend = (int)Math.floor((s1y-1-acb0y)/(double)ch);                    l0 = (int)Math.floor((sb.ulcx-acb0x)/(double)cw);                    lstart = (int)Math.floor((s0x-acb0x)/(double)cw);                    lend = (int)Math.floor((s1x-1-acb0x)/(double)cw);                    if(s1x-s0x<=0 || s1y-s0y<=0) {                        ppinfo[c][r][nPrec].nblk[1] = 0;                        ttIncl[c][r][nPrec][1] = new TagTreeDecoder(0,0);                        ttMaxBP[c][r][nPrec][1] = new TagTreeDecoder(0,0);                    } else {                        ttIncl[c][r][nPrec][1] =                             new TagTreeDecoder(kend-kstart+1,lend-lstart+1);                        ttMaxBP[c][r][nPrec][1] =                             new TagTreeDecoder(kend-kstart+1,lend-lstart+1);                        ppinfo[c][r][nPrec].cblk[1] =                             new CBlkCoordInfo[kend-kstart+1][lend-lstart+1];                        ppinfo[c][r][nPrec].                            nblk[1] = (kend-kstart+1)*(lend-lstart+1);                                            for(int k=kstart; k<=kend; k++) { // Vertical cblks                            for(int l=lstart; l<=lend; l++) { // Horiz. cblks                                cb = new CBlkCoordInfo(k-k0,l-l0);                                if(l==l0) {                                    cb.ulx = sb.ulx;                                } else {                                    cb.ulx = sb.ulx+l*cw-(sb.ulcx-acb0x);                                }                                if(k==k0) {                                    cb.uly = sb.uly;                                } else {                                    cb.uly = sb.uly+k*ch-(sb.ulcy-acb0y);                                }                                tmp1 = acb0x+l*cw;                                tmp1 = (tmp1>sb.ulcx) ? tmp1 : sb.ulcx;                                tmp2 = acb0x+(l+1)*cw;                                tmp2 = (tmp2>sb.ulcx+sb.w) ?                                    sb.ulcx+sb.w : tmp2;                                cb.w = tmp2-tmp1;                                tmp1 = acb0y+k*ch;                                tmp1 = (tmp1>sb.ulcy) ? tmp1 : sb.ulcy;                                tmp2 = acb0y+(k+1)*ch;                                tmp2 = (tmp2>sb.ulcy+sb.h) ?                                    sb.ulcy+sb.h : tmp2;                                cb.h = tmp2-tmp1;                                ppinfo[c][r][nPrec].                                    cblk[1][k-kstart][l-lstart] = cb;                            } // Horizontal code-blocks                        } // Vertical code-blocks                    }                    // LH subband                    acb0x = cb0x;                    acb0y = 0;                                        p0x = acb0x+j*twoppx2;                    p1x = p0x + twoppx2;                    p0y = acb0y+i*twoppy2;                    p1y = p0y + twoppy2;                                        sb = (SubbandSyn)root.getSubbandByIdx(r,2);                    s0x = (p0x<sb.ulcx) ? sb.ulcx : p0x;                    s1x = (p1x>sb.ulcx+sb.w) ? sb.ulcx+sb.w : p1x;                    s0y = (p0y<sb.ulcy) ? sb.ulcy : p0y;                    s1y = (p1y>sb.ulcy+sb.h) ? sb.ulcy+sb.h : p1y;                                        // Code-blocks are located at (acb0x+k*cw,acb0y+l*ch)                    cw = sb.nomCBlkW;                    ch = sb.nomCBlkH;                    k0 = (int)Math.floor((sb.ulcy-acb0y)/(double)ch);                    kstart = (int)Math.floor((s0y-acb0y)/(double)ch);                    kend = (int)Math.floor((s1y-1-acb0y)/(double)ch);                    l0 = (int)Math.floor((sb.ulcx-acb0x)/(double)cw);                    lstart = (int)Math.floor((s0x-acb0x)/(double)cw);                    lend = (int)Math.floor((s1x-1-acb0x)/(double)cw);                    if(s1x-s0x<=0 || s1y-s0y<=0) {                        ppinfo[c][r][nPrec].nblk[2] = 0;                        ttIncl[c][r][nPrec][2] = new TagTreeDecoder(0,0);                        ttMaxBP[c][r][nPrec][2] = new TagTreeDecoder(0,0);                    } else {                        ttIncl[c][r][nPrec][2] =                             new TagTreeDecoder(kend-kstart+1,lend-lstart+1);                        ttMaxBP[c][r][nPrec][2] =                             new TagTreeDecoder(kend-kstart+1,lend-lstart+1);                        ppinfo[c][r][nPrec].cblk[2] =                             new CBlkCoordInfo[kend-kstart+1][lend-lstart+1];                        ppinfo[c][r][nPrec].                            nblk[2] = (kend-kstart+1)*(lend-lstart+1);                                                for(int k=kstart; k<=kend; k++) { // Vertical cblks                            for(int l=lstart; l<=lend; l++) { // Horiz cblks                                cb = new CBlkCoordInfo(k-k0,l-l0);                                if(l==l0) {                                    cb.ulx = sb.ulx;                                } else {                                    cb.ulx = sb.ulx+l*cw-(sb.ulcx-acb0x);                                }                                if(k==k0) {                                    cb.uly = sb.uly;                                } else {                                    cb.uly = sb.uly+k*ch-(sb.ulcy-acb0y);                                }                                tmp1 = acb0x+l*cw;                                tmp1 = (tmp1>sb.ulcx) ? tmp1 : sb.ulcx;                                tmp2 = acb0x+(l+1)*cw;                                tmp2 = (tmp2>sb.ulcx+sb.w) ?                                    sb.ulcx+sb.w : tmp2;                                cb.w = tmp2-tmp1;                                tmp1 = acb0y+k*ch;                                tmp1 = (tmp1>sb.ulcy) ? tmp1 : sb.ulcy;                                tmp2 = acb0y+(k+1)*ch;                                tmp2 = (tmp2>sb.ulcy+sb.h) ?                                    sb.ulcy+sb.h : tmp2;                                cb.h = tmp2-tmp1;                                ppinfo[c][r][nPrec].                                    cblk[2][k-kstart][l-lstart] = cb;                            } // Horizontal code-blocks                        } // Vertical code-blocks                    }                    // HH subband                    acb0x = 0;                    acb0y = 0;                                        p0x = acb0x+j*twoppx2;                    p1x = p0x + twoppx2;                    p0y = acb0y+i*twoppy2;                    p1y = p0y + twoppy2;                                        sb = (SubbandSyn)root.getSubbandByIdx(r,3);                    s0x = (p0x<sb.ulcx) ? sb.ulcx : p0x;                    s1x = (p1x>sb.ulcx+sb.w) ? sb.ulcx+sb.w : p1x;                    s0y = (p0y<sb.ulcy) ? sb.ulcy : p0y;                    s1y = (p1y>sb.ulcy+sb.h) ? sb.ulcy+sb.h : p1y;                                        // Code-blocks are located at (acb0x+k*cw,acb0y+l*ch)                    cw = sb.nomCBlkW;                    ch = sb.nomCBlkH;                    k0 = (int)Math.floor((sb.ulcy-acb0y)/(double)ch);                    kstart = (int)Math.floor((s0y-acb0y)/(double)ch);                    kend = (int)Math.floor((s1y-1-acb0y)/(double)ch);                    l0 = (int)Math.floor((sb.ulcx-acb0x)/(double)cw);                    lstart = (int)Math.floor((s0x-acb0x)/(double)cw);                    lend = (int)Math.floor((s1x-1-acb0x)/(double)cw);                    if(s1x-s0x<=0 || s1y-s0y<=0) {                        ppinfo[c][r][nPrec].nblk[3] = 0;                        ttIncl[c][r][nPrec][3] = new TagTreeDecoder(0,0);                        ttMaxBP[c][r][nPrec][3] = new TagTreeDecoder(0,0);                    } else {                        ttIncl[c][r][nPrec][3] =                             new TagTreeDecoder(kend-kstart+1,lend-lstart+1);                        ttMaxBP[c][r][nPrec][3] =                             new TagTreeDecoder(kend-kstart+1,lend-lstart+1);                        ppinfo[c][r][nPrec].cblk[3] = 

⌨️ 快捷键说明

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