I’m using blackmagic devices in touchdesigner with the DeviceIn TOP. Its for my project imporant that I process every frame and do not skip by the hardware captured frames.
The hardware rough setup looks like this:
Zcam (4kp60) —> Blackmagic Design UltraStudio 4K Mini ----> Thunderbolt3 ----> very fast PCs
Sometimes the “frame_queue_length” is larger than 1, which means that there were captured more than 1 frame during the last cook. And for the current cook TD will just use the lastest captured frame and drops the other one. In this case the counter for “frames_skipped” will increase.
This happens in a very simple project with just the deviceInTOP. I reduced the frames_skipped by disabling vsync and set the projects ftp to 600 fps. But there are still some skipped frames Also I noticed when using 10bit the number of skipped frames are increasing faster.
Is there somehow a way to access the frames which are in the internal frame queue or another solution to eliminate frame skipping ?
As a fallback I started my own DecklinkTOP, which will capture frame and put them in a frame queue. Similar to the Cplusplus CPU TOP example.
We also make use of a queue that is at most 3 in size. We don’t just skip frames from the queue, we use them next frame instead. They’ll only be skipped if frames come in faster than we are able to consume them, or if TouchDesigner is dropping frames. What is your framerate running at, and is your signal format FPS and timeline FPS matching? If they don’t match your monitor exactly, then you will need vsync turned off.
Camera is outputting with 59.94fps, I tested all combinations of timeline fps and vsync options. Tested also with a 240fps timeline on a 240hz screen. The result is always the same: When the frame_queue hits 2, the next frame is skipped. But no frames were dropped.
Vsync was also deactivated via nvidia control tool.just to make sure.
You definitely want to be running at 59.94 FPS in your timeline then (with vsync off). I’ll take tommorow in the office, but in this case we should be consuming frames at the same rate they are being produced, and the queue allows for some variance about when they are produced vs consumed.