Exemple #1
0
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;
}
Exemple #2
0
void KeyQueueRemoveKey(int queue[], int key)
{
	for (int i = 0; i < max_queue; i++)
		if (queue[i] == key)
			FillGap(queue, i);
}
Exemple #3
0
/*! \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;
}