Hi all, my team and I are trying to make vision code for the robot.
The vision works great but sometimes we get an exception from the getImage method in the axisCamera class. After I get several exception I get an outOfMemory exception pointing on the getImage method. Those two exception are pointing on the native method that the getImage use.
Error:
I dont have the error text right now but this is an unkownError type. the error code is imaqError -123673104, I didnt find any help in the internet for this error.
So it’s more than an undocumented error code, it seems WPILib is actually using NIVision black magic with a “private” function that’s completely undocumented. You might be better off opening an issue on the WPILib repo. I can’t help without documentation or source code :rolleyes:
My understanding of the NIVision code is that it’s actually written in C++ natively and have a Java wrapper. Because of this, the Java garbage collector doesn’t reclaim image buffers allocated by NIVision API. Therefore, if you allocate image buffer for every frame, you are going to run out of memory really fast if you don’t explicitly release the buffer after it’s done. There are a lot of discussion threads about this issue, you can probably find and read them in the forums here. There are two ways to fix this. You can either rewrite the code so it doesn’t allocate a new image buffer on every frame you process (we rewrote our code that only uses two preallocated frame buffers), or you will need to call image.free() when you are done with the buffer (Please note that I don’t have the NIVision documentation in front of me so the actual API name may be different).