📄 predisto.c
字号:
/******************************************************************//* Multilingual JMZ 08/03/1995 */if(n_ml_ch >0){ for (i = 0; i < sblimit_ml; i++) for(j = 7; j < (n_ml_ch+7); ++j) { k=j; if ((used[k][i] != 2) && (small > mnr[k][i])) { small = mnr[k][i]; min_sb = i; min_ch = k; } }}/* Multilingual JMZ 08/03/1995 *//******************************************************************/ if(min_sb > -1) { if (min_ch < stereo) { increment = 12 * ((*alloc)[min_sb][bit_alloc[min_ch][min_sb]+1].group * (*alloc)[min_sb][bit_alloc[min_ch][min_sb]+1].bits); /* how many bits are needed */ if (used[min_ch][min_sb]) increment -= 12 * ((*alloc)[min_sb][bit_alloc[min_ch][min_sb]].group * (*alloc)[min_sb][bit_alloc[min_ch][min_sb]].bits); } else if (min_ch < 7 || n_ml_ch == 0) /* Multichannel */ { increment = 12 * ((*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]+1].group * (*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]+1].bits); /* how many bits are needed */ if (used[min_ch][min_sb]) increment -= 12 * ((*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]].group * (*alloc_mc)[min_sb][bit_alloc[min_ch][min_sb]].bits); } else /* MultiLingual 7/8/95 WtK */ { increment = ((*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]+1].group * (*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]+1].bits); if (used[min_ch][min_sb]) increment -= ((*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]].group * (*alloc_ml)[min_sb][bit_alloc[min_ch][min_sb]].bits); if (fr_ps->header->multiling_fs==1) increment *= 6; else increment *= 12; } /* scale factor bits required for subband [min] */ if (used[min_ch][min_sb]) scale = seli = 0; else { /* this channel had no bits or scfs before */ seli = 2; scale = 6 * sfsPerScfsi[scfsi[min_ch][min_sb]]; } if(fr_ps->header->ext_bit_stream_present == 1) { if (adb_mpg1 > bspl_mpg1 + bscf_mpg1 + bsel_mpg1 + seli + scale + increment) { bspl_mpg1 += increment; /* bits for subband sample */ bscf_mpg1 += scale; /* bits for scale factor */ bsel_mpg1 += seli; /* bits for scfsi code */ } else used[min_ch][min_sb] = 2; /* can't increase this alloc */ } if ((ad > bspl + bscf + bsel + seli + scale + increment) && (used[min_ch][min_sb] != 2)) { ba = ++bit_alloc[min_ch][min_sb]; /* next up alloc */ bspl += increment; /* bits for subband sample */ bscf += scale; /* bits for scale factor */ bsel += seli; /* bits for scfsi code */ used[min_ch][min_sb] = 1; /* subband has bits */ if (min_ch<7) mnr[min_ch][min_sb] = -perm_smr[min_ch][min_sb] + snr[(*alloc)[min_sb][ba].quant+1]; else mnr[min_ch][min_sb] = -perm_smr[min_ch][min_sb] + snr[(*alloc_ml)[min_sb][ba].quant+1]; /* Check if subband has been fully allocated max bits */ if (min_ch < stereo) { if (ba >= (1<<(*alloc)[min_sb][0].bits)-1) used[min_ch][min_sb] = 2; } else if (min_ch < 7 || n_ml_ch == 0) /* Multichannel */ { if (ba >= (1<<(*alloc_mc)[min_sb][0].bits)-1) used[min_ch][min_sb] = 2; } else { if (ba >= (1<<(*alloc_ml)[min_sb][0].bits)-1) used[min_ch][min_sb] = 2; } } else used[min_ch][min_sb] = 2; /* can't increase this alloc */ } /* end of if-loop if min_sb >-1 */ } while(min_sb > -1); /* until could find no channel */ /* Calculate the number of bits left */ ad -= bspl+bscf+bsel; *adb = ad; for (i=sblimit;i<SBLIMIT;i++) for (k = 0; k < 2; k++) bit_alloc[k][i]=0; for (i=sblimit_ml;i<SBLIMIT;i++) for (k = 7; k < 7+n_ml_ch; k++) bit_alloc[k][i]=0;} void matri(double (*sbs_sample)[3][12][32], frame_params *fr_ps, double (*sb_sample)[3][12][32], unsigned int (*scalar)[3][32], int sblimit, unsigned int (*scfsi)[32], unsigned int (*scfsi_dyn)[32], unsigned int (*bit_alloc)[32], unsigned int (*subband)[3][12][32]){ int i, j, k, l, ch1, ch2, m, n; layer *info = fr_ps->header; for(k = 0; k < 8; k++) { if(fr_ps->header->mc_pred[k] == 0) { switch(fr_ps->header->tc_alloc[k]) { case 0: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) { sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k]; sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k]; } m = 0; n = 2; scale_factor_calc(scalar,sblimit, m, n, k, sb_sample); break; case 1: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) { sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[3][j][l][k]; } m = 0; n = 1; scale_factor_calc(scalar,sblimit, m, n, k, sb_sample); trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn); pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps); for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) { sbs_sample[2][j][l][k] = sbs_sample[0][j][l][k] - sbs_sample[5][j][l][k] - sbs_sample[3][j][l][k]; sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k]; } m = 1; n = 2; scale_factor_calc(scalar,sblimit, m, n, k, sb_sample); break; case 2: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) { sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[4][j][l][k]; } m = 1; n = 2; scale_factor_calc(scalar,sblimit, m, n, k, sb_sample); trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn); pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps); for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) { sbs_sample[2][j][l][k] = sbs_sample[1][j][l][k] - sbs_sample[6][j][l][k] - sbs_sample[4][j][l][k]; sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k]; } m = 0; n = 1; scale_factor_calc(scalar,sblimit, m, n, k, sb_sample); break; case 3: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) { sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k]; sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k]; } m = 0; n = 2; scale_factor_calc(scalar,sblimit, m, n, k, sb_sample); break; case 4: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) { sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k]; sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k]; } m = 0; n = 2; scale_factor_calc(scalar,sblimit, m, n, k, sb_sample); break; case 5: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) { sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k]; sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k]; } m = 0; n = 2; scale_factor_calc(scalar,sblimit, m, n, k, sb_sample); break; case 6: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) { sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[4][j][l][k]; } m = 1; n = 2; scale_factor_calc(scalar,sblimit, m, n, k, sb_sample); trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn); pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps); for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) { sbs_sample[2][j][l][k] = sbs_sample[1][j][l][k] - sbs_sample[6][j][l][k] - sbs_sample[4][j][l][k]; sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k]; } m = 0; n = 1; scale_factor_calc(scalar,sblimit, m, n, k, sb_sample); break; case 7: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) { sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[3][j][l][k]; } m = 0; n = 1; scale_factor_calc(scalar,sblimit, m, n, k, sb_sample); trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn); pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps); for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) { sbs_sample[2][j][l][k] = sbs_sample[0][j][l][k] - sbs_sample[5][j][l][k] - sbs_sample[3][j][l][k]; sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k]; } m = 1; n = 2; scale_factor_calc(scalar,sblimit, m, n, k, sb_sample); break; } } } for(i = 8; i < 12; i++) { if(fr_ps->header->mc_pred[k] == 0) { switch(fr_ps->header->tc_alloc[i]) { case 0: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++) { sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k]; sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k]; } m = 0; n = 2; scale_factor_calc(scalar,sblimit, m, n, i, sb_sample); break; case 1: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++) { sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[3][j][l][k]; } m = 0; n = 1; scale_factor_calc(scalar,sblimit, m, n, i, sb_sample); trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn); pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps); for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++) { sbs_sample[2][j][l][k] = sbs_sample[0][j][l][k] - sbs_sample[5][j][l][k] - sbs_sample[3][j][l][k]; sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k]; } m = 1; n = 2; scale_factor_calc(scalar,sblimit, m, n, i, sb_sample); break; case 2: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++) { sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[4][j][l][k]; } m = 1; n = 2; scale_factor_calc(scalar,sblimit, m, n, i, sb_sample); trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn); pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps); for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++) { sbs_sample[2][j][l][k] = sbs_sample[1][j][l][k] - sbs_sample[6][j][l][k] - sbs_sample[4][j][l][k]; sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k]; } m = 0; n = 1; scale_factor_calc(scalar,sblimit, m, n, i, sb_sample); break; case 3: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++) { sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k]; sb_sample[1][j][l][k] = sb_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[4][j][l][k]; } m = 0; n = 2; scale_factor_calc(scalar,sblimit, m, n, i, sb_sample); break; case 4: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++) { sb_sample[0][j][l][k] = sb_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sbs_sample[3][j][l][k]; sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k]; } m = 0; n = 2; scale_factor_calc(scalar,sblimit, m, n, i, sb_sample); break; case 5: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++) { sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k]; sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[4][j][l][k]; } m = 0; n = 2; scale_factor_calc(scalar,sblimit, m, n, i, sb_sample); break; case 6: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++) { sb_sample[1][j][l][k] = sbs_sample[6][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[4][j][l][k]; } m = 1; n = 2; scale_factor_calc(scalar,sblimit, m, n, i, sb_sample); trans_pattern(scalar, scfsi, fr_ps,scfsi_dyn); pre_quant(sbs_sample, m, n, sb_sample, scalar, bit_alloc, subband, fr_ps); for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++) { sbs_sample[2][j][l][k] = sbs_sample[1][j][l][k] - sbs_sample[6][j][l][k] - sbs_sample[4][j][l][k]; sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sbs_sample[2][j][l][k] + sb_sample[3][j][l][k]; } m = 0; n = 1; scale_factor_calc(scalar,sblimit, m, n, i, sb_sample); break; case 7: for( j = 0; j < 3; ++j) for(l = 0; l < 12; l ++) for( k = sb_groups[i-1] + 1; k <= sb_groups[i]; k++) { sb_sample[0][j][l][k] = sbs_sample[5][j][l][k] + sb_sample[2][j][l][k] + sbs_sample[3][j][l][k]; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -