parent
							
								
									73204b5378
								
							
						
					
					
						commit
						a10d5cb96b
					
				| 
						 | 
				
			
			@ -147,7 +147,24 @@ void DivDispatchContainer::grow(size_t size) {
 | 
			
		|||
void DivDispatchContainer::acquire(size_t offset, size_t count) {
 | 
			
		||||
  CHECK_MISSING_BUFS;
 | 
			
		||||
 | 
			
		||||
  if (rateMul) {
 | 
			
		||||
    //logV("req: from %d to %d",offset,offset+count-1);
 | 
			
		||||
    offset+=runPosSub;
 | 
			
		||||
    size_t oldCount=count;
 | 
			
		||||
    runPosSub=(runPosSub+oldCount)&((1<<rateMul)-1);
 | 
			
		||||
    count+=runPosSub;
 | 
			
		||||
 | 
			
		||||
    offset>>=rateMul;
 | 
			
		||||
    count>>=rateMul;
 | 
			
		||||
 | 
			
		||||
    if (offset!=0 && offset!=lastCount) {
 | 
			
		||||
      logW("Shit!");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    lastCount=offset+count;
 | 
			
		||||
 | 
			
		||||
    logV("got: from %d to %d",offset,offset+count-1);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (int i=0; i<DIV_MAX_OUTPUTS; i++) {
 | 
			
		||||
    if (i>=outs) {
 | 
			
		||||
| 
						 | 
				
			
			@ -189,7 +206,7 @@ void DivDispatchContainer::fillBuf(size_t runtotal, size_t offset, size_t size)
 | 
			
		|||
      if (bbIn[i]==NULL) continue;
 | 
			
		||||
      if (bb[i]==NULL) continue;
 | 
			
		||||
      int s=0;
 | 
			
		||||
      for (size_t j=0; j<runtotal; j+=step) {
 | 
			
		||||
      for (size_t j=fillSub; j<runtotal; j+=step) {
 | 
			
		||||
        temp[i]=bbIn[i][s++];
 | 
			
		||||
        blip_add_delta_fast(bb[i],j,temp[i]-prevSample[i]);
 | 
			
		||||
        prevSample[i]=temp[i];
 | 
			
		||||
| 
						 | 
				
			
			@ -200,7 +217,7 @@ void DivDispatchContainer::fillBuf(size_t runtotal, size_t offset, size_t size)
 | 
			
		|||
      if (bbIn[i]==NULL) continue;
 | 
			
		||||
      if (bb[i]==NULL) continue;
 | 
			
		||||
      int s=0;
 | 
			
		||||
      for (size_t j=0; j<runtotal; j+=step) {
 | 
			
		||||
      for (size_t j=fillSub; j<runtotal; j+=step) {
 | 
			
		||||
        temp[i]=bbIn[i][s++];
 | 
			
		||||
        blip_add_delta(bb[i],j,temp[i]-prevSample[i]);
 | 
			
		||||
        prevSample[i]=temp[i];
 | 
			
		||||
| 
						 | 
				
			
			@ -208,6 +225,10 @@ void DivDispatchContainer::fillBuf(size_t runtotal, size_t offset, size_t size)
 | 
			
		|||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (rateMul) {
 | 
			
		||||
    fillSub=(fillSub+runtotal)&((1<<rateMul)-1);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (int i=0; i<outs; i++) {
 | 
			
		||||
    if (bbOut[i]==NULL) continue;
 | 
			
		||||
    if (bb[i]==NULL) continue;
 | 
			
		||||
| 
						 | 
				
			
			@ -228,6 +249,10 @@ void DivDispatchContainer::clear() {
 | 
			
		|||
    prevSample[i]=0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  runPosSub=0;
 | 
			
		||||
  fillSub=0;
 | 
			
		||||
  lastCount=0;
 | 
			
		||||
 | 
			
		||||
  if (dispatch->getDCOffRequired()) {
 | 
			
		||||
    dcOffCompensation=true;
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -184,13 +184,13 @@ struct DivNoteEvent {
 | 
			
		|||
struct DivDispatchContainer {
 | 
			
		||||
  DivDispatch* dispatch;
 | 
			
		||||
  blip_buffer_t* bb[DIV_MAX_OUTPUTS];
 | 
			
		||||
  size_t bbInLen, runtotal, runLeft, runPos, lastAvail;
 | 
			
		||||
  size_t bbInLen, runtotal, runLeft, runPos, lastAvail, lastCount;
 | 
			
		||||
  int temp[DIV_MAX_OUTPUTS], prevSample[DIV_MAX_OUTPUTS];
 | 
			
		||||
  short* bbInMapped[DIV_MAX_OUTPUTS];
 | 
			
		||||
  short* bbIn[DIV_MAX_OUTPUTS];
 | 
			
		||||
  short* bbOut[DIV_MAX_OUTPUTS];
 | 
			
		||||
  bool lowQuality, dcOffCompensation;
 | 
			
		||||
  unsigned char rateMul, runPosSub;
 | 
			
		||||
  unsigned char rateMul, runPosSub, fillSub;
 | 
			
		||||
  double rateMemory;
 | 
			
		||||
 | 
			
		||||
  void setRates(double gotRate);
 | 
			
		||||
| 
						 | 
				
			
			@ -209,10 +209,12 @@ struct DivDispatchContainer {
 | 
			
		|||
    runLeft(0),
 | 
			
		||||
    runPos(0),
 | 
			
		||||
    lastAvail(0),
 | 
			
		||||
    lastCount(0),
 | 
			
		||||
    lowQuality(false),
 | 
			
		||||
    dcOffCompensation(false),
 | 
			
		||||
    rateMul(0),
 | 
			
		||||
    runPosSub(0),
 | 
			
		||||
    fillSub(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