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; }
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; }