#ifdef WIN32 #ifdef WITH_SONYIIDC #include "iclSonyFwGrabber.h" namespace icl { SonyFwGrabber::SonyFwGrabber(void) { m_pppImgBuffer = 0; m_lNumCameras = 0; // init(); } SonyFwGrabber::~SonyFwGrabber() { //---- Destroy all camera handle ---- for (int i=0; i vec = Grabber::translateDoubleVec (value); if (vec.size() != 2) { ERROR_LOG("two white balance values required (red + blue)"); } else { setWhiteBalance((int)vec[0], (int)vec[1]); }*/ }else if(property == "white balance red"){ int val = atoi(value.c_str()); //setWhiteBalance(val,-1); }else if(property == "white balance blue"){ int val = atoi(value.c_str()); //setWhiteBalance(-1,val); }else if(property == "shutter speed"){ int val = atoi(value.c_str()); //setShutterSpeed(val); }else{ ERROR_LOG("nothing known about a property " << property ); } } std::vector SonyFwGrabber::getPropertyList() { std::vector v; v.push_back("size"); v.push_back("format"); v.push_back("gain"); v.push_back("save user settings"); v.push_back("restore user settings"); v.push_back("white balance mode"); v.push_back("white balance red"); v.push_back("white balance blue"); v.push_back("shutter speed"); return v; } void SonyFwGrabber::copyGrabbingBuffer (int iDevice, ImgBase *poDst) { LPBYTE pImgBuf = (LPBYTE) iidc_lockdata( m_hCamera[iDevice], -1 ); if(pImgBuf) { // create temporary wrapper image around current data buffer // TODO: currently this assume single-channel data // If a grabbing buffer for a single frame is used only (as currently done) // one could also allocate the appropriate wrapper image in the init() method // already. std::vector vData (&pImgBuf, (&pImgBuf)+1); Img imgBuf (getSize(), formatMatrix, vData); flippedCopy (axisHorz, &imgBuf, &poDst); //---- remove data lock ---- iidc_unlockdata( m_hCamera[iDevice] ); } } const ImgBase* SonyFwGrabber::grabUD(ImgBase **ppoDst) { ImgBase *poOutput = prepareOutput (ppoDst); //---- Initialize variables ---- IIDC_WAIT waitparam; waitparam.event = IIDCID_EVENT_FRAMEEND; waitparam.timeout = 1000; //---- wait for complete image frame from grabbing ---- bool bRet = iidc_wait( m_hCamera[m_iDevice], &waitparam, sizeof(IIDC_WAIT) ); if (bRet) copyGrabbingBuffer (m_iDevice, poOutput); return poOutput; } void SonyFwGrabber::grabStereo(ImgBase*& poDstLeft, ImgBase*& poDstRight) { if (m_lNumCameras < 2) return; ensureCompatible(&poDstLeft, m_eDesiredDepth, m_oDesiredParams); ensureCompatible(&poDstRight, m_eDesiredDepth, m_oDesiredParams); //---- Initialize variables ---- IIDC_WAIT waitparam; waitparam.event = IIDCID_EVENT_FRAMEEND; waitparam.timeout = 1000; //---- wait for complete image frames from grabbing ---- bool bRetLeft = iidc_wait( m_hCamera[0], &waitparam, sizeof(IIDC_WAIT) ); bool bRetRight = iidc_wait( m_hCamera[1], &waitparam, sizeof(IIDC_WAIT) ); if (bRetLeft) copyGrabbingBuffer (0, poDstLeft); if (bRetRight) copyGrabbingBuffer (1, poDstRight); } void SonyFwGrabber::grabStereoTrigger(ImgBase*& poDstLeft, ImgBase*& poDstRight) { if (m_lNumCameras < 2) return; ensureCompatible(&poDstLeft, m_eDesiredDepth, m_oDesiredParams); ensureCompatible(&poDstRight, m_eDesiredDepth, m_oDesiredParams); //---- Trigger Grabbing iidc_capture(m_hCamera[0], false); iidc_capture(m_hCamera[1], false); //??? trigger with iidc_extended(...) ??? //---- Initialize variables ---- IIDC_WAIT waitparam; waitparam.event = IIDCID_EVENT_FRAMEEND; waitparam.timeout = 1000; //---- Get image from buffer ---- bool bRetLeft = iidc_wait( m_hCamera[0], &waitparam, sizeof(IIDC_WAIT) ); bool bRetRight = iidc_wait( m_hCamera[1], &waitparam, sizeof(IIDC_WAIT) ); if (bRetLeft) copyGrabbingBuffer (0, poDstLeft); if (bRetRight) copyGrabbingBuffer (1, poDstRight); } void SonyFwGrabber::GetCamAllString(long camIndex, char *strCamera) { char* pBuf1, *pBuf2, *pBuf3; long lRet = iidc_getstring( camIndex, IIDCID_STRING_VENDOR, NULL, 0 ); pBuf1 = new char[lRet+1]; memset( pBuf1, NULL, lRet+1); lRet = iidc_getstring( camIndex, IIDCID_STRING_VENDOR, pBuf1, lRet ); if( !lRet ) { delete [] pBuf1; return; } lRet = iidc_getstring( camIndex, IIDCID_STRING_MODEL, NULL, 0 ); pBuf2 = new char[lRet+1]; memset( pBuf2, NULL, lRet+1); lRet = iidc_getstring( camIndex, IIDCID_STRING_MODEL, pBuf2, lRet ); if( !lRet ) { delete [] pBuf2; return; } lRet = iidc_getstring( camIndex, IIDCID_STRING_CAMERAID, NULL, 0 ); pBuf3 = new char[lRet+1]; memset( pBuf3, NULL, lRet+1); lRet = iidc_getstring( camIndex, IIDCID_STRING_CAMERAID, pBuf3, lRet ); if( !lRet ) { delete [] pBuf3; return; } sprintf(strCamera,"%s %s %s",pBuf1,pBuf2,pBuf3); delete [] pBuf1; delete [] pBuf2; delete [] pBuf3; } } #endif //SONYIIDC #endif //WIN32