diff --git a/src/engine/dispatchContainer.cpp b/src/engine/dispatchContainer.cpp index 307f0957..d98c450e 100644 --- a/src/engine/dispatchContainer.cpp +++ b/src/engine/dispatchContainer.cpp @@ -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; + 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=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; jgetDCOffRequired()) { dcOffCompensation=true; } diff --git a/src/engine/engine.h b/src/engine/engine.h index 09809089..077daf5d 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -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));