Ignore:
Timestamp:
02/17/07 21:18:35 (18 years ago)
Author:
r2d
Message:
  • speed optimizations
Location:
libmpc/branches/r2d/libmpcenc
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • libmpc/branches/r2d/libmpcenc/bitstream.c

    r204 r221  
    108108}
    109109
    110 void writeBits (mpc_encoder_t * e, mpc_uint32_t input, unsigned int bits )
    111 {
    112         e->outputBits += bits;
    113 
    114         if (e->bitsCount + bits > sizeof(e->bitsBuff) * 8) {
    115                 int tmp = (sizeof(e->bitsBuff) * 8 - e->bitsCount);
    116                 bits -= tmp;
    117                 e->bitsBuff = (e->bitsBuff << tmp) | (input >> bits);
    118                 e->bitsCount = sizeof(e->bitsBuff) * 8;
    119                 emptyBits(e);
    120                 input &= (1 << bits) - 1;
    121         }
    122         e->bitsBuff = (e->bitsBuff << bits) | input;
    123         e->bitsCount += bits;
    124 }
    125 
    126110unsigned int encodeSize(mpc_uint64_t size, char * buff, mpc_bool_t addCodeSize)
    127111{
  • libmpc/branches/r2d/libmpcenc/encode_sv7.c

    r220 r221  
    129129        int n;
    130130        const Huffman_t * Table, * Tables[2];
     131        mpc_int32_t * Res_L = e->Res_L;
     132        mpc_int32_t * Res_R = e->Res_R;
     133        mpc_bool_t * DSCF_Flag_L = e->DSCF_Flag_L;
     134        mpc_bool_t * DSCF_Flag_R = e->DSCF_Flag_R;
     135        mpc_int32_t * SCF_Last_L = e->SCF_Last_L;
     136        mpc_int32_t * SCF_Last_R = e->SCF_Last_R;
    131137
    132138        for( n = MaxBand; n >= 0; n--)
    133                 if (e->Res_L[n] != 0 || e->Res_R[n] != 0) break;
     139                if (Res_L[n] != 0 || Res_R[n] != 0) break;
    134140
    135141        n++;
     
    147153
    148154        if (MaxBand) {
    149                 writeBits(e, HuffRes[0][e->Res_L[MaxBand - 1]].Code, HuffRes[0][e->Res_L[MaxBand - 1]].Length);
    150                 writeBits(e, HuffRes[0][e->Res_R[MaxBand - 1]].Code, HuffRes[0][e->Res_R[MaxBand - 1]].Length);
     155                writeBits(e, HuffRes[0][Res_L[MaxBand - 1]].Code, HuffRes[0][Res_L[MaxBand - 1]].Length);
     156                writeBits(e, HuffRes[0][Res_R[MaxBand - 1]].Code, HuffRes[0][Res_R[MaxBand - 1]].Length);
    151157                for ( n = MaxBand - 2; n >= 0; n--) {
    152                         int tmp = e->Res_L[n] - e->Res_L[n + 1];
     158                        int tmp = Res_L[n] - Res_L[n + 1];
    153159                        if (tmp < 0) tmp += 17;
    154                         writeBits(e, HuffRes[e->Res_L[n + 1] > 2][tmp].Code, HuffRes[e->Res_L[n + 1] > 2][tmp].Length);
    155 
    156                         tmp = e->Res_R[n] - e->Res_R[n + 1];
     160                        writeBits(e, HuffRes[Res_L[n + 1] > 2][tmp].Code, HuffRes[Res_L[n + 1] > 2][tmp].Length);
     161
     162                        tmp = Res_R[n] - Res_R[n + 1];
    157163                        if (tmp < 0) tmp += 17;
    158                         writeBits(e, HuffRes[e->Res_R[n + 1] > 2][tmp].Code, HuffRes[e->Res_R[n + 1] > 2][tmp].Length);
     164                        writeBits(e, HuffRes[Res_R[n + 1] > 2][tmp].Code, HuffRes[Res_R[n + 1] > 2][tmp].Length);
    159165                }
    160166
     
    162168                        mpc_uint32_t tmp = 0;
    163169                        int cnt = 0, tot = 0;
     170                        mpc_bool_t * MS_Flag = e->MS_Flag;
    164171                        for( n = 0; n < MaxBand; n++) {
    165                                 if ( e->Res_L[n] != 0 || e->Res_R[n] != 0 ) {
    166                                         tmp = (tmp << 1) | e->MS_Flag[n];
    167                                         cnt += e->MS_Flag[n];
     172                                if ( Res_L[n] != 0 || Res_R[n] != 0 ) {
     173                                        tmp = (tmp << 1) | MS_Flag[n];
     174                                        cnt += MS_Flag[n];
    168175                                        tot++;
    169176                                }
     
    179186        if (e->framesInBlock == 0){
    180187                for( n = 0; n < 32; n++)
    181                         e->DSCF_Flag_L[n] = e->DSCF_Flag_R[n] = 1; // new block -> force key frame
     188                        DSCF_Flag_L[n] = DSCF_Flag_R[n] = 1; // new block -> force key frame
    182189        }
    183190
     
    186193        for ( n = 0; n < MaxBand; n++ ) {
    187194                int tmp = 0, cnt = -1;
    188                 if (e->Res_L[n]) {
     195                if (Res_L[n]) {
    189196                        tmp = (e->SCF_Index_L[n][1] == e->SCF_Index_L[n][0]) * 2 + (e->SCF_Index_L[n][2] == e->SCF_Index_L[n][1]);
    190197                        cnt++;
    191198                }
    192                 if (e->Res_R[n]) {
     199                if (Res_R[n]) {
    193200                        tmp = (tmp << 2) | ((e->SCF_Index_R[n][1] == e->SCF_Index_R[n][0]) * 2 + (e->SCF_Index_R[n][2] == e->SCF_Index_R[n][1]));
    194201                        cnt++;
     
    201208
    202209        for ( n = 0; n < MaxBand; n++ ) {
    203                 if ( e->Res_L[n] ) {
     210                if ( Res_L[n] ) {
    204211                        int m;
    205                         if (e->DSCF_Flag_L[n] == 1) {
    206                                 writeBits(e, e->SCF_Index_L[n][0] + 6, 7);
    207                                 e->DSCF_Flag_L[n] = 0;
     212                        mpc_int32_t * SCFI_L_n = e->SCF_Index_L[n];
     213                        if (DSCF_Flag_L[n] == 1) {
     214                                writeBits(e, SCFI_L_n[0] + 6, 7);
     215                                DSCF_Flag_L[n] = 0;
    208216                        } else {
    209                                 unsigned int tmp = (e->SCF_Index_L[n][0] - e->SCF_Last_L[n] + 31) & 127;
     217                                unsigned int tmp = (SCFI_L_n[0] - SCF_Last_L[n] + 31) & 127;
    210218                                if (tmp < 64)
    211219                                        writeBits(e, HuffDSCF_2[tmp].Code, HuffDSCF_2[tmp].Length);
     
    216224                        }
    217225                        for( m = 0; m < 2; m++){
    218                                 if (e->SCF_Index_L[n][m+1] != e->SCF_Index_L[n][m]) {
    219                                         unsigned int tmp = (e->SCF_Index_L[n][m+1] - e->SCF_Index_L[n][m] + 31) & 127;
     226                                if (SCFI_L_n[m+1] != SCFI_L_n[m]) {
     227                                        unsigned int tmp = (SCFI_L_n[m+1] - SCFI_L_n[m] + 31) & 127;
    220228                                        if (tmp < 64)
    221229                                                writeBits(e, HuffDSCF_1[tmp].Code, HuffDSCF_1[tmp].Length);
     
    226234                                }
    227235                        }
    228                         e->SCF_Last_L[n] = e->SCF_Index_L[n][2];
    229                 }
    230                 if ( e->Res_R[n] ) {
     236                        SCF_Last_L[n] = SCFI_L_n[2];
     237                }
     238                if ( Res_R[n] ) {
    231239                        int m;
    232                         if (e->DSCF_Flag_R[n] == 1) {
    233                                 writeBits(e, e->SCF_Index_R[n][0] + 6, 7);
    234                                 e->DSCF_Flag_R[n] = 0;
     240                        mpc_int32_t * SCFI_R_n = e->SCF_Index_R[n];
     241                        if (DSCF_Flag_R[n] == 1) {
     242                                writeBits(e, SCFI_R_n[0] + 6, 7);
     243                                DSCF_Flag_R[n] = 0;
    235244                        } else {
    236                                 unsigned int tmp = (e->SCF_Index_R[n][0] - e->SCF_Last_R[n] + 31) & 127;
     245                                unsigned int tmp = (SCFI_R_n[0] - SCF_Last_R[n] + 31) & 127;
    237246                                if (tmp < 64)
    238247                                        writeBits(e, HuffDSCF_2[tmp].Code, HuffDSCF_2[tmp].Length);
     
    243252                        }
    244253                        for( m = 0; m < 2; m++){
    245                                 if (e->SCF_Index_R[n][m+1] != e->SCF_Index_R[n][m]) {
    246                                         unsigned int tmp = (e->SCF_Index_R[n][m+1] - e->SCF_Index_R[n][m] + 31) & 127;
     254                                if (SCFI_R_n[m+1] != SCFI_R_n[m]) {
     255                                        unsigned int tmp = (SCFI_R_n[m+1] - SCFI_R_n[m] + 31) & 127;
    247256                                        if (tmp < 64)
    248257                                                writeBits(e, HuffDSCF_1[tmp].Code, HuffDSCF_1[tmp].Length);
     
    253262                                }
    254263                        }
    255                         e->SCF_Last_R[n] = e->SCF_Index_R[n][2];
     264                        SCF_Last_R[n] = SCFI_R_n[2];
    256265                }
    257266        }
     
    259268        /*********************************** Samples *********************************/
    260269        for ( n = 0; n < MaxBand; n++ ) {
    261                 int Res = e->Res_L[n];
     270                int Res = Res_L[n];
    262271                const int * q = e->Q[n].L;
    263272                static const unsigned int thres[] = {0, 0, 3, 7, 9, 1, 3, 4, 8};
     
    336345                        }
    337346
    338                         Res = e->Res_R[n];
     347                        Res = Res_R[n];
    339348                } while (q == e->Q[n].L && (q = e->Q[n].R));
    340349        }
  • libmpc/branches/r2d/libmpcenc/libmpcenc.h

    r220 r221  
    9494 mpc_uint32_t writeBlock ( mpc_encoder_t *, const char *, const mpc_bool_t, mpc_uint32_t);
    9595 void writeMagic (mpc_encoder_t * e);
    96  void writeBits (mpc_encoder_t * e, mpc_uint32_t input, unsigned int bits );
     96 void emptyBits(mpc_encoder_t * e);
     97 static mpc_inline void writeBits (mpc_encoder_t * e, mpc_uint32_t input, unsigned int bits )
     98 {
     99         e->outputBits += bits;
     100
     101         if (e->bitsCount + bits > sizeof(e->bitsBuff) * 8) {
     102                 int tmp = (sizeof(e->bitsBuff) * 8 - e->bitsCount);
     103                 bits -= tmp;
     104                 e->bitsBuff = (e->bitsBuff << tmp) | (input >> bits);
     105                 e->bitsCount = sizeof(e->bitsBuff) * 8;
     106                 emptyBits(e);
     107                 input &= (1 << bits) - 1;
     108         }
     109         e->bitsBuff = (e->bitsBuff << bits) | input;
     110         e->bitsCount += bits;
     111 }
    97112 void writeSeekTable (mpc_encoder_t * e);
    98113 void writeBitstream_SV8 ( mpc_encoder_t*, int);
  • libmpc/branches/r2d/libmpcenc/quant.c

    r159 r221  
    158158ISNR_Schaetzer ( const float* input, const float SNRcomp, const int res )
    159159{
    160     int    k;
    161     const float  fac    = A [res];
    162         const float  invfac = C [res];
     160        const float  fac    = A [res] * NoiseInjectionCompensation1D [res];
     161        const float  invfac = C [res] / NoiseInjectionCompensation1D [res];
    163162    float  signal = 1.e-30f;
    164163    float  error = 1.e-30f;
    165     float  err, sig;
     164        const float * in_end = input + 36;
    166165
    167166    // Summation of the absolute power and the quadratic error
    168     for ( k = 0; k < 36; k++ ) {
    169         sig = input[k] * NoiseInjectionCompensation1D [res];
    170                 err = mpc_nearbyintf(sig * fac) * invfac - sig;
    171 
     167        do {
     168                float  err;
     169                err = mpc_nearbyintf(input[0] * fac) * invfac - input[0];
    172170        error += err * err;
    173         signal += sig * sig;
    174     }
     171                signal += input[0] * input[0];
     172
     173                err = mpc_nearbyintf(input[1] * fac) * invfac - input[1];
     174                error += err * err;
     175                signal += input[1] * input[1];
     176
     177                err = mpc_nearbyintf(input[2] * fac) * invfac - input[2];
     178                error += err * err;
     179                signal += input[2] * input[2];
     180
     181                err = mpc_nearbyintf(input[3] * fac) * invfac - input[3];
     182                error += err * err;
     183                signal += input[3] * input[3];
     184
     185                input += 4;
     186
     187        } while (input < in_end);
     188
     189        error *= NoiseInjectionCompensation1D [res] * NoiseInjectionCompensation1D [res];
     190        signal *= NoiseInjectionCompensation1D [res] * NoiseInjectionCompensation1D [res];
    175191
    176192    // Utilization of SNRcomp only if SNR > 1 !!!
Note: See TracChangeset for help on using the changeset viewer.