Ignore:
Timestamp:
02/17/07 21:18:35 (17 years ago)
Author:
r2d
Message:
  • speed optimizations
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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        }
Note: See TracChangeset for help on using the changeset viewer.