// setup and start streaming // return value: true == success, false == fail bool CameraStart() { tPvErr errCode; bool failed = false; // NOTE: This call sets camera PacketSize to largest sized test packet, up to 8228, that doesn't fail // on network card. Some MS VISTA network card drivers become unresponsive if test packet fails. // Use PvUint32Set(handle, "PacketSize", MaxAllowablePacketSize) instead. See network card properties // for max allowable PacketSize/MTU/JumboFrameSize. if((errCode = PvCaptureAdjustPacketSize(GCamera.Handle,8228)) != ePvErrSuccess) { printf("CameraStart: PvCaptureAdjustPacketSize err: %u\n", errCode); return false; } // start driver capture stream if((errCode = PvCaptureStart(GCamera.Handle)) != ePvErrSuccess) { printf("CameraStart: PvCaptureStart err: %u\n", errCode); return false; } // queue frames with FrameDoneCB callback function. Each frame can use a unique callback function // or, as in this case, the same callback function. for(int i=0;i<FRAMESCOUNT && !failed;i++) { if((errCode = PvCaptureQueueFrame(GCamera.Handle,&(GCamera.Frames[i]),FrameDoneCB)) != ePvErrSuccess) { printf("CameraStart: PvCaptureQueueFrame err: %u\n", errCode); failed = true; } } if (failed) return false; // set the camera to 5 FPS, continuous mode, and start camera receiving triggers if((PvAttrFloat32Set(GCamera.Handle,"FrameRate",5) != ePvErrSuccess) || (PvAttrEnumSet(GCamera.Handle,"FrameStartTriggerMode","FixedRate") != ePvErrSuccess) || (PvAttrEnumSet(GCamera.Handle,"AcquisitionMode","Continuous") != ePvErrSuccess) || (PvCommandRun(GCamera.Handle,"AcquisitionStart") != ePvErrSuccess)) { printf("CameraStart: failed to set camera attributes\n"); return false; } return true; }
// // idlPvAttrFloat32Set // // Set the value of a Float32 attribute // // command line arguments // argv[0]: IN/FLAG debug // argv[1]: IN camera index // argv[2]: IN attribute name // argv[3]: IN attribute value int idlPvAttrFloat32Set (int argc, char *argv[]) { unsigned long n; unsigned long err; IDL_STRING *name; float value; debug = *(IDL_INT *) argv[0]; n = *(unsigned long *) argv[1]; name = (IDL_STRING *) argv[2]; value = *(float *) argv[3]; CHECKINDEX(n); err = PvAttrFloat32Set(camera[n], (const char *) IDL_STRING_STR(name), (tPvFloat32) value); return idlPvErrCode(err); }
void Camera::setAttribute(const std::string &name, tPvFloat32 value) { std::string err_msg = "Couldn't set attribute " + name; CHECK_ERR( PvAttrFloat32Set(handle_, name.c_str(), value), err_msg.c_str()); }
// set the value of a given attribute from a value encoded in a string bool String2Value(tPvHandle aCamera,const char* aLabel,tPvDatatype aType,char* aValue) { switch(aType) { case ePvDatatypeString: { if(!PvAttrStringSet(aCamera,aLabel,aValue)) return true; else return false; } case ePvDatatypeEnum: { if(!PvAttrEnumSet(aCamera,aLabel,aValue)) return true; else return false; } case ePvDatatypeUint32: { tPvUint32 lValue = atol(aValue); tPvUint32 lMin,lMax; if(!PvAttrRangeUint32(aCamera,aLabel,&lMin,&lMax)) { if(lMin > lValue) lValue = lMin; else if(lMax < lValue) lValue = lMax; if(!PvAttrUint32Set(aCamera,aLabel,lValue)) return true; else return false; } else return false; } case ePvDatatypeFloat32: { tPvFloat32 lValue = (tPvFloat32)atof(aValue); tPvFloat32 lMin,lMax; if(!PvAttrRangeFloat32(aCamera,aLabel,&lMin,&lMax)) { if(lMin > lValue) lValue = lMin; else if(lMax < lValue) lValue = lMax; if(!PvAttrFloat32Set(aCamera,aLabel,lValue)) return true; else return false; } else return false; } default: return false; } }