Getting axisCamera image result in n ecxeption somtimes

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:

_Priv_ReadJPEGString_C(image.getAddress(), getByteBufferAddress(string_buf), stringLength);

Line 29329 in NIVision.class.

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.

Thanks in advance!

That error code is undocumented. Can you post the full error text?

Here you go, hope this help.

Thanks for your help!





Take screenshots please :slight_smile:

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).

But the main issue is that I get an unkown exception. You thinks that the exception is cused by outOfBufferException in the native method?

I would of take screenshots but I did’t had the computer neer me :p.

Ammm… so it never happend to other teams? No one ever reported this issue?