--- mbtransquant.c 2005/12/10 05:20:35 1.31 +++ mbtransquant.c 2006/07/10 08:09:59 1.32 @@ -21,7 +21,7 @@ * along with this program ; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * $Id: mbtransquant.c,v 1.31 2005/12/10 05:20:35 syskin Exp $ + * $Id: mbtransquant.c,v 1.32 2006/07/10 08:09:59 syskin Exp $ * ****************************************************************************/ @@ -122,27 +122,30 @@ int16_t qcoeff[6 * 64], int16_t data[6*64]) { - int mpeg; int scaler_lum, scaler_chr; + quant_intraFuncPtr quant; - quant_intraFuncPtr const quant[2] = - { - quant_h263_intra, - quant_mpeg_intra - }; + /* check if quant matrices need to be re-initialized with new quant */ + if (pParam->vol_flags & XVID_VOL_MPEGQUANT) { + if (pParam->last_quant_initialized_intra != pMB->quant) { + init_intra_matrix(pParam->mpeg_quant_matrices, pMB->quant); + } + quant = quant_mpeg_intra; + } else { + quant = quant_h263_intra; + } - mpeg = !!(pParam->vol_flags & XVID_VOL_MPEGQUANT); scaler_lum = get_dc_scaler(pMB->quant, 1); scaler_chr = get_dc_scaler(pMB->quant, 0); /* Quantize the block */ start_timer(); - quant[mpeg](&data[0 * 64], &qcoeff[0 * 64], pMB->quant, scaler_lum, pParam->mpeg_quant_matrices); - quant[mpeg](&data[1 * 64], &qcoeff[1 * 64], pMB->quant, scaler_lum, pParam->mpeg_quant_matrices); - quant[mpeg](&data[2 * 64], &qcoeff[2 * 64], pMB->quant, scaler_lum, pParam->mpeg_quant_matrices); - quant[mpeg](&data[3 * 64], &qcoeff[3 * 64], pMB->quant, scaler_lum, pParam->mpeg_quant_matrices); - quant[mpeg](&data[4 * 64], &qcoeff[4 * 64], pMB->quant, scaler_chr, pParam->mpeg_quant_matrices); - quant[mpeg](&data[5 * 64], &qcoeff[5 * 64], pMB->quant, scaler_chr, pParam->mpeg_quant_matrices); + quant(&data[0 * 64], &qcoeff[0 * 64], pMB->quant, scaler_lum, pParam->mpeg_quant_matrices); + quant(&data[1 * 64], &qcoeff[1 * 64], pMB->quant, scaler_lum, pParam->mpeg_quant_matrices); + quant(&data[2 * 64], &qcoeff[2 * 64], pMB->quant, scaler_lum, pParam->mpeg_quant_matrices); + quant(&data[3 * 64], &qcoeff[3 * 64], pMB->quant, scaler_lum, pParam->mpeg_quant_matrices); + quant(&data[4 * 64], &qcoeff[4 * 64], pMB->quant, scaler_chr, pParam->mpeg_quant_matrices); + quant(&data[5 * 64], &qcoeff[5 * 64], pMB->quant, scaler_chr, pParam->mpeg_quant_matrices); stop_quant_timer(); }