charmedlabs / pixy2

Other
131 stars 98 forks source link

When piping output of 'get_blocks_cpp_demo.cpp' to another application, buffering delays output #27

Open MattTavares opened 11 months ago

MattTavares commented 11 months ago

Related to the changes proposed in this pull request.

In certain scenarios, especially when the program's output is piped to another application, the default buffering behavior of C++ can lead to inconsistent and delayed camera block outputs. This is due to the buffering strategy switching from line-buffered to fully buffered, causing data to be held back until the buffer is full.

This change ensures that the output remains consistently line-buffered, regardless of the environment or how the output is being consumed. By setting the buffering mode explicitly using setvbuf, we guarantee that data is outputted as soon as it's available.

For the Pixy2 camera running the get_blocks_cpp_demo code, the absence of this buffering adjustment can have significant real-time implications. Without this change, the camera data, which is expected to be relayed immediately upon detection, can be delayed. This buffering delay can result in bursts of data being sent every few seconds, rather than a continuous stream. In practical terms, this means that rapid events captured by the camera, such as fast-moving objects, might not be processed in time, leading to missed detections or delayed responses.