Example #1
0
/*****************************************************************************

    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;
}
Example #2
0
/*****************************************************************************

    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;
  }

  
}