Example #1
0
FT_EXPORT(bool) FTGetData(PFreetrackData data)
{
  static int frame = 0;
  static int prevDataID = 0;
  static int dlyTrackingOff = 0;
  static int tracking = 0;

//  dbg_report("NP_GetData called.");
  if (FTCreateMapping() == false) return false;

  if (hFTMutex && WaitForSingleObject(hFTMutex, 5) == WAIT_OBJECT_0) {
	if (pMemData) {

		//
		// When FaceTrackNoIR does not update frames (any more), don't update the data.
		//
		if (prevDataID != pMemData->data.DataID) {
			memcpy(data, &pMemData->data, sizeof(TFreeTrackData));
			dlyTrackingOff = 0;
		}
		else {
			dlyTrackingOff++;
			if (dlyTrackingOff > 20) {
				dlyTrackingOff = 100;
				tracking = false;
			}
		}
		prevDataID = pMemData->data.DataID;
		
		//
		// Limit the range of DataID
		//
		if (pMemData->data.DataID > 1000) {
			pMemData->data.DataID = 0;
		}
		data->DataID = pMemData->data.DataID;

		//
		// Send the ID to FaceTrackNoIR, so it can display the game-name.
		// This could be a FreeTrack-specific ID
		//
        pMemData->GameID = gameid;
	}
	ReleaseMutex(hFTMutex);
  }
  return true;
}
Example #2
0
FT_EXPORT(bool) FTGetData(PFreetrackData data)
{
//  dbg_report("NP_GetData called.");
  if (FTCreateMapping() == false) return false;

  if (hFTMutex && WaitForSingleObject(hFTMutex, 5) == WAIT_OBJECT_0) {
	if (pMemData) {
		//
		// Limit the range of DataID
		//
		if (pMemData->data.DataID > 1000) {
			pMemData->data.DataID = 0;
		}
		data->DataID = pMemData->data.DataID;

	}
	ReleaseMutex(hFTMutex);
  }
  return true;
}