USB3 Error 0xE200010B "The image stream is out of sync" (related: BlockID() = UINT64T_MAX)
This warning message is shown in pylon viewer or the customer's code.
Also the customer may notice that BlockID() ceases to be sequential for subsequent images, and instead holds a constant value of UINT64T_MAX (or -1 if cast to int).
This warning indicates that the underlying image stream from the camera to the host has fallen out of synchronization.
Most likely causes are:
- Faulty cable or host controller
- Faulty host controller drivers
- The usage of CancelGrab() within the customer's code. The behavior of this call has different effects for USB cameras than for GigE cameras.
1. Please read the pylon Programmer's Guide (Advanced Topics --> Migrating Existing Code for Using USB Camera Devices) for full details!
- This is installed with pylon and can be found here: C:\Program Files\Basler\pylon 5\Development\Doc
2. The customer should check that their cables & Host Controller are of good quality and preferably meet the recommendations in the following document:
3. The customer should examine their usage of CancelGrab() in their code to determine if modifications need to be made.
- Excerpt from programmer's guide:
USB Camera Devices and Block ID
Image data is transferred between a PC and a USB camera device using a certain sequence of data packets. In the rare case of an error during the image transport, the image data stream between PC and USB camera device is reset automatically, e.g. if the image packet sequence is out of sync. The image data stream reset causes the Block ID delivered by the USB camera device to start again at zero. pylon indicates this error condition by setting the Block ID of the grab result to its highest possible value (UINT64_MAX) for all subsequent grab results. A Block ID of UINT64_MAX is invalid and cannot be used in any further operations. The image data and other grab result data are not affected by the Block ID being invalid. The grabbing needs to be stopped and restarted to recover from this error condition if the application uses the Block ID. The Block ID starts at zero if the grabbing is restarted.
Applications that are still using the Low Level API can use the pylon::IStreamGrabber::CancelGrab method. Calling CancelGrab resets the image stream between PC and USB camera device, too. Therefore, the value of the Block ID is set to UINT64_MAX for all subsequent grab results after calling CancelGrab.
- Considerations when using the Low Level API:
If using the low level api, the definition of "The grabbing needs to be stopped and restarted to recover from this error" above translates to:
(Assuming that CancelGrab() has invoked the stream reset)
1. Degregister Buffers
6. Re-Register Buffers
7. Re-Queue Buffers