|
|
|
@@ -90,7 +90,7 @@ static void convert_matrix(MpegEncContext *s, int (*qmat)[64], uint16_t (*qmat16 |
|
|
|
/* (1<<36)/19952 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= (1<<36)/249205026 */ |
|
|
|
/* 3444240 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= 275 */ |
|
|
|
|
|
|
|
qmat[qscale][j] = (int)((UINT64_C(1) << (QMAT_SHIFT-3)) / |
|
|
|
qmat[qscale][j] = (int)((UINT64_C(1) << QMAT_SHIFT) / |
|
|
|
(qscale * quant_matrix[j])); |
|
|
|
} |
|
|
|
} else if (s->fdct == fdct_ifast) { |
|
|
|
@@ -101,7 +101,7 @@ static void convert_matrix(MpegEncContext *s, int (*qmat)[64], uint16_t (*qmat16 |
|
|
|
/* (1<<36)/19952 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= (1<<36)/249205026 */ |
|
|
|
/* 3444240 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= 275 */ |
|
|
|
|
|
|
|
qmat[qscale][j] = (int)((UINT64_C(1) << (QMAT_SHIFT + 11)) / |
|
|
|
qmat[qscale][j] = (int)((UINT64_C(1) << (QMAT_SHIFT + 14)) / |
|
|
|
(aanscales[i] * qscale * quant_matrix[j])); |
|
|
|
} |
|
|
|
} else { |
|
|
|
@@ -115,7 +115,6 @@ static void convert_matrix(MpegEncContext *s, int (*qmat)[64], uint16_t (*qmat16 |
|
|
|
qmat16[qscale][i] = (1 << QMAT_SHIFT_MMX) / (qscale * quant_matrix[block_permute_op(i)]); |
|
|
|
|
|
|
|
if(qmat16[qscale][i]==0 || qmat16[qscale][i]==128*256) qmat16[qscale][i]=128*256-1; |
|
|
|
|
|
|
|
qmat16_bias[qscale][i]= ROUNDED_DIV(bias<<(16-QUANT_BIAS_SHIFT), qmat16[qscale][i]); |
|
|
|
} |
|
|
|
} |
|
|
|
@@ -2487,15 +2486,15 @@ static int dct_quantize_c(MpegEncContext *s, |
|
|
|
i = 1; |
|
|
|
last_non_zero = 0; |
|
|
|
qmat = s->q_intra_matrix[qscale]; |
|
|
|
bias= s->intra_quant_bias<<(QMAT_SHIFT - 3 - QUANT_BIAS_SHIFT); |
|
|
|
bias= s->intra_quant_bias<<(QMAT_SHIFT - QUANT_BIAS_SHIFT); |
|
|
|
} else { |
|
|
|
i = 0; |
|
|
|
last_non_zero = -1; |
|
|
|
qmat = s->q_inter_matrix[qscale]; |
|
|
|
bias= s->inter_quant_bias<<(QMAT_SHIFT - 3 - QUANT_BIAS_SHIFT); |
|
|
|
bias= s->inter_quant_bias<<(QMAT_SHIFT - QUANT_BIAS_SHIFT); |
|
|
|
} |
|
|
|
threshold1= (1<<(QMAT_SHIFT - 3)) - bias - 1; |
|
|
|
threshold2= threshold1<<1; |
|
|
|
threshold1= (1<<QMAT_SHIFT) - bias - 1; |
|
|
|
threshold2= (threshold1<<1); |
|
|
|
|
|
|
|
for(;i<64;i++) { |
|
|
|
j = zigzag_direct[i]; |
|
|
|
@@ -2506,10 +2505,10 @@ static int dct_quantize_c(MpegEncContext *s, |
|
|
|
// || bias-level >= (1<<(QMAT_SHIFT - 3))){ |
|
|
|
if(((unsigned)(level+threshold1))>threshold2){ |
|
|
|
if(level>0){ |
|
|
|
level= (bias + level)>>(QMAT_SHIFT - 3); |
|
|
|
level= (bias + level)>>QMAT_SHIFT; |
|
|
|
block[j]= level; |
|
|
|
}else{ |
|
|
|
level= (bias - level)>>(QMAT_SHIFT - 3); |
|
|
|
level= (bias - level)>>QMAT_SHIFT; |
|
|
|
block[j]= -level; |
|
|
|
} |
|
|
|
max |=level; |
|
|
|
|