mindcamera.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. #pragma execution_character_set("utf-8")
  2. #include "mindcamera.h"
  3. void _stdcall GrabImageCallback1(CameraHandle hCamera, BYTE *pFrameBuffer, tSdkFrameHead* pFrameHead, PVOID pContext)
  4. {
  5. /*
  6. MindCamera *pThis = (MindCamera*)pContext;
  7. CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pRgbBuffer[0], pFrameHead);
  8. CameraReleaseImageBuffer(hCamera, pFrameBuffer);
  9. if(status == CAMERA_STATUS_SUCCESS)
  10. {
  11. int nWidth = pFrameHead->iWidth;
  12. int nHeight = pFrameHead->iHeight;
  13. memcpy(pThis->g_readBuf[0], pThis->g_pRgbBuffer[0], nWidth * nHeight * 3);
  14. QImage image = QImage((const uchar*)pThis->g_readBuf[0], nWidth, nHeight, QImage::Format_RGB888);
  15. pThis->SetQImage(image);
  16. HObject himage;
  17. GenImageInterleaved(&himage, (Hlong)pThis->g_pRgbBuffer[0], "rgb", nWidth, nHeight, 0, "byte", nWidth, nHeight, 0, 0, -1, 0);
  18. pThis->SetHImage(himage);
  19. }
  20. */
  21. MindCamera *pThis = (MindCamera*)pContext;
  22. CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pGrayBuffer[0], pFrameHead);
  23. CameraReleaseImageBuffer(hCamera, pFrameBuffer);
  24. if(status == CAMERA_STATUS_SUCCESS)
  25. {
  26. int nWidth = pFrameHead->iWidth;
  27. int nHeight = pFrameHead->iHeight;
  28. memcpy(pThis->g_readGrayBuf[0], pThis->g_pGrayBuffer[0], nWidth * nHeight);
  29. QImage image = QImage((const uchar*)pThis->g_readGrayBuf[0], nWidth, nHeight, QImage::Format_Indexed8);
  30. pThis->SetQImage(image);
  31. HObject himage;
  32. GenImage1(&himage, "byte", nWidth, nHeight, (Hlong)pThis->g_pGrayBuffer[0]);
  33. pThis->SetHImage(himage);
  34. }
  35. }
  36. void _stdcall GrabImageCallback2(CameraHandle hCamera, BYTE *pFrameBuffer, tSdkFrameHead* pFrameHead,PVOID pContext)
  37. {
  38. /*
  39. MindCamera *pThis = (MindCamera*)pContext;
  40. CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pRgbBuffer[1], pFrameHead);
  41. CameraReleaseImageBuffer(hCamera, pFrameBuffer);
  42. if(status == CAMERA_STATUS_SUCCESS)
  43. {
  44. int nWidth = pFrameHead->iWidth;
  45. int nHeight = pFrameHead->iHeight;
  46. memcpy(pThis->g_readBuf[1], pThis->g_pRgbBuffer[1], nWidth * nHeight * 3);
  47. QImage image = QImage((const uchar*)pThis->g_readBuf[1], nWidth, nHeight, QImage::Format_RGB888);
  48. pThis->SetQImage(image);
  49. HObject himage;
  50. GenImageInterleaved(&himage, (Hlong)pThis->g_pRgbBuffer[1], "rgb", nWidth, nHeight, 0, "byte", nWidth, nHeight, 0, 0, -1, 0);
  51. pThis->SetHImage(himage);
  52. }
  53. */
  54. MindCamera *pThis = (MindCamera*)pContext;
  55. CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pGrayBuffer[1], pFrameHead);
  56. CameraReleaseImageBuffer(hCamera, pFrameBuffer);
  57. if(status == CAMERA_STATUS_SUCCESS)
  58. {
  59. int nWidth = pFrameHead->iWidth;
  60. int nHeight = pFrameHead->iHeight;
  61. memcpy(pThis->g_readGrayBuf[1], pThis->g_pGrayBuffer[1], nWidth * nHeight);
  62. QImage image = QImage((const uchar*)pThis->g_readGrayBuf[1], nWidth, nHeight, QImage::Format_Indexed8);
  63. pThis->SetQImage(image);
  64. HObject himage;
  65. GenImage1(&himage, "byte", nWidth, nHeight, (Hlong)pThis->g_pGrayBuffer[1]);
  66. pThis->SetHImage(himage);
  67. }
  68. }
  69. void _stdcall GrabImageCallback3(CameraHandle hCamera, BYTE *pFrameBuffer, tSdkFrameHead* pFrameHead,PVOID pContext)
  70. {
  71. /*
  72. MindCamera *pThis = (MindCamera*)pContext;
  73. CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pRgbBuffer[2], pFrameHead);
  74. CameraReleaseImageBuffer(hCamera, pFrameBuffer);
  75. if(status == CAMERA_STATUS_SUCCESS)
  76. {
  77. int nWidth = pFrameHead->iWidth;
  78. int nHeight = pFrameHead->iHeight;
  79. memcpy(pThis->g_readBuf[2], pThis->g_pRgbBuffer[2], nWidth * nHeight * 3);
  80. QImage image = QImage((const uchar*)pThis->g_readBuf[2], nWidth, nHeight, QImage::Format_RGB888);
  81. pThis->SetQImage(image);
  82. HObject himage;
  83. GenImageInterleaved(&himage, (Hlong)pThis->g_pRgbBuffer[2], "rgb", nWidth, nHeight, 0, "byte", nWidth, nHeight, 0, 0, -1, 0);
  84. pThis->SetHImage(himage);
  85. }
  86. */
  87. MindCamera *pThis = (MindCamera*)pContext;
  88. CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pGrayBuffer[2], pFrameHead);
  89. CameraReleaseImageBuffer(hCamera, pFrameBuffer);
  90. if(status == CAMERA_STATUS_SUCCESS)
  91. {
  92. int nWidth = pFrameHead->iWidth;
  93. int nHeight = pFrameHead->iHeight;
  94. memcpy(pThis->g_readGrayBuf[2], pThis->g_pGrayBuffer[2], nWidth * nHeight);
  95. QImage image = QImage((const uchar*)pThis->g_readGrayBuf[2], nWidth, nHeight, QImage::Format_Indexed8);
  96. pThis->SetQImage(image);
  97. HObject himage;
  98. GenImage1(&himage, "byte", nWidth, nHeight, (Hlong)pThis->g_pGrayBuffer[2]);
  99. pThis->SetHImage(himage);
  100. }
  101. }
  102. void _stdcall GrabImageCallback4(CameraHandle hCamera, BYTE *pFrameBuffer, tSdkFrameHead* pFrameHead,PVOID pContext)
  103. {
  104. /*
  105. MindCamera *pThis = (MindCamera*)pContext;
  106. CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pRgbBuffer[3], pFrameHead);
  107. CameraReleaseImageBuffer(hCamera, pFrameBuffer);
  108. if(status == CAMERA_STATUS_SUCCESS)
  109. {
  110. int nWidth = pFrameHead->iWidth;
  111. int nHeight = pFrameHead->iHeight;
  112. memcpy(pThis->g_readBuf[3], pThis->g_pRgbBuffer[3], nWidth * nHeight * 3);
  113. QImage image = QImage((const uchar*)pThis->g_readBuf[3], nWidth, nHeight, QImage::Format_RGB888);
  114. pThis->SetQImage(image);
  115. HObject himage;
  116. GenImageInterleaved(&himage, (Hlong)pThis->g_pRgbBuffer[3], "rgb", nWidth, nHeight, 0, "byte", nWidth, nHeight, 0, 0, -1, 0);
  117. pThis->SetHImage(himage);
  118. }
  119. */
  120. MindCamera *pThis = (MindCamera*)pContext;
  121. CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pGrayBuffer[3], pFrameHead);
  122. CameraReleaseImageBuffer(hCamera, pFrameBuffer);
  123. if(status == CAMERA_STATUS_SUCCESS)
  124. {
  125. int nWidth = pFrameHead->iWidth;
  126. int nHeight = pFrameHead->iHeight;
  127. memcpy(pThis->g_readGrayBuf[3], pThis->g_pGrayBuffer[3], nWidth * nHeight);
  128. QImage image = QImage((const uchar*)pThis->g_readGrayBuf[3], nWidth, nHeight, QImage::Format_Indexed8);
  129. pThis->SetQImage(image);
  130. HObject himage;
  131. GenImage1(&himage, "byte", nWidth, nHeight, (Hlong)pThis->g_pGrayBuffer[3]);
  132. pThis->SetHImage(himage);
  133. }
  134. }
  135. void MindCamera::SetQImage(QImage qimage)
  136. {
  137. emit sig_qimage(qimage);
  138. }
  139. void MindCamera::SetHImage(HObject himage)
  140. {
  141. emit sig_himage(himage);
  142. }
  143. MindCamera::MindCamera(QObject *parent) : QObject(parent)
  144. {
  145. CameraSdkInit(1);
  146. InitCamera();
  147. }
  148. void MindCamera::OpenCameraByID(int id)
  149. {
  150. if(id == 0)
  151. {
  152. CameraPause(m_hCamera[0]);
  153. CameraPause(m_hCamera[1]);
  154. CameraPause(m_hCamera[2]);
  155. CameraPause(m_hCamera[3]);
  156. }
  157. if(id == 1)
  158. {
  159. CameraPause(m_hCamera[0]);
  160. CameraPause(m_hCamera[1]);
  161. CameraPause(m_hCamera[2]);
  162. CameraPause(m_hCamera[3]);
  163. if(index1 == 0)
  164. {
  165. CameraPlay(m_hCamera[0]);
  166. }
  167. if(index1 == 1)
  168. {
  169. CameraPlay(m_hCamera[1]);
  170. }
  171. if(index1 == 2)
  172. {
  173. CameraPlay(m_hCamera[2]);
  174. }
  175. if(index1 == 3)
  176. {
  177. CameraPlay(m_hCamera[3]);
  178. }
  179. }
  180. if(id == 2)
  181. {
  182. CameraPause(m_hCamera[0]);
  183. CameraPause(m_hCamera[1]);
  184. CameraPause(m_hCamera[2]);
  185. CameraPause(m_hCamera[3]);
  186. if(index2 == 0)
  187. {
  188. CameraPlay(m_hCamera[0]);
  189. }
  190. if(index2 == 1)
  191. {
  192. CameraPlay(m_hCamera[1]);
  193. }
  194. if(index2 == 2)
  195. {
  196. CameraPlay(m_hCamera[2]);
  197. }
  198. if(index2 == 3)
  199. {
  200. CameraPlay(m_hCamera[3]);
  201. }
  202. }
  203. if(id == 3)
  204. {
  205. CameraPause(m_hCamera[0]);
  206. CameraPause(m_hCamera[1]);
  207. CameraPause(m_hCamera[2]);
  208. CameraPause(m_hCamera[3]);
  209. if(index3 == 0)
  210. {
  211. CameraPlay(m_hCamera[0]);
  212. }
  213. if(index3 == 1)
  214. {
  215. CameraPlay(m_hCamera[1]);
  216. }
  217. if(index3 == 2)
  218. {
  219. CameraPlay(m_hCamera[2]);
  220. }
  221. if(index3 == 3)
  222. {
  223. CameraPlay(m_hCamera[3]);
  224. }
  225. }
  226. if(id == 4)
  227. {
  228. CameraPause(m_hCamera[0]);
  229. CameraPause(m_hCamera[1]);
  230. CameraPause(m_hCamera[2]);
  231. CameraPause(m_hCamera[3]);
  232. if(index4 == 0)
  233. {
  234. CameraPlay(m_hCamera[0]);
  235. }
  236. if(index4 == 1)
  237. {
  238. CameraPlay(m_hCamera[1]);
  239. }
  240. if(index4 == 2)
  241. {
  242. CameraPlay(m_hCamera[2]);
  243. }
  244. if(index4 == 3)
  245. {
  246. CameraPlay(m_hCamera[3]);
  247. }
  248. }
  249. }
  250. void MindCamera::InitCamera()
  251. {
  252. tSdkCameraDevInfo sCameraList[4];
  253. INT iCameraNums = 4;
  254. CameraSdkStatus status;
  255. tSdkCameraCapbility sCameraInfo;
  256. if(CameraEnumerateDevice(sCameraList, &iCameraNums) != CAMERA_STATUS_SUCCESS || iCameraNums == 0)
  257. {
  258. qDebug() << "没有找到相机";
  259. return;
  260. }
  261. else
  262. {
  263. qDebug() << "相机个数: " << QString::number(iCameraNums);
  264. }
  265. for (int i = 0; i < iCameraNums; i++)
  266. {
  267. if ((status = CameraInit(&sCameraList[i], -1, -1, &m_hCamera[i])) == CAMERA_STATUS_SUCCESS)
  268. {
  269. CameraGetCapability(m_hCamera[i], &sCameraInfo);
  270. /*
  271. g_pRgbBuffer[i] = (unsigned char*)malloc(sCameraInfo.sResolutionRange.iHeightMax * sCameraInfo.sResolutionRange.iWidthMax * 3);
  272. g_readBuf[i] = (unsigned char*)malloc(sCameraInfo.sResolutionRange.iHeightMax * sCameraInfo.sResolutionRange.iWidthMax * 3);
  273. if(sCameraInfo.sIspCapacity.bMonoSensor)
  274. {
  275. CameraSetIspOutFormat(m_hCamera[i], CAMERA_MEDIA_TYPE_MONO8);
  276. }
  277. else
  278. {
  279. CameraSetIspOutFormat(m_hCamera[i], CAMERA_MEDIA_TYPE_RGB8);
  280. }
  281. */
  282. g_pGrayBuffer[i] = (unsigned char*)malloc(sCameraInfo.sResolutionRange.iHeightMax * sCameraInfo.sResolutionRange.iWidthMax);
  283. g_readGrayBuf[i] = (unsigned char*)malloc(sCameraInfo.sResolutionRange.iHeightMax * sCameraInfo.sResolutionRange.iWidthMax);
  284. if(i == 0)
  285. {
  286. CameraSetCallbackFunction(m_hCamera[i], GrabImageCallback1, (PVOID)this, NULL);
  287. }
  288. if(i == 1)
  289. {
  290. CameraSetCallbackFunction(m_hCamera[i], GrabImageCallback2, (PVOID)this, NULL);
  291. }
  292. if(i == 2)
  293. {
  294. CameraSetCallbackFunction(m_hCamera[i], GrabImageCallback3, (PVOID)this, NULL);
  295. }
  296. if(i == 3)
  297. {
  298. CameraSetCallbackFunction(m_hCamera[i], GrabImageCallback4, (PVOID)this, NULL);
  299. }
  300. CameraSetIspOutFormat(m_hCamera[i], CAMERA_MEDIA_TYPE_MONO8);
  301. }
  302. }
  303. char sn1[32];
  304. memset(sn1, 0, 32);
  305. CameraReadSN(m_hCamera[0], (BYTE*)sn1, 0);
  306. char sn2[32];
  307. memset(sn2, 0, 32);
  308. CameraReadSN(m_hCamera[1], (BYTE*)sn2, 0);
  309. char sn3[32];
  310. memset(sn3, 0, 32);
  311. CameraReadSN(m_hCamera[2], (BYTE*)sn3, 0);
  312. char sn4[32];
  313. memset(sn4, 0, 32);
  314. CameraReadSN(m_hCamera[3], (BYTE*)sn4, 0);
  315. QSettings config("config.ini", QSettings::IniFormat);
  316. QString SN1 = config.value("config/SN1").toString();
  317. QString SN2 = config.value("config/SN2").toString();
  318. QString SN3 = config.value("config/SN3").toString();
  319. QString SN4 = config.value("config/SN4").toString();
  320. if(QString::fromStdString(sn1) == SN1)
  321. {
  322. index1 = 0;
  323. }
  324. if(QString::fromStdString(sn2) == SN1)
  325. {
  326. index1 = 1;
  327. }
  328. if(QString::fromStdString(sn3) == SN1)
  329. {
  330. index1 = 2;
  331. }
  332. if(QString::fromStdString(sn4) == SN1)
  333. {
  334. index1 = 3;
  335. }
  336. if(QString::fromStdString(sn1) == SN2)
  337. {
  338. index2 = 0;
  339. }
  340. if(QString::fromStdString(sn2) == SN2)
  341. {
  342. index2 = 1;
  343. }
  344. if(QString::fromStdString(sn3) == SN2)
  345. {
  346. index2 = 2;
  347. }
  348. if(QString::fromStdString(sn4) == SN2)
  349. {
  350. index2 = 3;
  351. }
  352. if(QString::fromStdString(sn1) == SN3)
  353. {
  354. index3 = 0;
  355. }
  356. if(QString::fromStdString(sn2) == SN3)
  357. {
  358. index3 = 1;
  359. }
  360. if(QString::fromStdString(sn3) == SN3)
  361. {
  362. index3 = 2;
  363. }
  364. if(QString::fromStdString(sn4) == SN3)
  365. {
  366. index3 = 3;
  367. }
  368. if(QString::fromStdString(sn1) == SN4)
  369. {
  370. index4 = 0;
  371. }
  372. if(QString::fromStdString(sn2) == SN4)
  373. {
  374. index4 = 1;
  375. }
  376. if(QString::fromStdString(sn3) == SN4)
  377. {
  378. index4 = 2;
  379. }
  380. if(QString::fromStdString(sn4) == SN4)
  381. {
  382. index4 = 3;
  383. }
  384. }