Fixed NetSend so it can be used in debug mode.
[qt/compvision.git] / UEyeImage.cpp
1 #include "UEyeImage.h"\r
2 \r
3 #include <QMutexLocker>\r
4 \r
5 UEyeImage::UEyeImage(ImagePool *source, ImagePool *destination) : ImageSource(source, destination)\r
6 {\r
7         connected=false;\r
8 }\r
9 \r
10 void UEyeImage::connect()\r
11 {\r
12         QMutexLocker lock(&key);\r
13         if(connected) return;\r
14         \r
15         ucam=(HIDS)0;\r
16         int ret=is_InitCamera(&ucam, NULL);\r
17         if(ret != IS_SUCCESS)\r
18         {\r
19                 connected=false;\r
20                 return;\r
21         }\r
22         \r
23         height=480; // Fixed for this camera\r
24         width=640;\r
25         \r
26         is_SetColorMode(ucam, IS_SET_CM_RGB24); // want to force RGB24 to share code with OpenCV\r
27         is_GetColorDepth(ucam, &ubpp, &ucolor);\r
28         is_AllocImageMem(ucam, width, height, ubpp, &ubuf, &ubuf_id);\r
29         is_SetImageMem(ucam, ubuf, ubuf_id);\r
30         is_SetImageSize(ucam, width, height);\r
31         is_SetDisplayMode(ucam, IS_SET_DM_DIB); // store the image to a memory bitmap\r
32         is_SetErrorReport(ucam, IS_DISABLE_ERR_REP);\r
33         \r
34         is_SetPixelClock(ucam, 15);\r
35         double tmp, tmp1, tmp2;\r
36     is_GetFrameTimeRange(ucam, &tmp, &tmp1, &tmp2);\r
37     is_SetFrameRate(ucam, tmp1, &tmp); // max framerate\r
38     is_GetExposureRange(ucam, &tmp, &tmp1, &tmp2);\r
39         is_SetExposureTime(ucam, tmp1, &tmp); // max exposure\r
40         \r
41         is_SetWhiteBalanceMultipliers(ucam, 1.5, 1.0, 2.3);\r
42         is_SetWhiteBalance(ucam, IS_SET_WB_USER);\r
43         \r
44         is_SetBlCompensation(ucam, IS_BL_COMPENSATION_ENABLE, 1, 1);\r
45         \r
46         is_SetBrightness(ucam, 100);\r
47         is_SetContrast(ucam, 300);//511);\r
48         //is_SetGamma(ucam, ); // why not?\r
49         \r
50         is_SetColorCorrection(ucam, IS_CCOR_DISABLE, &tmp);\r
51         \r
52         connected=true;\r
53         return;\r
54 }\r
55 \r
56 void UEyeImage::disconnect()\r
57 {\r
58         QMutexLocker lock(&key);\r
59         if(!connected) return;\r
60         \r
61         // need to figure this out\r
62 }\r
63 \r
64 bool UEyeImage::isConnected()\r
65 {\r
66         return connected;\r
67 }\r
68 \r
69 void UEyeImage::process()\r
70 {\r
71         QMutexLocker lock(&key);\r
72         if(!connected) return;\r
73         \r
74         if(img->isNull() || img->width()!=width || img->height()!=height || img->format()!=QImage::Format_RGB32)\r
75         {\r
76                 delete(img);\r
77                 img=new QImage(width, height, QImage::Format_RGB32);\r
78         }\r
79 \r
80         is_FreezeVideo(ucam, IS_WAIT); // wait for the next frame to be captured\r
81         char *iplptr, *qtptr;\r
82         iplptr=ubuf;\r
83         qtptr=(char *)(img->bits());\r
84 \r
85         QRgb *x4=(QRgb *)qtptr;\r
86         int stride;\r
87         is_GetImageMemPitch(ucam, &stride);\r
88         for(int y=0; y<height; y++)\r
89         {\r
90                 char *x3=iplptr+stride*y;\r
91                 for(int x=0; x<width; x++)\r
92                 {\r
93                         *(x4++)=*((QRgb *)x3);\r
94                         x3+=3;\r
95                 }\r
96         }\r
97 }\r