Ejemplo n.º 1
0
/*****************************************************************************

    description:  writes bits corresponding to the "synthetic-coding"-extension
    returns:      number of bits written

*****************************************************************************/
static int writeSyntheticCodingData (HANDLE_SBR_ENV_DATA  sbrEnvData,
                                     HANDLE_BIT_BUF       hBitStream)

{
  int i;
  int payloadBits = 0;

  

   /* counting previous operation */

      
    payloadBits += WriteBits (hBitStream, sbrEnvData->addHarmonicFlag, 1);

  
  if (sbrEnvData->addHarmonicFlag) {

     /* sbrEnvData->addHarmonic[] */
    
    for (i = 0; i < sbrEnvData->noHarmonics; i++) {

       
      payloadBits += WriteBits (hBitStream, sbrEnvData->addHarmonic[i], 1);
    }
  }

  

  return payloadBits;
}
Ejemplo n.º 2
0
/*****************************************************************************

    description:  writes bits that describes the direction of the envelopes of a frame
    returns:      number of bits written

*****************************************************************************/
static int
encodeSbrDtdf (HANDLE_SBR_ENV_DATA sbrEnvData, HANDLE_BIT_BUF hBitStream)
{
  int i, payloadBits = 0, noOfNoiseEnvelopes;

  

   /* counting previous operations */

     
  noOfNoiseEnvelopes = (sbrEnvData->noOfEnvelopes > 1) ? 2 : 1;

   /* sbrEnvData->domain_vec[] */
   
  for (i = 0; i < sbrEnvData->noOfEnvelopes; ++i) {

     
    payloadBits += WriteBits (hBitStream, sbrEnvData->domain_vec[i], SBR_DIR_BITS);
  }

   /* sbrEnvData->domain_vec_noise[] */
  
  for (i = 0; i < noOfNoiseEnvelopes; ++i) {

     
    payloadBits +=  WriteBits (hBitStream, sbrEnvData->domain_vec_noise[i], SBR_DIR_BITS);
  }

  

  return payloadBits;
}
Ejemplo n.º 3
0
Archivo: lzss.cpp Proyecto: kilitary/ss
void CompressFile ( FILE *input, BFILE *output)
{
	int i;
	int c;
	int look_ahead_bytes;
	int current_pos;
	int replace_count;
	int match_len;
	int match_pos;
	
	current_pos = 1;
	
	for ( i = 0; i < LOOK_AHEAD_SIZE; i++)
	{
		if ( (c = getc (input)) == EOF )
			break;
		window [current_pos + i] = (uchar) c;
	}
	
	look_ahead_bytes = i;
	InitTree (current_pos);
	match_len = 0;
	match_pos = 0;
	
	while (look_ahead_bytes > 0)
	{
		if (match_len > look_ahead_bytes)
			match_len = look_ahead_bytes;
		if (match_len <= BREAK_EVEN)
		{
			replace_count = 1;
			WriteBit ( output, 1);
			WriteBits ( output, (ulong) window [current_pos], 8);
		}
		else
		{
			WriteBit  ( output, 0);
			WriteBits ( output, (ulong) match_pos, INDEX_BITS);
			WriteBits ( output, (ulong) ( match_len - (BREAK_EVEN + 1)),
				LENGTH_BITS);
			replace_count = match_len;
		}
		
		for ( i = 0; i < replace_count; i++)
		{
			DeleteString ( MODULO (current_pos + LOOK_AHEAD_SIZE));
			if ( (c = getc (input)) == EOF )
				look_ahead_bytes--;
			else
				window [MODULO (current_pos + LOOK_AHEAD_SIZE)] = (uchar) c;
			current_pos = MODULO (current_pos + 1);
			if (look_ahead_bytes)
				match_len = AddString ( current_pos, &match_pos);
		}
	}
	
	WriteBit  ( output, 0);
	WriteBits ( output, (ulong) END_OF_STREAM, INDEX_BITS);
}
Ejemplo n.º 4
0
/*****************************************************************************

    description:  encodes SBR Header information
    returns:      number of bits written

*****************************************************************************/
static int
encodeSbrHeader (HANDLE_SBR_HEADER_DATA     sbrHeaderData,
                 HANDLE_SBR_BITSTREAM_DATA  sbrBitstreamData,
                 HANDLE_COMMON_DATA         cmonData,
                 SBR_ELEMENT_TYPE           sbrElem)

{
  int payloadBits = 0;

  

   /* counting previous operation */

   
  if (sbrBitstreamData->CRCActive) {

     
    cmonData->sbrCrcLen = 1;
  }
  else {

     
    cmonData->sbrCrcLen = 0;
  }


  
  if (sbrBitstreamData->HeaderActive) {

       
    payloadBits += WriteBits (&cmonData->sbrBitbuf, 1, 1);

       
    payloadBits += encodeSbrHeaderData (sbrHeaderData,
                                        &cmonData->sbrBitbuf,
                                        sbrElem);
  }
  else {

       
    payloadBits += WriteBits (&cmonData->sbrBitbuf, 0, 1);
  }


   
  cmonData->sbrHdrBits = payloadBits;

  

  return payloadBits;
}
Ejemplo n.º 5
0
/*****************************************************************************

    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;
}
Ejemplo n.º 6
0
void CEncoder::WriteBytes(const Byte *data, UInt32 sizeInBits, Byte lastByte)
{
  UInt32 bytesSize = (sizeInBits / 8);
  for (UInt32 i = 0; i < bytesSize; i++)
    m_OutStream.WriteBits(data[i], 8);
  WriteBits(lastByte, (sizeInBits & 7));
}
Ejemplo n.º 7
0
void PanelDataWrite(StdAirDataBase *DataBase, uint16 index, uint16 Data)
{
   uint08 tmptype =   PanelDataStr[index][0];
   uint08 tmpindex =  PanelDataStr[index][1];
   if (tmpindex == DEF_INDEX)
   {
      return;
   }
   tmpindex--;
   if (tmptype == BITTYPE)
   {
      if (tmpindex < BIT_LEN_MAX)
      {
         WriteBits(DataBase->Solo.Bits.All, tmpindex, Data);
      }
   }
   else if (tmptype == BYTETYPE)
   {
      if (tmpindex < BYTE_LEN_MAX)
      {
         DataBase->Solo.Bytes.All[tmpindex] = Data % 256;
      }
   }
   else if (tmptype == WORDTYPE)
   {
      if (tmpindex < WORD_LEN_MAX)
      {
         DataBase->Solo.Words.All[tmpindex] = Data;
      }
   }
}
Ejemplo n.º 8
0
/* Guarda la tabla en formato comprimido de acuerdo a la tabla huffman */
void RecordOMTHC(unsigned char omt[NUM_BOARDS])
{
	/* Archivo de salida */
	FILE* comp_bin_fp;
	/* i */
	int i;

	/* Abro el archivo */
	comp_bin_fp = fopen("comp.bin", "wb");

	/* Recorro la tabla */
	for (i = 0; i < NUM_BOARDS; i++)
		WriteBits((unsigned char)huffman_table[omt[i]][0],
			huffman_table[omt[i]][1], comp_bin_fp);

	/* Hago flush */
	WriteBits(0, 0, comp_bin_fp);

	/* Cierra el archivo */
	fclose(comp_bin_fp);
}
Ejemplo n.º 9
0
int main(int argc, char* argv[]) {
	printf("Example1: BitIO\n");

#ifdef OnOSX
	signal(SIGINT, Quit);		// Trap Control+C function Quit on Mac
#endif

	if (!InitializeForBitIO()) {
		printf("\nFT232R cable found\nLED is ");
		while (1) {
			WriteBits(LED_Off);
			printf("Off\b\b\b");
			Idle(10);
			while (ReadBits() & Button) {
				WriteBits(LED_On);
				printf("On \b\b\b");
				Idle(10);
				}
			}
		}
	Quit();
	}
OSCL_EXPORT_REF void BitStreamParser::WriteUInt8(uint8 data)
{
    if (bitpos != MOST_SIG_BIT)
    {
        WriteBits(BITS_PER_BYTE, &data);
    }
    else
    {
        if (bytepos >= (start + size))
        {
            OSCL_LEAVE(OsclErrOverflow);
        }
        *bytepos = data;
        bytepos++;
    }
}
Ejemplo n.º 11
0
/*
========================
idLZWCompressor::WriteByte
========================
*/
void idLZWCompressor::WriteByte( uint8 value ) {
	int code = Lookup( lzwData->codeWord, value );
	if ( code >= 0 ) {
		lzwData->codeWord = code;
	} else {
		WriteBits( lzwData->codeWord, lzwData->codeBits );
		if ( !BumpBits() ) {
			AddToDict( lzwData->codeWord, value );
		}
		lzwData->codeWord = value;
	}

	if ( lzwData->bytesWritten >= maxSize - ( lzwData->codeBits + lzwData->tempBits + 7 ) / 8 ) {
		overflowed = true;	// At any point, if we can't perform an End call, then trigger an overflow
		return;
	}
}
Ejemplo n.º 12
0
// Write an array or casted stream
void BitStream::Write( const char* inputByteArray, const unsigned int numberOfBytes )
{
	if (numberOfBytes==0)
		return;

	// Optimization:
	if ((numberOfBitsUsed & 7) == 0)
	{
		AddBitsAndReallocate( BYTES_TO_BITS(numberOfBytes) );
		memcpy(data+BITS_TO_BYTES(numberOfBitsUsed), inputByteArray, (size_t) numberOfBytes);
		numberOfBitsUsed+=BYTES_TO_BITS(numberOfBytes);
	}
	else
	{
		WriteBits( ( unsigned char* ) inputByteArray, numberOfBytes * 8, true );
	}

}
Ejemplo n.º 13
0
/*
========================
idLZWCompressor::End
========================
*/
int idLZWCompressor::End() {
	assert( lzwData->tempBits < 8 );
	assert( lzwData->bytesWritten < maxSize - ( lzwData->codeBits + lzwData->tempBits + 7 ) / 8 );

	assert( ( Length() > 0 ) == ( lzwData->codeWord != -1 ) );

	if ( lzwData->codeWord != -1 ) {
		WriteBits( lzwData->codeWord, lzwData->codeBits );
	}

	if ( lzwData->tempBits > 0 ) {
		if ( lzwData->bytesWritten >= maxSize ) {
			overflowed = true;
			return -1;
		}
		data[lzwData->bytesWritten++] = (uint8)lzwData->tempValue & ( ( 1 << lzwData->tempBits ) - 1 );
	}
	
	return Length() > 0 ? Length() : -1;		// Total bytes written (or failure)
}
Ejemplo n.º 14
0
/** Set full-scale gyroscope range.
 * @param range New full-scale gyroscope range value
 * @see MPU6050_GetFullScaleGyroRange()
 * @see MPU6050_GYRO_FS_250
 * @see MPU6050_RA_GYRO_CONFIG
 * @see MPU6050_GCONFIG_FS_SEL_BIT
 * @see MPU6050_GCONFIG_FS_SEL_LENGTH
 */
void clMPU6050::SetFullScaleGyroRange(uint8_t range)
{
	WriteBits(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_GYRO_CONFIG, MPU6050_GCONFIG_FS_SEL_BIT, MPU6050_GCONFIG_FS_SEL_LENGTH, range);
	// Memorize range:
	float fullRangeLSB = 32768;
	switch(range){
	case MPU6050_GYRO_FS_250:
		this->sensors.gyroScaleFactor = fullRangeLSB/250;
		break;
	case MPU6050_GYRO_FS_500:
		this->sensors.gyroScaleFactor = fullRangeLSB/500;
		break;
	case MPU6050_GYRO_FS_1000:
		this->sensors.gyroScaleFactor = fullRangeLSB/1000;
		break;
	case MPU6050_GYRO_FS_2000:
		this->sensors.gyroScaleFactor = fullRangeLSB/2000;
		break;
	default:
		// To avoid erroneous measurements, set to zero to make the error more obvious.
		this->sensors.gyroScaleFactor = 0;
	}
}
Ejemplo n.º 15
0
/** Set full-scale accelerometer range.
 * @param range New full-scale accelerometer range setting
 * @see MPU6050_GetFullScaleAccelRange()
 */
void clMPU6050::SetFullScaleAccelRange(uint8_t range)
{
	WriteBits(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_ACCEL_CONFIG, MPU6050_ACONFIG_AFS_SEL_BIT, MPU6050_ACONFIG_AFS_SEL_LENGTH, range);
	// Memorize range:
	float fullRangeLSB = 32768;
	switch(range){
	case MPU6050_ACCEL_FS_2:
		this->sensors.accelerometerScaleFactor = fullRangeLSB/2.0;
		break;
	case MPU6050_ACCEL_FS_4:
		this->sensors.accelerometerScaleFactor = fullRangeLSB/4.0;
		break;
	case MPU6050_ACCEL_FS_8:
		this->sensors.accelerometerScaleFactor = fullRangeLSB/8.0;
		break;
	case MPU6050_ACCEL_FS_16:
		this->sensors.accelerometerScaleFactor = fullRangeLSB/16.0;
		break;
	default:
		// To avoid erroneous measurements:
		this->sensors.accelerometerScaleFactor = 0;
	}
}
Ejemplo n.º 16
0
static int
appendBitstream( HANDLE_BIT_BUF hBitBufWrite,
                 HANDLE_BIT_BUF hBitBufRead,
                 int nBits )
{
  int i;
  unsigned b;

  COUNT_sub_start("appendBitstream");

  LOOP(1);
  for (i=0; i< nBits; i++)
  {
    FUNC(2);
    b = ReadBits (hBitBufRead, 1);

    FUNC(3);
    WriteBits (hBitBufWrite, b, 1);
  }

  COUNT_sub_end();

  return nBits;
}
Ejemplo n.º 17
0
WorldPacket const* WorldPackets::CombatLog::SpellNonMeleeDamageLog::Write()
{
    *this << Me;
    *this << CasterGUID;
    *this << CastID;
    *this << int32(SpellID);
    *this << int32(Damage);
    *this << int32(Overkill);
    *this << uint8(SchoolMask);
    *this << int32(ShieldBlock);
    *this << int32(Resisted);
    *this << int32(Absorbed);
    WriteBit(Periodic);
    WriteBits(Flags, 7);
    WriteBit(false); // Debug info
    WriteLogDataBit();
    WriteBit(SandboxScaling.is_initialized());
    FlushBits();
    WriteLogData();
    if (SandboxScaling)
        *this << *SandboxScaling;

    return &_worldPacket;
}
Ejemplo n.º 18
0
/*****************************************************************************

    description:  Encode SBR grid information

*****************************************************************************/
static int
encodeSbrGrid (HANDLE_SBR_ENV_DATA sbrEnvData, HANDLE_BIT_BUF hBitStream)
{
  int payloadBits = 0;
  int i, temp;



  

   /* counting previous operations */

    
  payloadBits += WriteBits (hBitStream, sbrEnvData->hSbrBSGrid->frameClass,
                            SBR_CLA_BITS);

   
  switch (sbrEnvData->hSbrBSGrid->frameClass) {
  case FIXFIX:

     
    temp = ceil_ln2(sbrEnvData->hSbrBSGrid->bs_num_env);

     
    payloadBits += WriteBits (hBitStream, temp, SBR_ENV_BITS);

      
    payloadBits += WriteBits (hBitStream, sbrEnvData->freq_res_fixfix, SBR_RES_BITS);
    break;

  case FIXVAR:
  case VARFIX:

      
    if (sbrEnvData->hSbrBSGrid->frameClass == FIXVAR)
    {
       
      temp = sbrEnvData->hSbrBSGrid->bs_abs_bord - 16;
    }
    else
    {
      
      temp = sbrEnvData->hSbrBSGrid->bs_abs_bord;
    }

     
    payloadBits += WriteBits (hBitStream, temp, SBR_ABS_BITS);

      
    payloadBits += WriteBits (hBitStream, sbrEnvData->hSbrBSGrid->n, SBR_NUM_BITS);

     /* sbrEnvData->hSbrBSGrid->bs_rel_bord[] */
     
    for (i = 0; i < sbrEnvData->hSbrBSGrid->n; i++) {

       
      temp = (sbrEnvData->hSbrBSGrid->bs_rel_bord[i] - 2) >> 1;

       
      payloadBits += WriteBits (hBitStream, temp, SBR_REL_BITS);
    }

      
    temp = ceil_ln2(sbrEnvData->hSbrBSGrid->n + 2);

      
    payloadBits += WriteBits (hBitStream, sbrEnvData->hSbrBSGrid->p, temp);

     /* sbrEnvData->hSbrBSGrid->v_f[] */
      
    for (i = 0; i < sbrEnvData->hSbrBSGrid->n + 1; i++) {

       
      payloadBits += WriteBits (hBitStream, sbrEnvData->hSbrBSGrid->v_f[i],
                                SBR_RES_BITS);
    }
    break;

  case VARVAR:

    
    temp = sbrEnvData->hSbrBSGrid->bs_abs_bord_0;

     
    payloadBits += WriteBits (hBitStream, temp, SBR_ABS_BITS);

     
    temp = sbrEnvData->hSbrBSGrid->bs_abs_bord_1 - 16;

     
    payloadBits += WriteBits (hBitStream, temp, SBR_ABS_BITS);

      
    payloadBits += WriteBits (hBitStream, sbrEnvData->hSbrBSGrid->bs_num_rel_0, SBR_NUM_BITS);

      
    payloadBits += WriteBits (hBitStream, sbrEnvData->hSbrBSGrid->bs_num_rel_1, SBR_NUM_BITS);

     /* sbrEnvData->hSbrBSGrid->bs_rel_bord_0[] */
     
    for (i = 0; i < sbrEnvData->hSbrBSGrid->bs_num_rel_0; i++) {

       
      temp = (sbrEnvData->hSbrBSGrid->bs_rel_bord_0[i] - 2) >> 1;

       
      payloadBits += WriteBits (hBitStream, temp, SBR_REL_BITS);
    }

     /* sbrEnvData->hSbrBSGrid->bs_rel_bord_1[] */
     
    for (i = 0; i < sbrEnvData->hSbrBSGrid->bs_num_rel_1; i++) {

       
      temp = (sbrEnvData->hSbrBSGrid->bs_rel_bord_1[i] - 2) >> 1;

       
      payloadBits += WriteBits (hBitStream, temp, SBR_REL_BITS);
    }

      
    temp = ceil_ln2(sbrEnvData->hSbrBSGrid->bs_num_rel_0 +
                             sbrEnvData->hSbrBSGrid->bs_num_rel_1 + 2);

      
    payloadBits +=  WriteBits (hBitStream, sbrEnvData->hSbrBSGrid->p, temp);

     
    temp = sbrEnvData->hSbrBSGrid->bs_num_rel_0 +
           sbrEnvData->hSbrBSGrid->bs_num_rel_1 + 1;

     /* sbrEnvData->hSbrBSGrid->v_fLR[] */
     
    for (i = 0; i < temp; i++) {

       
      payloadBits += WriteBits (hBitStream, sbrEnvData->hSbrBSGrid->v_fLR[i],
                                SBR_RES_BITS);
    }
    break;
  }

  

  return payloadBits;
}
Ejemplo n.º 19
0
/*****************************************************************************

    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;
}
Ejemplo n.º 20
0
int main(/*int argc, char *argv[]*/)
{
	AACENC_CONFIG     config;
	FILE* inputFile = NULL;

	SBRDECODER sbrDecoderInfo = 0;

	FILE *fOut=NULL;
	HANDLE_MP4_FILE hMp4File;

	int  error;
	int bitrate;
	int nChannelsAAC, nChannelsSBR;
	unsigned int sampleRateAAC;
	int frmCnt;
	int bandwidth = 0;

	unsigned int numAncDataBytes=0;
	unsigned char ancDataBytes[MAX_PAYLOAD_SIZE];

	/*!< required only for interfacing with audio output library, thus not counted into RAM requirements */
	short TimeDataPcm[AACENC_BLOCKSIZE*2*MAX_CHANNELS];

	int numSamplesRead;
	int bDoIIR2Downsample = 0;
	int bDingleRate = 0;
	int useParametricStereo = 0;
	int coreWriteOffset = 0;
	int coreReadOffset = 0;
	int envWriteOffset = 0;
	int envReadOffset = 0;
	int writeOffset=INPUT_DELAY*MAX_CHANNELS;

	struct AAC_ENCODER *aacEnc = 0;

	int bDoUpsample = 0;
	int upsampleReadOffset = 0;

	int inSamples_enc;
	int bDoIIR32Resample = 0;
	const int nRuns = 4;
	float *resamplerScratch = sbr_envRBuffer;

	HANDLE_SBR_ENCODER hEnvEnc=NULL;

	bitrate = 24000;

	/*open audio input file*/
	int sampleRate     = 48000 ;    /* only relevant if valid == 1 */
	int nChannels      = 2 ;        /* only relevant if valid == 1 */

	inputFile = fopen("f:\\xxxx.wav", "rb");
	if(inputFile == NULL)
	{
		assert(0);
		return 0;
	}

	/* set up basic parameters for aacPlus codec*/
	AacInitDefaultConfig(&config);

	nChannelsAAC = nChannelsSBR = nChannels;
	if ( (nChannels == 2) && (bitrate > 16000) && (bitrate < 36000) )
	{
		useParametricStereo = 1;
	}

	if (useParametricStereo)
	{
		nChannelsAAC = 1;
		nChannelsSBR = 2;
	}

	if ( (sampleRate == 48000) && (nChannelsAAC == 2) && (bitrate < 24000) ) {
		bDoIIR32Resample  = 1;
	}

	if (sampleRate == 16000) {
		bDoUpsample = 1;
		sampleRate = 32000;
		bDingleRate = 1;
	}

	sampleRateAAC = sampleRate;

	if (bDoIIR32Resample)
		sampleRateAAC = 32000;

	config.bitRate = bitrate;
	config.nChannelsIn=nChannels;
	config.nChannelsOut=nChannelsAAC;

	config.bandWidth=bandwidth;
	/*set up SBR configuration*/
	if(!IsSbrSettingAvail (bitrate, nChannelsAAC, sampleRateAAC, &sampleRateAAC)) {
		fprintf(stderr,"No valid SBR configuration found\n");
		exit(10);
	}

	{
		sbrConfiguration sbrConfig;

		envReadOffset = 0;
		coreWriteOffset = 0;

		if(useParametricStereo)
		{
			envReadOffset = (MAX_DS_FILTER_DELAY + INPUT_DELAY)*MAX_CHANNELS;
			coreWriteOffset = CORE_INPUT_OFFSET_PS;
			writeOffset = envReadOffset;
		}

		InitializeSbrDefaults (&sbrConfig);

		sbrConfig.usePs = useParametricStereo;

		AdjustSbrSettings(&sbrConfig,
			bitrate,
			nChannelsAAC,
			sampleRateAAC,
			AACENC_TRANS_FAC,
			24000);

		EnvOpen(&hEnvEnc,
			inputBuffer + coreWriteOffset,
			&sbrConfig,
			&config.bandWidth);

		/* set IIR 2:1 downsampling */
		bDoIIR2Downsample = (bDoUpsample) ? 0 : 1;

		if (useParametricStereo)
		{
			bDoIIR2Downsample = 0;
		}else{
			assert(0);
		}

	}

	if (bDoUpsample) {
		assert(0);
	}
	else {
		if (bDoIIR2Downsample){
			assert(0);
		}
	}

	/*
	set up AAC encoder, now that samling rate is known
	*/
	config.sampleRate = sampleRateAAC;
	error = AacEncOpen( &aacEnc,config);

	if (error){
		assert(0);
		AacEncClose(aacEnc);
		fclose(inputFile);

		if (fOut) 
			fclose(fOut);
		return 1;
	}


	/*set up MPEG-4/3GPP file format library (not instrumented nor accounted for RAM requirements)*/
	{
		unsigned char ASConfigBuffer[80];
		unsigned int  nConfigBits;
		unsigned int  nConfigBytes;

		memset (ASConfigBuffer, 0, 80);

		if ( GetMPEG4ASConfig( sampleRateAAC,
			nChannelsAAC,
			ASConfigBuffer,
			&nConfigBits,
			1,
			bDingleRate) ) {
				fprintf(stderr, "\nCould not initialize Audio Specific Config\n");
				exit(10);
		}


		nConfigBytes = (nConfigBits+7)>>3;

		if (OpenMP4File(&hMp4File,
			ASConfigBuffer,
			nConfigBytes,
			"f:/out2.3gp",
			(!bDingleRate) ? sampleRateAAC*2 : sampleRateAAC, /* output sampleRate */
			config.bitRate,
			nChannelsAAC,
			1,
			1) ) {
				fprintf(stderr, "\nFailed to create 3GPP file\n") ;
				exit(10);
		}
	}

	frmCnt = 0;
	memset(TimeDataPcm,0,sizeof(TimeDataPcm));

	/*set up input samples block size feed*/
	inSamples_enc = AACENC_BLOCKSIZE * nChannels * 2; 


////decodec////////////////////////////////////////////////////////////////////////////////////////
	#define INPUT_BUF_SIZE (6144*2/8)                      /*!< Size of Input buffer in bytes*/
	unsigned int inBuffer[INPUT_BUF_SIZE/(sizeof(int))];   /*!< Input buffer */
	struct BIT_BUF bitBuf, *hBitBuf;
	AACDECODER aacDecoderInfo = 0; 
	SBRBITSTREAM streamSBR;   
	hBitBuf = CreateBitBuffer(&bitBuf,(unsigned char*) inBuffer,INPUT_BUF_SIZE);


	aacDecoderInfo = CAacDecoderOpen(hBitBuf,
		&streamSBR,
		TimeDataFloat);
	if(0 == aacDecoderInfo)
	{
		assert(0);
		return 0;
	}

	if(0 != CAacDecoderInit (aacDecoderInfo,sampleRate/2,bitrate))
	{
		assert(0);
		return 0;
	}

///////////////////////////////////////////////////////////////////////////////////////////////////
	FILE* fw = fopen("f:\\uuu.pcm", "wb");
	/*	The frame loop */
	while (1)
	{
		int i, numOutBytes;

		numSamplesRead = fread(TimeDataPcm, 2, inSamples_enc, inputFile);
		if(numSamplesRead <= 0)
		{
			break;
		}

		/* copy from short to float input buffer */
		if ( nChannels == nChannelsSBR ) {
			for (i=0; i<numSamplesRead; i++) {
				inputBuffer[i+writeOffset] = (float) TimeDataPcm[i];
			}
		}

#if (MAX_CHANNELS==2)
		/* copy from short to float input buffer, reordering necessary since the encoder takes interleaved data */
		if(nChannels == 1) {
			int i;
			for (i=0; i<numSamplesRead; i++) {
				inputBuffer[writeOffset+2*i] = (float) TimeDataPcm[i];
			}
		}
#endif

		/*encode one SBR frame*/
		EnvEncodeFrame (hEnvEnc,
			inputBuffer + envReadOffset,
			inputBuffer + coreWriteOffset,
			MAX_CHANNELS,
			&numAncDataBytes,
			ancDataBytes);

		/*encode one AAC frame*/
		if (hEnvEnc && useParametricStereo) {

			AacEncEncode(aacEnc,
				inputBuffer,
				1, /* stride */
				ancDataBytes,
				&numAncDataBytes,
				outputBuffer,
				&numOutBytes);

			if(hEnvEnc)
			{
				memcpy( inputBuffer,inputBuffer+AACENC_BLOCKSIZE,CORE_INPUT_OFFSET_PS*sizeof(float));
			}
		}
		else
		{
			assert(0);
		}

		////////////////////////////////////////dec
		unsigned char* pData = (unsigned char*)outputBuffer;
		for(int i = 0; i < numOutBytes; i++)
			WriteBits(hBitBuf,pData[i],8);

		streamSBR.NrElements = 0;
		int frameSize_dec= 0, sampleRate_dec = 0, numChannels_dec = 2;
		char frameOk_dec = 1, channelMode_dec = 0;
		int ErrorStatus = CAacDecoder_DecodeFrame(aacDecoderInfo,&frameSize_dec,&sampleRate_dec,
									&numChannels_dec,	&channelMode_dec,	frameOk_dec);

		assert(ErrorStatus == 0);
		if ((!sbrDecoderInfo) && streamSBR.NrElements)
			sbrDecoderInfo = openSBR (sampleRate_dec,frameSize_dec, 0,0);

		if (sbrDecoderInfo) {

			/* apply SBR processing */
			if (applySBR(sbrDecoderInfo, &streamSBR, TimeDataFloat,	&numChannels_dec,
						frameOk_dec, 0, 0) != SBRDEC_OK){
					sbrDecoderInfo = 0;
			}
			else {
				frameSize_dec = frameSize_dec * 2;
				sampleRate_dec *= 2;
			}
		}

		short* pwData = new short[frameSize_dec * 2];
		/* clip time samples */
		for (i = 0; i < frameSize_dec * numChannels_dec; i++) {
			if (TimeDataFloat[i] < -32768.0) {
				TimeDataFloat[i] = -32768.0;
			}
			else {
				if (TimeDataFloat[i] > 32767.0) {
					TimeDataFloat[i] = 32767.0;
				}
			}

			//pwData[i] = TimeDataFloat[i];
		}

		interleaveSamples(&TimeDataFloat[0],&TimeDataFloat[frameSize_dec],pwData,frameSize_dec,&numChannels_dec);

		fwrite(pwData, 2, frameSize_dec * numChannels_dec, fw);
		delete [] pwData;
////////////////////////////////////////////////////////////////////////
		if (numOutBytes) {
			MP4FileAddFrame( hMp4File, 
				outputBuffer,
				numOutBytes );
		}

		frmCnt++;

		/* 3GPP instrumenting tool: measure worst case work load at end of each decoding loop */
		fprintf(stderr,"[%d]\r",frmCnt); fflush(stderr);
	}
	fprintf(stderr,"\n"); fflush(stderr);

	AacEncClose(aacEnc);

	fclose(inputFile);

	if (WriteMP4File( hMp4File)) {
		fprintf(stderr, "Writing of 3GPP file failed.");
		exit(10);
	}
	CloseMP4File( hMp4File);

	if(hEnvEnc)
	{
		EnvClose(hEnvEnc);
	}

	printf("\nencoding finished\n");
	return 0;
}
Ejemplo n.º 21
0
/*****************************************************************************

    functionname: encodeSbrHeaderData
    description:  writes sbr_header()
    returns:      number of bits written

*****************************************************************************/
static int
encodeSbrHeaderData (HANDLE_SBR_HEADER_DATA sbrHeaderData,
                     HANDLE_BIT_BUF hBitStream,
                     SBR_ELEMENT_TYPE sbrElem)

{
  int payloadBits = 0;

  

   /* counting previous operation */

  
  if (sbrHeaderData != NULL) {

      
    payloadBits += WriteBits (hBitStream, sbrHeaderData->sbr_amp_res,
                              SI_SBR_AMP_RES_BITS);

      
    payloadBits += WriteBits (hBitStream, sbrHeaderData->sbr_start_frequency,
                              SI_SBR_START_FREQ_BITS);

      
    payloadBits += WriteBits (hBitStream, sbrHeaderData->sbr_stop_frequency,
                              SI_SBR_STOP_FREQ_BITS);

      
    payloadBits += WriteBits (hBitStream, sbrHeaderData->sbr_xover_band,
                              SI_SBR_XOVER_BAND_BITS);

     
    payloadBits += WriteBits (hBitStream, 0,
                              SI_SBR_RESERVED_BITS);



      
    payloadBits += WriteBits (hBitStream, sbrHeaderData->header_extra_1,
                              SI_SBR_HEADER_EXTRA_1_BITS);

      
    payloadBits += WriteBits (hBitStream, sbrHeaderData->header_extra_2,
                              SI_SBR_HEADER_EXTRA_2_BITS);


     
    if (sbrHeaderData->header_extra_1) {

        
      payloadBits += WriteBits (hBitStream, sbrHeaderData->freqScale,
                                SI_SBR_FREQ_SCALE_BITS);

        
      payloadBits += WriteBits (hBitStream, sbrHeaderData->alterScale,
                                SI_SBR_ALTER_SCALE_BITS);

        
      payloadBits += WriteBits (hBitStream, sbrHeaderData->sbr_noise_bands,
                                SI_SBR_NOISE_BANDS_BITS);
    } /* sbrHeaderData->header_extra_1 */

     
    if (sbrHeaderData->header_extra_2) {

        
      payloadBits += WriteBits (hBitStream, sbrHeaderData->sbr_limiter_bands,
                                SI_SBR_LIMITER_BANDS_BITS);

        
      payloadBits += WriteBits (hBitStream, sbrHeaderData->sbr_limiter_gains,
                                SI_SBR_LIMITER_GAINS_BITS);

        
      payloadBits += WriteBits (hBitStream, sbrHeaderData->sbr_interpol_freq,
                                SI_SBR_INTERPOL_FREQ_BITS);

        
      payloadBits += WriteBits (hBitStream, sbrHeaderData->sbr_smoothing_length,
                                SI_SBR_SMOOTHING_LENGTH_BITS);

    } /* sbrHeaderData->header_extra_2 */
  } /* sbrHeaderData != NULL */

  

  return payloadBits;
}
Ejemplo n.º 22
0
void CEncoder::WriteBit(bool v) { WriteBits((v ? 1 : 0), 1); }
Ejemplo n.º 23
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;
  }

  
}
Ejemplo n.º 24
0
/*****************************************************************************

    description:  writes bits corresponding to the envelope data
    returns:      number of bits written

*****************************************************************************/
static int
writeEnvelopeData (HANDLE_SBR_ENV_DATA sbrEnvData, HANDLE_BIT_BUF hBitStream, int coupling)
{
  int payloadBits = 0, j, i, delta;

  

   /* sbrEnvData->domain_vec[]
                  sbrEnvData->ienvelope[][]
                  sbrEnvData->noScfBands[]
                */
   
  for (j = 0; j < sbrEnvData->noOfEnvelopes; j++) { /* loop over all envelopes */

     
    if (sbrEnvData->domain_vec[j] == FREQ) {

        
      if (coupling && sbrEnvData->balance) {

          
        payloadBits += WriteBits (hBitStream, sbrEnvData->ienvelope[j][0], sbrEnvData->si_sbr_start_env_bits_balance);
      } else {

          
        payloadBits += WriteBits (hBitStream, sbrEnvData->ienvelope[j][0], sbrEnvData->si_sbr_start_env_bits);
      }
    }

    
    for (i = 1 - sbrEnvData->domain_vec[j]; i < sbrEnvData->noScfBands[j]; i++) {

      
      delta = sbrEnvData->ienvelope[j][i];

      if (coupling && sbrEnvData->balance) {
        assert (abs (delta) <= sbrEnvData->codeBookScfLavBalance);
      } else {
        assert (abs (delta) <= sbrEnvData->codeBookScfLav);
      }

      
      if (coupling) {

         
        if (sbrEnvData->balance) {

          
          if (sbrEnvData->domain_vec[j]) {

              
            payloadBits += WriteBits (hBitStream,
                                      sbrEnvData->hufftableBalanceTimeC[delta + sbrEnvData->codeBookScfLavBalance],
                                      sbrEnvData->hufftableBalanceTimeL[delta + sbrEnvData->codeBookScfLavBalance]);
          } else {

              
            payloadBits += WriteBits (hBitStream,
                                      sbrEnvData->hufftableBalanceFreqC[delta + sbrEnvData->codeBookScfLavBalance],
                                      sbrEnvData->hufftableBalanceFreqL[delta + sbrEnvData->codeBookScfLavBalance]);
          }
        } else {

          
          if (sbrEnvData->domain_vec[j]) {

              
            payloadBits += WriteBits (hBitStream,
                                      sbrEnvData->hufftableLevelTimeC[delta + sbrEnvData->codeBookScfLav],
                                      sbrEnvData->hufftableLevelTimeL[delta + sbrEnvData->codeBookScfLav]);
          } else {

              
            payloadBits += WriteBits (hBitStream,
                                      sbrEnvData->hufftableLevelFreqC[delta + sbrEnvData->codeBookScfLav],
                                      sbrEnvData->hufftableLevelFreqL[delta + sbrEnvData->codeBookScfLav]);
          }
        }
      } else {

        
        if (sbrEnvData->domain_vec[j]) {

            
          payloadBits += WriteBits (hBitStream,
                                    sbrEnvData->hufftableTimeC[delta + sbrEnvData->codeBookScfLav],
                                    sbrEnvData->hufftableTimeL[delta + sbrEnvData->codeBookScfLav]);
        } else {

            
          payloadBits += WriteBits (hBitStream,
                                    sbrEnvData->hufftableFreqC[delta + sbrEnvData->codeBookScfLav],
                                    sbrEnvData->hufftableFreqL[delta + sbrEnvData->codeBookScfLav]);
        }
      }
    }
  }

  

  return payloadBits;
}
Ejemplo n.º 25
0
/** Set clock source setting.
 * An internal 8MHz oscillator, gyroscope based clock, or external sources can
 * be selected as the MPU-60X0 clock source. When the internal 8 MHz oscillator
 * or an external source is chosen as the clock source, the MPU-60X0 can operate
 * in low power modes with the gyroscopes disabled.
 *
 * Upon power up, the MPU-60X0 clock source defaults to the internal oscillator.
 * However, it is highly recommended that the device be configured to use one of
 * the gyroscopes (or an external clock source) as the clock reference for
 * improved stability. The clock source can be selected according to the following table:
 *
 * <pre>
 * CLK_SEL | Clock Source
 * --------+--------------------------------------
 * 0       | Internal oscillator
 * 1       | PLL with X Gyro reference
 * 2       | PLL with Y Gyro reference
 * 3       | PLL with Z Gyro reference
 * 4       | PLL with external 32.768kHz reference
 * 5       | PLL with external 19.2MHz reference
 * 6       | Reserved
 * 7       | Stops the clock and keeps the timing generator in reset
 * </pre>
 *
 * @param source New clock source setting
 * @see MPU6050_GetClockSource()
 * @see MPU6050_RA_PWR_MGMT_1
 * @see MPU6050_PWR1_CLKSEL_BIT
 * @see MPU6050_PWR1_CLKSEL_LENGTH
 */
void clMPU6050::SetClockSource(uint8_t source)
{
	WriteBits(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_CLKSEL_BIT, MPU6050_PWR1_CLKSEL_LENGTH, source);
}
Ejemplo n.º 26
0
// writes SV7-header
void
WriteHeader_SV7 ( const unsigned int  MaxBand,
                  const unsigned int  Profile,
                  const unsigned int  MS_on,
                  const Uint32_t      TotalFrames,
                  const unsigned int  SamplesRest,
                  const unsigned int  StreamVersion,
                  const unsigned int  SampleFreq )
{
    WriteBits ( StreamVersion,  8 );    // StreamVersion
    WriteBits ( 0x2B504D     , 24 );    // Magic Number "MP+"

    WriteBits ( TotalFrames  , 32 );    // # of frames

    WriteBits ( 0            ,  1 );    // former IS-Flag (not supported anymore)
    WriteBits ( MS_on        ,  1 );    // MS-Coding Flag
    WriteBits ( MaxBand      ,  6 );    // Bandwidth

#if 0
    if ( MPPENC_VERSION [3] & 1 )
        WriteBits ( 1        ,  4 );    // 1: Experimental profile
    else
#endif

        WriteBits ( Profile  ,  4 );    // 5...15: below Telephone...above BrainDead
    WriteBits ( 0            ,  2 );    // for future use
    switch ( SampleFreq ) {
        case 44100: WriteBits ( 0, 2 ); break;
        case 48000: WriteBits ( 1, 2 ); break;
        case 37800: WriteBits ( 2, 2 ); break;
        case 32000: WriteBits ( 3, 2 ); break;
        default   : stderr_printf ( "Internal error\n");
                    exit (1);
    }
    WriteBits ( 0            , 16 );    // maximum input sample value, currently filled by replaygain

    WriteBits ( 0            , 32 );    // title based gain controls, currently filled by replaygain

    WriteBits ( 0            , 32 );    // album based gain controls, currently filled by replaygain

    WriteBits ( 1            ,  1 );    // true gapless: used?
    WriteBits ( SamplesRest  , 11 );    // true gapless: valid samples in last frame
    WriteBits ( 1            , 1 );     // we now support fast seeking
    WriteBits ( 0            , 19 );

    WriteBits ( (MPPENC_VERSION[0]&15)*100 + (MPPENC_VERSION[2]&15)*10 + (MPPENC_VERSION[3]&15),
                                8 );    // for future use
}
Ejemplo n.º 27
0
/*!

  \brief  appends the parametric stereo bitstream portion to the output
          bitstream

  \return Number of bits needed for parametric stereo coding
          of 0 if no EXTENSION_ID_PS_CODING element should be transmitted

****************************************************************************/
int
AppendPsBS (HANDLE_PS_ENC h_ps_e,
            HANDLE_BIT_BUF   hBitStream,
            HANDLE_BIT_BUF   hBitStreamPrev,
            int*             sbrHdrBits)
{
  struct BIT_BUF bitbufTmp;
  unsigned char tmp[MAX_PAYLOAD_SIZE];

  COUNT_sub_start("AppendPsBS");

  BRANCH(1);
  if (!h_ps_e)
  {
    COUNT_sub_end();
    return 0;
  }

  BRANCH(1);
  if (!hBitStream) {

    INDIRECT(1); PTR_INIT(1); FUNC(1); /* counting post-operation */
    COUNT_sub_end();

    return GetBitsAvail (&h_ps_e->psBitBuf);
  }
  else {
    int writtenNoBits = 0;
    int maxExtSize = (1<<SI_SBR_EXTENSION_SIZE_BITS) - 1;
    int numBits = GetBitsAvail (&h_ps_e->psBitBuf);
    int extDataSize = (numBits+SI_SBR_EXTENSION_ID_BITS+7)>>3;

    MOVE(2); INDIRECT(1); PTR_INIT(1); FUNC(1); ADD(1); SHIFT(1); /* counting previous operations */

    FUNC(1); BRANCH(1);
    if ( GetBitsAvail(hBitStreamPrev) == 0) {

      INDIRECT(1); MOVE(1);
      h_ps_e->hdrBitsPrevFrame = *sbrHdrBits;

      FUNC(2);
      CopyBitBuf(hBitStream, hBitStreamPrev);
    }
    else {

      int tmpBits;

      PTR_INIT(1); FUNC(3);
      CreateBitBuffer (&bitbufTmp, tmp, sizeof(tmp));

      MOVE(1);
      tmpBits = *sbrHdrBits;

      INDIRECT(1); MOVE(2);
      *sbrHdrBits = h_ps_e->hdrBitsPrevFrame;
      h_ps_e->hdrBitsPrevFrame = tmpBits;

      FUNC(2);
      CopyBitBuf (hBitStreamPrev, &bitbufTmp);

      FUNC(2);
      CopyBitBuf (hBitStream,  hBitStreamPrev);

      FUNC(2);
      CopyBitBuf (&bitbufTmp,  hBitStream);
    }

    FUNC(3);
    WriteBits (hBitStream, 1, SI_SBR_EXTENDED_DATA_BITS);

    ADD(1); BRANCH(1);
    if (extDataSize < maxExtSize) {

      FUNC(3);
      WriteBits (hBitStream, extDataSize, SI_SBR_EXTENSION_SIZE_BITS);
    } else {
      FUNC(3);
      WriteBits (hBitStream, maxExtSize, SI_SBR_EXTENSION_SIZE_BITS);

      ADD(1); FUNC(3);
      WriteBits (hBitStream, extDataSize - maxExtSize, SI_SBR_EXTENSION_ESC_COUNT_BITS);
    }

    FUNC(3); ADD(1);
    writtenNoBits += WriteBits (hBitStream, EXTENSION_ID_PS_CODING, SI_SBR_EXTENSION_ID_BITS);

    INDIRECT(1); PTR_INIT(1); FUNC(3); ADD(1);
    writtenNoBits += appendBitstream( hBitStream, &h_ps_e->psBitBuf, numBits );

    LOGIC(1);
    writtenNoBits = writtenNoBits%8;

    BRANCH(1);
    if(writtenNoBits)
    {
      ADD(1); FUNC(3);
      WriteBits(hBitStream, 0, (8 - writtenNoBits));
    }

    FUNC(1); ADD(2); /* counting post-operation */
    COUNT_sub_end();

    return GetBitsAvail(hBitStream)-(*sbrHdrBits)-SI_FILL_EXTENTION_BITS;
  }

  COUNT_sub_end();
}
Ejemplo n.º 28
0
/*****************************************************************************

    description:  writes bits corresponding to the noise-floor-level
    returns:      number of bits written

*****************************************************************************/
static int
writeNoiseLevelData (HANDLE_SBR_ENV_DATA sbrEnvData, HANDLE_BIT_BUF hBitStream, int coupling)
{
  int j, i, payloadBits = 0;
  int nNoiseEnvelopes = ((sbrEnvData->noOfEnvelopes > 1) ? 2 : 1);

  

      /* .. > .. ? */ 

   /* sbrEnvData->domain_vec_noise[]
                  sbrEnvData->sbr_noise_levels[i * sbrEnvData->noOfnoisebands]
               */
  
  for (i = 0; i < nNoiseEnvelopes; i++) {

    
    switch (sbrEnvData->domain_vec_noise[i]) {
    case FREQ:

        
      if (coupling && sbrEnvData->balance) {

          
        payloadBits += WriteBits (hBitStream,
                                  sbrEnvData->sbr_noise_levels[i * sbrEnvData->noOfnoisebands],
                                  sbrEnvData->si_sbr_start_noise_bits_balance);
      } else {

          
        payloadBits += WriteBits (hBitStream,
                                  sbrEnvData->sbr_noise_levels[i * sbrEnvData->noOfnoisebands],
                                  sbrEnvData->si_sbr_start_noise_bits);
      }

       /* sbrEnvData->sbr_noise_levels[] */
         
      for (j = 1 + i * sbrEnvData->noOfnoisebands; j < (sbrEnvData->noOfnoisebands * (1 + i)); j++) {
        
        if (coupling) {

           
          if (sbrEnvData->balance) {

              
            payloadBits += WriteBits (hBitStream,
                                      sbrEnvData->hufftableNoiseBalanceFreqC[sbrEnvData->sbr_noise_levels[j] +
                                                                            CODE_BOOK_SCF_LAV_BALANCE11],
                                      sbrEnvData->hufftableNoiseBalanceFreqL[sbrEnvData->sbr_noise_levels[j] +
                                                                            CODE_BOOK_SCF_LAV_BALANCE11]);
          } else {

              
            payloadBits += WriteBits (hBitStream,
                                      sbrEnvData->hufftableNoiseLevelFreqC[sbrEnvData->sbr_noise_levels[j] +
                                                                          CODE_BOOK_SCF_LAV11],
                                      sbrEnvData->hufftableNoiseLevelFreqL[sbrEnvData->sbr_noise_levels[j] +
                                                                          CODE_BOOK_SCF_LAV11]);
          }
        } else {

            
          payloadBits += WriteBits (hBitStream,
                                    sbrEnvData->hufftableNoiseFreqC[sbrEnvData->sbr_noise_levels[j] +
                                                                   CODE_BOOK_SCF_LAV11],
                                    sbrEnvData->hufftableNoiseFreqL[sbrEnvData->sbr_noise_levels[j] +
                                                                   CODE_BOOK_SCF_LAV11]);
        }
      }
      break;

    case TIME:

       /* sbrEnvData->sbr_noise_levels[] */
         
      for (j = i * sbrEnvData->noOfnoisebands; j < (sbrEnvData->noOfnoisebands * (1 + i)); j++) {

        
        if (coupling) {

           
          if (sbrEnvData->balance) {

              
            payloadBits += WriteBits (hBitStream,
                                      sbrEnvData->hufftableNoiseBalanceTimeC[sbrEnvData->sbr_noise_levels[j] +
                                                                            CODE_BOOK_SCF_LAV_BALANCE11],
                                      sbrEnvData->hufftableNoiseBalanceTimeL[sbrEnvData->sbr_noise_levels[j] +
                                                                            CODE_BOOK_SCF_LAV_BALANCE11]);
          } else {

              
            payloadBits += WriteBits (hBitStream,
                                      sbrEnvData->hufftableNoiseLevelTimeC[sbrEnvData->sbr_noise_levels[j] +
                                                                          CODE_BOOK_SCF_LAV11],
                                      sbrEnvData->hufftableNoiseLevelTimeL[sbrEnvData->sbr_noise_levels[j] +
                                                                          CODE_BOOK_SCF_LAV11]);
          }
        } else {

            
          payloadBits += WriteBits (hBitStream,
                                    sbrEnvData->hufftableNoiseLevelTimeC[sbrEnvData->sbr_noise_levels[j] +
                                                                        CODE_BOOK_SCF_LAV11],
                                    sbrEnvData->hufftableNoiseLevelTimeL[sbrEnvData->sbr_noise_levels[j] +
                                                                        CODE_BOOK_SCF_LAV11]);
        }
      }
      break;
    }
  }

  

  return payloadBits;
}
Ejemplo n.º 29
0
int
WritePsData (HANDLE_PS_ENC h_ps_e,
             int           bHeaderActive)
{
  int temp, gr;
  const int *aaHuffBookIidC;
  const short *aaHuffBookIccC;
  const char *aaHuffBookIidL;
  const char *aaHuffBookIccL;
  int *aaDeltaIid;
  int *aaDeltaIcc;

  int index, lastIndex;
  int noBitsF = 0;
  int noBitsT = 0;

  int aaDeltaIidT[NO_IID_BINS];
  int aaDeltaIccT[NO_ICC_BINS];

  int aaDeltaIidF[NO_IID_BINS];
  int aaDeltaIccF[NO_ICC_BINS];

  int abDtFlagIid;
  int abDtFlagIcc;

  int bSendHeader;

  unsigned int bZeroIid = 1;
  unsigned int bZeroIcc = 1;
  unsigned int bKeepParams = 1;

  HANDLE_BIT_BUF bb = &h_ps_e->psBitBuf;

  COUNT_sub_start("WritePsData");

  INDIRECT(1); MOVE(6); PTR_INIT(1); /* counting previous operations */

  FUNC(1);
  temp = GetBitsAvail(bb);

  /* bit buffer shall be empty */
  BRANCH(1);
  if (temp != 0)
  {
    COUNT_sub_end();
    return -1;
  }

  BRANCH(1);
  if (bHeaderActive) {

    MOVE(1);
    bKeepParams = 0;
  }

  MOVE(1);
  lastIndex = 0;

  PTR_INIT(3); /* h_ps_e->aaaIIDDataBuffer[][]
                  h_ps_e->aaaICCDataBuffer[][]
                  h_ps_e->aLastIidIndex[]
               */
  INDIRECT(1); LOOP(1);
  for (gr = 0; gr < h_ps_e->iidIccBins; gr++) {
    float panValue = h_ps_e->aaaIIDDataBuffer[gr][SYSTEMLOOKAHEAD];

    MOVE(1); /* counting previous operation */

    ADD(2); BRANCH(1);
    if (panValue >= -panClass[0] &&
        panValue <=  panClass[0]) {

      MOVE(1);
      index = 0;
    }
    else  {

      BRANCH(1);
      if (panValue < 0) {

        PTR_INIT(1); /* panClass[] */
        LOOP(1);
        for (index = NO_IID_STEPS-1; panValue > -panClass[index]; index--) {
          ADD(1); /* for() condition */
        }

        ADD(1);
        index = -index - 1;
      }
      else  {
        PTR_INIT(1); /* panClass[] */
        LOOP(1);
        for (index = NO_IID_STEPS-1; panValue <  panClass[index]; index--) {
          ADD(1); /* for() condition */
        }

        ADD(1);
        index++;
      }

      MOVE(1);
      bZeroIid = 0;
    }

    BRANCH(1);
    if (gr == 0) {

      MOVE(2);
      aaDeltaIidF[gr] = index;
      noBitsT = 0;

      INDIRECT(1); MOVE(1);
      noBitsF = aBookPsIidFreqLength[index + CODE_BOOK_LAV_IID];
    }
    else {

      ADD(1); STORE(1);
      aaDeltaIidF[gr] = index - lastIndex;

      INDIRECT(1); ADD(1);
      noBitsF += aBookPsIidFreqLength[aaDeltaIidF[gr] + CODE_BOOK_LAV_IID];
    }

    MOVE(1);
    lastIndex = index;

    ADD(1); STORE(1);
    aaDeltaIidT[gr] = index - h_ps_e->aLastIidIndex[gr];

    MOVE(1);
    h_ps_e->aLastIidIndex[gr] = index;

    INDIRECT(1); ADD(1);
    noBitsT += aBookPsIidTimeLength[aaDeltaIidT[gr] + CODE_BOOK_LAV_IID];

    BRANCH(1);
    if (aaDeltaIidT[gr] != 0) {

      MOVE(1);
      bKeepParams = 0;
    }
  } /* gr */

  ADD(1); LOGIC(1); BRANCH(1);
  if (noBitsT < noBitsF && !bHeaderActive) {

    MOVE(4);
    abDtFlagIid    = 1;
    aaDeltaIid     = aaDeltaIidT;
    aaHuffBookIidC = aBookPsIidTimeCode;
    aaHuffBookIidL = aBookPsIidTimeLength;
  }
  else  {

    MOVE(4);
    abDtFlagIid    = 0;
    aaDeltaIid     = aaDeltaIidF;
    aaHuffBookIidC = aBookPsIidFreqCode;
    aaHuffBookIidL = aBookPsIidFreqLength;
  }

  MOVE(1);
  lastIndex = 0;

  PTR_INIT(4); /* h_ps_e->aaaICCDataBuffer[][]
                  h_ps_e->aLastIccIndex[]
                  aaDeltaIccF[]
                  aaDeltaIccT[]
               */
  INDIRECT(1); LOOP(1);
  for (gr = 0; gr < h_ps_e->iidIccBins; gr++) {

    float saValue = h_ps_e->aaaICCDataBuffer[gr][SYSTEMLOOKAHEAD];

    MOVE(1); /* counting previous operation */

    ADD(1); BRANCH(1);
    if (saValue <= saClass[0]) {

      MOVE(1);
      index = 0;
    }
    else  {
      PTR_INIT(1); /* saClass[] */
      LOOP(1);
      for (index = NO_ICC_STEPS-2;  saValue < saClass[index]; index--) {
        ADD(1); /* for() condition */
      }

      ADD(1);
      index++;

      MOVE(1);
      bZeroIcc = 0;
    }

    BRANCH(1);
    if (gr == 0) {

      MOVE(1);
      aaDeltaIccF[gr] = index;

      INDIRECT(1); MOVE(1);
      noBitsF = aBookPsIccFreqLength[index + CODE_BOOK_LAV_ICC];

      MOVE(1);
      noBitsT = 0;
    }
    else  {
      ADD(1); STORE(1);
      aaDeltaIccF[gr] = index - lastIndex;

      INDIRECT(1); ADD(1);
      noBitsF += aBookPsIccFreqLength[aaDeltaIccF[gr] + CODE_BOOK_LAV_ICC];
    }

    MOVE(1);
    lastIndex = index;

    ADD(1); STORE(1);
    aaDeltaIccT[gr] = index - h_ps_e->aLastIccIndex[gr];

    MOVE(1);
    h_ps_e->aLastIccIndex[gr] = index;

    INDIRECT(1); ADD(1);
    noBitsT += aBookPsIccTimeLength[aaDeltaIccT[gr] + CODE_BOOK_LAV_ICC];

    BRANCH(1);
    if (aaDeltaIccT[gr] != 0) {

      MOVE(1);
      bKeepParams = 0;
    }
  } /* gr */

  ADD(1); LOGIC(1); BRANCH(1);
  if (noBitsT < noBitsF && !bHeaderActive) {

    MOVE(4);
    abDtFlagIcc    = 1;
    aaDeltaIcc     = aaDeltaIccT;
    aaHuffBookIccC = aBookPsIccTimeCode;
    aaHuffBookIccL = aBookPsIccTimeLength;
  }
  else {

    MOVE(4);
    abDtFlagIcc    = 0;
    aaDeltaIcc     = aaDeltaIccF;
    aaHuffBookIccC = aBookPsIccFreqCode;
    aaHuffBookIccL = aBookPsIccFreqLength;
  }

  {
    static __thread int initheader = 0;

    MOVE(1); /* counting previous operation */

    LOGIC(1); BRANCH(1);
    if (!initheader || bHeaderActive) {

      INDIRECT(1); MOVE(2);
      initheader = 1;
      h_ps_e->bEnableHeader = 1;
    }
    else {

      INDIRECT(1); MOVE(1);
      h_ps_e->bEnableHeader = 0;
    }
  }

  INDIRECT(3); ADD(2); LOGIC(2);
  bSendHeader = h_ps_e->bEnableHeader            ||
                h_ps_e->bPrevZeroIid != bZeroIid ||
                h_ps_e->bPrevZeroIcc != bZeroIcc;

  FUNC(3);
  WriteBits (bb, bSendHeader, 1);

  BRANCH(1);
  if (bSendHeader) {

    LOGIC(1); FUNC(3);
    WriteBits (bb, !bZeroIid, 1);

    BRANCH(1);
    if (!bZeroIid)
    {
      BRANCH(1); FUNC(3);
      WriteBits (bb, (h_ps_e->bHiFreqResIidIcc)?1:0, 3);
    }

    LOGIC(1); FUNC(3);
    WriteBits (bb, !bZeroIcc, 1);

    BRANCH(1);
    if (!bZeroIcc)
    {
      BRANCH(1); FUNC(3);
      WriteBits (bb, (h_ps_e->bHiFreqResIidIcc)?1:0, 3);
    }

    FUNC(3);
    WriteBits (bb, 0, 1);
  }

  FUNC(3);
  WriteBits (bb, 0, 1);

  ADD(1); FUNC(3);
  WriteBits (bb, 1-bKeepParams, 2);

  PTR_INIT(1); /* h_ps_e->iidIccBins
                */
  BRANCH(1);
  if (!bKeepParams) {

    LOGIC(1); BRANCH(1);
    if (!bZeroIid) {

      FUNC(3);
      WriteBits (bb, abDtFlagIid, 1);

      LOOP(1);
      for (gr = 0; gr < h_ps_e->iidIccBins; gr++) {

        INDIRECT(2); FUNC(3);
        WriteBits (bb,
                   aaHuffBookIidC[aaDeltaIid[gr] + CODE_BOOK_LAV_IID],
                   aaHuffBookIidL[aaDeltaIid[gr] + CODE_BOOK_LAV_IID]);
      } /* gr */
    }  /* if (!bZeroIid) */
  }

  PTR_INIT(1); /* h_ps_e->iidIccBins
               */
  BRANCH(1);
  if (!bKeepParams) {

    LOGIC(1); BRANCH(1);
    if (!bZeroIcc) {

      FUNC(3);
      WriteBits (bb, abDtFlagIcc, 1);

      LOOP(1);
      for (gr = 0; gr < h_ps_e->iidIccBins; gr++) {

        INDIRECT(2); FUNC(3);
        WriteBits (bb,
                   aaHuffBookIccC[aaDeltaIcc[gr] + CODE_BOOK_LAV_ICC],
                   aaHuffBookIccL[aaDeltaIcc[gr] + CODE_BOOK_LAV_ICC]);
      } /* gr */
    }  /* if (!bZeroIcc) */
  }

  INDIRECT(2); MOVE(2);
  h_ps_e->bPrevZeroIid = bZeroIid;
  h_ps_e->bPrevZeroIcc = bZeroIcc;

  FUNC(1); /* counting post-operation */

  COUNT_sub_end();

  return  GetBitsAvail(bb);

} /* writePsData */
Ejemplo n.º 30
0
void CEncoder::WriteByte(Byte b) { WriteBits(b , 8); }