#pragma execution_character_set("utf-8") #include "mindcamera.h" void _stdcall GrabImageCallback1(CameraHandle hCamera, BYTE *pFrameBuffer, tSdkFrameHead* pFrameHead, PVOID pContext) { /* MindCamera *pThis = (MindCamera*)pContext; CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pRgbBuffer[0], pFrameHead); CameraReleaseImageBuffer(hCamera, pFrameBuffer); if(status == CAMERA_STATUS_SUCCESS) { int nWidth = pFrameHead->iWidth; int nHeight = pFrameHead->iHeight; memcpy(pThis->g_readBuf[0], pThis->g_pRgbBuffer[0], nWidth * nHeight * 3); QImage image = QImage((const uchar*)pThis->g_readBuf[0], nWidth, nHeight, QImage::Format_RGB888); pThis->SetQImage(image); HObject himage; GenImageInterleaved(&himage, (Hlong)pThis->g_pRgbBuffer[0], "rgb", nWidth, nHeight, 0, "byte", nWidth, nHeight, 0, 0, -1, 0); pThis->SetHImage(himage); } */ MindCamera *pThis = (MindCamera*)pContext; CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pGrayBuffer[0], pFrameHead); CameraReleaseImageBuffer(hCamera, pFrameBuffer); if(status == CAMERA_STATUS_SUCCESS) { int nWidth = pFrameHead->iWidth; int nHeight = pFrameHead->iHeight; memcpy(pThis->g_readGrayBuf[0], pThis->g_pGrayBuffer[0], nWidth * nHeight); QImage image = QImage((const uchar*)pThis->g_readGrayBuf[0], nWidth, nHeight, QImage::Format_Indexed8); pThis->SetQImage(image); HObject himage; GenImage1(&himage, "byte", nWidth, nHeight, (Hlong)pThis->g_pGrayBuffer[0]); pThis->SetHImage(himage); } } void _stdcall GrabImageCallback2(CameraHandle hCamera, BYTE *pFrameBuffer, tSdkFrameHead* pFrameHead,PVOID pContext) { /* MindCamera *pThis = (MindCamera*)pContext; CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pRgbBuffer[1], pFrameHead); CameraReleaseImageBuffer(hCamera, pFrameBuffer); if(status == CAMERA_STATUS_SUCCESS) { int nWidth = pFrameHead->iWidth; int nHeight = pFrameHead->iHeight; memcpy(pThis->g_readBuf[1], pThis->g_pRgbBuffer[1], nWidth * nHeight * 3); QImage image = QImage((const uchar*)pThis->g_readBuf[1], nWidth, nHeight, QImage::Format_RGB888); pThis->SetQImage(image); HObject himage; GenImageInterleaved(&himage, (Hlong)pThis->g_pRgbBuffer[1], "rgb", nWidth, nHeight, 0, "byte", nWidth, nHeight, 0, 0, -1, 0); pThis->SetHImage(himage); } */ MindCamera *pThis = (MindCamera*)pContext; CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pGrayBuffer[1], pFrameHead); CameraReleaseImageBuffer(hCamera, pFrameBuffer); if(status == CAMERA_STATUS_SUCCESS) { int nWidth = pFrameHead->iWidth; int nHeight = pFrameHead->iHeight; memcpy(pThis->g_readGrayBuf[1], pThis->g_pGrayBuffer[1], nWidth * nHeight); QImage image = QImage((const uchar*)pThis->g_readGrayBuf[1], nWidth, nHeight, QImage::Format_Indexed8); pThis->SetQImage(image); HObject himage; GenImage1(&himage, "byte", nWidth, nHeight, (Hlong)pThis->g_pGrayBuffer[1]); pThis->SetHImage(himage); } } void _stdcall GrabImageCallback3(CameraHandle hCamera, BYTE *pFrameBuffer, tSdkFrameHead* pFrameHead,PVOID pContext) { /* MindCamera *pThis = (MindCamera*)pContext; CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pRgbBuffer[2], pFrameHead); CameraReleaseImageBuffer(hCamera, pFrameBuffer); if(status == CAMERA_STATUS_SUCCESS) { int nWidth = pFrameHead->iWidth; int nHeight = pFrameHead->iHeight; memcpy(pThis->g_readBuf[2], pThis->g_pRgbBuffer[2], nWidth * nHeight * 3); QImage image = QImage((const uchar*)pThis->g_readBuf[2], nWidth, nHeight, QImage::Format_RGB888); pThis->SetQImage(image); HObject himage; GenImageInterleaved(&himage, (Hlong)pThis->g_pRgbBuffer[2], "rgb", nWidth, nHeight, 0, "byte", nWidth, nHeight, 0, 0, -1, 0); pThis->SetHImage(himage); } */ MindCamera *pThis = (MindCamera*)pContext; CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pGrayBuffer[2], pFrameHead); CameraReleaseImageBuffer(hCamera, pFrameBuffer); if(status == CAMERA_STATUS_SUCCESS) { int nWidth = pFrameHead->iWidth; int nHeight = pFrameHead->iHeight; memcpy(pThis->g_readGrayBuf[2], pThis->g_pGrayBuffer[2], nWidth * nHeight); QImage image = QImage((const uchar*)pThis->g_readGrayBuf[2], nWidth, nHeight, QImage::Format_Indexed8); pThis->SetQImage(image); HObject himage; GenImage1(&himage, "byte", nWidth, nHeight, (Hlong)pThis->g_pGrayBuffer[2]); pThis->SetHImage(himage); } } void _stdcall GrabImageCallback4(CameraHandle hCamera, BYTE *pFrameBuffer, tSdkFrameHead* pFrameHead,PVOID pContext) { /* MindCamera *pThis = (MindCamera*)pContext; CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pRgbBuffer[3], pFrameHead); CameraReleaseImageBuffer(hCamera, pFrameBuffer); if(status == CAMERA_STATUS_SUCCESS) { int nWidth = pFrameHead->iWidth; int nHeight = pFrameHead->iHeight; memcpy(pThis->g_readBuf[3], pThis->g_pRgbBuffer[3], nWidth * nHeight * 3); QImage image = QImage((const uchar*)pThis->g_readBuf[3], nWidth, nHeight, QImage::Format_RGB888); pThis->SetQImage(image); HObject himage; GenImageInterleaved(&himage, (Hlong)pThis->g_pRgbBuffer[3], "rgb", nWidth, nHeight, 0, "byte", nWidth, nHeight, 0, 0, -1, 0); pThis->SetHImage(himage); } */ MindCamera *pThis = (MindCamera*)pContext; CameraSdkStatus status = CameraImageProcess(hCamera, pFrameBuffer, pThis->g_pGrayBuffer[3], pFrameHead); CameraReleaseImageBuffer(hCamera, pFrameBuffer); if(status == CAMERA_STATUS_SUCCESS) { int nWidth = pFrameHead->iWidth; int nHeight = pFrameHead->iHeight; memcpy(pThis->g_readGrayBuf[3], pThis->g_pGrayBuffer[3], nWidth * nHeight); QImage image = QImage((const uchar*)pThis->g_readGrayBuf[3], nWidth, nHeight, QImage::Format_Indexed8); pThis->SetQImage(image); HObject himage; GenImage1(&himage, "byte", nWidth, nHeight, (Hlong)pThis->g_pGrayBuffer[3]); pThis->SetHImage(himage); } } void MindCamera::SetQImage(QImage qimage) { emit sig_qimage(qimage); } void MindCamera::SetHImage(HObject himage) { emit sig_himage(himage); } MindCamera::MindCamera(QObject *parent) : QObject(parent) { CameraSdkInit(1); InitCamera(); } void MindCamera::OpenCameraByID(int id) { if(id == 0) { CameraPause(m_hCamera[0]); CameraPause(m_hCamera[1]); CameraPause(m_hCamera[2]); CameraPause(m_hCamera[3]); } if(id == 1) { CameraPause(m_hCamera[0]); CameraPause(m_hCamera[1]); CameraPause(m_hCamera[2]); CameraPause(m_hCamera[3]); if(index1 == 0) { CameraPlay(m_hCamera[0]); } if(index1 == 1) { CameraPlay(m_hCamera[1]); } if(index1 == 2) { CameraPlay(m_hCamera[2]); } if(index1 == 3) { CameraPlay(m_hCamera[3]); } } if(id == 2) { CameraPause(m_hCamera[0]); CameraPause(m_hCamera[1]); CameraPause(m_hCamera[2]); CameraPause(m_hCamera[3]); if(index2 == 0) { CameraPlay(m_hCamera[0]); } if(index2 == 1) { CameraPlay(m_hCamera[1]); } if(index2 == 2) { CameraPlay(m_hCamera[2]); } if(index2 == 3) { CameraPlay(m_hCamera[3]); } } if(id == 3) { CameraPause(m_hCamera[0]); CameraPause(m_hCamera[1]); CameraPause(m_hCamera[2]); CameraPause(m_hCamera[3]); if(index3 == 0) { CameraPlay(m_hCamera[0]); } if(index3 == 1) { CameraPlay(m_hCamera[1]); } if(index3 == 2) { CameraPlay(m_hCamera[2]); } if(index3 == 3) { CameraPlay(m_hCamera[3]); } } if(id == 4) { CameraPause(m_hCamera[0]); CameraPause(m_hCamera[1]); CameraPause(m_hCamera[2]); CameraPause(m_hCamera[3]); if(index4 == 0) { CameraPlay(m_hCamera[0]); } if(index4 == 1) { CameraPlay(m_hCamera[1]); } if(index4 == 2) { CameraPlay(m_hCamera[2]); } if(index4 == 3) { CameraPlay(m_hCamera[3]); } } } void MindCamera::InitCamera() { tSdkCameraDevInfo sCameraList[4]; INT iCameraNums = 4; CameraSdkStatus status; tSdkCameraCapbility sCameraInfo; if(CameraEnumerateDevice(sCameraList, &iCameraNums) != CAMERA_STATUS_SUCCESS || iCameraNums == 0) { qDebug() << "没有找到相机"; return; } else { qDebug() << "相机个数: " << QString::number(iCameraNums); } for (int i = 0; i < iCameraNums; i++) { if ((status = CameraInit(&sCameraList[i], -1, -1, &m_hCamera[i])) == CAMERA_STATUS_SUCCESS) { CameraGetCapability(m_hCamera[i], &sCameraInfo); /* g_pRgbBuffer[i] = (unsigned char*)malloc(sCameraInfo.sResolutionRange.iHeightMax * sCameraInfo.sResolutionRange.iWidthMax * 3); g_readBuf[i] = (unsigned char*)malloc(sCameraInfo.sResolutionRange.iHeightMax * sCameraInfo.sResolutionRange.iWidthMax * 3); if(sCameraInfo.sIspCapacity.bMonoSensor) { CameraSetIspOutFormat(m_hCamera[i], CAMERA_MEDIA_TYPE_MONO8); } else { CameraSetIspOutFormat(m_hCamera[i], CAMERA_MEDIA_TYPE_RGB8); } */ g_pGrayBuffer[i] = (unsigned char*)malloc(sCameraInfo.sResolutionRange.iHeightMax * sCameraInfo.sResolutionRange.iWidthMax); g_readGrayBuf[i] = (unsigned char*)malloc(sCameraInfo.sResolutionRange.iHeightMax * sCameraInfo.sResolutionRange.iWidthMax); if(i == 0) { CameraSetCallbackFunction(m_hCamera[i], GrabImageCallback1, (PVOID)this, NULL); } if(i == 1) { CameraSetCallbackFunction(m_hCamera[i], GrabImageCallback2, (PVOID)this, NULL); } if(i == 2) { CameraSetCallbackFunction(m_hCamera[i], GrabImageCallback3, (PVOID)this, NULL); } if(i == 3) { CameraSetCallbackFunction(m_hCamera[i], GrabImageCallback4, (PVOID)this, NULL); } CameraSetIspOutFormat(m_hCamera[i], CAMERA_MEDIA_TYPE_MONO8); } } char sn1[32]; memset(sn1, 0, 32); CameraReadSN(m_hCamera[0], (BYTE*)sn1, 0); char sn2[32]; memset(sn2, 0, 32); CameraReadSN(m_hCamera[1], (BYTE*)sn2, 0); char sn3[32]; memset(sn3, 0, 32); CameraReadSN(m_hCamera[2], (BYTE*)sn3, 0); char sn4[32]; memset(sn4, 0, 32); CameraReadSN(m_hCamera[3], (BYTE*)sn4, 0); QSettings config("config.ini", QSettings::IniFormat); QString SN1 = config.value("config/SN1").toString(); QString SN2 = config.value("config/SN2").toString(); QString SN3 = config.value("config/SN3").toString(); QString SN4 = config.value("config/SN4").toString(); if(QString::fromStdString(sn1) == SN1) { index1 = 0; } if(QString::fromStdString(sn2) == SN1) { index1 = 1; } if(QString::fromStdString(sn3) == SN1) { index1 = 2; } if(QString::fromStdString(sn4) == SN1) { index1 = 3; } if(QString::fromStdString(sn1) == SN2) { index2 = 0; } if(QString::fromStdString(sn2) == SN2) { index2 = 1; } if(QString::fromStdString(sn3) == SN2) { index2 = 2; } if(QString::fromStdString(sn4) == SN2) { index2 = 3; } if(QString::fromStdString(sn1) == SN3) { index3 = 0; } if(QString::fromStdString(sn2) == SN3) { index3 = 1; } if(QString::fromStdString(sn3) == SN3) { index3 = 2; } if(QString::fromStdString(sn4) == SN3) { index3 = 3; } if(QString::fromStdString(sn1) == SN4) { index4 = 0; } if(QString::fromStdString(sn2) == SN4) { index4 = 1; } if(QString::fromStdString(sn3) == SN4) { index4 = 2; } if(QString::fromStdString(sn4) == SN4) { index4 = 3; } }