static gboolean setup_frame_grabber (UcaPcoCameraPrivate *priv) { guint32 fg_width; guint32 fg_height; int val; priv->fg_port = PORT_A; priv->fg = Fg_Init (priv->description->so_file, priv->fg_port); if (priv->fg == NULL) { g_set_error (&priv->construct_error, UCA_PCO_CAMERA_ERROR, UCA_PCO_CAMERA_ERROR_FG_INIT, "%s", Fg_getLastErrorDescription(priv->fg)); return FALSE; } FG_TRY_PARAM (priv->fg, &priv->construct_error, FG_CAMERA_LINK_CAMTYP, &priv->description->cl_type, priv->fg_port); FG_TRY_PARAM (priv->fg, &priv->construct_error, FG_FORMAT, &priv->description->cl_format, priv->fg_port); fg_width = priv->description->type == CAMERATYPE_PCO_EDGE ? priv->width * 2 : priv->width; FG_TRY_PARAM (priv->fg, &priv->construct_error, FG_WIDTH, &fg_width, priv->fg_port); fg_height = priv->height; FG_TRY_PARAM (priv->fg, &priv->construct_error, FG_HEIGHT, &fg_height, priv->fg_port); val = FREE_RUN; FG_TRY_PARAM (priv->fg, &priv->construct_error, FG_TRIGGERMODE, &val, priv->fg_port); return TRUE; }
int open_cam(Fg_Struct **gr, int mode, int num_images, int w, int h) { Fg_Struct *fg = NULL; FastConfigSequence mFcs; int rc; fg = Fg_Init(APPLET, PORT_A); if(fg == NULL) { printf("init: %s\n", Fg_getLastErrorDescription(fg)); rc = Fg_getLastErrorNumber(fg); close_cam(fg); return rc; } if(Fg_setParameter(fg, FG_TRIGGERMODE, &mode, PORT_A) < 0) { printf("mode: %s\n", Fg_getLastErrorDescription(fg)); rc = Fg_getLastErrorNumber(fg); close_cam(fg); return rc; } rc = FG_CL_DUALTAP_8_BIT; if(Fg_setParameter(fg, FG_CAMERA_LINK_CAMTYP, &rc, PORT_A) < 0) { printf("dual tap: %s\n", Fg_getLastErrorDescription(fg)); rc = Fg_getLastErrorNumber(fg); close_cam(fg); return rc; } if(Fg_setExsync(fg, FG_ON, PORT_A) < 0) { printf("sync on: %s\n", Fg_getLastErrorDescription(fg)); rc = Fg_getLastErrorNumber(fg); close_cam(fg); return rc; } // I don't think the next two do anything rc = FG_ON; if(Fg_setParameter(fg, FG_EXSYNCINVERT, &rc, PORT_A) < 0) { printf("sync invert: %s\n", Fg_getLastErrorDescription(fg)); rc = Fg_getLastErrorNumber(fg); close_cam(fg); return rc; } rc = FG_ON; if(Fg_setParameter(fg, FG_EXSYNCPOLARITY, &rc, PORT_A) < 0) { printf("sync polarity: %s\n", Fg_getLastErrorDescription(fg)); rc = Fg_getLastErrorNumber(fg); close_cam(fg); return rc; } if(Fg_AllocMem(fg, w*h*num_images, num_images, PORT_A) == NULL) { printf("mem: %s\n", Fg_getLastErrorDescription(fg)); rc = Fg_getLastErrorNumber(fg); close_cam(fg); return rc; } // FastConfig parameters if(FastConfigInit(PORT_A) != FG_OK) { printf("fc init: %s\n", Fg_getLastErrorDescription(fg)); rc = Fg_getLastErrorNumber(fg); close_cam(fg); return rc; } // only one ROI mFcs.mLengthOfSequence = SEQ_LEN; mFcs.mRoiPagePointer = new int[SEQ_LEN]; mFcs.mRoiPagePointer[0] = 0; if(Fg_setParameter(fg, FG_FASTCONFIG_SEQUENCE, &mFcs, PORT_A) != FG_OK) { printf("fc seq: %s\n", Fg_getLastErrorDescription(fg)); rc = Fg_getLastErrorNumber(fg); close_cam(fg); return rc; } *gr = fg; return FG_OK; }
// 初始化采集卡与摄像机 // 设置参数初始化 // 返回Status; int MicroDisplayInit::InitParameter(MicroDisplayInit& mdi) { #ifdef OUTPUT_DEBUG_INFO if (OUTPUT_DEBUG_INFO) { getBoardInfo(); } #endif int status = 0; char debugInfo[256]; // Initialization of the microEnable frame grabber if (mdi.colorType == GRAY) { if ((mdi.fg = Fg_Init(mdi.dllNameGRAY, mdi.nBoard)) == NULL) { return status; } //设置传输模式,设置后才为4k int _FG_CAMERA_LINK_CAMTYP = FG_CL_DUALTAP_8_BIT; if (Fg_setParameter(mdi.fg, FG_CAMERA_LINK_CAMTYP, &_FG_CAMERA_LINK_CAMTYP, mdi.nCamPort) < 0) { return status; } } else { if ((mdi.fg = Fg_Init(mdi.dllNameRGB, mdi.nBoard)) == NULL) { return status; } //TODO:添加传输模式的调整 //int _FG_CAMERA_LINK_CAMTYP = FG_CL_DUALTAP_8_BIT; //if (Fg_setParameter(mdi.fg, FG_CAMERA_LINK_CAMTYP, &_FG_CAMERA_LINK_CAMTYP, mdi.nCamPort) < 0) { // return status; //} } OutPutDebugInfo("Init Grabber ok"); //设置参数 int _FG_CAMERA_LINK_CAMTYP = FG_CL_DUALTAP_8_BIT; if (Fg_setParameter(mdi.fg, FG_CAMERA_LINK_CAMTYP, &_FG_CAMERA_LINK_CAMTYP, mdi.nCamPort) < 0) { return status; } if (Fg_setParameter(mdi.fg, FG_WIDTH, &mdi.width, mdi.nCamPort) < 0) { return status; } if (Fg_setParameter(mdi.fg, FG_HEIGHT, &mdi.height, mdi.nCamPort) < 0) { return status; } int bitAlignment = FG_LEFT_ALIGNED; if (Fg_setParameter(mdi.fg, FG_BITALIGNMENT, &bitAlignment, mdi.nCamPort) < 0) { return status; } sprintf(debugInfo, "Set Image Size on port %d (w: %d,h: %d) ok", mdi.nCamPort, mdi.width, mdi.height); OutPutDebugInfo(debugInfo); // Memory allocation int format = 0; Fg_getParameter(mdi.fg, FG_FORMAT, &format, mdi.nCamPort); size_t bytesPerPixel = 1; switch (format){ case FG_GRAY: bytesPerPixel = 1; break; case FG_GRAY16: bytesPerPixel = 2; break; case FG_COL24: bytesPerPixel = 3; break; case FG_COL32: bytesPerPixel = 4; break; case FG_COL30: bytesPerPixel = 5; break; case FG_COL48: bytesPerPixel = 6; break; } size_t totalBufSize = mdi.width*mdi.height*mdi.nr_of_buffer*bytesPerPixel; if ((mdi.pMem0 = Fg_AllocMemEx(mdi.fg, totalBufSize, mdi.nr_of_buffer)) == NULL){ return status; } else { sprintf(debugInfo, "%d framebuffer allocated for port %d ok", mdi.nr_of_buffer, mdi.nCamPort); OutPutDebugInfo(debugInfo); } return status; }