Int CVTCCommon::ztqInitDC(Int decode, Int c) { Int err; Int x, y; Int dummyPrevQ; err = 0; noteDetail("Initializing DC coefficient information...."); noteDebug("DC Dimensions: Width=%d, Height=%d", mzte_codec.m_iDCWidth, mzte_codec.m_iDCHeight); for (y = 0; y < mzte_codec.m_iDCHeight; ++y) for (x = 0; x < mzte_codec.m_iDCWidth; ++x) { if (decode) initInvQuantSingleStage(&COEFF_QSTATE(x, y, c), &dummyPrevQ); else initQuantSingleStage(&COEFF_QSTATE(x, y, c), &dummyPrevQ, COEFF_ORGVAL(x,y,c)); COEFF_TYPE(x, y, c) = UNTYPED; COEFF_STATE(x, y, c) = S_DC; } noteDetail("Completed initializing of DC coefficient information."); return err; }
// hjlee 0901 Int CVTCCommon::ztqInitAC(Int decode, Int c) { Int err; Int x, y, xc[4], yc[4]; Int height, width; Int dummyPrevQ; err = 0; noteDetail("Initializing AC coefficient information for col %d....",c); height = mzte_codec.m_iHeight >> (int)(c!=0); width = mzte_codec.m_iWidth >> (int)(c!=0); noteDebug("Image: Width=%d, Height=%d", width, height); for (y = 0; y < height; ++y) for (x = 0; x < width; ++x) { if (x >= mzte_codec.m_iDCWidth || y >= mzte_codec.m_iDCHeight) { if (decode) initInvQuantSingleStage(&COEFF_QSTATE(x, y, c), &dummyPrevQ); else { initQuantSingleStage(&COEFF_QSTATE(x, y, c), &dummyPrevQ, COEFF_ORGVAL(x,y,c)); } COEFF_TYPE(x, y, c) = UNTYPED; /* AC Bands */ if (findChild(x, y, xc, yc, c)==0 || x >= mzte_codec.m_SPlayer[c].width || y >= mzte_codec.m_SPlayer[c].height) /* leaf */ COEFF_STATE(x, y, c) = S_LINIT; else COEFF_STATE(x, y,c) = S_INIT; } } noteDetail("Completed Initializing of AC coefficient information."); return err; }
Void CVTCEncoder::DC_predict(Int color) { Int i,j,dc_h,dc_w,offset_dc,max_dc; dc_h=mzte_codec.m_iDCHeight; dc_w=mzte_codec.m_iDCWidth; dc_coeff=(SInt **)calloc(dc_h,sizeof(SInt *)); for(i=0;i<dc_h;i++) dc_coeff[i]=(SInt *)calloc(dc_w,sizeof(SInt)); dc_mask=(Char **)calloc(dc_h,sizeof(Char *)); for(i=0;i<dc_h;i++) dc_mask[i]=(Char *)calloc(dc_w,sizeof(Char)); coeffinfo=mzte_codec.m_SPlayer[color].coeffinfo; for(i=0;i<dc_h;i++) for(j=0;j<dc_w;j++) { dc_coeff[i][j]=coeffinfo[i][j].quantized_value; dc_mask [i][j]=coeffinfo[i][j].mask; } /* prediction */ offset_dc=0; for(i=0;i<dc_h;i++) for(j=0;j<dc_w;j++){ if ( dc_mask[i][j] != 0 ) { if(offset_dc>(coeffinfo[i][j].quantized_value-=DC_pred_pix(i,j))) offset_dc=coeffinfo[i][j].quantized_value; } } if(offset_dc>0) offset_dc=0; /* adjust coeff's by offset_dc */ max_dc=0; for(i=0;i<dc_h;i++) for(j=0;j<dc_w;j++){ if ( dc_mask[i][j] != 0 ) { coeffinfo[i][j].quantized_value -=offset_dc; /* find max_dc */ if (max_dc<coeffinfo[i][j].quantized_value) max_dc=coeffinfo[i][j].quantized_value; } } mzte_codec.m_iOffsetDC=offset_dc; mzte_codec.m_iMaxDC=max_dc; /* hjlee */ noteDebug("DC pred: offset=%d, max_dc=%d", mzte_codec.m_iOffsetDC,mzte_codec.m_iMaxDC); for(i=0;i<dc_h;i++) { free(dc_coeff[i]); free(dc_mask[i]); } free(dc_coeff); free(dc_mask); }