本文整理汇总了C++中boost::scoped_ptr::getMaxDataRate方法的典型用法代码示例。如果您正苦于以下问题:C++ scoped_ptr::getMaxDataRate方法的具体用法?C++ scoped_ptr::getMaxDataRate怎么用?C++ scoped_ptr::getMaxDataRate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类boost::scoped_ptr
的用法示例。
在下文中一共展示了scoped_ptr::getMaxDataRate方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: packetStatistics
void packetStatistics(diagnostic_updater::DiagnosticStatusWrapper& status)
{
// Get stats from camera driver
unsigned long received, missed, requested, resent;
cam_->getAttribute("StatPacketsReceived", received);
cam_->getAttribute("StatPacketsMissed", missed);
cam_->getAttribute("StatPacketsRequested", requested);
cam_->getAttribute("StatPacketsResent", resent);
// Compute rolling totals, percentages
packets_received_acc_.add(received - packets_received_total_);
packets_received_total_ = received;
unsigned long received_recent = packets_received_acc_.sum();
packets_missed_acc_.add(missed - packets_missed_total_);
packets_missed_total_ = missed;
unsigned long missed_recent = packets_missed_acc_.sum();
float recent_ratio = float(received_recent) / (received_recent + missed_recent);
float total_ratio = float(received) / (received + missed);
if (missed_recent == 0) {
status.summary(0, "No missed packets");
}
else if (recent_ratio > 0.99f) {
status.summary(1, "Some missed packets");
}
else {
status.summary(2, "Excessive proportion of missed packets");
}
// Adjust data rate
unsigned long data_rate = 0;
cam_->getAttribute("StreamBytesPerSecond", data_rate);
unsigned long max_data_rate = cam_->getMaxDataRate();
if (auto_adjust_stream_bytes_per_second_)
{
if (max_data_rate < prosilica::Camera::GIGE_MAX_DATA_RATE)
status.mergeSummary(1, "Max data rate is lower than expected for a GigE port");
try
{
/// @todo Something that doesn't oscillate
float multiplier = 1.0f;
if (recent_ratio == 1.0f)
{
multiplier = 1.1f;
}
else if (recent_ratio < 0.99f)
{
multiplier = 0.9f;
}
if (multiplier != 1.0f)
{
unsigned long new_data_rate = std::min((unsigned long)(multiplier * data_rate + 0.5), max_data_rate);
new_data_rate = std::max(new_data_rate, max_data_rate/1000);
if (data_rate != new_data_rate)
{
data_rate = new_data_rate;
cam_->setAttribute("StreamBytesPerSecond", data_rate);
ROS_DEBUG("Changed data rate to %lu bytes per second", data_rate);
}
}
}
catch (prosilica::ProsilicaException &e)
{
if (e.error_code == ePvErrUnplugged)
throw;
ROS_ERROR("Exception occurred: '%s'\n"
"Possible network issue. Attempting to reset data rate to the current maximum.",
e.what());
data_rate = max_data_rate;
cam_->setAttribute("StreamBytesPerSecond", data_rate);
}
}
status.add("Recent % Packets Received", recent_ratio * 100.0f);
status.add("Overall % Packets Received", total_ratio * 100.0f);
status.add("Received Packets", received);
status.add("Missed Packets", missed);
status.add("Requested Packets", requested);
status.add("Resent Packets", resent);
status.add("Data Rate (bytes/s)", data_rate);
status.add("Max Data Rate (bytes/s)", max_data_rate);
}