GigE camera + Windows 10

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

GigE camera + Windows 10

Lukas Hille
Hi,

this is some experience report.
Its about getting the GigE camera adapter to work on Windows 10 for GigE
Mono cameras.

The GigE camera adapter:
https://micro-manager.org/wiki/GigECamera
is compiled to JAI SDK and Control Tool 1.4.1
https://www.jai.com/support-software/jai-software

I had trouble to get the drivers to work on Windows 10 and the new JAI
SDK didn't work with the adapter.
Therefore i compiled the camera adapter with the last SDK tools:
JAI SDK and Control Tool (64-bit) - 3.0.7 (Windows) - 111 MB

The compile worked without any warning or error message.
The drivers and the Control Tools in version 3.0.7 work on Windows 10.
Unfortunate i didn't get any Images.
The relevant debugging message for this was: J_Image_MallocEx() failed

In my case i only use Mono8 / Mono16 cameras in the lab.
I figured out that in GigECameraAcqu.cpp the function int
CGigECamera::aquireImage(J_tIMAGE_INFO* imageInfo, uint8_t *buffer)
checks for the pixel format:
if (BufferInfo.iPixelType == J_GVSP_PIX_MONO8 || BufferInfo.iPixelType
== J_GVSP_PIX_MONO16)
to directly copy the pixel data and not convert them with
J_Image_MallocEx() if they are already MONO8 or MONO16.
(converting pixel data which are already in the right format is causing
the MallocEx() function to fail)

With the new version of the JAI SDK i get a "custom" PixelType back (on
3 different types of GigE cameras the same):
BufferInfo.iPixelType == 0x81080001 for 8 bit || BufferInfo.iPixelType
== 0x81100007 for 16 bit.

To overcome this I just added this two pixel types to the if statement
and the adapter works now fine for me on Windows 10.

I wasn't able to work out why the PixelType now includes the "custom" tag.
The definitions in Jai_Factory.h are:

// Indicate if pixel is monochrome or RGB
#define J_GVSP_PIX_MONO         0x01000000
#define J_GVSP_PIX_RGB          0x02000000
#define J_GVSP_PIX_COLOR        0x02000000
#define J_GVSP_PIX_CUSTOM       0x80000000
#define J_GVSP_PIX_COLOR_MASK   0xFF000000

// Indicate effective number of bits occupied by the pixel (including
padding).
// This can be used to compute amount of memory required to store an image.
#define J_GVSP_PIX_OCCUPY8BIT   0x00080000
#define J_GVSP_PIX_OCCUPY12BIT  0x000C0000
#define J_GVSP_PIX_OCCUPY16BIT  0x00100000
#define J_GVSP_PIX_OCCUPY24BIT  0x00180000
#define J_GVSP_PIX_OCCUPY32BIT  0x00200000
#define J_GVSP_PIX_OCCUPY36BIT  0x00240000
#define J_GVSP_PIX_OCCUPY48BIT  0x00300000
#define J_GVSP_PIX_EFFECTIVE_PIXEL_SIZE_MASK    0x00FF0000
#define J_GVSP_PIX_EFFECTIVE_PIXEL_SIZE_SHIFT   16

// Pixel ID: lower 16-bit of the pixel type
#define J_GVSP_PIX_ID_MASK 0x0000FFFF

// 26.1 Mono buffer format defines
#define J_GVSP_PIX_MONO8         (J_GVSP_PIX_MONO |
J_GVSP_PIX_OCCUPY8BIT  | 0x0001) ///< 8-bit Monochrome pixel format
(Mono8=0x01080001)
#define J_GVSP_PIX_MONO8_SIGNED  (J_GVSP_PIX_MONO |
J_GVSP_PIX_OCCUPY8BIT  | 0x0002) ///< 8-bit Monochrome Signed pixel
format (Mono8Signed=0x01080002)
#define J_GVSP_PIX_MONO10        (J_GVSP_PIX_MONO |
J_GVSP_PIX_OCCUPY16BIT | 0x0003) ///< 10-bit Monochrome pixel format
(Mono10=0x01100003)
#define J_GVSP_PIX_MONO10_PACKED (J_GVSP_PIX_MONO |
J_GVSP_PIX_OCCUPY12BIT | 0x0004) ///< 10-bit Monochrome Packed pixel
format (Mono10Packed=0x010C0004)
#define J_GVSP_PIX_MONO12        (J_GVSP_PIX_MONO |
J_GVSP_PIX_OCCUPY16BIT | 0x0005) ///< 12-bit Monochrome pixel format
(Mono12=0x01100005)
#define J_GVSP_PIX_MONO12_PACKED (J_GVSP_PIX_MONO |
J_GVSP_PIX_OCCUPY12BIT | 0x0006) ///< 12-bit Monochrome Packed pixel
format (Mono12Packed=0x010C0006)
#define    J_GVSP_PIX_MONO14        (J_GVSP_PIX_MONO |
J_GVSP_PIX_OCCUPY16BIT | 0x0025) ///< 14-bit Monochrome pixel format
(Mono14=0x01100025)
#define J_GVSP_PIX_MONO16        (J_GVSP_PIX_MONO |
J_GVSP_PIX_OCCUPY16BIT | 0x0007) ///< 16-bit Monochrome pixel format
(Mono16=0x01100007)

Because of the expired Windows 7 support, this could get relevant for
some other users?

Note:
Without proper configuration of the Network adapter i got some strange
results.
Be sure to follow the instructions for packet size and lost packet
trouble shooting.
What I needed to get everything to work:
Flow Control: Disabled
Jumbo Packet: 9014 --> camera packet size: 8192 (without Jumbo Packet
--> camera packet size: 1476)
Receive Buffers to maximum value
Interrupt Moderation Rate --> low for high frame rate (smal roi), high
for other cases?

cheers
Lukas

--
____________________________________________
Lukas Hille, M.Sc.
microscopy engineer
[hidden email]
M +43 660 349 169 3

Department of Neurobiology, University of Vienna
Campus-Vienna-Biocenter 1
1030 Vienna
AUSTRIA

https://neuro.univie.ac.at/
https://www.imp.ac.at/groups/manuel-zimmer/
____________________________________________


_______________________________________________
micro-manager-general mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/micro-manager-general