bool camera_jai::openCamera() { // close a previous camera and open a selected camera J_STATUS_TYPE status = J_ST_SUCCESS; if(!m_hCam) { //open the selected camera status = J_Camera_Open(m_hFactory, m_sCameraId, &m_hCam); if(status != J_ST_SUCCESS) { ShowErrorMsg(CString("Could not open camera!"), status); return false; } //Make sure streaming is supported! uint32_t numStreams = 0; status = J_Camera_GetNumOfDataStreams(m_hCam, &numStreams); if (status != J_ST_SUCCESS) { ShowErrorMsg(CString("Error with J_Camera_GetNumOfDataStreams."), status); return false; } } return true; }
int CGigECamera::OnCameraChoice( MM::PropertyBase* pProp, MM::ActionType eAct ) { if( eAct == MM::AfterSet ) { std::string name; pProp->Get( name ); std::map<std::string,std::string>::iterator i = cameraNameMap.find( name ); if( i == cameraNameMap.end() ) { LogMessage( (std::string) "internal error: inconsistency in camera name map (" + name + ")", false ); return DEVICE_INTERNAL_INCONSISTENCY; } std::string realName = (*i).second; if( this->cameraName.compare( realName ) != 0 ) // squash idempotent changes { LogMessage( (std::string) "Opening camera: " + realName ); J_STATUS_TYPE retval = J_Camera_Close( hCamera ); retval = J_Camera_Open( hFactory, const_cast<char*>(realName.c_str()), &hCamera ); // XXX this should really refresh all the camera parameters after opening a new camera, // possibly enabling or removing some properties. if( retval != J_ST_SUCCESS ) { LogMessage( (std::string) "camera open failed (" + realName + ")", false ); return DEVICE_NATIVE_MODULE_FAILED; } cameraName = realName; } } else if( eAct == MM::BeforeGet ) { std::map<std::string,std::string>::iterator i = cameraNameMap.find( cameraName ); if( i == cameraNameMap.end() ) { LogMessage( (std::string) "internal error: inconsistency in camera name map (" + cameraName + ")", false ); return DEVICE_INTERNAL_INCONSISTENCY; } pProp->Set( (*i).second.c_str() ); } return DEVICE_OK; }