blip_buf clock<rate bug workaround, part 2?
This commit is contained in:
		
							parent
							
								
									f7f1734c7d
								
							
						
					
					
						commit
						73204b5378
					
				| 
						 | 
				
			
			@ -86,9 +86,16 @@
 | 
			
		|||
void DivDispatchContainer::setRates(double gotRate) {
 | 
			
		||||
  int outs=dispatch->getOutputCount();
 | 
			
		||||
 | 
			
		||||
  int rate=dispatch->rate;
 | 
			
		||||
  rateMul=0;
 | 
			
		||||
  while (rateMul<8 && rate<gotRate) {
 | 
			
		||||
    rate*=2;
 | 
			
		||||
    rateMul++;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (int i=0; i<outs; i++) {
 | 
			
		||||
    if (bb[i]==NULL) continue;
 | 
			
		||||
    blip_set_rates(bb[i],dispatch->rate,gotRate);
 | 
			
		||||
    blip_set_rates(bb[i],rate,gotRate);
 | 
			
		||||
  }
 | 
			
		||||
  rateMemory=gotRate;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -120,7 +127,13 @@ void DivDispatchContainer::grow(size_t size) {
 | 
			
		|||
        logE("not enough memory!"); \
 | 
			
		||||
        return; \
 | 
			
		||||
      } \
 | 
			
		||||
      blip_set_rates(bb[i],dispatch->rate,rateMemory); \
 | 
			
		||||
      int rate=dispatch->rate; \
 | 
			
		||||
      rateMul=0; \
 | 
			
		||||
      while (rateMul<8 && rate<rateMemory) { \
 | 
			
		||||
        rate*=2; \
 | 
			
		||||
        rateMul++; \
 | 
			
		||||
      } \
 | 
			
		||||
      blip_set_rates(bb[i],rate,rateMemory); \
 | 
			
		||||
 \
 | 
			
		||||
      if (bbIn[i]==NULL) bbIn[i]=new short[bbInLen]; \
 | 
			
		||||
      if (bbOut[i]==NULL) bbOut[i]=new short[bbInLen]; \
 | 
			
		||||
| 
						 | 
				
			
			@ -134,6 +147,8 @@ void DivDispatchContainer::grow(size_t size) {
 | 
			
		|||
void DivDispatchContainer::acquire(size_t offset, size_t count) {
 | 
			
		||||
  CHECK_MISSING_BUFS;
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  for (int i=0; i<DIV_MAX_OUTPUTS; i++) {
 | 
			
		||||
    if (i>=outs) {
 | 
			
		||||
      bbInMapped[i]=NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -160,6 +175,8 @@ void DivDispatchContainer::flush(size_t count) {
 | 
			
		|||
void DivDispatchContainer::fillBuf(size_t runtotal, size_t offset, size_t size) {
 | 
			
		||||
  CHECK_MISSING_BUFS;
 | 
			
		||||
 | 
			
		||||
  int step=1<<rateMul;
 | 
			
		||||
 | 
			
		||||
  if (dcOffCompensation && runtotal>0) {
 | 
			
		||||
    dcOffCompensation=false;
 | 
			
		||||
    for (int i=0; i<outs; i++) {
 | 
			
		||||
| 
						 | 
				
			
			@ -171,8 +188,9 @@ void DivDispatchContainer::fillBuf(size_t runtotal, size_t offset, size_t size)
 | 
			
		|||
    for (int i=0; i<outs; i++) {
 | 
			
		||||
      if (bbIn[i]==NULL) continue;
 | 
			
		||||
      if (bb[i]==NULL) continue;
 | 
			
		||||
      for (size_t j=0; j<runtotal; j++) {
 | 
			
		||||
        temp[i]=bbIn[i][j];
 | 
			
		||||
      int s=0;
 | 
			
		||||
      for (size_t j=0; j<runtotal; j+=step) {
 | 
			
		||||
        temp[i]=bbIn[i][s++];
 | 
			
		||||
        blip_add_delta_fast(bb[i],j,temp[i]-prevSample[i]);
 | 
			
		||||
        prevSample[i]=temp[i];
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -181,8 +199,9 @@ void DivDispatchContainer::fillBuf(size_t runtotal, size_t offset, size_t size)
 | 
			
		|||
    for (int i=0; i<outs; i++) {
 | 
			
		||||
      if (bbIn[i]==NULL) continue;
 | 
			
		||||
      if (bb[i]==NULL) continue;
 | 
			
		||||
      for (size_t j=0; j<runtotal; j++) {
 | 
			
		||||
        temp[i]=bbIn[i][j];
 | 
			
		||||
      int s=0;
 | 
			
		||||
      for (size_t j=0; j<runtotal; j+=step) {
 | 
			
		||||
        temp[i]=bbIn[i][s++];
 | 
			
		||||
        blip_add_delta(bb[i],j,temp[i]-prevSample[i]);
 | 
			
		||||
        prevSample[i]=temp[i];
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -190,6 +190,7 @@ struct DivDispatchContainer {
 | 
			
		|||
  short* bbIn[DIV_MAX_OUTPUTS];
 | 
			
		||||
  short* bbOut[DIV_MAX_OUTPUTS];
 | 
			
		||||
  bool lowQuality, dcOffCompensation;
 | 
			
		||||
  unsigned char rateMul, runPosSub;
 | 
			
		||||
  double rateMemory;
 | 
			
		||||
 | 
			
		||||
  void setRates(double gotRate);
 | 
			
		||||
| 
						 | 
				
			
			@ -210,6 +211,8 @@ struct DivDispatchContainer {
 | 
			
		|||
    lastAvail(0),
 | 
			
		||||
    lowQuality(false),
 | 
			
		||||
    dcOffCompensation(false),
 | 
			
		||||
    rateMul(0),
 | 
			
		||||
    runPosSub(0),
 | 
			
		||||
    rateMemory(0.0) {
 | 
			
		||||
    memset(bb,0,DIV_MAX_OUTPUTS*sizeof(blip_buffer_t*));
 | 
			
		||||
    memset(temp,0,DIV_MAX_OUTPUTS*sizeof(int));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue