📄 vtc_shape_shapeenhcommon.cpp
字号:
Int blkx, Int blky, Int mblksize, Int max_blkx){ Int i, j, i2, j2, x, y, x2, y2, k, l; Int mborder = MBORDER, mblksize_ext = mblksize+(mborder<<1);/* bordered bab size in the current layer: 20 */ Int border = BORDER, blksize = mblksize>>1, /* bab size in the lower layer : 8 */ blksize_ext = blksize+(border<<1); /* bordered bab size in the lower layer: 8 */ Int width2 = object_width, height2 = object_height, width = width2 >> 1, height = height2 >> 1; /*-- Initialize bordered babs -----------------------------------*/ for ( i=k=0; i<blksize_ext; i++) for( j=0; j<blksize_ext; j++, k++) bordered_lower_bab[k] = 0; for ( i=k=0; i<mblksize_ext; i++) for( j=0; j<blksize_ext; j++, k++) bordered_half_bab[k] = 0; for ( i=k=0; i<mblksize_ext; i++) for( j=0; j<mblksize_ext; j++, k++) bordered_curr_bab[k] = 0; /*-- Copy original babs ----------------------------------------*/ for ( j=k=0, l=border*blksize_ext; j<blksize; j++, l+=blksize_ext ) for ( i=0; i<blksize; i++, k++ ) bordered_lower_bab[l+i+border] = lower_bab[k]; for ( j=k=0, l=mborder*blksize_ext; j<mblksize; j++, l+=blksize_ext ) for ( i=0; i<blksize; i++, k++ ) bordered_half_bab[l+i+border] = half_bab[k]; for ( j=k=0, l=mborder*mblksize_ext; j<mblksize; j++, l+=mblksize_ext ) for ( i=0; i<mblksize; i++, k++ ) bordered_curr_bab[l+i+mborder] = curr_bab[k]; /*----- Top border -----------------------------------------------*/ /*-- Top border for lower layer --*/ x = blkx * blksize - border; y = blky * blksize - border; for( j=l=0, k=y*width; j<border; j++, k+=width, l+=blksize_ext ) { for( i=0; i<blksize_ext; i++ ) { if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) bordered_lower_bab[l+i] = ( LowShape[k+x+i] != 0); } } /*-- Top border for half layer --*/ x = blkx * blksize - border; y = blky * mblksize - mborder; for( j=l=0, k=y*width; j<mborder; j++, k+=width, l+=blksize_ext ) { for( i=0; i<blksize_ext; i++ ) { if( (0 <= y+j && y+j < height2) && (0 <= x+i && x+i < width) ) bordered_half_bab[l+i] = ( HalfShape[k+x+i] != 0); } } /*-- Top border for current layer --*/ x2 = blkx * mblksize - mborder; y2 = blky * mblksize - mborder; for( j2=l=0, k=y2*width2; j2<mborder; j2++, k+=width2, l+=mblksize_ext ) { for( i2=0; i2<mblksize_ext; i2++ ) { if( (0 <= y2+j2 && y2+j2 < height2) && (0 <= x2+i2 && x2+i2 < width2) ) bordered_curr_bab[l+i2] = ( CurShape[k+x2+i2] != 0); } } /*----- Left border ----------------------------------------------*/ /*-- Left border for the lower layer --*/ x = blkx * blksize - border; y = blky * blksize; for( j=0, l=border*blksize_ext, k=y*width; j<blksize; j++, k+=width, l+=blksize_ext) { for( i=0; i<border; i++ ) { if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) bordered_lower_bab[l+i] = ( LowShape[k+x+i] != 0); } } /*-- Left border for the half higher layer --*/ x = blkx * blksize - border; y = blky * mblksize; for( j=0, l=mborder*blksize_ext, k=y*width; j<mblksize; j++, k+=width, l+=blksize_ext) { for( i=0; i<border; i++ ) { if( (0 <= y+j && y+j < height2) && (0 <= x+i && x+i < width) ) bordered_half_bab[l+i] = ( HalfShape[k+x+i] != 0); } } /*-- Left border for the current layer --*/ x2 = blkx * mblksize - mborder; y2 = blky * mblksize; for( j2=0, l=mborder*mblksize_ext, k=y2*width2; j2<mblksize; j2++, k+=width2, l+=mblksize_ext) { for( i2=0; i2<mborder; i2++ ) { if( (0 <= y2+j2 && y2+j2 < height2) && (0 <= x2+i2 && x2+i2 < width2) ) bordered_curr_bab[l+i2] = ( CurShape[k+x2+i2] != 0); } } /*----- Right border ---------------------------------------------*/ x = (blkx + 1) * blksize; y = blky * blksize; x2 = (blkx + 1) * mblksize; y2 = blky * mblksize; /*-- Right border for the lower layer --*/ for ( j=0, l=border*blksize_ext, k=y*width; j<blksize; j++, k+=width, l+=blksize_ext) { for ( i=0; i<border; i++ ) { if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) bordered_lower_bab[l+i+blksize+border] = ( LowShape[k+x+i] != 0); } } /*----- Right border ---------------------------------------------*/ x = (blkx + 1) * blksize; y = blky * blksize; x2 = (blkx + 1) * mblksize; y2 = blky * mblksize; /*-- Right border for the half layer --*/ for ( j2=0, l=mborder*blksize_ext; j2<mblksize; j2++, l+=blksize_ext) { j = j2>>1; k = (y+j)*width; for ( i=0; i<border; i++ ) { if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) { bordered_half_bab[l+i+blksize+border] = ( LowShape[k+x+i] != 0); if(/* LowShape[k+x+i-1] == 0 && */ y+j+1 < height && j2%2==1) { /* avoid the odd subsampling mishap */ bordered_half_bab[l+i+blksize+border] = ( LowShape[k+x+i] != 0) | ( LowShape[k+width+x+i] != 0); } } } } /*-- Right border for the currnet layer --*/ for ( j2=0, l=mborder*mblksize_ext; j2<mblksize; j2++, l+=mblksize_ext) { j = j2>>1; k = (y+j)*width; for ( i2=0; i2<mborder; i2++ ) { i = i2 >> 1; if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) bordered_curr_bab[l+i2+mblksize+mborder] = ( LowShape[k+x+i] != 0); } } /*----- Bottom border --------------------------------------------*/ x = blkx * blksize - border; y = (blky + 1) * blksize; x2 = blkx * mblksize - mborder; y2 = (blky + 1) * mblksize; /*-- Bottom border for the lower layer --*/ for ( j=0, l=(blksize+border)*blksize_ext, k=y*width; j<border; j++, k+=width, l+=blksize_ext) { for ( i=0; i<blksize_ext; i++ ) { if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) bordered_lower_bab[l+i] = ( LowShape[k+x+i] != 0); } } /*-- Bottom border for the half layer --*/ for ( j2=0, l=(mblksize+mborder)*blksize_ext; j2<mborder; j2++, l+=blksize_ext) { j = j2>>1; k = (y+j)*width; for ( i=0; i<blksize_ext; i++ ) { if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) bordered_half_bab[l+i] = ( LowShape[k+x+i] != 0); } } /*-- Bottom border for the current layer --*/ for ( j2=0, l=(mblksize+mborder)*mblksize_ext; j2<mborder; j2++, l+=mblksize_ext) { j = j2>>1; k = (y+j)*width; for ( i2=0; i2<mblksize_ext; i2++ ) { i = i2>>1; if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) bordered_curr_bab[l+i2] = ( LowShape[k+x+i] != 0); } } return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -