Merge branch 'fix/bag-playback-recorded-profiles' into v2/develop

This commit is contained in:
ob-yalian
2026-09-15 10:42:25 +08:00
+28 -6
View File
@@ -3614,8 +3614,10 @@ void OBCameraNode::setupProfiles() {
std::shared_ptr<ob::VideoStreamProfile> selected_profile; std::shared_ptr<ob::VideoStreamProfile> selected_profile;
std::shared_ptr<ob::VideoStreamProfile> default_profile; std::shared_ptr<ob::VideoStreamProfile> default_profile;
try { try {
if (width_[elem] == 0 && height_[elem] == 0 && fps_[elem] == 0 && if (is_playback_device_) {
format_[elem] == OB_FORMAT_UNKNOWN) { selected_profile = profiles->getProfile(0)->as<ob::VideoStreamProfile>();
} else if (width_[elem] == 0 && height_[elem] == 0 && fps_[elem] == 0 &&
format_[elem] == OB_FORMAT_UNKNOWN) {
selected_profile = profiles->getProfile(0)->as<ob::VideoStreamProfile>(); selected_profile = profiles->getProfile(0)->as<ob::VideoStreamProfile>();
} else { } else {
if (isGemini305SeriesPID(pid_) && elem == DEPTH) { if (isGemini305SeriesPID(pid_) && elem == DEPTH) {
@@ -3684,6 +3686,13 @@ void OBCameraNode::setupProfiles() {
width_[elem] = static_cast<int>(selected_profile->getWidth()); width_[elem] = static_cast<int>(selected_profile->getWidth());
fps_[elem] = static_cast<int>(selected_profile->getFps()); fps_[elem] = static_cast<int>(selected_profile->getFps());
format_[elem] = selected_profile->getFormat(); format_[elem] = selected_profile->getFormat();
if (is_playback_device_) {
format_str_[elem] = OBFormatToString(format_[elem]);
RCLCPP_INFO_STREAM(logger_, "Bag playback: using recorded "
<< stream_name_[elem] << " profile " << width_[elem] << "x"
<< height_[elem] << " " << fps_[elem] << "fps "
<< format_str_[elem]);
}
updateImageConfig(elem); updateImageConfig(elem);
if (selected_profile->format() == OB_FORMAT_BGRA) { if (selected_profile->format() == OB_FORMAT_BGRA) {
images_[elem] = cv::Mat(height_[elem], width_[elem], CV_8UC4, cv::Scalar(0, 0, 0, 0)); images_[elem] = cv::Mat(height_[elem], width_[elem], CV_8UC4, cv::Scalar(0, 0, 0, 0));
@@ -3706,7 +3715,20 @@ void OBCameraNode::setupProfiles() {
} }
try { try {
auto profile_list = sensors_[stream_index]->getStreamProfileList(); auto profile_list = sensors_[stream_index]->getStreamProfileList();
if (stream_index == ACCEL) { if (is_playback_device_) {
stream_profile_[stream_index] = profile_list->getProfile(0);
if (stream_index == ACCEL) {
auto profile = stream_profile_[stream_index]->as<ob::AccelStreamProfile>();
CHECK_NOTNULL(profile.get());
imu_range_[stream_index] = fullAccelScaleRangeToString(profile->getFullScaleRange());
imu_rate_[stream_index] = sampleRateToString(profile->getSampleRate());
} else if (stream_index == GYRO) {
auto profile = stream_profile_[stream_index]->as<ob::GyroStreamProfile>();
CHECK_NOTNULL(profile.get());
imu_range_[stream_index] = fullGyroScaleRangeToString(profile->getFullScaleRange());
imu_rate_[stream_index] = sampleRateToString(profile->getSampleRate());
}
} else if (stream_index == ACCEL) {
auto full_scale_range = fullAccelScaleRangeFromString(imu_range_[stream_index]); auto full_scale_range = fullAccelScaleRangeFromString(imu_range_[stream_index]);
auto sample_rate = sampleRateFromString(imu_rate_[stream_index]); auto sample_rate = sampleRateFromString(imu_rate_[stream_index]);
auto profile = profile_list->getAccelStreamProfile(full_scale_range, sample_rate); auto profile = profile_list->getAccelStreamProfile(full_scale_range, sample_rate);
@@ -3745,19 +3767,19 @@ std::shared_ptr<ob::VideoStreamProfile> OBCameraNode::selectVideoStreamProfile(
std::shared_ptr<ob::VideoStreamProfile> selected_profile; std::shared_ptr<ob::VideoStreamProfile> selected_profile;
if (width == 0 && height == 0 && fps == 0) { if (width == 0 && height == 0 && fps == 0) {
selected_profile = profiles->getProfile(0)->as<ob::VideoStreamProfile>(); selected_profile = profiles->getProfile(0)->as<ob::VideoStreamProfile>();
} else if (isGemini305SeriesPID(pid_) && stream_index == DEPTH) { } else if (!is_playback_device_ && isGemini305SeriesPID(pid_) && stream_index == DEPTH) {
OBHardwareDecimationConfig conf; OBHardwareDecimationConfig conf;
conf.originWidth = width; conf.originWidth = width;
conf.originHeight = height; conf.originHeight = height;
conf.factor = depth_decimation_factor_; conf.factor = depth_decimation_factor_;
selected_profile = profiles->getVideoStreamProfile(conf, format, fps); selected_profile = profiles->getVideoStreamProfile(conf, format, fps);
} else if (isGemini305SeriesPID(pid_) && stream_index == INFRA1) { } else if (!is_playback_device_ && isGemini305SeriesPID(pid_) && stream_index == INFRA1) {
OBHardwareDecimationConfig conf; OBHardwareDecimationConfig conf;
conf.originWidth = width; conf.originWidth = width;
conf.originHeight = height; conf.originHeight = height;
conf.factor = left_ir_decimation_factor_; conf.factor = left_ir_decimation_factor_;
selected_profile = profiles->getVideoStreamProfile(conf, format, fps); selected_profile = profiles->getVideoStreamProfile(conf, format, fps);
} else if (isGemini305SeriesPID(pid_) && stream_index == INFRA2) { } else if (!is_playback_device_ && isGemini305SeriesPID(pid_) && stream_index == INFRA2) {
OBHardwareDecimationConfig conf; OBHardwareDecimationConfig conf;
conf.originWidth = width; conf.originWidth = width;
conf.originHeight = height; conf.originHeight = height;