AravisProject / aravis

A vision library for genicam based cameras
GNU Lesser General Public License v2.1
886 stars 329 forks source link

Wrong SI_maximum_trailer_size and SI_maximum_leader_size #209

Closed mvxe closed 5 years ago

mvxe commented 5 years ago

I had a strange issue with my Allied Mako U-130B camera. Both the Aravis viewer and my own program using the Aravis API would not get anything frames via the stream unless the camera was open at least once before using the Allied Vimba API. If the camera gets unplugged and replugged or if I simply set a reset command, then it wouldn't work until it is again opened by the proprietary API at least once.

Not wanting to deal with the proprietary API as its buggy as hell, I used Wireshark to sniff out whats wrong. Apparently there are a lot of these errors: Status: U3V_STATUS_SI_PAYLOAD_SIZE_NOT_ALIGNED (0xa003) Status: U3V_STATUS_SI_REGISTERS_INCONSISTENT (0xa004) And the like. It seams that the Aravis API sets the registers SI_maximum_trailer_size and SI_maximum_leader_size to values 32 and 65, while the Vimba API sets them to 1024. If they were already set to 1024 by Vimba, the camera simply complains but doesn't seam to overwrite its settings, and the image acquisition with Aravis works.

My workaround is to add: int32_t valx=1024; arv_device_write_memory (dev,0x000000000002002c,4,&valx,NULL); //SI_maximum_trailer_size arv_device_write_memory (dev,0x0000000000020018,4,&valx,NULL); //SI_maximum_leader_size The camera still complains because the API tries to set it to a wrong value afterwards anyway, but at least I can use my camera without initializing it with the proprietary API.

Also, I found some unprotected Basler camera on my network, and again the Aravis API could not retrieve any images from it until I added the workaround, after which it worked fine.

Also thanks for the awesome API!

EmmanuelP commented 5 years ago

This should be fixed by Johannes in commit 16888e9e94fcf5007f6006e47a0e2696612dab11. Please reopen if it not the case.