void CGapList::FillGap(uint16 part) { if (part >= m_iPartCount) { wxFAIL; return; } uint64 gapstart = part * PARTSIZE; uint64 gapend = gapstart + GetPartSize(part) - 1; FillGap(gapstart, gapend); m_partsComplete[part] = complete; }
void KeyQueueRemoveKey(int queue[], int key) { for (int i = 0; i < max_queue; i++) if (queue[i] == key) FillGap(queue, i); }
/*! \brief fill gaps and delete short tracks * * \param iCurrentFrame current frame number * \param pAnalParams pointer to analysis parameters */ void sms_cleanTracks (int iCurrentFrame, SMS_AnalParams *pAnalParams) { int iTrack, iLength, iFrame; static int *pIState = NULL; static int nStates = 0; if (pIState == NULL || nStates != pAnalParams->nGuides) { /* \todo shouldn't this memory allocation be checked? */ pIState = (int *) calloc (pAnalParams->nGuides, sizeof(int)); nStates = pAnalParams->nGuides; } /* if fundamental and first partial are short, delete everything */ if ((pAnalParams->iFormat == SMS_FORMAT_H || pAnalParams->iFormat == SMS_FORMAT_HP) && pAnalParams->ppFrames[iCurrentFrame]->deterministic.pFSinAmp[0] == 0 && pIState[0] > 0 && pIState[0] < pAnalParams->iMinTrackLength && pAnalParams->ppFrames[iCurrentFrame]->deterministic.pFSinAmp[1] == 0 && pIState[1] > 0 && pIState[1] < pAnalParams->iMinTrackLength) { iLength = pIState[0]; for (iTrack = 0; iTrack < pAnalParams->nGuides; iTrack++) { for (iFrame = 1; iFrame <= iLength; iFrame++) { if((iCurrentFrame - iFrame) >= 0) { pAnalParams->ppFrames[iCurrentFrame - iFrame]->deterministic.pFSinAmp[iTrack] = 0; pAnalParams->ppFrames[iCurrentFrame - iFrame]->deterministic.pFSinFreq[iTrack] = 0; pAnalParams->ppFrames[iCurrentFrame - iFrame]->deterministic.pFSinPha[iTrack] = 0; } } pIState[iTrack] = -pAnalParams->iMaxSleepingTime; } if (pAnalParams->iDebugMode == SMS_DBG_CLEAN_TRAJ || pAnalParams->iDebugMode == SMS_DBG_ALL) { fprintf(stdout, "cleanTrack: frame %d to frame %d deleted\n", pAnalParams->ppFrames[iCurrentFrame-iLength]->iFrameNum, pAnalParams->ppFrames[iCurrentFrame-1]->iFrameNum); } return; } /* check every partial individually */ for (iTrack = 0; iTrack < pAnalParams->nGuides; iTrack++) { /* track after gap */ if(pAnalParams->ppFrames[iCurrentFrame]->deterministic.pFSinAmp[iTrack] != 0) { if(pIState[iTrack] < 0 && pIState[iTrack] > -pAnalParams->iMaxSleepingTime) FillGap (iCurrentFrame, iTrack, pIState, pAnalParams); else pIState[iTrack] = (pIState[iTrack]<0) ? 1 : pIState[iTrack]+1; } /* gap after track */ else { if(pIState[iTrack] > 0 && pIState[iTrack] < pAnalParams->iMinTrackLength) DeleteShortTrack (iCurrentFrame, iTrack, pIState, pAnalParams); else pIState[iTrack] = (pIState[iTrack]>0) ? -1 : pIState[iTrack]-1; } } return; }