void cameraSetROI(tCamera* camera, tPvUint32 *ROI) { if(PvAttrUint32Set(camera->Handle, "RegionX", ROI[0])) throw "failed to set RegionX parameter"; if(PvAttrUint32Set(camera->Handle, "RegionY", ROI[1])) throw "failed to set RegionY parameter"; if(PvAttrUint32Set(camera->Handle, "Width", ROI[2])) throw "failed to set Width parameter"; if(PvAttrUint32Set(camera->Handle, "Height", ROI[3])) throw "failed to set Height parameter"; }
void Camera::setBinning(unsigned int binning_x, unsigned int binning_y) { // Permit setting to "no binning" on cameras without binning support if (!hasAttribute("BinningX") && binning_x == 1 && binning_y == 1) return; CHECK_ERR( PvAttrUint32Set(handle_, "BinningX", binning_x), "Couldn't set horizontal binning" ); CHECK_ERR( PvAttrUint32Set(handle_, "BinningY", binning_y), "Couldn't set vertical binning" ); }
void Camera::setRoi(unsigned int x, unsigned int y, unsigned int width, unsigned int height) { CHECK_ERR( PvAttrUint32Set(handle_, "RegionX", x), "Couldn't set region x (left edge)" ); CHECK_ERR( PvAttrUint32Set(handle_, "RegionY", y), "Couldn't set region y (top edge)" ); CHECK_ERR( PvAttrUint32Set(handle_, "Width", width), "Couldn't set region width" ); CHECK_ERR( PvAttrUint32Set(handle_, "Height", height), "Couldn't set region height" ); }
void Camera::setRoiToWholeFrame() { tPvUint32 min_val, max_val; CHECK_ERR( PvAttrUint32Set(handle_, "RegionX", 0), "Couldn't set region x (left edge)" ); CHECK_ERR( PvAttrUint32Set(handle_, "RegionY", 0), "Couldn't set region y (top edge)" ); CHECK_ERR( PvAttrRangeUint32(handle_, "Width", &min_val, &max_val), "Couldn't get range of Width attribute" ); CHECK_ERR( PvAttrUint32Set(handle_, "Width", max_val), "Couldn't set region width" ); CHECK_ERR( PvAttrRangeUint32(handle_, "Height", &min_val, &max_val), "Couldn't get range of Height attribute" ); CHECK_ERR( PvAttrUint32Set(handle_, "Height", max_val), "Couldn't set region height" ); }
void Camera::setWhiteBalance(unsigned int blue, unsigned int red, AutoSetting isauto) { if (PvAttrIsAvailable(handle_, "WhitebalMode") == ePvErrSuccess) { CHECK_ERR( PvAttrEnumSet(handle_, "WhitebalMode", autoValues[isauto]), "Couldn't set white balance mode" ); } if (isauto == Manual && PvAttrIsAvailable(handle_, "WhitebalValueBlue")) { CHECK_ERR( PvAttrUint32Set(handle_, "WhitebalValueBlue", blue), "Couldn't set white balance blue value" ); CHECK_ERR( PvAttrUint32Set(handle_, "WhitebalValueRed", red), "Couldn't set white balance red value" ); } }
void Camera::setExposure(unsigned int val, AutoSetting isauto) { CHECK_ERR( PvAttrEnumSet(handle_, "ExposureMode", autoValues[isauto]), "Couldn't set exposure mode" ); if (isauto == Manual) CHECK_ERR( PvAttrUint32Set(handle_, "ExposureValue", val), "Couldn't set exposure value" ); }
// unsetup event channel void EventUnsetup() { // wait so that the "AcquisitionEnd" [from CameraStop()] can be received on the event channel Sleep(1000); // clear all events PvAttrUint32Set(GCamera.Handle,"EventsEnable1",0); // unregister callback function PvCameraEventCallbackUnRegister(GCamera.Handle,F_CameraEventCallback); }
bool CvCaptureCAM_PvAPI::setProperty( int property_id, double value ) { switch ( property_id ) { /* TODO: Camera works, but IplImage must be modified for the new size case CV_CAP_PROP_FRAME_WIDTH: PvAttrUint32Set(Camera.Handle, "Width", (tPvUint32)value); break; case CV_CAP_PROP_FRAME_HEIGHT: PvAttrUint32Set(Camera.Handle, "Heigth", (tPvUint32)value); break; */ case CV_CAP_PROP_MONOCROME: if (value==1) { char pixelFormat[256]; PvAttrEnumGet(Camera.Handle, "PixelFormat", pixelFormat,256,NULL); if ((strcmp(pixelFormat, "Mono8")==0) || strcmp(pixelFormat, "Mono16")==0) { monocrome=true; } else return false; } else monocrome=false; break; case CV_CAP_PROP_EXPOSURE: if ((PvAttrUint32Set(Camera.Handle,"ExposureValue",(tPvUint32)value)==ePvErrSuccess)) break; else return false; case CV_CAP_PROP_PVAPI_MULTICASTIP: if (value==-1) { if ((PvAttrEnumSet(Camera.Handle,"MulticastEnable", "Off")==ePvErrSuccess)) break; else return false; } else { std::string ip=cv::format("%d.%d.%d.%d", ((int)value>>24)&255, ((int)value>>16)&255, ((int)value>>8)&255, (int)value&255); if ((PvAttrEnumSet(Camera.Handle,"MulticastEnable", "On")==ePvErrSuccess) && (PvAttrStringSet(Camera.Handle, "MulticastIPAddress", ip.c_str())==ePvErrSuccess)) break; else return false; } default: return false; } return true; }
void Camera::setGain(unsigned int val, AutoSetting isauto) { /// @todo Here and in setWhiteBalance, would be better to split off setGainMode etc. /// I didn't take into account there are cameras that don't support auto gain, auto white balance. if (PvAttrIsAvailable(handle_, "GainMode") == ePvErrSuccess) { CHECK_ERR( PvAttrEnumSet(handle_, "GainMode", autoValues[isauto]), "Couldn't set gain mode" ); } if (isauto == Manual) CHECK_ERR( PvAttrUint32Set(handle_, "GainValue", val), "Couldn't set gain value" ); }
// // idlPvAttrUint32Set // // Set the value of a Uint32 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 idlPvAttrUint32Set (int argc, char *argv[]) { unsigned long n; unsigned long err; IDL_STRING *name; unsigned long value; debug = *(IDL_INT *) argv[0]; n = *(unsigned long *) argv[1]; name = (IDL_STRING *) argv[2]; value = *(unsigned long *) argv[3]; CHECKINDEX(n); err = PvAttrUint32Set(camera[n], (const char *) IDL_STRING_STR(name), (tPvUint32) value); return idlPvErrCode(err); }
bool CvCaptureCAM_PvAPI::setProperty( int property_id, double value ) { tPvErr error; switch ( property_id ) { case CV_CAP_PROP_FRAME_WIDTH: { tPvUint32 currHeight; PvAttrUint32Get(Camera.Handle, "Height", &currHeight); stopCapture(); // Reallocate Frames if (!resizeCaptureFrame(value, currHeight)) { startCapture(); return false; } startCapture(); break; } case CV_CAP_PROP_FRAME_HEIGHT: { tPvUint32 currWidth; PvAttrUint32Get(Camera.Handle, "Width", &currWidth); stopCapture(); // Reallocate Frames if (!resizeCaptureFrame(currWidth, value)) { startCapture(); return false; } startCapture(); break; } case CV_CAP_PROP_MONOCROME: if (value==1) { char pixelFormat[256]; PvAttrEnumGet(Camera.Handle, "PixelFormat", pixelFormat,256,NULL); if ((strcmp(pixelFormat, "Mono8")==0) || strcmp(pixelFormat, "Mono16")==0) { monocrome=true; } else return false; } else monocrome=false; break; case CV_CAP_PROP_EXPOSURE: if ((PvAttrUint32Set(Camera.Handle,"ExposureValue",(tPvUint32)value)==ePvErrSuccess)) break; else return false; case CV_CAP_PROP_PVAPI_MULTICASTIP: if (value==-1) { if ((PvAttrEnumSet(Camera.Handle,"MulticastEnable", "Off")==ePvErrSuccess)) break; else return false; } else { cv::String ip=cv::format("%d.%d.%d.%d", ((unsigned int)value>>24)&255, ((unsigned int)value>>16)&255, ((unsigned int)value>>8)&255, (unsigned int)value&255); if ((PvAttrEnumSet(Camera.Handle,"MulticastEnable", "On")==ePvErrSuccess) && (PvAttrStringSet(Camera.Handle, "MulticastIPAddress", ip.c_str())==ePvErrSuccess)) break; else return false; } case CV_CAP_PROP_GAIN: if (PvAttrUint32Set(Camera.Handle,"GainValue",(tPvUint32)value)!=ePvErrSuccess) { return false; } break; case CV_CAP_PROP_PVAPI_FRAMESTARTTRIGGERMODE: if (value==0) error = PvAttrEnumSet(Camera.Handle, "FrameStartTriggerMode", "Freerun"); else if (value==1) error = PvAttrEnumSet(Camera.Handle, "FrameStartTriggerMode", "SyncIn1"); else if (value==2) error = PvAttrEnumSet(Camera.Handle, "FrameStartTriggerMode", "SyncIn2"); else if (value==3) error = PvAttrEnumSet(Camera.Handle, "FrameStartTriggerMode", "FixedRate"); else if (value==4) error = PvAttrEnumSet(Camera.Handle, "FrameStartTriggerMode", "Software"); else error = ePvErrOutOfRange; if(error==ePvErrSuccess) break; else return false; case CV_CAP_PROP_PVAPI_DECIMATIONHORIZONTAL: if (value >= 1 && value <= 8) error = PvAttrUint32Set(Camera.Handle, "DecimationHorizontal", value); else error = ePvErrOutOfRange; if(error==ePvErrSuccess) break; else return false; case CV_CAP_PROP_PVAPI_DECIMATIONVERTICAL: if (value >= 1 && value <= 8) error = PvAttrUint32Set(Camera.Handle, "DecimationVertical", value); else error = ePvErrOutOfRange; if(error==ePvErrSuccess) break; else return false; case CV_CAP_PROP_PVAPI_BINNINGX: error = PvAttrUint32Set(Camera.Handle, "BinningX", value); if(error==ePvErrSuccess) break; else return false; case CV_CAP_PROP_PVAPI_BINNINGY: error = PvAttrUint32Set(Camera.Handle, "BinningY", value); if(error==ePvErrSuccess) break; else return false; default: return false; } return true; }
void Camera::setAttribute(const std::string &name, tPvUint32 value) { std::string err_msg = "Couldn't set attribute " + name; CHECK_ERR( PvAttrUint32Set(handle_, name.c_str(), value), err_msg.c_str()); }
void cameraSetExpo(tCamera* camera, tPvUint32 expo) { if (PvAttrUint32Set(camera->Handle, "ExposureValue", expo)) throw "failed to set ExposureValue parameter"; }
bool CameraGigE::onInit() { LOG(LTRACE) << "CameraGigE::initialize\n"; h_onTrigger.setup(this, &CameraGigE::onTrigger); registerHandler("onTrigger", &h_onTrigger); newImage = registerEvent("newImage"); endOfSequence = registerEvent("endOfSequence"); registerStream("out_img", &out_img); if (!props.address.empty()) { unsigned long ip = inet_addr(props.address.c_str()); if (PvCameraOpenByAddr(ip, ePvAccessMaster, &cHandle) != ePvErrSuccess) { LOG(LERROR) << "Unable to open camera on adress " << props.address << " \n"; return false; } } else if (props.uid != 0) { if (PvCameraOpen(props.uid, ePvAccessMaster, &cHandle) != ePvErrSuccess) { LOG(LERROR) << "Unable to open camera with uid " << props.uid << " \n"; return false; } } else { return false; } // Set parameters tPvErr err; /// Exposure if (!props.exposureMode.empty()) { if ((err = PvAttrEnumSet(cHandle, "ExposureMode", props.exposureMode.c_str())) == ePvErrSuccess) { if (props.exposureMode == "Manual") { if ((err = PvAttrUint32Set(cHandle, "ExposureValue", props.exposureValue / 1000000.0)) != ePvErrSuccess) { if (err == ePvErrOutOfRange) { tPvUint32 min, max; PvAttrRangeUint32(cHandle, "ExposureValue", &min, &max); LOG(LWARNING) << "ExposureValue : " << props.exposureValue << " is out of range, valid range [ " << (double) min / 1000000.0 << " , " << (double) max / 1000000.0 << " ]\n"; } } } } else { LOG(LWARNING) << "Unable to set ExposureMode \n"; } } /// Gain if (!props.gainMode.empty()) { if ((err = PvAttrEnumSet(cHandle, "GainMode", props.gainMode.c_str())) == ePvErrSuccess) { if (props.gainMode == "Manual") { if ((err = PvAttrUint32Set(cHandle, "gainValue", props.gainValue)) != ePvErrSuccess) { if (err == ePvErrOutOfRange) { tPvUint32 min, max; PvAttrRangeUint32(cHandle, "GainValue", &min, &max); LOG(LWARNING) << "GainValue : " << props.gainValue << " is out of range, valid range [ " << (double) min << " , " << (double) max << " ]\n"; } } } } else { LOG(LWARNING) << "Unable to set GainMode \n"; } } /// White Balance if (!props.whitebalMode.empty()) { if ((err = PvAttrEnumSet(cHandle, "WhitebalMode", props.gainMode.c_str())) == ePvErrSuccess) { if (props.whitebalMode == "Manual") { if ((err = PvAttrUint32Set(cHandle, "WhitebalValueRed", props.whitebalValueRed)) != ePvErrSuccess) { if (err == ePvErrOutOfRange) { tPvUint32 min, max; PvAttrRangeUint32(cHandle, "WhitebalValueRed", &min, &max); LOG(LWARNING) << "WhitebalValueRed : " << props.whitebalValueRed << " is out of range, valid range [ " << (double) min << " , " << (double) max << " ]\n"; } } if ((err = PvAttrUint32Set(cHandle, "WhitebalValueBlue", props.whitebalValueBlue)) != ePvErrSuccess) { if (err == ePvErrOutOfRange) { tPvUint32 min, max; PvAttrRangeUint32(cHandle, "WhitebalValueBlue", &min, &max); LOG(LWARNING) << "WhitebalValueBlue : " << props.whitebalValueBlue << " is out of range, valid range [ " << (double) min << " , " << (double) max << " ]\n"; } } } } else { LOG(LWARNING) << "Unable to set WhitebalMode" << err << "\n"; } } if ((err = PvAttrEnumSet(cHandle, "MirrorX", props.mirrorX ? "On" : "Off")) != ePvErrSuccess) { } if ((err = PvAttrEnumSet(cHandle, "PixelFormat", props.pixelFormat.c_str())) != ePvErrSuccess) { LOG(LERROR) << "Unable to set pixelformat " << err; } if ((err = PvAttrUint32Set(cHandle, "Height", props.height)) != ePvErrSuccess) { if (err == ePvErrOutOfRange) { tPvUint32 min, max; PvAttrRangeUint32(cHandle, "Height", &min, &max); LOG(LWARNING) << "Height : " << props.height << " is out of range, valid range [ " << (double) min << " , " << (double) max << " ]"; } } if ((err = PvAttrUint32Set(cHandle, "Width", props.width)) != ePvErrSuccess) { if (err == ePvErrOutOfRange) { tPvUint32 min, max; PvAttrRangeUint32(cHandle, "Width", &min, &max); LOG(LWARNING) << "Width : " << props.width << " is out of range, valid range [ " << (double) min << " , " << (double) max << " ]\n"; } } if ((err = PvAttrUint32Set(cHandle, "RegionX", props.regionX)) != ePvErrSuccess) { if (err == ePvErrOutOfRange) { tPvUint32 min, max; PvAttrRangeUint32(cHandle, "RegionX", &min, &max); LOG(LWARNING) << "RegionX : " << props.regionX << " is out of range, valid range [ " << (double) min << " , " << (double) max << " ]\n"; } } if ((err = PvAttrUint32Set(cHandle, "RegionY", props.regionY)) != ePvErrSuccess) { if (err == ePvErrOutOfRange) { tPvUint32 min, max; PvAttrRangeUint32(cHandle, "RegionY", &min, &max); LOG(LWARNING) << "RegionY : " << props.regionY << " is out of range, valid range [ " << (double) min << " , " << (double) max << " ]\n"; } } if ((err = PvAttrUint32Set(cHandle, "BinningX", props.binningX)) != ePvErrSuccess) { if (err == ePvErrOutOfRange) { tPvUint32 min, max; PvAttrRangeUint32(cHandle, "BinningX", &min, &max); LOG(LWARNING) << "BinningX : " << props.binningX << " is out of range, valid range [ " << (double) min << " , " << (double) max << " ]\n"; } } if ((err = PvAttrUint32Set(cHandle, "BinningY", props.binningY)) != ePvErrSuccess) { if (err == ePvErrOutOfRange) { tPvUint32 min, max; PvAttrRangeUint32(cHandle, "BinningY", &min, &max); LOG(LWARNING) << "BinningY : " << props.binningY << " is out of range, valid range [ " << (double) min << " , " << (double) max << " ]\n"; } } // ---------------- PvAttrEnumSet(cHandle, "FrameStartTriggerMode", "Freerun"); unsigned long frameSize = 0; if (PvAttrUint32Get(cHandle, "TotalBytesPerFrame", &frameSize) != ePvErrSuccess) { return false; } frame.ImageBuffer = new char[frameSize]; frame.ImageBufferSize = frameSize; return true; }
bool CvCaptureCAM_PvAPI::resizeCaptureFrame (int frameWidth, int frameHeight) { char pixelFormat[256]; tPvUint32 frameSize; tPvUint32 sensorHeight; tPvUint32 sensorWidth; if (grayframe) { cvReleaseImage(&grayframe); grayframe = NULL; } if (frame) { cvReleaseImage(&frame); frame = NULL; } if (PvAttrUint32Get(Camera.Handle, "SensorWidth", &sensorWidth) != ePvErrSuccess) { return false; } if (PvAttrUint32Get(Camera.Handle, "SensorHeight", &sensorHeight) != ePvErrSuccess) { return false; } // Cap out of bounds widths to the max supported by the sensor if ((frameWidth < 0) || ((tPvUint32)frameWidth > sensorWidth)) { frameWidth = sensorWidth; } if ((frameHeight < 0) || ((tPvUint32)frameHeight > sensorHeight)) { frameHeight = sensorHeight; } if (PvAttrUint32Set(Camera.Handle, "Height", frameHeight) != ePvErrSuccess) { return false; } if (PvAttrUint32Set(Camera.Handle, "Width", frameWidth) != ePvErrSuccess) { return false; } PvAttrEnumGet(Camera.Handle, "PixelFormat", pixelFormat,256,NULL); PvAttrUint32Get(Camera.Handle, "TotalBytesPerFrame", &frameSize); if (strcmp(pixelFormat, "Mono8")==0) { grayframe = cvCreateImage(cvSize((int)frameWidth, (int)frameHeight), IPL_DEPTH_8U, 1); grayframe->widthStep = (int)frameWidth; frame = cvCreateImage(cvSize((int)frameWidth, (int)frameHeight), IPL_DEPTH_8U, 3); frame->widthStep = (int)frameWidth*3; Camera.Frame.ImageBufferSize = frameSize; Camera.Frame.ImageBuffer = grayframe->imageData; } else if (strcmp(pixelFormat, "Mono16")==0) { grayframe = cvCreateImage(cvSize((int)frameWidth, (int)frameHeight), IPL_DEPTH_16U, 1); grayframe->widthStep = (int)frameWidth; frame = cvCreateImage(cvSize((int)frameWidth, (int)frameHeight), IPL_DEPTH_16U, 3); frame->widthStep = (int)frameWidth*3; Camera.Frame.ImageBufferSize = frameSize; Camera.Frame.ImageBuffer = grayframe->imageData; } else if (strcmp(pixelFormat, "Bgr24")==0) { frame = cvCreateImage(cvSize((int)frameWidth, (int)frameHeight), IPL_DEPTH_8U, 3); frame->widthStep = (int)frameWidth*3; Camera.Frame.ImageBufferSize = frameSize; Camera.Frame.ImageBuffer = frame->imageData; } else return false; return true; }
bool CvCaptureCAM_PvAPI::setProperty( int property_id, double value ) { switch ( property_id ) { case CV_CAP_PROP_FRAME_WIDTH: { tPvUint32 currHeight; PvAttrUint32Get(Camera.Handle, "Height", &currHeight); stopCapture(); // Reallocate Frames if (!resizeCaptureFrame(value, currHeight)) { startCapture(); return false; } startCapture(); break; } case CV_CAP_PROP_FRAME_HEIGHT: { tPvUint32 currWidth; PvAttrUint32Get(Camera.Handle, "Width", &currWidth); stopCapture(); // Reallocate Frames if (!resizeCaptureFrame(value, currWidth)) { startCapture(); return false; } startCapture(); break; } case CV_CAP_PROP_MONOCROME: if (value==1) { char pixelFormat[256]; PvAttrEnumGet(Camera.Handle, "PixelFormat", pixelFormat,256,NULL); if ((strcmp(pixelFormat, "Mono8")==0) || strcmp(pixelFormat, "Mono16")==0) { monocrome=true; } else return false; } else monocrome=false; break; case CV_CAP_PROP_EXPOSURE: if ((PvAttrUint32Set(Camera.Handle,"ExposureValue",(tPvUint32)value)==ePvErrSuccess)) break; else return false; case CV_CAP_PROP_PVAPI_MULTICASTIP: if (value==-1) { if ((PvAttrEnumSet(Camera.Handle,"MulticastEnable", "Off")==ePvErrSuccess)) break; else return false; } else { cv::String ip=cv::format("%d.%d.%d.%d", ((int)value>>24)&255, ((int)value>>16)&255, ((int)value>>8)&255, (int)value&255); if ((PvAttrEnumSet(Camera.Handle,"MulticastEnable", "On")==ePvErrSuccess) && (PvAttrStringSet(Camera.Handle, "MulticastIPAddress", ip.c_str())==ePvErrSuccess)) break; else return false; } case CV_CAP_PROP_GAIN: if (PvAttrUint32Set(Camera.Handle,"GainValue",(tPvUint32)value)!=ePvErrSuccess) { return false; } break; default: return false; } return true; }
// setup event channel // return value: true == success, false == fail bool EventSetup() { unsigned long EventBitmask; tPvErr errCode; // check if events supported with this camera firmware if (PvAttrExists(GCamera.Handle,"EventsEnable1") == ePvErrNotFound) { printf("This camera does not support event notifications.\n"); return false; } //Clear all events //EventsEnable1 is a bitmask of all events. Bits correspond to last two digits of EventId. // e.g: Bit 1 is EventAcquisitionStart, Bit 2 is EventAcquisitionEnd, Bit 10 is EventSyncIn1Rise. if ((errCode = PvAttrUint32Set(GCamera.Handle,"EventsEnable1",0)) != ePvErrSuccess) { printf("Set EventsEnable1 err: %u\n", errCode); return false; } //Set individual events (could do in one step with EventsEnable1). if ((errCode = PvAttrEnumSet(GCamera.Handle,"EventSelector","AcquisitionStart")) != ePvErrSuccess) { printf("Set EventsSelector err: %u\n", errCode); return false; } if ((errCode = PvAttrEnumSet(GCamera.Handle,"EventNotification","On")) != ePvErrSuccess) { printf("Set EventsNotification err: %u\n", errCode); return false; } if ((errCode = PvAttrEnumSet(GCamera.Handle,"EventSelector","AcquisitionEnd")) != ePvErrSuccess) { printf("Set EventsSelector err: %u\n", errCode); return false; } if ((errCode = PvAttrEnumSet(GCamera.Handle,"EventNotification","On")) != ePvErrSuccess) { printf("Set EventsNotification err: %u\n", errCode); return false; } if ((errCode = PvAttrEnumSet(GCamera.Handle,"EventSelector","FrameTrigger")) != ePvErrSuccess) { printf("Set EventsSelector err: %u\n", errCode); return false; } if ((errCode = PvAttrEnumSet(GCamera.Handle,"EventNotification","On")) != ePvErrSuccess) { printf("Set EventsNotification err: %u\n", errCode); return false; } //Get and print bitmask PvAttrUint32Get(GCamera.Handle,"EventsEnable1", &EventBitmask); printf("Events set. EventsEnable1 bitmask: %u\n", EventBitmask); //register callback function if ((errCode = PvCameraEventCallbackRegister(GCamera.Handle,F_CameraEventCallback,NULL)) != ePvErrSuccess) { printf("PvCameraEventCallbackRegister err: %u\n", errCode); return false; } return true; }
// 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; } }
//Callback for the bytespersecond values changed G_MODULE_EXPORT void cb_BytesPerSecond_changed( GtkEditable *editable, gpointer data ) { //We set the new value on the camera PvAttrUint32Set(camera_params.camera_handler,"StreamBytesPerSecond",(int)gtk_adjustment_get_value(camera_params.objects->Bytes_per_sec_adj)); }