Loading lib_com/options.h +0 −6 Original line number Diff line number Diff line Loading @@ -201,13 +201,7 @@ #define SPLIT_REND_IVAS_DEC_HT_TR /*CLDFB CODEC SWITCHES -- START*/ #define ENABLE_MS_PRED #define BUG_FIX_03_15_23_INIT_GROUPING #define FORCE_GROUPS_OF_2 #define USE_BIT_COUNT_MERGE_COST #define OPTIMIZE_DPCM_QUANT #define SPLIT_REND_PLC #define ROM_TO_RAM /* switch to convert CQMF decoder tables to RAM */ /*CLDFB CODEC SWITCHES -- END*/ #define SPLIT_REND_CLANG_SAN_FIX Loading lib_rend/ivas_CQMFDecoder.c +11 −47 Original line number Diff line number Diff line Loading @@ -48,9 +48,7 @@ Nations Convention on Contracts on the International Sales of Goods. #include <math.h> #include <stdio.h> #include <stdlib.h> #ifdef ENABLE_MS_PRED #include "ivas_MSPred.h" #endif #include "ivas_PredDecoder.h" #include "ivas_prot_rend.h" #include "wmc_auto.h" Loading Loading @@ -88,10 +86,8 @@ struct CQMF_DECODER uint32_t ( *c_apauiHuffDecTable_RAM[2 * ALLOC_TABLE_SIZE] )[HUFF_DEC_TABLE_SIZE]; uint32_t num_decode_table[2 * ALLOC_TABLE_SIZE]; #endif #ifdef ENABLE_MS_PRED int32_t piMSPredCoefs[MAX_BANDS]; int32_t piLRPhaseDiffs[MAX_BANDS]; #endif #ifdef ENABLE_PMOD_ADJUST int32_t **ppiHiSMRFlags; #endif Loading Loading @@ -374,13 +370,11 @@ CQMFDecoder *CreateCQMFDecoder( const int32_t iSampleRate, psCQMFDecoder->iMSMode = 0; psCQMFDecoder->piMSFlags = (int32_t *) malloc( MAX_BANDS * sizeof( int32_t ) ); #ifdef ENABLE_MS_PRED for ( n = 0; n < MAX_BANDS; n++ ) { psCQMFDecoder->piLRPhaseDiffs[n] = 0; psCQMFDecoder->piMSPredCoefs[n] = 0; } #endif #ifdef ENABLE_PMOD_ADJUST psCQMFDecoder->ppiHiSMRFlags = (int32_t **) malloc( psCQMFDecoder->iChannels * sizeof( int32_t * ) ); Loading Loading @@ -690,24 +684,13 @@ static void InvQuantizeSpectrum( const int32_t iNumGroups, const int32_t *piGroupLengths, const int32_t iNumBands, const int32_t *piBandwidths, int32_t **ppiAlloc, int32_t **ppiQReal, int32_t **ppiQImag, float **ppfReal, float **ppfImag, NoiseGen *psNoiseGen ); // Nullable static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t iMSMode, const int32_t *piMSFlags, #ifdef ENABLE_MS_PRED const int32_t *piLRPhaseDiffs, const int32_t *piMSPredCoefs, #endif float ***pppfReal, float ***pppfImag ); static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t iMSMode, const int32_t *piMSFlags, const int32_t *piLRPhaseDiffs, const int32_t *piMSPredCoefs, float ***pppfReal, float ***pppfImag ); /* Currently only the number of bands in frame */ static int32_t ReadHeaderInformation( int32_t *piNumBands, ivas_split_rend_bits_t *pBits ); static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, int32_t *piMSFlags, #ifdef ENABLE_MS_PRED int32_t *piLRPhaseDiffs, int32_t *piMSPredCoefs, #endif ivas_split_rend_bits_t *pBits ); static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, int32_t *piMSFlags, int32_t *piLRPhaseDiffs, int32_t *piMSPredCoefs, ivas_split_rend_bits_t *pBits ); static int32_t ReadGroupInformation( const int32_t iChannels, const int32_t iNumBlocks, Loading Loading @@ -760,9 +743,7 @@ int32_t DecodeFrame( CQMFDecoder *psCQMFDecoder, iBitsRead += ReadMSInformation( psCQMFDecoder->iNumBands, &psCQMFDecoder->iMSMode, psCQMFDecoder->piMSFlags, #ifdef ENABLE_MS_PRED psCQMFDecoder->piLRPhaseDiffs, psCQMFDecoder->piMSPredCoefs, #endif pBits ); } iBitsRead += ReadPredictors( psCQMFDecoder->psPredictionDecoder, Loading Loading @@ -877,10 +858,8 @@ int32_t DecodeFrame( CQMFDecoder *psCQMFDecoder, InvMSCoding( psCQMFDecoder->iNumBlocks, psCQMFDecoder->iNumBands, psCQMFDecoder->piBandwidths, psCQMFDecoder->iMSMode, (const int32_t *) psCQMFDecoder->piMSFlags, #ifdef ENABLE_MS_PRED (const int32_t *) psCQMFDecoder->piLRPhaseDiffs, (const int32_t *) psCQMFDecoder->piMSPredCoefs, #endif pppfCQMFReal, pppfCQMFImag ); } Loading Loading @@ -1019,24 +998,16 @@ static void InvQuantizeSpectrum( } } static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t iMSMode, const int32_t *piMSFlags, #ifdef ENABLE_MS_PRED const int32_t *piLRPhaseDiffs, const int32_t *piMSPredCoefs, #endif float ***pppfReal, float ***pppfImag ) static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t iMSMode, const int32_t *piMSFlags, const int32_t *piLRPhaseDiffs, const int32_t *piMSPredCoefs, float ***pppfReal, float ***pppfImag ) { if ( iMSMode > 0 ) { int32_t b; int32_t iFBOffset; #ifdef ENABLE_MS_PRED int32_t bms = 0; #if defined SIMPLE_PHASE void( *pFuncPhaseRotateOptions[4] ) = { &rot_zero, &rot_m_pi_2, &rot_pm_pi, &rot_p_pi_2 }; #endif #endif iFBOffset = 0; Loading @@ -1045,7 +1016,7 @@ static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, cons if ( piMSFlags[b] == 1 ) { int32_t n; #if defined ENABLE_MS_PRED && defined SIMPLE_PHASE #if defined SIMPLE_PHASE void ( *pFuncPhaseRotate )( float *, float * ) = pFuncPhaseRotateOptions[piLRPhaseDiffs[bms]]; #endif Loading @@ -1058,7 +1029,7 @@ static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, cons float fLeftImag; float fRightReal; float fRightImag; #ifdef ENABLE_MS_PRED if ( iMSMode == 3 ) { float fPred; Loading @@ -1066,14 +1037,14 @@ static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, cons pppfReal[1][k][iFBOffset] += fPred * pppfReal[0][k][iFBOffset]; pppfImag[1][k][iFBOffset] += fPred * pppfImag[0][k][iFBOffset]; } #endif fLeftReal = ( pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset] ); fLeftImag = ( pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset] ); fRightReal = ( pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset] ); fRightImag = ( pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset] ); #ifdef ENABLE_MS_PRED if ( iMSMode == 3 ) { #ifdef SIMPLE_PHASE Loading @@ -1085,7 +1056,7 @@ static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, cons -c_afRotRealImag[phaseIdx][1] ); #endif } #endif pppfReal[0][k][iFBOffset] = fLeftReal; pppfReal[1][k][iFBOffset] = fRightReal; pppfImag[0][k][iFBOffset] = fLeftImag; Loading @@ -1093,9 +1064,8 @@ static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, cons } iFBOffset++; } #ifdef ENABLE_MS_PRED bms++; #endif } else { Loading @@ -1118,12 +1088,7 @@ static int32_t ReadHeaderInformation( int32_t *piNumBands, return iBitsRead; } static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, int32_t *piMSFlags, #ifdef ENABLE_MS_PRED int32_t *piLRPhaseDiffs, int32_t *piMSPredCoefs, #endif ivas_split_rend_bits_t *pBits ) static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, int32_t *piMSFlags, int32_t *piLRPhaseDiffs, int32_t *piMSPredCoefs, ivas_split_rend_bits_t *pBits ) { int32_t iBitsRead; Loading Loading @@ -1156,7 +1121,7 @@ static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, in iBitsRead += 1; } } #ifdef ENABLE_MS_PRED else if ( *piMSMode == 3 ) { int32_t n; Loading Loading @@ -1247,7 +1212,6 @@ static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, in } #endif } #endif else { printf( "ERROR UNSUPPORTED MS MODE\n" ); Loading lib_rend/ivas_CQMFEncoder.c +17 −71 Original line number Diff line number Diff line Loading @@ -43,9 +43,7 @@ #include "ivas_PerceptualModel.h" #include "ivas_cldfb_codec_bitstream.h" #include "ivas_prot_rend.h" #ifdef ENABLE_MS_PRED #include "ivas_MSPred.h" #endif #ifdef ENABLE_PMOD_ADJUST #include "ton_corr.h" #endif Loading @@ -66,11 +64,10 @@ struct CQMF_ENCODER int32_t iMSMode; int32_t *piMSFlags; #ifdef ENABLE_MS_PRED int32_t piMSPredCoefs[MAX_BANDS]; int32_t piLRPhaseDiffs[MAX_BANDS]; int32_t iAllowSidePred; #endif #ifdef ENABLE_PMOD_ADJUST int32_t **ppiHiSMRFlags; #endif Loading Loading @@ -122,14 +119,14 @@ CQMFEncoder *CreateCQMFEncoder( const int32_t iSampleRate, psCQMFEncoder->iMSMode = 0; psCQMFEncoder->piMSFlags = (int32_t *) malloc( MAX_BANDS * sizeof( int32_t ) ); #ifdef ENABLE_MS_PRED for ( n = 0; n < MAX_BANDS; n++ ) { psCQMFEncoder->piLRPhaseDiffs[n] = 0; psCQMFEncoder->piMSPredCoefs[n] = 0; } psCQMFEncoder->iAllowSidePred = iAllowSidePred; #endif psCQMFEncoder->psRMSEnvelopeGrouping = CreateRMSEnvelopeGrouping( psCQMFEncoder->iNumBlocks ); psCQMFEncoder->iCommonGrouping = 1; // Common grouping always on only impacts stereo Loading Loading @@ -362,11 +359,9 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, float ***pppfReal, float ***pppfImag, int32_t *piMSMode, #ifdef ENABLE_MS_PRED int32_t *piLRPhaseDiff, int32_t *piMSPredCoef, const int32_t iAllowSidePred, #endif int32_t *piMSFlags ); static void RemoveRMSEnvelope( const int32_t iNumBands, Loading Loading @@ -399,11 +394,9 @@ static int32_t WritePmodInformation( const int32_t **ppiHiSMRFlags, static int32_t WriteMSInformation( const int32_t iNumBands, const int32_t iMSMode, const int32_t *piMSFlags, #ifdef ENABLE_MS_PRED const int32_t *piLRPhaseDiffs, const int32_t *piMSPredCoefs, int32_t iNumMSPredBands, #endif ivas_split_rend_bits_t *pBits ); static int32_t WriteGroupInformation( const int32_t iChannels, Loading Loading @@ -470,11 +463,9 @@ int32_t EncodeFrame( CQMFEncoder *psCQMFEncoder, float ***pppfCQMFReal, float ** pppfCQMFReal, pppfCQMFImag, &psCQMFEncoder->iMSMode, #ifdef ENABLE_MS_PRED psCQMFEncoder->piLRPhaseDiffs, psCQMFEncoder->piMSPredCoefs, psCQMFEncoder->iAllowSidePred, #endif psCQMFEncoder->piMSFlags ); if ( psCQMFEncoder->iMSMode > 0 ) Loading @@ -496,10 +487,6 @@ int32_t EncodeFrame( CQMFEncoder *psCQMFEncoder, float ***pppfCQMFReal, float ** psCQMFEncoder->piBandwidths, pppfCQMFReal, pppfCQMFImag, #ifndef USE_BIT_COUNT_MERGE_COST 8.0, 20.0, // Use these to trade off RMS Env bits and quantizer loading #endif &psCQMFEncoder->piNumGroups[0], psCQMFEncoder->ppiGroupLengths[0], psCQMFEncoder->pppiRMSEnvelope ); Loading @@ -520,10 +507,6 @@ int32_t EncodeFrame( CQMFEncoder *psCQMFEncoder, float ***pppfCQMFReal, float ** psCQMFEncoder->piBandwidths, &pppfCQMFReal[n], &pppfCQMFImag[n], #ifndef USE_BIT_COUNT_MERGE_COST 8.0, 20.0, // Use these to trade off RMS Env bits and quantizer loading #endif &psCQMFEncoder->piNumGroups[n], psCQMFEncoder->ppiGroupLengths[n], &psCQMFEncoder->pppiRMSEnvelope[n] ); Loading Loading @@ -553,11 +536,9 @@ int32_t EncodeFrame( CQMFEncoder *psCQMFEncoder, float ***pppfCQMFReal, float ** iBitsWritten += WriteMSInformation( psCQMFEncoder->iNumBands, psCQMFEncoder->iMSMode, (const int32_t *) psCQMFEncoder->piMSFlags, #ifdef ENABLE_MS_PRED (const int32_t *) psCQMFEncoder->piLRPhaseDiffs, (const int32_t *) psCQMFEncoder->piMSPredCoefs, iNumMSBands, #endif pBits ); } Loading Loading @@ -666,17 +647,14 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, float ***pppfReal, float ***pppfImag, int32_t *piMSMode, #ifdef ENABLE_MS_PRED int32_t *piLRPhaseDiffs, int32_t *piMSPredCoefs, const int32_t iAllowSidePred, #endif int32_t *piMSFlags ) { int32_t b; int32_t iFBOffset; int32_t iNumMSBands; #ifdef ENABLE_MS_PRED int32_t piMSPredFlags[MAX_BANDS] = { 0 }; int32_t iNumMSPredBands = 0; float msBitsReduction = 0.0f; Loading @@ -684,11 +662,10 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, int32_t msBits; int32_t msPredBits; float fPred; #if defined ENABLE_MS_PRED && defined SIMPLE_PHASE #if defined SIMPLE_PHASE void( *pFuncPhaseRotateOptions[4] ) = { &rot_zero, &rot_p_pi_2, &rot_pm_pi, &rot_m_pi_2 }; #endif const float one_by_log10_2 = 3.32192809488736f; #endif *piMSMode = 0; iFBOffset = 0; iNumMSBands = 0; Loading @@ -701,7 +678,6 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, float fSideEnergy; float fLRRatio; float fMSRatio; #ifdef ENABLE_MS_PRED float fMSPredRatio; float fMidEnergyPred; float fSideEnergyPred; Loading @@ -710,7 +686,6 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, int32_t iPhase; int32_t iPred; int32_t tabIdx = 0; #endif fLeftEnergy = 0.0f; fRightEnergy = 0.0f; Loading @@ -737,15 +712,13 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, fMidEnergy += ( fMidReal * fMidReal + fMidImag * fMidImag ); fSideEnergy += ( fSideReal * fSideReal + fSideImag * fSideImag ); #ifdef ENABLE_MS_PRED fLRCovReal += ( pppfReal[0][k][iFBOffset] * pppfReal[1][k][iFBOffset] + pppfImag[0][k][iFBOffset] * pppfImag[1][k][iFBOffset] ); fLRCovImag += ( pppfImag[0][k][iFBOffset] * pppfReal[1][k][iFBOffset] - pppfImag[1][k][iFBOffset] * pppfReal[0][k][iFBOffset] ); #endif } iFBOffset++; } #ifdef ENABLE_MS_PRED /* compute L/R phase difference if high coherence */ if ( fLRCovReal * fLRCovReal + fLRCovImag * fLRCovImag > 0.5f * fLeftEnergy * fRightEnergy ) { Loading Loading @@ -779,7 +752,7 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, fSideEnergyPred += ( fPred * fPred * fMidEnergyPred - 2.0f * fPred * 0.25f * ( fLeftEnergy - fRightEnergy ) ); /* -= fPred * fPred * fMidEnergyPred doesn't work because fPred is quantized and does not match MS/MM exactly */ fMSPredRatio = (float) log10f( ( fMidEnergyPred + 1e-12f ) / ( fSideEnergyPred + 1e-12f ) ); #endif fLeftEnergy = log10f( fLeftEnergy + 1e-12f ); fRightEnergy = log10f( fRightEnergy + 1e-12f ); fMidEnergy = log10f( fMidEnergy + 1e-12f ); Loading Loading @@ -812,7 +785,7 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, { piMSFlags[b] = 0; } #ifdef ENABLE_MS_PRED if ( fMSRatio > fLRRatio ) { float maskThresShift_dB_by_10 = ( fMSRatio - fLRRatio ) * (float) c_aiDefaultTheta48[b] / 16.0f; Loading @@ -829,10 +802,8 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, { piMSPredFlags[b] = 0; } #endif } #ifdef ENABLE_MS_PRED msPredBits = CountMSBits( iNumBands, 3, piMSPredFlags, piLRPhaseDiffs, piMSPredCoefs ); msPredBitsReduction = max( msPredBitsReduction - (float) msPredBits, 0.0f ); msBits = CountMSBits( iNumBands, 2, piMSFlags, NULL, NULL ); Loading @@ -857,7 +828,7 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, iNumMSBands = iNumMSPredBands; } else #endif if ( iNumMSBands == iNumBands ) { *piMSMode = 1; Loading @@ -876,7 +847,7 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, iFBOffset = 0; for ( b = 0; b < iNumBands; b++ ) { #if defined ENABLE_MS_PRED && defined SIMPLE_PHASE #if defined SIMPLE_PHASE void ( *pFuncPhaseRotate )( float *, float * ) = pFuncPhaseRotateOptions[piLRPhaseDiffs[b]]; #endif if ( piMSFlags[b] == 1 ) Loading @@ -891,7 +862,7 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, float fMidImag; float fSideReal; float fSideImag; #ifdef ENABLE_MS_PRED if ( *piMSMode == 3 ) { #ifdef SIMPLE_PHASE Loading @@ -903,19 +874,19 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, cplxmult( &pppfReal[1][k][iFBOffset], &pppfImag[1][k][iFBOffset], c_afRotRealImag[phaseIdx][0], c_afRotRealImag[phaseIdx][1] ); #endif } #endif fMidReal = 0.5f * ( pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset] ); fMidImag = 0.5f * ( pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset] ); fSideReal = 0.5f * ( pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset] ); fSideImag = 0.5f * ( pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset] ); #ifdef ENABLE_MS_PRED if ( *piMSMode == 3 ) { fPred = dequantPred( piMSPredCoefs[b] ); fSideReal -= fPred * fMidReal; fSideImag -= fPred * fMidImag; } #endif pppfReal[0][k][iFBOffset] = fMidReal; pppfReal[1][k][iFBOffset] = fSideReal; pppfImag[0][k][iFBOffset] = fMidImag; Loading @@ -930,7 +901,7 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, } } } #ifdef ENABLE_MS_PRED #ifdef DEBUG_WRITE_MS_PRED { static FILE *fid = 0; Loading Loading @@ -972,7 +943,6 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, } #endif } #endif return iNumMSBands; } Loading Loading @@ -1437,33 +1407,26 @@ static int32_t WriteHeaderInformation( const int32_t iNumBands, static int32_t WriteMSInformation( const int32_t iNumBands, const int32_t iMSMode, const int32_t *piMSFlags, #ifdef ENABLE_MS_PRED const int32_t *piLRPhaseDiff, const int32_t *piMSPredCoef, int32_t iNumMSPredBands, #endif ivas_split_rend_bits_t *pBits ) { int32_t iBitsWritten; #ifdef ENABLE_MS_PRED int32_t iMSPredAll = ( iNumMSPredBands == iNumBands ); #ifdef DEBUG_WRITE_MS_PRED int32_t iBitsWrittenTmp = 0; #endif #endif iBitsWritten = 0; ivas_split_rend_bitstream_write_int32( pBits, iMSMode, 2 ); iBitsWritten += 2; #ifdef ENABLE_MS_PRED if ( iMSMode == 3 ) { ivas_split_rend_bitstream_write_int32( pBits, iMSPredAll, 1 ); iBitsWritten += 1; } if ( iMSMode == 2 || ( iMSMode == 3 && !iMSPredAll ) ) #else if ( iMSMode == 2 ) #endif { int32_t n; for ( n = 0; n < iNumBands; n++ ) Loading @@ -1472,7 +1435,7 @@ static int32_t WriteMSInformation( const int32_t iNumBands, iBitsWritten += 1; } } #ifdef ENABLE_MS_PRED #ifdef DEBUG_WRITE_MS_PRED iBitsWrittenTmp = iBitsWritten; #endif Loading Loading @@ -1549,7 +1512,6 @@ static int32_t WriteMSInformation( const int32_t iNumBands, } fprintf( fid, "%f\n", (float) ( ( iBitsWritten - iBitsWrittenTmp ) * ( iMSMode == 3 ) * 50 ) / 1000.0f ); /*kb/s*/ } #endif #endif return iBitsWritten; Loading Loading @@ -1963,7 +1925,7 @@ static int32_t ComputeAllocation( const int32_t iChannels, pppiAlloc[n][k][b] = iAlloc; } } #ifdef OPTIMIZE_DPCM_QUANT QuantizeSpectrumDPCM_Opt( piNumGroups[n], (const int32_t *) ppiGroupLengths[n], iNumBands, Loading @@ -1978,22 +1940,6 @@ static int32_t ComputeAllocation( const int32_t iChannels, ppiPredEnable[n], ppfA1Real[n], ppfA1Imag[n] ); #else QuantizeSpectrumDPCM( piNumGroups[n], (const int32_t *) ppiGroupLengths[n], iNumBands, piBandwidths, pppiAlloc[n], pppfReal[n], pppfImag[n], pppiQReal[n], pppiQImag[n], pppiSignReal[n], pppiSignImag[n], ppiPredEnable[n], ppfA1Real[n], ppfA1Imag[n] ); #endif iBitsUsed += CountCQMFBits( piNumGroups[n], (const int32_t *) ppiGroupLengths[n], Loading lib_rend/ivas_RMSEnvGrouping.c +6 −38 Original line number Diff line number Diff line Loading @@ -77,11 +77,8 @@ RMSEnvelopeGrouping *CreateRMSEnvelopeGrouping( int32_t iNumBlocks ) psRMSEnvelopeGrouping = (RMSEnvelopeGrouping *) malloc( sizeof( RMSEnvelopeGrouping ) ); psRMSEnvelopeGrouping->iNumBlocks = iNumBlocks; #ifdef FORCE_GROUPS_OF_2 psRMSEnvelopeGrouping->iMaxGroups = iNumBlocks >> 1; #else psRMSEnvelopeGrouping->iMaxGroups = iNumBlocks; #endif psRMSEnvelopeGrouping->ppfBandEnergy = (float **) malloc( psRMSEnvelopeGrouping->iNumBlocks * sizeof( float * ) ); psRMSEnvelopeGrouping->ppfBandEnergydB = (float **) malloc( psRMSEnvelopeGrouping->iNumBlocks * sizeof( float * ) ); Loading Loading @@ -811,10 +808,6 @@ void ComputeEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, const int32_t *piBandwidths, // pass in absolute thresh float ***pppfReal, float ***pppfImag, #ifndef USE_BIT_COUNT_MERGE_COST const float fMeanAllowedDiffdB, const float fMaxAllowedDiffdB, #endif int32_t *piNumGroups, int32_t *piGroupLengths, int32_t ***pppiRMSEnvelope ) Loading @@ -834,14 +827,12 @@ void ComputeEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, psRMSEnvelopeGrouping->ppfWeight ); /* Init GMNodes */ #ifdef FORCE_GROUPS_OF_2 psRMSEnvelopeGrouping->psGMNodes[0].iGroupStart = 0; psRMSEnvelopeGrouping->psGMNodes[0].iGroupLength = 2; psRMSEnvelopeGrouping->psGMNodes[0].psNext = NULL; #ifdef BUG_FIX_03_15_23_INIT_GROUPING psRMSEnvelopeGrouping->psGMNodes[0].iGroupRMSEnvelopeCost = -1; psRMSEnvelopeGrouping->psGMNodes[0].fGroupSNRPenalty = -1.0f; #endif for ( n = 1; n < psRMSEnvelopeGrouping->iMaxGroups; n++ ) { psRMSEnvelopeGrouping->psGMNodes[n - 1].psNext = &psRMSEnvelopeGrouping->psGMNodes[n]; Loading @@ -851,32 +842,9 @@ void ComputeEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, psRMSEnvelopeGrouping->psGMNodes[n].fGroupSNRPenalty = -1.0; psRMSEnvelopeGrouping->psGMNodes[n].psNext = NULL; } #else psRMSEnvelopeGrouping->psGMNodes[0].iGroupStart = 0; psRMSEnvelopeGrouping->psGMNodes[0].iGroupLength = 1; psRMSEnvelopeGrouping->psGMNodes[0].psNext = NULL; #ifdef BUG_FIX_03_15_23_INIT_GROUPING psRMSEnvelopeGrouping->psGMNodes[0].iGroupRMSEnvelopeCost = -1; psRMSEnvelopeGrouping->psGMNodes[0].fGroupSNRPenalty = -1.0f; #endif for ( n = 1; n < psRMSEnvelopeGrouping->iMaxGroups; n++ ) { psRMSEnvelopeGrouping->psGMNodes[n - 1].psNext = &psRMSEnvelopeGrouping->psGMNodes[n]; psRMSEnvelopeGrouping->psGMNodes[n].iGroupStart = n; psRMSEnvelopeGrouping->psGMNodes[n].iGroupLength = 1; psRMSEnvelopeGrouping->psGMNodes[n].iGroupRMSEnvelopeCost = -1; psRMSEnvelopeGrouping->psGMNodes[n].fGroupSNRPenalty = -1.0; psRMSEnvelopeGrouping->psGMNodes[n].psNext = NULL; } #endif /* Perform grouping via Greedy Merge */ #ifndef USE_BIT_COUNT_MERGE_COST ComputeGreedyGroups( psRMSEnvelopeGrouping, iChannels, iNumBands, fMeanAllowedDiffdB, fMaxAllowedDiffdB ); #else /*ComputeGreedyGroups2(psRMSEnvelopeGrouping, iChannels, iNumBands, Loading @@ -887,7 +855,7 @@ void ComputeEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, iNumBands, piBandwidths, CQMF_BLOCKS_PER_FRAME ); #endif /* Calc Groups from Merge Results */ *piNumGroups = 0; Loading lib_rend/ivas_RMSEnvGrouping.h +0 −4 Original line number Diff line number Diff line Loading @@ -51,10 +51,6 @@ extern "C" const int32_t *piBandwidths, float ***pppfReal, float ***pppfImag, #ifndef USE_BIT_COUNT_MERGE_COST const float fMeanAllowedDiffdB, const float fMaxAllowedDiffdB, #endif int32_t *piNumGroups, int32_t *piGroupLengths, int32_t ***pppiRMSEnvelope ); Loading Loading
lib_com/options.h +0 −6 Original line number Diff line number Diff line Loading @@ -201,13 +201,7 @@ #define SPLIT_REND_IVAS_DEC_HT_TR /*CLDFB CODEC SWITCHES -- START*/ #define ENABLE_MS_PRED #define BUG_FIX_03_15_23_INIT_GROUPING #define FORCE_GROUPS_OF_2 #define USE_BIT_COUNT_MERGE_COST #define OPTIMIZE_DPCM_QUANT #define SPLIT_REND_PLC #define ROM_TO_RAM /* switch to convert CQMF decoder tables to RAM */ /*CLDFB CODEC SWITCHES -- END*/ #define SPLIT_REND_CLANG_SAN_FIX Loading
lib_rend/ivas_CQMFDecoder.c +11 −47 Original line number Diff line number Diff line Loading @@ -48,9 +48,7 @@ Nations Convention on Contracts on the International Sales of Goods. #include <math.h> #include <stdio.h> #include <stdlib.h> #ifdef ENABLE_MS_PRED #include "ivas_MSPred.h" #endif #include "ivas_PredDecoder.h" #include "ivas_prot_rend.h" #include "wmc_auto.h" Loading Loading @@ -88,10 +86,8 @@ struct CQMF_DECODER uint32_t ( *c_apauiHuffDecTable_RAM[2 * ALLOC_TABLE_SIZE] )[HUFF_DEC_TABLE_SIZE]; uint32_t num_decode_table[2 * ALLOC_TABLE_SIZE]; #endif #ifdef ENABLE_MS_PRED int32_t piMSPredCoefs[MAX_BANDS]; int32_t piLRPhaseDiffs[MAX_BANDS]; #endif #ifdef ENABLE_PMOD_ADJUST int32_t **ppiHiSMRFlags; #endif Loading Loading @@ -374,13 +370,11 @@ CQMFDecoder *CreateCQMFDecoder( const int32_t iSampleRate, psCQMFDecoder->iMSMode = 0; psCQMFDecoder->piMSFlags = (int32_t *) malloc( MAX_BANDS * sizeof( int32_t ) ); #ifdef ENABLE_MS_PRED for ( n = 0; n < MAX_BANDS; n++ ) { psCQMFDecoder->piLRPhaseDiffs[n] = 0; psCQMFDecoder->piMSPredCoefs[n] = 0; } #endif #ifdef ENABLE_PMOD_ADJUST psCQMFDecoder->ppiHiSMRFlags = (int32_t **) malloc( psCQMFDecoder->iChannels * sizeof( int32_t * ) ); Loading Loading @@ -690,24 +684,13 @@ static void InvQuantizeSpectrum( const int32_t iNumGroups, const int32_t *piGroupLengths, const int32_t iNumBands, const int32_t *piBandwidths, int32_t **ppiAlloc, int32_t **ppiQReal, int32_t **ppiQImag, float **ppfReal, float **ppfImag, NoiseGen *psNoiseGen ); // Nullable static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t iMSMode, const int32_t *piMSFlags, #ifdef ENABLE_MS_PRED const int32_t *piLRPhaseDiffs, const int32_t *piMSPredCoefs, #endif float ***pppfReal, float ***pppfImag ); static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t iMSMode, const int32_t *piMSFlags, const int32_t *piLRPhaseDiffs, const int32_t *piMSPredCoefs, float ***pppfReal, float ***pppfImag ); /* Currently only the number of bands in frame */ static int32_t ReadHeaderInformation( int32_t *piNumBands, ivas_split_rend_bits_t *pBits ); static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, int32_t *piMSFlags, #ifdef ENABLE_MS_PRED int32_t *piLRPhaseDiffs, int32_t *piMSPredCoefs, #endif ivas_split_rend_bits_t *pBits ); static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, int32_t *piMSFlags, int32_t *piLRPhaseDiffs, int32_t *piMSPredCoefs, ivas_split_rend_bits_t *pBits ); static int32_t ReadGroupInformation( const int32_t iChannels, const int32_t iNumBlocks, Loading Loading @@ -760,9 +743,7 @@ int32_t DecodeFrame( CQMFDecoder *psCQMFDecoder, iBitsRead += ReadMSInformation( psCQMFDecoder->iNumBands, &psCQMFDecoder->iMSMode, psCQMFDecoder->piMSFlags, #ifdef ENABLE_MS_PRED psCQMFDecoder->piLRPhaseDiffs, psCQMFDecoder->piMSPredCoefs, #endif pBits ); } iBitsRead += ReadPredictors( psCQMFDecoder->psPredictionDecoder, Loading Loading @@ -877,10 +858,8 @@ int32_t DecodeFrame( CQMFDecoder *psCQMFDecoder, InvMSCoding( psCQMFDecoder->iNumBlocks, psCQMFDecoder->iNumBands, psCQMFDecoder->piBandwidths, psCQMFDecoder->iMSMode, (const int32_t *) psCQMFDecoder->piMSFlags, #ifdef ENABLE_MS_PRED (const int32_t *) psCQMFDecoder->piLRPhaseDiffs, (const int32_t *) psCQMFDecoder->piMSPredCoefs, #endif pppfCQMFReal, pppfCQMFImag ); } Loading Loading @@ -1019,24 +998,16 @@ static void InvQuantizeSpectrum( } } static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t iMSMode, const int32_t *piMSFlags, #ifdef ENABLE_MS_PRED const int32_t *piLRPhaseDiffs, const int32_t *piMSPredCoefs, #endif float ***pppfReal, float ***pppfImag ) static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, const int32_t *piBandwidths, const int32_t iMSMode, const int32_t *piMSFlags, const int32_t *piLRPhaseDiffs, const int32_t *piMSPredCoefs, float ***pppfReal, float ***pppfImag ) { if ( iMSMode > 0 ) { int32_t b; int32_t iFBOffset; #ifdef ENABLE_MS_PRED int32_t bms = 0; #if defined SIMPLE_PHASE void( *pFuncPhaseRotateOptions[4] ) = { &rot_zero, &rot_m_pi_2, &rot_pm_pi, &rot_p_pi_2 }; #endif #endif iFBOffset = 0; Loading @@ -1045,7 +1016,7 @@ static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, cons if ( piMSFlags[b] == 1 ) { int32_t n; #if defined ENABLE_MS_PRED && defined SIMPLE_PHASE #if defined SIMPLE_PHASE void ( *pFuncPhaseRotate )( float *, float * ) = pFuncPhaseRotateOptions[piLRPhaseDiffs[bms]]; #endif Loading @@ -1058,7 +1029,7 @@ static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, cons float fLeftImag; float fRightReal; float fRightImag; #ifdef ENABLE_MS_PRED if ( iMSMode == 3 ) { float fPred; Loading @@ -1066,14 +1037,14 @@ static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, cons pppfReal[1][k][iFBOffset] += fPred * pppfReal[0][k][iFBOffset]; pppfImag[1][k][iFBOffset] += fPred * pppfImag[0][k][iFBOffset]; } #endif fLeftReal = ( pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset] ); fLeftImag = ( pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset] ); fRightReal = ( pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset] ); fRightImag = ( pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset] ); #ifdef ENABLE_MS_PRED if ( iMSMode == 3 ) { #ifdef SIMPLE_PHASE Loading @@ -1085,7 +1056,7 @@ static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, cons -c_afRotRealImag[phaseIdx][1] ); #endif } #endif pppfReal[0][k][iFBOffset] = fLeftReal; pppfReal[1][k][iFBOffset] = fRightReal; pppfImag[0][k][iFBOffset] = fLeftImag; Loading @@ -1093,9 +1064,8 @@ static void InvMSCoding( const int32_t iNumBlocks, const int32_t iNumBands, cons } iFBOffset++; } #ifdef ENABLE_MS_PRED bms++; #endif } else { Loading @@ -1118,12 +1088,7 @@ static int32_t ReadHeaderInformation( int32_t *piNumBands, return iBitsRead; } static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, int32_t *piMSFlags, #ifdef ENABLE_MS_PRED int32_t *piLRPhaseDiffs, int32_t *piMSPredCoefs, #endif ivas_split_rend_bits_t *pBits ) static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, int32_t *piMSFlags, int32_t *piLRPhaseDiffs, int32_t *piMSPredCoefs, ivas_split_rend_bits_t *pBits ) { int32_t iBitsRead; Loading Loading @@ -1156,7 +1121,7 @@ static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, in iBitsRead += 1; } } #ifdef ENABLE_MS_PRED else if ( *piMSMode == 3 ) { int32_t n; Loading Loading @@ -1247,7 +1212,6 @@ static int32_t ReadMSInformation( const int32_t iNumBands, int32_t *piMSMode, in } #endif } #endif else { printf( "ERROR UNSUPPORTED MS MODE\n" ); Loading
lib_rend/ivas_CQMFEncoder.c +17 −71 Original line number Diff line number Diff line Loading @@ -43,9 +43,7 @@ #include "ivas_PerceptualModel.h" #include "ivas_cldfb_codec_bitstream.h" #include "ivas_prot_rend.h" #ifdef ENABLE_MS_PRED #include "ivas_MSPred.h" #endif #ifdef ENABLE_PMOD_ADJUST #include "ton_corr.h" #endif Loading @@ -66,11 +64,10 @@ struct CQMF_ENCODER int32_t iMSMode; int32_t *piMSFlags; #ifdef ENABLE_MS_PRED int32_t piMSPredCoefs[MAX_BANDS]; int32_t piLRPhaseDiffs[MAX_BANDS]; int32_t iAllowSidePred; #endif #ifdef ENABLE_PMOD_ADJUST int32_t **ppiHiSMRFlags; #endif Loading Loading @@ -122,14 +119,14 @@ CQMFEncoder *CreateCQMFEncoder( const int32_t iSampleRate, psCQMFEncoder->iMSMode = 0; psCQMFEncoder->piMSFlags = (int32_t *) malloc( MAX_BANDS * sizeof( int32_t ) ); #ifdef ENABLE_MS_PRED for ( n = 0; n < MAX_BANDS; n++ ) { psCQMFEncoder->piLRPhaseDiffs[n] = 0; psCQMFEncoder->piMSPredCoefs[n] = 0; } psCQMFEncoder->iAllowSidePred = iAllowSidePred; #endif psCQMFEncoder->psRMSEnvelopeGrouping = CreateRMSEnvelopeGrouping( psCQMFEncoder->iNumBlocks ); psCQMFEncoder->iCommonGrouping = 1; // Common grouping always on only impacts stereo Loading Loading @@ -362,11 +359,9 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, float ***pppfReal, float ***pppfImag, int32_t *piMSMode, #ifdef ENABLE_MS_PRED int32_t *piLRPhaseDiff, int32_t *piMSPredCoef, const int32_t iAllowSidePred, #endif int32_t *piMSFlags ); static void RemoveRMSEnvelope( const int32_t iNumBands, Loading Loading @@ -399,11 +394,9 @@ static int32_t WritePmodInformation( const int32_t **ppiHiSMRFlags, static int32_t WriteMSInformation( const int32_t iNumBands, const int32_t iMSMode, const int32_t *piMSFlags, #ifdef ENABLE_MS_PRED const int32_t *piLRPhaseDiffs, const int32_t *piMSPredCoefs, int32_t iNumMSPredBands, #endif ivas_split_rend_bits_t *pBits ); static int32_t WriteGroupInformation( const int32_t iChannels, Loading Loading @@ -470,11 +463,9 @@ int32_t EncodeFrame( CQMFEncoder *psCQMFEncoder, float ***pppfCQMFReal, float ** pppfCQMFReal, pppfCQMFImag, &psCQMFEncoder->iMSMode, #ifdef ENABLE_MS_PRED psCQMFEncoder->piLRPhaseDiffs, psCQMFEncoder->piMSPredCoefs, psCQMFEncoder->iAllowSidePred, #endif psCQMFEncoder->piMSFlags ); if ( psCQMFEncoder->iMSMode > 0 ) Loading @@ -496,10 +487,6 @@ int32_t EncodeFrame( CQMFEncoder *psCQMFEncoder, float ***pppfCQMFReal, float ** psCQMFEncoder->piBandwidths, pppfCQMFReal, pppfCQMFImag, #ifndef USE_BIT_COUNT_MERGE_COST 8.0, 20.0, // Use these to trade off RMS Env bits and quantizer loading #endif &psCQMFEncoder->piNumGroups[0], psCQMFEncoder->ppiGroupLengths[0], psCQMFEncoder->pppiRMSEnvelope ); Loading @@ -520,10 +507,6 @@ int32_t EncodeFrame( CQMFEncoder *psCQMFEncoder, float ***pppfCQMFReal, float ** psCQMFEncoder->piBandwidths, &pppfCQMFReal[n], &pppfCQMFImag[n], #ifndef USE_BIT_COUNT_MERGE_COST 8.0, 20.0, // Use these to trade off RMS Env bits and quantizer loading #endif &psCQMFEncoder->piNumGroups[n], psCQMFEncoder->ppiGroupLengths[n], &psCQMFEncoder->pppiRMSEnvelope[n] ); Loading Loading @@ -553,11 +536,9 @@ int32_t EncodeFrame( CQMFEncoder *psCQMFEncoder, float ***pppfCQMFReal, float ** iBitsWritten += WriteMSInformation( psCQMFEncoder->iNumBands, psCQMFEncoder->iMSMode, (const int32_t *) psCQMFEncoder->piMSFlags, #ifdef ENABLE_MS_PRED (const int32_t *) psCQMFEncoder->piLRPhaseDiffs, (const int32_t *) psCQMFEncoder->piMSPredCoefs, iNumMSBands, #endif pBits ); } Loading Loading @@ -666,17 +647,14 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, float ***pppfReal, float ***pppfImag, int32_t *piMSMode, #ifdef ENABLE_MS_PRED int32_t *piLRPhaseDiffs, int32_t *piMSPredCoefs, const int32_t iAllowSidePred, #endif int32_t *piMSFlags ) { int32_t b; int32_t iFBOffset; int32_t iNumMSBands; #ifdef ENABLE_MS_PRED int32_t piMSPredFlags[MAX_BANDS] = { 0 }; int32_t iNumMSPredBands = 0; float msBitsReduction = 0.0f; Loading @@ -684,11 +662,10 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, int32_t msBits; int32_t msPredBits; float fPred; #if defined ENABLE_MS_PRED && defined SIMPLE_PHASE #if defined SIMPLE_PHASE void( *pFuncPhaseRotateOptions[4] ) = { &rot_zero, &rot_p_pi_2, &rot_pm_pi, &rot_m_pi_2 }; #endif const float one_by_log10_2 = 3.32192809488736f; #endif *piMSMode = 0; iFBOffset = 0; iNumMSBands = 0; Loading @@ -701,7 +678,6 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, float fSideEnergy; float fLRRatio; float fMSRatio; #ifdef ENABLE_MS_PRED float fMSPredRatio; float fMidEnergyPred; float fSideEnergyPred; Loading @@ -710,7 +686,6 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, int32_t iPhase; int32_t iPred; int32_t tabIdx = 0; #endif fLeftEnergy = 0.0f; fRightEnergy = 0.0f; Loading @@ -737,15 +712,13 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, fMidEnergy += ( fMidReal * fMidReal + fMidImag * fMidImag ); fSideEnergy += ( fSideReal * fSideReal + fSideImag * fSideImag ); #ifdef ENABLE_MS_PRED fLRCovReal += ( pppfReal[0][k][iFBOffset] * pppfReal[1][k][iFBOffset] + pppfImag[0][k][iFBOffset] * pppfImag[1][k][iFBOffset] ); fLRCovImag += ( pppfImag[0][k][iFBOffset] * pppfReal[1][k][iFBOffset] - pppfImag[1][k][iFBOffset] * pppfReal[0][k][iFBOffset] ); #endif } iFBOffset++; } #ifdef ENABLE_MS_PRED /* compute L/R phase difference if high coherence */ if ( fLRCovReal * fLRCovReal + fLRCovImag * fLRCovImag > 0.5f * fLeftEnergy * fRightEnergy ) { Loading Loading @@ -779,7 +752,7 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, fSideEnergyPred += ( fPred * fPred * fMidEnergyPred - 2.0f * fPred * 0.25f * ( fLeftEnergy - fRightEnergy ) ); /* -= fPred * fPred * fMidEnergyPred doesn't work because fPred is quantized and does not match MS/MM exactly */ fMSPredRatio = (float) log10f( ( fMidEnergyPred + 1e-12f ) / ( fSideEnergyPred + 1e-12f ) ); #endif fLeftEnergy = log10f( fLeftEnergy + 1e-12f ); fRightEnergy = log10f( fRightEnergy + 1e-12f ); fMidEnergy = log10f( fMidEnergy + 1e-12f ); Loading Loading @@ -812,7 +785,7 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, { piMSFlags[b] = 0; } #ifdef ENABLE_MS_PRED if ( fMSRatio > fLRRatio ) { float maskThresShift_dB_by_10 = ( fMSRatio - fLRRatio ) * (float) c_aiDefaultTheta48[b] / 16.0f; Loading @@ -829,10 +802,8 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, { piMSPredFlags[b] = 0; } #endif } #ifdef ENABLE_MS_PRED msPredBits = CountMSBits( iNumBands, 3, piMSPredFlags, piLRPhaseDiffs, piMSPredCoefs ); msPredBitsReduction = max( msPredBitsReduction - (float) msPredBits, 0.0f ); msBits = CountMSBits( iNumBands, 2, piMSFlags, NULL, NULL ); Loading @@ -857,7 +828,7 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, iNumMSBands = iNumMSPredBands; } else #endif if ( iNumMSBands == iNumBands ) { *piMSMode = 1; Loading @@ -876,7 +847,7 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, iFBOffset = 0; for ( b = 0; b < iNumBands; b++ ) { #if defined ENABLE_MS_PRED && defined SIMPLE_PHASE #if defined SIMPLE_PHASE void ( *pFuncPhaseRotate )( float *, float * ) = pFuncPhaseRotateOptions[piLRPhaseDiffs[b]]; #endif if ( piMSFlags[b] == 1 ) Loading @@ -891,7 +862,7 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, float fMidImag; float fSideReal; float fSideImag; #ifdef ENABLE_MS_PRED if ( *piMSMode == 3 ) { #ifdef SIMPLE_PHASE Loading @@ -903,19 +874,19 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, cplxmult( &pppfReal[1][k][iFBOffset], &pppfImag[1][k][iFBOffset], c_afRotRealImag[phaseIdx][0], c_afRotRealImag[phaseIdx][1] ); #endif } #endif fMidReal = 0.5f * ( pppfReal[0][k][iFBOffset] + pppfReal[1][k][iFBOffset] ); fMidImag = 0.5f * ( pppfImag[0][k][iFBOffset] + pppfImag[1][k][iFBOffset] ); fSideReal = 0.5f * ( pppfReal[0][k][iFBOffset] - pppfReal[1][k][iFBOffset] ); fSideImag = 0.5f * ( pppfImag[0][k][iFBOffset] - pppfImag[1][k][iFBOffset] ); #ifdef ENABLE_MS_PRED if ( *piMSMode == 3 ) { fPred = dequantPred( piMSPredCoefs[b] ); fSideReal -= fPred * fMidReal; fSideImag -= fPred * fMidImag; } #endif pppfReal[0][k][iFBOffset] = fMidReal; pppfReal[1][k][iFBOffset] = fSideReal; pppfImag[0][k][iFBOffset] = fMidImag; Loading @@ -930,7 +901,7 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, } } } #ifdef ENABLE_MS_PRED #ifdef DEBUG_WRITE_MS_PRED { static FILE *fid = 0; Loading Loading @@ -972,7 +943,6 @@ static int32_t MSModeCalculation( const int32_t iNumBlocks, } #endif } #endif return iNumMSBands; } Loading Loading @@ -1437,33 +1407,26 @@ static int32_t WriteHeaderInformation( const int32_t iNumBands, static int32_t WriteMSInformation( const int32_t iNumBands, const int32_t iMSMode, const int32_t *piMSFlags, #ifdef ENABLE_MS_PRED const int32_t *piLRPhaseDiff, const int32_t *piMSPredCoef, int32_t iNumMSPredBands, #endif ivas_split_rend_bits_t *pBits ) { int32_t iBitsWritten; #ifdef ENABLE_MS_PRED int32_t iMSPredAll = ( iNumMSPredBands == iNumBands ); #ifdef DEBUG_WRITE_MS_PRED int32_t iBitsWrittenTmp = 0; #endif #endif iBitsWritten = 0; ivas_split_rend_bitstream_write_int32( pBits, iMSMode, 2 ); iBitsWritten += 2; #ifdef ENABLE_MS_PRED if ( iMSMode == 3 ) { ivas_split_rend_bitstream_write_int32( pBits, iMSPredAll, 1 ); iBitsWritten += 1; } if ( iMSMode == 2 || ( iMSMode == 3 && !iMSPredAll ) ) #else if ( iMSMode == 2 ) #endif { int32_t n; for ( n = 0; n < iNumBands; n++ ) Loading @@ -1472,7 +1435,7 @@ static int32_t WriteMSInformation( const int32_t iNumBands, iBitsWritten += 1; } } #ifdef ENABLE_MS_PRED #ifdef DEBUG_WRITE_MS_PRED iBitsWrittenTmp = iBitsWritten; #endif Loading Loading @@ -1549,7 +1512,6 @@ static int32_t WriteMSInformation( const int32_t iNumBands, } fprintf( fid, "%f\n", (float) ( ( iBitsWritten - iBitsWrittenTmp ) * ( iMSMode == 3 ) * 50 ) / 1000.0f ); /*kb/s*/ } #endif #endif return iBitsWritten; Loading Loading @@ -1963,7 +1925,7 @@ static int32_t ComputeAllocation( const int32_t iChannels, pppiAlloc[n][k][b] = iAlloc; } } #ifdef OPTIMIZE_DPCM_QUANT QuantizeSpectrumDPCM_Opt( piNumGroups[n], (const int32_t *) ppiGroupLengths[n], iNumBands, Loading @@ -1978,22 +1940,6 @@ static int32_t ComputeAllocation( const int32_t iChannels, ppiPredEnable[n], ppfA1Real[n], ppfA1Imag[n] ); #else QuantizeSpectrumDPCM( piNumGroups[n], (const int32_t *) ppiGroupLengths[n], iNumBands, piBandwidths, pppiAlloc[n], pppfReal[n], pppfImag[n], pppiQReal[n], pppiQImag[n], pppiSignReal[n], pppiSignImag[n], ppiPredEnable[n], ppfA1Real[n], ppfA1Imag[n] ); #endif iBitsUsed += CountCQMFBits( piNumGroups[n], (const int32_t *) ppiGroupLengths[n], Loading
lib_rend/ivas_RMSEnvGrouping.c +6 −38 Original line number Diff line number Diff line Loading @@ -77,11 +77,8 @@ RMSEnvelopeGrouping *CreateRMSEnvelopeGrouping( int32_t iNumBlocks ) psRMSEnvelopeGrouping = (RMSEnvelopeGrouping *) malloc( sizeof( RMSEnvelopeGrouping ) ); psRMSEnvelopeGrouping->iNumBlocks = iNumBlocks; #ifdef FORCE_GROUPS_OF_2 psRMSEnvelopeGrouping->iMaxGroups = iNumBlocks >> 1; #else psRMSEnvelopeGrouping->iMaxGroups = iNumBlocks; #endif psRMSEnvelopeGrouping->ppfBandEnergy = (float **) malloc( psRMSEnvelopeGrouping->iNumBlocks * sizeof( float * ) ); psRMSEnvelopeGrouping->ppfBandEnergydB = (float **) malloc( psRMSEnvelopeGrouping->iNumBlocks * sizeof( float * ) ); Loading Loading @@ -811,10 +808,6 @@ void ComputeEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, const int32_t *piBandwidths, // pass in absolute thresh float ***pppfReal, float ***pppfImag, #ifndef USE_BIT_COUNT_MERGE_COST const float fMeanAllowedDiffdB, const float fMaxAllowedDiffdB, #endif int32_t *piNumGroups, int32_t *piGroupLengths, int32_t ***pppiRMSEnvelope ) Loading @@ -834,14 +827,12 @@ void ComputeEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, psRMSEnvelopeGrouping->ppfWeight ); /* Init GMNodes */ #ifdef FORCE_GROUPS_OF_2 psRMSEnvelopeGrouping->psGMNodes[0].iGroupStart = 0; psRMSEnvelopeGrouping->psGMNodes[0].iGroupLength = 2; psRMSEnvelopeGrouping->psGMNodes[0].psNext = NULL; #ifdef BUG_FIX_03_15_23_INIT_GROUPING psRMSEnvelopeGrouping->psGMNodes[0].iGroupRMSEnvelopeCost = -1; psRMSEnvelopeGrouping->psGMNodes[0].fGroupSNRPenalty = -1.0f; #endif for ( n = 1; n < psRMSEnvelopeGrouping->iMaxGroups; n++ ) { psRMSEnvelopeGrouping->psGMNodes[n - 1].psNext = &psRMSEnvelopeGrouping->psGMNodes[n]; Loading @@ -851,32 +842,9 @@ void ComputeEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, psRMSEnvelopeGrouping->psGMNodes[n].fGroupSNRPenalty = -1.0; psRMSEnvelopeGrouping->psGMNodes[n].psNext = NULL; } #else psRMSEnvelopeGrouping->psGMNodes[0].iGroupStart = 0; psRMSEnvelopeGrouping->psGMNodes[0].iGroupLength = 1; psRMSEnvelopeGrouping->psGMNodes[0].psNext = NULL; #ifdef BUG_FIX_03_15_23_INIT_GROUPING psRMSEnvelopeGrouping->psGMNodes[0].iGroupRMSEnvelopeCost = -1; psRMSEnvelopeGrouping->psGMNodes[0].fGroupSNRPenalty = -1.0f; #endif for ( n = 1; n < psRMSEnvelopeGrouping->iMaxGroups; n++ ) { psRMSEnvelopeGrouping->psGMNodes[n - 1].psNext = &psRMSEnvelopeGrouping->psGMNodes[n]; psRMSEnvelopeGrouping->psGMNodes[n].iGroupStart = n; psRMSEnvelopeGrouping->psGMNodes[n].iGroupLength = 1; psRMSEnvelopeGrouping->psGMNodes[n].iGroupRMSEnvelopeCost = -1; psRMSEnvelopeGrouping->psGMNodes[n].fGroupSNRPenalty = -1.0; psRMSEnvelopeGrouping->psGMNodes[n].psNext = NULL; } #endif /* Perform grouping via Greedy Merge */ #ifndef USE_BIT_COUNT_MERGE_COST ComputeGreedyGroups( psRMSEnvelopeGrouping, iChannels, iNumBands, fMeanAllowedDiffdB, fMaxAllowedDiffdB ); #else /*ComputeGreedyGroups2(psRMSEnvelopeGrouping, iChannels, iNumBands, Loading @@ -887,7 +855,7 @@ void ComputeEnvelopeGrouping( RMSEnvelopeGrouping *psRMSEnvelopeGrouping, iNumBands, piBandwidths, CQMF_BLOCKS_PER_FRAME ); #endif /* Calc Groups from Merge Results */ *piNumGroups = 0; Loading
lib_rend/ivas_RMSEnvGrouping.h +0 −4 Original line number Diff line number Diff line Loading @@ -51,10 +51,6 @@ extern "C" const int32_t *piBandwidths, float ***pppfReal, float ***pppfImag, #ifndef USE_BIT_COUNT_MERGE_COST const float fMeanAllowedDiffdB, const float fMaxAllowedDiffdB, #endif int32_t *piNumGroups, int32_t *piGroupLengths, int32_t ***pppiRMSEnvelope ); Loading