📄 vtc_shape_shapeenhdecode.cpp
字号:
ar_decoder); } else if (bab_type==1){ /* Raster Scan-Line (RSL) coding */ FullDecoding (bordered_lower_bab, bordered_half_bab, bordered_curr_bab, mbsize, filter, ar_decoder); } else { fprintf(stderr,"BAB type ERROR !\n"); } return ( 0 );}/* Interleaved Scan-Line (ISL) Decoding */Void CVTCDecoder::ExclusiveORdecoding (UChar *bordered_lower_bab, UChar *bordered_half_bab, UChar *bordered_curr_bab, Int mbsize, Int scan_order, // SAIT_PDAM: ADDED by D.-S.Cho (Samsung AIT) ArDecoder *ar_decoder){ Int i,j,i2,j2,k,l,prev,next; Int mborder = MBORDER; Int mbsize_ext = mbsize+(mborder<<1); Int border = BORDER; Int bsize = mbsize >> 1; Int bsize_ext = bsize+(border<<1); Int context, prob=0; UChar *lower_bab_data,*half_bab_data, *curr_bab_data; UChar *bordered_curr_bab_tr = NULL; // SAIT_PDAM: ADDED by D.-S.Cho (Samsung AIT) lower_bab_data = bordered_lower_bab + border * bsize_ext + border; half_bab_data= bordered_half_bab + mborder * bsize_ext + border; curr_bab_data= bordered_curr_bab + mborder * mbsize_ext + mborder; /*-- P0 pixels reconstructing --*/ for(j=j2=0,k=l=0; j<bsize; j++, j2+=2, k+=(mbsize_ext<<1), l+=bsize_ext) for(i=i2=0; i<bsize; i++, i2+=2) curr_bab_data[k+i2]=lower_bab_data[l+i]; /* SAIT_PDAM BEGIN - ADDED by D.-S.Cho (Samsung AIT) */ // current BAB transposition if (scan_order==1) { bordered_curr_bab_tr = (UChar *)calloc(mbsize_ext*mbsize_ext, sizeof(UChar)); for (j=0; j<mbsize_ext; j++) for (i=0; i<mbsize_ext; i++) bordered_curr_bab_tr[j*mbsize_ext+i] = bordered_curr_bab[i*mbsize_ext+j]; curr_bab_data=bordered_curr_bab_tr + mborder * mbsize_ext + mborder; } /* SAIT_PDAM END - ADDED by D.-S.Cho (Samsung AIT) */ /*-- P1 pixels decoding --*/ /* SAIT_PDAM BEGIN - MODIFIED by D.-S.Cho (Samsung AIT) */ //for(j2=k=0; j2<mbsize; j2+=2, k+=(mbsize_ext<<1) ) // { // for(i2=1; i2<mbsize; i2+=2) // { for(i2=1; i2<mbsize; i2+=2) { for(j2=k=0; j2<mbsize; j2+=2, k+=(mbsize_ext<<1) ) { /* SAIT_PDAM END - MODIFIED by D.-S.Cho (Samsung AIT) */ prev= curr_bab_data[k+i2-1]; next= curr_bab_data[k+i2+1]; if(prev!=next) { context = GetContextEnhBAB_XOR(curr_bab_data, i2, j2, mbsize_ext, 0); /* pixel type : 0-P1, 1-P2/P3 */ prob=scalable_xor_prob_1[context]; curr_bab_data[k+i2] = ArDecodeSymbol_Still(ar_decoder, prob); } else { curr_bab_data[k+i2] = prev; } } } /*-- P2/P3 pixels decoding --*/ for(j2=1,k=mbsize_ext; j2<mbsize; j2+=2, k+=(mbsize_ext<<1) ) { for(i2=0; i2<mbsize; i2++) { prev= curr_bab_data[k-mbsize_ext+i2]; next= curr_bab_data[k+mbsize_ext+i2]; if(prev!=next) { context = GetContextEnhBAB_XOR(curr_bab_data, i2, j2, mbsize_ext, 1); /* pixel type : 0-P1, 1-P2/P3 */ prob=scalable_xor_prob_23[context]; curr_bab_data[k+i2] = ArDecodeSymbol_Still(ar_decoder, prob); } else { curr_bab_data[k+i2] = prev; } } } /* SAIT_PDAM BEGIN - ADDED by D.-S.Cho (Samsung AIT) */ if (scan_order == 1) { for (j=0; j<mbsize_ext; j++) for (i=0; i<mbsize_ext; i++) bordered_curr_bab[j*mbsize_ext+i]=bordered_curr_bab_tr[i*mbsize_ext+j]; curr_bab_data = bordered_curr_bab + mborder*mbsize_ext + mborder; free (bordered_curr_bab_tr); } /* SAIT_PDAM END - ADDED by D.-S.Cho (Samsung AIT) */ /* get the half resolution needed */ for(j2=0,k=0; j2<mbsize; j2++, k+=mbsize_ext ) { for(i=0; i<bsize; i++) { i2 = i<<1; /* horizontal subsampling */ half_bab_data[j2*bsize_ext+i] = curr_bab_data[k+i2]; } }}/* Raster Scan-Line (RSL) Decoding */Void CVTCDecoder::FullDecoding (UChar *bordered_lower_bab, UChar *bordered_half_bab, UChar *bordered_curr_bab, Int mbsize, FILTER *filter, ArDecoder *ar_decoder){ Int i,j,i2,j2,k,l; Int mborder = MBORDER; Int mbsize_ext = mbsize+(mborder<<1); Int border = BORDER; Int bsize = mbsize >> 1; Int bsize_ext = bsize+(border<<1); //Int low_value, not_coded; Int context, prob=0; UChar *lower_bab_data,*half_bab_data, *curr_bab_data; lower_bab_data = bordered_lower_bab + border * bsize_ext + border; half_bab_data= bordered_half_bab + mborder * bsize_ext + border; curr_bab_data= bordered_curr_bab + mborder * mbsize_ext + mborder; /* vertical pass */ /* vertical pass first for half-higher layer encoding*//* Should insert the precise bordering process ! */ for(j2=k=0; j2<mbsize; j2+=2, k+=2*bsize_ext) { for(i=0; i<bsize; i++) { j = j2>>1; l = j*bsize_ext; /* T1 */ context = (half_bab_data[k-bsize_ext+i]<<7) /* T9*/ | ( half_bab_data[k-bsize_ext+i+1] <<6) /* T8 */ | (half_bab_data[k+bsize_ext+i-1] <<5) /* T7 */ | (half_bab_data[k+i-1] <<4) /* T6 */ | (lower_bab_data[l+i] <<3) /* T5 */ | (lower_bab_data[l+i+1] <<2) /* T4 */ | (lower_bab_data[l+bsize_ext+i] <<1) /* T3 */ | (lower_bab_data[l+bsize_ext+i+1]); /* T2 */ if(filter->DWT_Class==DWT_ODD_SYMMETRIC){ prob=prob_odd0[context]; } else if(filter->DWT_Class==DWT_EVEN_SYMMETRIC) { prob=prob_even0[context]; } else { fprintf(stderr,"Error: filter type in FullEncoding() !\n"); exit(0); } half_bab_data[k+i] = ArDecodeSymbol_Still(ar_decoder, prob); /* T0 */ context = (half_bab_data[k+i]<<7) /* T1*/ | ( lower_bab_data[l+bsize_ext+i-1] <<6) /* T10 */ | (half_bab_data[k+bsize_ext+i-1] <<5) /* T7 */ | (half_bab_data[k+i-1] <<4) /* T6 */ | (lower_bab_data[l+i] <<3) /* T5 */ | (lower_bab_data[l+i+1] <<2) /* T4 */ | (lower_bab_data[l+bsize_ext+i] <<1) /* T3 */ | (lower_bab_data[l+bsize_ext+i+1]); /* T2 */ if(filter->DWT_Class==DWT_ODD_SYMMETRIC){ prob=prob_odd1[context]; } else if(filter->DWT_Class==DWT_EVEN_SYMMETRIC) { prob=prob_even1[context]; } else { fprintf(stderr,"Error: filter type in FullEncoding() !\n"); exit(0); } half_bab_data[k+bsize_ext+i]=ArDecodeSymbol_Still(ar_decoder, prob); } } /* horizontal */ for(i2=0; i2<mbsize; i2+=2) { for(j=k=0; j<mbsize; j++, k+=mbsize_ext) { i = i2>>1; l = j*bsize_ext; /* T1 */ context = (curr_bab_data[k+i2-1]<<7) /* T9*/ | ( curr_bab_data[k+mbsize_ext+i2-1] <<6) /* T8 */ | (curr_bab_data[k-mbsize_ext+i2+1] <<5) /* T7 */ | (curr_bab_data[k-mbsize_ext+i2] <<4) /* T6 */ | (half_bab_data[l+i] <<3) /* T5 */ | (half_bab_data[l+bsize_ext+i] <<2) /* T4 */ | (half_bab_data[l+i+1] <<1) /* T3 */ | (half_bab_data[l+bsize_ext+i+1]); /* T2 */ if(filter->DWT_Class==DWT_ODD_SYMMETRIC){ prob=prob_odd0[context]; } else if(filter->DWT_Class==DWT_EVEN_SYMMETRIC) { prob=prob_even0[context]; } else { fprintf(stderr,"Error: filter type in FullEncoding() !\n"); exit(0); } curr_bab_data[k+i2]=ArDecodeSymbol_Still(ar_decoder, prob); /* T0 */ context = (curr_bab_data[k+i2]<<7) /* T1*/ | ( half_bab_data[l-bsize_ext+i+1] <<6) /* T10 */ | (curr_bab_data[k-mbsize_ext+i2+1] <<5) /* T7 */ | (curr_bab_data[k-mbsize_ext+i2] <<4) /* T6 */ | (half_bab_data[l+i] <<3) /* T5 */ | (half_bab_data[l+bsize_ext+i] <<2) /* T4 */ | (half_bab_data[l+i+1] <<1) /* T3 */ | (half_bab_data[l+bsize_ext+i+1]); /* T2 */ if(filter->DWT_Class==DWT_ODD_SYMMETRIC){ prob=prob_odd1[context]; } else if(filter->DWT_Class==DWT_EVEN_SYMMETRIC) { prob=prob_even1[context]; } else { fprintf(stderr,"Error: filter type in FullEncoding() !\n"); exit(0); } curr_bab_data[k+i2+1]=ArDecodeSymbol_Still(ar_decoder, prob); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -