parent
							
								
									73204b5378
								
							
						
					
					
						commit
						a10d5cb96b
					
				| 
						 | 
					@ -147,7 +147,24 @@ void DivDispatchContainer::grow(size_t size) {
 | 
				
			||||||
void DivDispatchContainer::acquire(size_t offset, size_t count) {
 | 
					void DivDispatchContainer::acquire(size_t offset, size_t count) {
 | 
				
			||||||
  CHECK_MISSING_BUFS;
 | 
					  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++) {
 | 
					  for (int i=0; i<DIV_MAX_OUTPUTS; i++) {
 | 
				
			||||||
    if (i>=outs) {
 | 
					    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 (bbIn[i]==NULL) continue;
 | 
				
			||||||
      if (bb[i]==NULL) continue;
 | 
					      if (bb[i]==NULL) continue;
 | 
				
			||||||
      int s=0;
 | 
					      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++];
 | 
					        temp[i]=bbIn[i][s++];
 | 
				
			||||||
        blip_add_delta_fast(bb[i],j,temp[i]-prevSample[i]);
 | 
					        blip_add_delta_fast(bb[i],j,temp[i]-prevSample[i]);
 | 
				
			||||||
        prevSample[i]=temp[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 (bbIn[i]==NULL) continue;
 | 
				
			||||||
      if (bb[i]==NULL) continue;
 | 
					      if (bb[i]==NULL) continue;
 | 
				
			||||||
      int s=0;
 | 
					      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++];
 | 
					        temp[i]=bbIn[i][s++];
 | 
				
			||||||
        blip_add_delta(bb[i],j,temp[i]-prevSample[i]);
 | 
					        blip_add_delta(bb[i],j,temp[i]-prevSample[i]);
 | 
				
			||||||
        prevSample[i]=temp[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++) {
 | 
					  for (int i=0; i<outs; i++) {
 | 
				
			||||||
    if (bbOut[i]==NULL) continue;
 | 
					    if (bbOut[i]==NULL) continue;
 | 
				
			||||||
    if (bb[i]==NULL) continue;
 | 
					    if (bb[i]==NULL) continue;
 | 
				
			||||||
| 
						 | 
					@ -228,6 +249,10 @@ void DivDispatchContainer::clear() {
 | 
				
			||||||
    prevSample[i]=0;
 | 
					    prevSample[i]=0;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  runPosSub=0;
 | 
				
			||||||
 | 
					  fillSub=0;
 | 
				
			||||||
 | 
					  lastCount=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (dispatch->getDCOffRequired()) {
 | 
					  if (dispatch->getDCOffRequired()) {
 | 
				
			||||||
    dcOffCompensation=true;
 | 
					    dcOffCompensation=true;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -184,13 +184,13 @@ struct DivNoteEvent {
 | 
				
			||||||
struct DivDispatchContainer {
 | 
					struct DivDispatchContainer {
 | 
				
			||||||
  DivDispatch* dispatch;
 | 
					  DivDispatch* dispatch;
 | 
				
			||||||
  blip_buffer_t* bb[DIV_MAX_OUTPUTS];
 | 
					  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];
 | 
					  int temp[DIV_MAX_OUTPUTS], prevSample[DIV_MAX_OUTPUTS];
 | 
				
			||||||
  short* bbInMapped[DIV_MAX_OUTPUTS];
 | 
					  short* bbInMapped[DIV_MAX_OUTPUTS];
 | 
				
			||||||
  short* bbIn[DIV_MAX_OUTPUTS];
 | 
					  short* bbIn[DIV_MAX_OUTPUTS];
 | 
				
			||||||
  short* bbOut[DIV_MAX_OUTPUTS];
 | 
					  short* bbOut[DIV_MAX_OUTPUTS];
 | 
				
			||||||
  bool lowQuality, dcOffCompensation;
 | 
					  bool lowQuality, dcOffCompensation;
 | 
				
			||||||
  unsigned char rateMul, runPosSub;
 | 
					  unsigned char rateMul, runPosSub, fillSub;
 | 
				
			||||||
  double rateMemory;
 | 
					  double rateMemory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void setRates(double gotRate);
 | 
					  void setRates(double gotRate);
 | 
				
			||||||
| 
						 | 
					@ -209,10 +209,12 @@ struct DivDispatchContainer {
 | 
				
			||||||
    runLeft(0),
 | 
					    runLeft(0),
 | 
				
			||||||
    runPos(0),
 | 
					    runPos(0),
 | 
				
			||||||
    lastAvail(0),
 | 
					    lastAvail(0),
 | 
				
			||||||
 | 
					    lastCount(0),
 | 
				
			||||||
    lowQuality(false),
 | 
					    lowQuality(false),
 | 
				
			||||||
    dcOffCompensation(false),
 | 
					    dcOffCompensation(false),
 | 
				
			||||||
    rateMul(0),
 | 
					    rateMul(0),
 | 
				
			||||||
    runPosSub(0),
 | 
					    runPosSub(0),
 | 
				
			||||||
 | 
					    fillSub(0),
 | 
				
			||||||
    rateMemory(0.0) {
 | 
					    rateMemory(0.0) {
 | 
				
			||||||
    memset(bb,0,DIV_MAX_OUTPUTS*sizeof(blip_buffer_t*));
 | 
					    memset(bb,0,DIV_MAX_OUTPUTS*sizeof(blip_buffer_t*));
 | 
				
			||||||
    memset(temp,0,DIV_MAX_OUTPUTS*sizeof(int));
 | 
					    memset(temp,0,DIV_MAX_OUTPUTS*sizeof(int));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue