/***************************************************************************** functionname: encodeExtendedData description: writes bits corresponding to the extended data returns: number of bits written input: output: *****************************************************************************/ static INT encodeExtendedData(HANDLE_PARAMETRIC_STEREO hParametricStereo, HANDLE_FDK_BITSTREAM hBitStream) { INT extDataSize; INT payloadBits = 0; extDataSize = getSbrExtendedDataSize(hParametricStereo); if (extDataSize != 0) { INT maxExtSize = (1 << SI_SBR_EXTENSION_SIZE_BITS) - 1; INT writtenNoBits = 0; /* needed to byte align the extended data */ payloadBits += FDKwriteBits(hBitStream, 1, SI_SBR_EXTENDED_DATA_BITS); FDK_ASSERT(extDataSize <= SBR_EXTENDED_DATA_MAX_CNT); if (extDataSize < maxExtSize) { payloadBits += FDKwriteBits(hBitStream, extDataSize, SI_SBR_EXTENSION_SIZE_BITS); } else { payloadBits += FDKwriteBits(hBitStream, maxExtSize, SI_SBR_EXTENSION_SIZE_BITS); payloadBits += FDKwriteBits(hBitStream, extDataSize - maxExtSize, SI_SBR_EXTENSION_ESC_COUNT_BITS); } /* parametric coding signalled here? */ if (hParametricStereo) { writtenNoBits += FDKwriteBits(hBitStream, EXTENSION_ID_PS_CODING, SI_SBR_EXTENSION_ID_BITS); writtenNoBits += FDKsbrEnc_PSEnc_WritePSData(hParametricStereo, hBitStream); } payloadBits += writtenNoBits; /* byte alignment */ writtenNoBits = writtenNoBits % 8; if (writtenNoBits) payloadBits += FDKwriteBits(hBitStream, 0, (8 - writtenNoBits)); } else { payloadBits += FDKwriteBits(hBitStream, 0, SI_SBR_EXTENDED_DATA_BITS); } return payloadBits; }
/***************************************************************************** description: writes bits corresponding to the extended data returns: number of bits written *****************************************************************************/ static void encodeExtendedData (HANDLE_SBR_ENV_DATA sbrEnvDataLeft, HANDLE_SBR_ENV_DATA sbrEnvDataRight, struct PS_ENC* h_ps_e, int bHeaderActive, HANDLE_BIT_BUF hBitStreamPrev, int *sbrHdrBits, HANDLE_BIT_BUF hBitStream, int* payloadBitsReturn) { int extDataSize; int payloadBitsIn = *payloadBitsReturn; int payloadBits = 0; /* counting previous operations */ extDataSize = getSbrExtendedDataSize(sbrEnvDataLeft, sbrEnvDataRight, h_ps_e, bHeaderActive ); if (extDataSize != 0) { #ifndef MONO_ONLY if (h_ps_e && AppendPsBS (h_ps_e, NULL, NULL, 0)) { *payloadBitsReturn = AppendPsBS (h_ps_e, hBitStream, hBitStreamPrev, sbrHdrBits); } else { #endif /*#ifndef MONO_ONLY */ int maxExtSize = (1<<SI_SBR_EXTENSION_SIZE_BITS) - 1; /* counting previous operation */ payloadBits += WriteBits (hBitStream, 1, SI_SBR_EXTENDED_DATA_BITS); assert(extDataSize <= SBR_EXTENDED_DATA_MAX_CNT); if (extDataSize < maxExtSize) { payloadBits += WriteBits (hBitStream, extDataSize, SI_SBR_EXTENSION_SIZE_BITS); } else { payloadBits += WriteBits (hBitStream, maxExtSize, SI_SBR_EXTENSION_SIZE_BITS); payloadBits += WriteBits (hBitStream, extDataSize - maxExtSize, SI_SBR_EXTENSION_ESC_COUNT_BITS); } *payloadBitsReturn = payloadBits + payloadBitsIn; #ifndef MONO_ONLY } #endif /*#ifndef MONO_ONLY */ } else { payloadBits += WriteBits (hBitStream, 0, SI_SBR_EXTENDED_DATA_BITS); *payloadBitsReturn = payloadBits + payloadBitsIn; } }