本文整理汇总了C++中boost::scoped_ptr::hasAttribute方法的典型用法代码示例。如果您正苦于以下问题:C++ scoped_ptr::hasAttribute方法的具体用法?C++ scoped_ptr::hasAttribute怎么用?C++ scoped_ptr::hasAttribute使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类boost::scoped_ptr
的用法示例。
在下文中一共展示了scoped_ptr::hasAttribute方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: processFrame
bool processFrame(tPvFrame* frame, sensor_msgs::Image &img, sensor_msgs::CameraInfo &cam_info)
{
/// @todo Better trigger timestamp matching
if ((trigger_mode_ == prosilica::SyncIn1 || trigger_mode_ == prosilica::SyncIn2) && !trig_time_.isZero()) {
img.header.stamp = cam_info.header.stamp = trig_time_;
trig_time_ = ros::Time(); // Zero
}
else {
/// @todo Match time stamp from frame to ROS time?
img.header.stamp = cam_info.header.stamp = ros::Time::now();
}
/// @todo Binning values retrieved here may differ from the ones used to actually
/// capture the frame! Maybe need to clear queue when changing binning and/or
/// stuff binning values into context?
tPvUint32 binning_x = 1, binning_y = 1;
if (cam_->hasAttribute("BinningX")) {
cam_->getAttribute("BinningX", binning_x);
cam_->getAttribute("BinningY", binning_y);
}
// Binning averages bayer samples, so just call it mono8 in that case
if (frame->Format == ePvFmtBayer8 && (binning_x > 1 || binning_y > 1))
frame->Format = ePvFmtMono8;
if (!frameToImage(frame, img))
return false;
// Set the operational parameters in CameraInfo (binning, ROI)
cam_info.binning_x = binning_x;
cam_info.binning_y = binning_y;
// ROI in CameraInfo is in unbinned coordinates, need to scale up
cam_info.roi.x_offset = frame->RegionX * binning_x;
cam_info.roi.y_offset = frame->RegionY * binning_y;
cam_info.roi.height = frame->Height * binning_y;
cam_info.roi.width = frame->Width * binning_x;
cam_info.roi.do_rectify = (frame->Height != sensor_height_ / binning_y) ||
(frame->Width != sensor_width_ / binning_x);
count_++;
return true;
}
示例2: configure
void configure(Config& config, uint32_t level)
{
ROS_DEBUG("Reconfigure request received");
if (level >= (uint32_t)driver_base::SensorLevels::RECONFIGURE_STOP)
stop();
// Trigger mode
if (config.trigger_mode == "streaming") {
trigger_mode_ = prosilica::Freerun;
/// @todo Tighter bound than this minimal check
desired_freq_ = 1; // make sure we get _something_
}
else if (config.trigger_mode == "syncin1") {
trigger_mode_ = prosilica::SyncIn1;
desired_freq_ = config.trig_rate;
}
else if (config.trigger_mode == "syncin2") {
trigger_mode_ = prosilica::SyncIn2;
desired_freq_ = config.trig_rate;
}
//#if 0
else if (config.trigger_mode == "fixedrate") {
//ROS_DEBUG("Fixed rate not supported yet implementing software");
trigger_mode_ = prosilica::FixedRate;
// ROS_ERROR("Invalid trigger mode '%s' in reconfigure request", config.trigger_mode.c_str());
///@todo add the fixed rate implementation
cam_->setAttribute("FrameRate",(tPvFloat32)config.fixed_rate);//1.0;//config.fixed_rate;
}
//#endif
else if (config.trigger_mode == "polled") {
trigger_mode_ = prosilica::Software;
desired_freq_ = 0;
}
else {
ROS_ERROR("Invalid trigger '%s' in reconfigure request", config.trigger_mode.c_str());
}
trig_timestamp_topic_ = config.trig_timestamp_topic;
// Exposure
if (config.auto_exposure)
{
cam_->setExposure(0, prosilica::Auto);
if (cam_->hasAttribute("ExposureAutoMax"))
{
tPvUint32 us = config.exposure_auto_max*1000000. + 0.5;
cam_->setAttribute("ExposureAutoMax", us);
}
if (cam_->hasAttribute("ExposureAutoTarget"))
cam_->setAttribute("ExposureAutoTarget", (tPvUint32)config.exposure_auto_target);
}
else {
unsigned us = config.exposure*1000000. + 0.5;
cam_->setExposure(us, prosilica::Manual);
}
// Gain
if (config.auto_gain) {
if (cam_->hasAttribute("GainAutoMax"))
{
cam_->setGain(0, prosilica::Auto);
cam_->setAttribute("GainAutoMax", (tPvUint32)config.gain_auto_max);
cam_->setAttribute("GainAutoTarget", (tPvUint32)config.gain_auto_target);
}
else {
tPvUint32 major, minor;
cam_->getAttribute("FirmwareVerMajor", major);
cam_->getAttribute("FirmwareVerMinor", minor);
ROS_WARN("Auto gain not available for this camera. Auto gain is available "
"on firmware versions 1.36 and above. You are running version %u.%u.",
(unsigned)major, (unsigned)minor);
config.auto_gain = false;
}
}
else
cam_->setGain(config.gain, prosilica::Manual);
// White balance
if (config.auto_whitebalance) {
if (cam_->hasAttribute("WhitebalMode"))
cam_->setWhiteBalance(0, 0, prosilica::Auto);
else {
ROS_WARN("Auto white balance not available for this camera.");
config.auto_whitebalance = false;
}
}
else
cam_->setWhiteBalance(config.whitebalance_blue, config.whitebalance_red, prosilica::Manual);
// Binning configuration
if (cam_->hasAttribute("BinningX")) {
tPvUint32 max_binning_x, max_binning_y, dummy;
PvAttrRangeUint32(cam_->handle(), "BinningX", &dummy, &max_binning_x);
PvAttrRangeUint32(cam_->handle(), "BinningY", &dummy, &max_binning_y);
config.binning_x = std::min(config.binning_x, (int)max_binning_x);
config.binning_y = std::min(config.binning_y, (int)max_binning_y);
cam_->setBinning(config.binning_x, config.binning_y);
}
//.........这里部分代码省略.........