Ignore:
Timestamp:
02/08/07 14:29:39 (18 years ago)
Author:
r2d
Message:
  • added sv7 to sv8 conversion utility (still work to do, but able to convert basic files)
  • moved libmpcenc functions prototypes in libmpcenc.h
  • removed global variables from encode_sv7 (put in mpc_encoder_t)
File:
1 edited

Legend:

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

    r201 r203  
    5858 */
    5959
    60 unsigned char         MS_Flag     [32];         // Flag to save if Subband was MS- or LR-coded
    61 int                   SCF_Last_L  [32];
    62 int                   SCF_Last_R  [32];         // Last coded SCF value
    63 static unsigned char  DSCF_RLL_L  [32];
    64 static unsigned char  DSCF_RLL_R  [32];         // Duration of the differential SCF-coding for RLL (run length limitation)
    65 int                   Res_L       [32];
    66 int                   Res_R       [32];         // Quantization precision of the subbands
    67 int                   SCF_Index_L [32] [3];
    68 int                   SCF_Index_R [32] [3];     // Scalefactor index for quantized subband values
    69 
    7060// initialize SV8
    7161void
     
    146136// formatting and writing SV8-bitstream for one frame
    147137void
    148 writeBitstream_SV8 ( mpc_encoder_t* e, int MaxBand, const SubbandQuantTyp*  Q )
     138writeBitstream_SV8 ( mpc_encoder_t* e, int MaxBand)
    149139{
    150140        int n;
     
    152142
    153143        for( n = MaxBand; n >= 0; n--)
    154                 if (Res_L[n] != 0 || Res_R[n] != 0) break;
     144                if (e->Res_L[n] != 0 || e->Res_R[n] != 0) break;
    155145
    156146        n++;
     
    168158
    169159        if (MaxBand) {
    170                 writeBits(e, HuffRes[0][Res_L[MaxBand - 1]].Code, HuffRes[0][Res_L[MaxBand - 1]].Length);
    171                 writeBits(e, HuffRes[0][Res_R[MaxBand - 1]].Code, HuffRes[0][Res_R[MaxBand - 1]].Length);
     160                writeBits(e, HuffRes[0][e->Res_L[MaxBand - 1]].Code, HuffRes[0][e->Res_L[MaxBand - 1]].Length);
     161                writeBits(e, HuffRes[0][e->Res_R[MaxBand - 1]].Code, HuffRes[0][e->Res_R[MaxBand - 1]].Length);
    172162                for ( n = MaxBand - 2; n >= 0; n--) {
    173                         int tmp = Res_L[n] - Res_L[n + 1];
     163                        int tmp = e->Res_L[n] - e->Res_L[n + 1];
    174164                        if (tmp < 0) tmp += 17;
    175                         writeBits(e, HuffRes[Res_L[n + 1] > 2][tmp].Code, HuffRes[Res_L[n + 1] > 2][tmp].Length);
    176 
    177                         tmp = Res_R[n] - Res_R[n + 1];
     165                        writeBits(e, HuffRes[e->Res_L[n + 1] > 2][tmp].Code, HuffRes[e->Res_L[n + 1] > 2][tmp].Length);
     166
     167                        tmp = e->Res_R[n] - e->Res_R[n + 1];
    178168                        if (tmp < 0) tmp += 17;
    179                         writeBits(e, HuffRes[Res_R[n + 1] > 2][tmp].Code, HuffRes[Res_R[n + 1] > 2][tmp].Length);
     169                        writeBits(e, HuffRes[e->Res_R[n + 1] > 2][tmp].Code, HuffRes[e->Res_R[n + 1] > 2][tmp].Length);
    180170                }
    181171
     
    184174                        int cnt = 0, tot = 0;
    185175                        for( n = 0; n < MaxBand; n++) {
    186                                 if ( Res_L[n] != 0 || Res_R[n] != 0 ) {
    187                                         tmp = (tmp << 1) | MS_Flag[n];
    188                                         cnt += MS_Flag[n];
     176                                if ( e->Res_L[n] != 0 || e->Res_R[n] != 0 ) {
     177                                        tmp = (tmp << 1) | e->MS_Flag[n];
     178                                        cnt += e->MS_Flag[n];
    189179                                        tot++;
    190180                                }
     
    200190        if (e->framesInBlock == 0){
    201191                for( n = 0; n < 32; n++)
    202                         DSCF_RLL_L[n] = DSCF_RLL_R[n] = 1; // new block -> force key frame
     192                        e->DSCF_Flag_L[n] = e->DSCF_Flag_R[n] = 1; // new block -> force key frame
    203193        }
    204194
     
    207197        for ( n = 0; n < MaxBand; n++ ) {
    208198                int tmp = 0, cnt = -1;
    209                 if (Res_L[n]) {
    210                         tmp = (SCF_Index_L[n][1] == SCF_Index_L[n][0]) * 2 + (SCF_Index_L[n][2] == SCF_Index_L[n][1]);
     199                if (e->Res_L[n]) {
     200                        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]);
    211201                        cnt++;
    212202                }
    213                 if (Res_R[n]) {
    214                         tmp = (tmp << 2) | ((SCF_Index_R[n][1] == SCF_Index_R[n][0]) * 2 + (SCF_Index_R[n][2] == SCF_Index_R[n][1]));
     203                if (e->Res_R[n]) {
     204                        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]));
    215205                        cnt++;
    216206                }
     
    222212
    223213        for ( n = 0; n < MaxBand; n++ ) {
    224                 if ( Res_L[n] ) {
     214                if ( e->Res_L[n] ) {
    225215                        int m;
    226                         if (DSCF_RLL_L[n] == 1) {
    227                                 writeBits(e, SCF_Index_L[n][0] + 6, 7);
    228                                 DSCF_RLL_L[n] = 0;
     216                        if (e->DSCF_Flag_L[n] == 1) {
     217                                writeBits(e, e->SCF_Index_L[n][0] + 6, 7);
     218                                e->DSCF_Flag_L[n] = 0;
    229219                        } else {
    230                                 unsigned int tmp = (SCF_Index_L[n][0] - SCF_Last_L[n] + 31) & 127;
     220                                unsigned int tmp = (e->SCF_Index_L[n][0] - e->SCF_Last_L[n] + 31) & 127;
    231221                                if (tmp < 64)
    232222                                        writeBits(e, HuffDSCF_2[tmp].Code, HuffDSCF_2[tmp].Length);
     
    237227                        }
    238228                        for( m = 0; m < 2; m++){
    239                                 if (SCF_Index_L[n][m+1] != SCF_Index_L[n][m]) {
    240                                         unsigned int tmp = (SCF_Index_L[n][m+1] - SCF_Index_L[n][m] + 31) & 127;
     229                                if (e->SCF_Index_L[n][m+1] != e->SCF_Index_L[n][m]) {
     230                                        unsigned int tmp = (e->SCF_Index_L[n][m+1] - e->SCF_Index_L[n][m] + 31) & 127;
    241231                                        if (tmp < 64)
    242232                                                writeBits(e, HuffDSCF_1[tmp].Code, HuffDSCF_1[tmp].Length);
     
    247237                                }
    248238                        }
    249                         SCF_Last_L[n] = SCF_Index_L[n][2];
    250                 }
    251                 if ( Res_R[n] ) {
     239                        e->SCF_Last_L[n] = e->SCF_Index_L[n][2];
     240                }
     241                if ( e->Res_R[n] ) {
    252242                        int m;
    253                         if (DSCF_RLL_R[n] == 1) {
    254                                 writeBits(e, SCF_Index_R[n][0] + 6, 7);
    255                                 DSCF_RLL_R[n] = 0;
     243                        if (e->DSCF_Flag_R[n] == 1) {
     244                                writeBits(e, e->SCF_Index_R[n][0] + 6, 7);
     245                                e->DSCF_Flag_R[n] = 0;
    256246                        } else {
    257                                 unsigned int tmp = (SCF_Index_R[n][0] - SCF_Last_R[n] + 31) & 127;
     247                                unsigned int tmp = (e->SCF_Index_R[n][0] - e->SCF_Last_R[n] + 31) & 127;
    258248                                if (tmp < 64)
    259249                                        writeBits(e, HuffDSCF_2[tmp].Code, HuffDSCF_2[tmp].Length);
     
    264254                        }
    265255                        for( m = 0; m < 2; m++){
    266                                 if (SCF_Index_R[n][m+1] != SCF_Index_R[n][m]) {
    267                                         unsigned int tmp = (SCF_Index_R[n][m+1] - SCF_Index_R[n][m] + 31) & 127;
     256                                if (e->SCF_Index_R[n][m+1] != e->SCF_Index_R[n][m]) {
     257                                        unsigned int tmp = (e->SCF_Index_R[n][m+1] - e->SCF_Index_R[n][m] + 31) & 127;
    268258                                        if (tmp < 64)
    269259                                                writeBits(e, HuffDSCF_1[tmp].Code, HuffDSCF_1[tmp].Length);
     
    274264                                }
    275265                        }
    276                         SCF_Last_R[n] = SCF_Index_R[n][2];
     266                        e->SCF_Last_R[n] = e->SCF_Index_R[n][2];
    277267                }
    278268        }
     
    280270        /*********************************** Samples *********************************/
    281271        for ( n = 0; n < MaxBand; n++ ) {
    282                 int Res = Res_L[n];
    283                 const unsigned int * q = Q[n].L;
     272                int Res = e->Res_L[n];
     273                const unsigned int * q = e->Q[n].L;
    284274                static const unsigned int thres[] = {0, 0, 3, 7, 9, 1, 3, 4, 8};
    285275                static const int HuffQ2_var[5*5*5] =
     
    357347                        }
    358348
    359                         Res = Res_R[n];
    360                 } while (q == Q[n].L && (q = Q[n].R));
     349                        Res = e->Res_R[n];
     350                } while (q == e->Q[n].L && (q = e->Q[n].R));
    361351        }
    362352
Note: See TracChangeset for help on using the changeset viewer.