The FOVE 0 has a 120Hz eye tracker. This means the eye tracking cameras are taking new images every 1s/120 ~= 8.3ms.
The images are then sent to the PC over USB, where the Windows UVC driver reads them, then passes them to FoveService.exe for processing. The timestamp is taken on the host PC as soon as the images come in.
For unknown reasons, the Windows UVC driver will often process frames bunched together two at a time, so the time stamps end up looking like: 14ms-2ms-14ms-2ms.
Within any given one-second timespan, there will be 120 frames. However, the inter-frame intervals will vary. In any case, the camera itself is always timed precisely and you can assume 1s/120 intervals in your calculations.
Still, we recommend that you look at the frame index parameter to check for missed frames. Missed frames occur when the PC cannot keep up with the eye tracker—usually because the PC is below spec. However, some other process (such as a browser) could be taking up too many resources, leaving the FOVE eye tracker without enough resources to complete eye-tracking calculations in 8ms.
On Linux, the grouping problem does not occur, but there is still some variability between the timestamp intervals due to fluctuations in USB transmission speed and the variable amounts of data per frame as the image content changes.
With the FOVE 480, we take the timestamp on the headset itself, then send it to the PC. This increases the stability of the timestamps significantly.