📄 ztscanutil.cpp
字号:
} } else { for (c=0; c<mzte_codec.m_iColors; c++) { for (l=0; l<mzte_codec.m_iWvtDecmpLev;++l) { for (i=0; i<MAX_NUM_TYPE_CONTEXTS; ++i) acmType[c][l][i].Max_frequency=mzte_codec.m_iAcmMaxFreq[0]; acmSign[c][l].Max_frequency=mzte_codec.m_iAcmMaxFreq[5]; } acmVZ[c].Max_frequency=mzte_codec.m_iAcmMaxFreq[1]; } }}Void CVTCCommon::init_acm_maxf_dec(){ init_acm_maxf_enc();}/******************************************************** Function Name ------------- Void clear_ZTR_D() Arguments --------- None. Description ----------- Clear the zerotree descendent marks in the entire image. Functions Called ---------------- None. Return Value ------------ None.********************************************************/ Void CVTCCommon::clear_ZTR_D(COEFFINFO **coeffinfo, Int width, Int height){ register COEFFINFO **coeff; register int i,j,dc_h2,dc_w2; coeff=coeffinfo; dc_h2=mzte_codec.m_iDCHeight<<1; dc_w2=mzte_codec.m_iDCWidth<<1; for(i=0;i<dc_h2;i++) for(j=dc_w2;j<width;j++) if(coeff[i][j].type == ZTR_D) coeff[i][j].type = UNTYPED; for(i=dc_h2;i<height;i++) for(j=0;j<width;j++) if(coeff[i][j].type == ZTR_D) coeff[i][j].type = UNTYPED;}//Added by Sarnoff for error resilience, 3/5/99/* ----------------------------------------------------------------- *//* ----------------- Error resilience related routines ------------- *//* ----------------------------------------------------------------- *//***************************************************//* Get the location of a TU, information includes *//* band, coordinate, color, size. bbc, 11/6/98 *//***************************************************/Void CVTCDecoder::get_TU_location(Int LTU){ Int a,b,dc_h=mzte_codec.m_iDCHeight,dc_w=mzte_codec.m_iDCWidth;#ifdef _DC_PACKET_ LTU-=TU_max_dc; /* bbc, 11/18/98 */#endif if(mzte_codec.m_iScanDirection==0) { /* TD case */ if(LTU==-1){ start_w=mzte_codec.m_iDCWidth; start_h=0; TU_band=TU_color=0; return; } a=LTU/9; b=LTU/3; start_h=a/dc_w; start_w=a%dc_w; TU_color=b%3; switch(TU_band=(LTU%9)%3){ case 0: start_w +=dc_w; break; case 1: start_h +=dc_h; break; case 2: start_h +=dc_h; start_w +=dc_w; } } else { /* BB case */ Int l; a = LTU / dc_h; if (a==0) { l = 0; TU_color = 0; } else { l = (a-1)/3 + 1; TU_color = (a-1)%3; } if (TU_color) --l; band_height = dc_h<<l; b = LTU%dc_h; start_h = b<<l; #if 0 /* getting next TU in the same band */ if(LTU==prev_LTU+1){ if(start_h<band_height){ start_h +=TU_height; if(start_h<band_height-1){ prev_LTU=LTU; goto check_packet_bound; } } else{ start_h +=TU_height; if(start_h<2*band_height-1){ prev_LTU=LTU; goto check_packet_bound; } } } prev_LTU=LTU; a=LTU/mzte_codec.m_iDCHeight; b=LTU%mzte_codec.m_iDCHeight; /* location (TU_number) in a band */ if(a<3){ /* Lowest Y */ TU_spa_loc=0; band_height=mzte_codec.m_iDCHeight; band_width=mzte_codec.m_iDCWidth; TU_color=0; TU_band=a; TU_height=1; } else{ TU_spa_loc=(a-3)/9+1; TU_color=((a-3)/3)%3; TU_band=(a-3)%3; if(TU_color==0){ band_height=mzte_codec.m_iDCHeight<<TU_spa_loc; band_width=mzte_codec.m_iDCWidth<<TU_spa_loc; TU_height=1<<TU_spa_loc; } else{ band_height=mzte_codec.m_iDCHeight<<(TU_spa_loc-1); band_width=mzte_codec.m_iDCWidth<<(TU_spa_loc-1); TU_height=1<<(TU_spa_loc-1); } } switch(TU_band){ case 0: start_h=b*TU_height; start_w=band_width; break; case 1: start_h=band_height+b*TU_height; start_w=0; break; case 2: start_h=band_height+b*TU_height; start_w=band_width; break; } check_packet_bound: /* Find or update the packet boundary, for determining */ /* context model in arithmetic coding, bbc, 10/5/98 */ if(TU_first !=packet_TU_first || packet_band !=TU_band){ packet_TU_first=TU_first; packet_band=TU_band; packet_top=start_h; packet_left=start_w; }#endif }}#if 0 // not used currently/**************************************************//* Function to check if a coefficient is at the *//* position to check end of segment, bbc, 11/6/98 *//**************************************************//* may not need this any more */Int need_check_segment_end(Int h,Int w,Int color){ int block_size=16; if(wvt_level==0) /* no checking needed for root band */ return 0; switch(subband_loc){ case 0: /* LH */ w-=level_w; break; case 1: /* HL */ h-=level_h; break; case 2: /* HH */ h-=level_h; w-=level_w; break; default: errorHandler("%d is not a choice for subband_loc.",subband_loc); } if(wvt_level<=3) block_size=1<<wvt_level; if((color == 0 && wvt_level==mzte_codec.wvtDecompLev-1) || (color != 0 && wvt_level==mzte_codec.wvtDecompLev-2)){ if(!((h+1)%block_size || (w+1)%block_size)){ if(h+1 != level_h || w+1 != level_w) return 1; } return 0; } else return (!((h+1)%block_size || (w+1)%block_size));}#endif /**********************************************//* Record the location of previously detected *//* good segment for TD mode, bbc, 10/23/98 *//**********************************************/Void CVTCDecoder::set_prev_good_TD_segment(Int TU,int h,int w){ prev_good_TU=TU; prev_good_height=h; prev_good_width=w;}/**********************************************//* Record the location of previously detected *//* good segment for BB mode, ph, 11/19/98 *//**********************************************/Void CVTCDecoder::set_prev_good_BB_segment(Int TU,int h,int w){ prev_good_TU=TU; prev_good_height=h; prev_good_width=w;}//End: Added by Sarnoff for error resilience, 3/5/99
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -