

#ifndef RATE_H
#define RATE_H


#define MAX_FINE_BITS 8
#define QTHETA_OFFSET 4

#include "ssc_cwrs.h"
#include "ssc_mode.h"

void compute_pulse_cache(AUDIOMode *m, int LM);

static SSC_INLINE int num_pulses(int i)
{
	if(i>=8)
		i = (8 + (i & 7)) << ((i >> 3) - 1);
	return i;
}


static SSC_INLINE int pulse_coding(int bits,const unsigned char* cache)
{
   int i;
   int lo, hi;

   lo = 0;
   hi = cache[0];
   bits--;
   i = 6;
   do
   {
      int mid = (lo+hi+1)>>1;
      if ((int)cache[mid] >= bits)
         hi = mid;
      else
         lo = mid;
   } while (--i);

#ifndef High_Freq_DEBUG
   bits = bits << 1;
   if (lo == 0)
   {
	   if ((bits - 1) <= (int)cache[hi])
		   hi = lo;
   }
   else
   {
	   if((bits- (int)cache[lo]) <= (int)cache[hi])
		   hi = lo;
   }
   return hi;

#else


   if (bits- (lo == 0 ? -1 : (int)cache[lo]) <= (int)cache[hi]-bits)
	   return lo;
   else
	   return hi;


#endif

}

int calculate_bitalloc(const AUDIOMode *m, short end, const short *offsets, const short *cap, int alloc_trim, int *intensity, int *dual_stero,
	int total, int *balance, short *pulses, short *ebits, short *fine_priority, ec_ctx *ec	  
	);


#endif
