/***************************************************************************** description: encodes sbr SCE information returns: number of bits written *****************************************************************************/ static int encodeSbrSingleChannelElement (HANDLE_SBR_ENV_DATA sbrEnvData, HANDLE_BIT_BUF hBitStream, int data_extra) { int payloadBits = 0; /* counting previous operation */ payloadBits += WriteBits (hBitStream, 0, 1); /* no reserved bits */ payloadBits += encodeSbrGrid (sbrEnvData, hBitStream); payloadBits += encodeSbrDtdf (sbrEnvData, hBitStream); { int i; /* sbrEnvData->sbr_invf_mode_vec[] */ for (i = 0; i < sbrEnvData->noOfnoisebands; i++) { payloadBits += WriteBits (hBitStream, sbrEnvData->sbr_invf_mode_vec[i], SI_SBR_INVF_MODE_BITS); } } payloadBits += writeEnvelopeData (sbrEnvData, hBitStream, 0); payloadBits += writeNoiseLevelData (sbrEnvData, hBitStream, 0); payloadBits += writeSyntheticCodingData (sbrEnvData,hBitStream); return payloadBits; }
/***************************************************************************** functionname: encodeSbrSingleChannelElement description: encodes sbr SCE information returns: number of bits written input: output: *****************************************************************************/ static INT encodeSbrSingleChannelElement( HANDLE_SBR_ENV_DATA sbrEnvData, HANDLE_FDK_BITSTREAM hBitStream, HANDLE_PARAMETRIC_STEREO hParametricStereo, const UINT sbrSyntaxFlags) { INT i, payloadBits = 0; payloadBits += FDKwriteBits(hBitStream, 0, SI_SBR_DATA_EXTRA_BITS); /* no reserved bits */ if (sbrEnvData->ldGrid) { if (sbrEnvData->hSbrBSGrid->frameClass != FIXFIXonly) { /* encode normal SbrGrid */ payloadBits += encodeSbrGrid(sbrEnvData, hBitStream); } else { /* use FIXFIXonly frame Grid */ payloadBits += encodeLowDelaySbrGrid( sbrEnvData, hBitStream, encodeFreqs(LD_TRANSMISSION), sbrSyntaxFlags); } } else { if (sbrSyntaxFlags & SBR_SYNTAX_SCALABLE) { payloadBits += FDKwriteBits(hBitStream, 1, SI_SBR_COUPLING_BITS); } payloadBits += encodeSbrGrid(sbrEnvData, hBitStream); } payloadBits += encodeSbrDtdf(sbrEnvData, hBitStream); for (i = 0; i < sbrEnvData->noOfnoisebands; i++) { payloadBits += FDKwriteBits(hBitStream, sbrEnvData->sbr_invf_mode_vec[i], SI_SBR_INVF_MODE_BITS); } payloadBits += writeEnvelopeData(sbrEnvData, hBitStream, 0); payloadBits += writeNoiseLevelData(sbrEnvData, hBitStream, 0); payloadBits += writeSyntheticCodingData(sbrEnvData, hBitStream); payloadBits += encodeExtendedData(hParametricStereo, hBitStream); return payloadBits; }
/***************************************************************************** functionname: encodeSbrChannelPairElement description: encodes sbr CPE information returns: input: output: *****************************************************************************/ static INT encodeSbrChannelPairElement( HANDLE_SBR_ENV_DATA sbrEnvDataLeft, HANDLE_SBR_ENV_DATA sbrEnvDataRight, HANDLE_PARAMETRIC_STEREO hParametricStereo, HANDLE_FDK_BITSTREAM hBitStream, const INT coupling, const UINT sbrSyntaxFlags) { INT payloadBits = 0; INT i = 0; payloadBits += FDKwriteBits(hBitStream, 0, SI_SBR_DATA_EXTRA_BITS); /* no reserved bits */ payloadBits += FDKwriteBits(hBitStream, coupling, SI_SBR_COUPLING_BITS); if (coupling) { if (sbrEnvDataLeft->ldGrid) { if (sbrEnvDataLeft->hSbrBSGrid->frameClass != FIXFIXonly) { /* normal SbrGrid */ payloadBits += encodeSbrGrid(sbrEnvDataLeft, hBitStream); } else { /* FIXFIXonly frame Grid */ payloadBits += encodeLowDelaySbrGrid(sbrEnvDataLeft, hBitStream, encodeFreqs(LD_TRANSMISSION), sbrSyntaxFlags); } } else payloadBits += encodeSbrGrid(sbrEnvDataLeft, hBitStream); payloadBits += encodeSbrDtdf(sbrEnvDataLeft, hBitStream); payloadBits += encodeSbrDtdf(sbrEnvDataRight, hBitStream); for (i = 0; i < sbrEnvDataLeft->noOfnoisebands; i++) { payloadBits += FDKwriteBits(hBitStream, sbrEnvDataLeft->sbr_invf_mode_vec[i], SI_SBR_INVF_MODE_BITS); } payloadBits += writeEnvelopeData(sbrEnvDataLeft, hBitStream, 1); payloadBits += writeNoiseLevelData(sbrEnvDataLeft, hBitStream, 1); payloadBits += writeEnvelopeData(sbrEnvDataRight, hBitStream, 1); payloadBits += writeNoiseLevelData(sbrEnvDataRight, hBitStream, 1); payloadBits += writeSyntheticCodingData(sbrEnvDataLeft, hBitStream); payloadBits += writeSyntheticCodingData(sbrEnvDataRight, hBitStream); } else { /* no coupling */ FDK_ASSERT(sbrEnvDataLeft->ldGrid == sbrEnvDataRight->ldGrid); if (sbrEnvDataLeft->ldGrid || sbrEnvDataRight->ldGrid) { /* sbrEnvDataLeft (left channel) */ if (sbrEnvDataLeft->hSbrBSGrid->frameClass != FIXFIXonly) { /* no FIXFIXonly Frame so we dont need encodeLowDelaySbrGrid */ /* normal SbrGrid */ payloadBits += encodeSbrGrid(sbrEnvDataLeft, hBitStream); } else { /* FIXFIXonly frame Grid */ payloadBits += encodeLowDelaySbrGrid(sbrEnvDataLeft, hBitStream, encodeFreqs(LD_TRANSMISSION), sbrSyntaxFlags); } /* sbrEnvDataRight (right channel) */ if (sbrEnvDataRight->hSbrBSGrid->frameClass != FIXFIXonly) { /* no FIXFIXonly Frame so we dont need encodeLowDelaySbrGrid */ /* normal SbrGrid */ payloadBits += encodeSbrGrid(sbrEnvDataRight, hBitStream); } else { /* FIXFIXonly frame Grid */ payloadBits += encodeLowDelaySbrGrid(sbrEnvDataRight, hBitStream, encodeFreqs(LD_TRANSMISSION), sbrSyntaxFlags); } } else { payloadBits += encodeSbrGrid(sbrEnvDataLeft, hBitStream); payloadBits += encodeSbrGrid(sbrEnvDataRight, hBitStream); } payloadBits += encodeSbrDtdf(sbrEnvDataLeft, hBitStream); payloadBits += encodeSbrDtdf(sbrEnvDataRight, hBitStream); for (i = 0; i < sbrEnvDataLeft->noOfnoisebands; i++) { payloadBits += FDKwriteBits(hBitStream, sbrEnvDataLeft->sbr_invf_mode_vec[i], SI_SBR_INVF_MODE_BITS); } for (i = 0; i < sbrEnvDataRight->noOfnoisebands; i++) { payloadBits += FDKwriteBits(hBitStream, sbrEnvDataRight->sbr_invf_mode_vec[i], SI_SBR_INVF_MODE_BITS); } payloadBits += writeEnvelopeData(sbrEnvDataLeft, hBitStream, 0); payloadBits += writeEnvelopeData(sbrEnvDataRight, hBitStream, 0); payloadBits += writeNoiseLevelData(sbrEnvDataLeft, hBitStream, 0); payloadBits += writeNoiseLevelData(sbrEnvDataRight, hBitStream, 0); payloadBits += writeSyntheticCodingData(sbrEnvDataLeft, hBitStream); payloadBits += writeSyntheticCodingData(sbrEnvDataRight, hBitStream); } /* coupling */ payloadBits += encodeExtendedData(hParametricStereo, hBitStream); return payloadBits; }
/***************************************************************************** description: encodes sbr CPE information *****************************************************************************/ static int encodeSbrChannelPairElement (HANDLE_SBR_ENV_DATA sbrEnvDataLeft, HANDLE_SBR_ENV_DATA sbrEnvDataRight, HANDLE_BIT_BUF hBitStream, int data_extra, int coupling) { int payloadBits = 0; int i = 0; /* counting previous operation */ payloadBits += WriteBits (hBitStream, 0, 1); /* no reserved bits */ payloadBits += WriteBits (hBitStream, coupling, SI_SBR_COUPLING_BITS); if (coupling) { payloadBits += encodeSbrGrid (sbrEnvDataLeft, hBitStream); payloadBits += encodeSbrDtdf (sbrEnvDataLeft, hBitStream); payloadBits += encodeSbrDtdf (sbrEnvDataRight, hBitStream); /* sbrEnvDataLeft->sbr_invf_mode_vec[] */ for (i = 0; i < sbrEnvDataLeft->noOfnoisebands; i++) { payloadBits += WriteBits (hBitStream, sbrEnvDataLeft->sbr_invf_mode_vec[i], SI_SBR_INVF_MODE_BITS); } payloadBits += writeEnvelopeData (sbrEnvDataLeft, hBitStream,1); payloadBits += writeNoiseLevelData (sbrEnvDataLeft, hBitStream,1); payloadBits += writeEnvelopeData (sbrEnvDataRight, hBitStream,1); payloadBits += writeNoiseLevelData (sbrEnvDataRight, hBitStream,1); payloadBits += writeSyntheticCodingData (sbrEnvDataLeft,hBitStream); payloadBits += writeSyntheticCodingData (sbrEnvDataRight,hBitStream); } else { /* no coupling */ payloadBits += encodeSbrGrid (sbrEnvDataLeft, hBitStream); payloadBits += encodeSbrGrid (sbrEnvDataRight, hBitStream); payloadBits += encodeSbrDtdf (sbrEnvDataLeft, hBitStream); payloadBits += encodeSbrDtdf (sbrEnvDataRight, hBitStream); /* sbrEnvDataLeft->sbr_invf_mode_vec[] */ for (i = 0; i < sbrEnvDataLeft->noOfnoisebands; i++) { payloadBits += WriteBits (hBitStream, sbrEnvDataLeft->sbr_invf_mode_vec[i], SI_SBR_INVF_MODE_BITS); } /* sbrEnvDataRight->sbr_invf_mode_vec[] */ for (i = 0; i < sbrEnvDataRight->noOfnoisebands; i++) { payloadBits += WriteBits (hBitStream, sbrEnvDataRight->sbr_invf_mode_vec[i], SI_SBR_INVF_MODE_BITS); } payloadBits += writeEnvelopeData (sbrEnvDataLeft, hBitStream,0); payloadBits += writeEnvelopeData (sbrEnvDataRight, hBitStream,0); payloadBits += writeNoiseLevelData (sbrEnvDataLeft, hBitStream,0); payloadBits += writeNoiseLevelData (sbrEnvDataRight, hBitStream,0); payloadBits += writeSyntheticCodingData (sbrEnvDataLeft,hBitStream); payloadBits += writeSyntheticCodingData (sbrEnvDataRight,hBitStream); } /* coupling */ return payloadBits; }