bool camera_jai::closeCamera() { J_STATUS_TYPE status = J_ST_SUCCESS; if (m_hCam) { // Close camera status = J_Camera_Close(m_hCam); if(status != J_ST_SUCCESS) { ShowErrorMsg(CString("Could not close camera!"), status); } m_hCam = NULL; TRACE("Closed camera\n"); } 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; }