- int i, cf, numData;
- int *pLevel, *pLoc;
-
- gain_info *pGain = pGb->gBlock;
-
- for (i=0 ; i<=numBands; i++)
- {
- numData = get_bits(gb,3);
- pGain[i].num_gain_data = numData;
- pLevel = pGain[i].levcode;
- pLoc = pGain[i].loccode;
-
- for (cf = 0; cf < numData; cf++){
- pLevel[cf]= get_bits(gb,4);
- pLoc [cf]= get_bits(gb,5);
- if(cf && pLoc[cf] <= pLoc[cf-1])
- return -1;
- }
- }
-
- /* Clear the unused blocks. */
- for (; i<4 ; i++)
- pGain[i].num_gain_data = 0;
-
- return 0;
-}
-
-/**
- * Apply gain parameters and perform the MDCT overlapping part
- *
- * @param pIn input float buffer
- * @param pPrev previous float buffer to perform overlap against
- * @param pOut output float buffer
- * @param pGain1 current band gain info
- * @param pGain2 next band gain info
- */
-
-static void gainCompensateAndOverlap (float *pIn, float *pPrev, float *pOut, gain_info *pGain1, gain_info *pGain2)
-{
- /* gain compensation function */
- float gain1, gain2, gain_inc;
- int cnt, numdata, nsample, startLoc, endLoc;
-
-
- if (pGain2->num_gain_data == 0)
- gain1 = 1.0;
- else
- gain1 = gain_tab1[pGain2->levcode[0]];
-
- if (pGain1->num_gain_data == 0) {
- for (cnt = 0; cnt < 256; cnt++)
- pOut[cnt] = pIn[cnt] * gain1 + pPrev[cnt];
- } else {
- numdata = pGain1->num_gain_data;
- pGain1->loccode[numdata] = 32;
- pGain1->levcode[numdata] = 4;