add rbgFormatConvertRGB888

This commit is contained in:
Joe Dong
2022-06-09 16:40:35 +08:00
parent c3452520ce
commit 208cc84503
2 changed files with 34 additions and 5 deletions
@@ -206,6 +206,8 @@ class OBCameraNode {
void publishColorFrame(std::shared_ptr<ob::ColorFrame> frame); void publishColorFrame(std::shared_ptr<ob::ColorFrame> frame);
bool rbgFormatConvertRGB888(std::shared_ptr<ob::ColorFrame> frame);
void publishDepthFrame(std::shared_ptr<ob::DepthFrame> frame); void publishDepthFrame(std::shared_ptr<ob::DepthFrame> frame);
void publishIRFrame(std::shared_ptr<ob::IRFrame> frame); void publishIRFrame(std::shared_ptr<ob::IRFrame> frame);
@@ -243,7 +245,7 @@ class OBCameraNode {
std::map<stream_index_pair, std::string> encoding_; std::map<stream_index_pair, std::string> encoding_;
std::map<stream_index_pair, int> unit_step_size_; std::map<stream_index_pair, int> unit_step_size_;
std::vector<int> compression_params_; std::vector<int> compression_params_;
ob::FormatConvertFilter format_convert_filter; ob::FormatConvertFilter format_convert_filter_;
std::map<ob_frame_type, bool> is_first_frame_; std::map<ob_frame_type, bool> is_first_frame_;
+31 -4
View File
@@ -488,11 +488,38 @@ void OBCameraNode::publishDynamicTransforms() {
} }
} }
bool OBCameraNode::rbgFormatConvertRGB888(std::shared_ptr<ob::ColorFrame> frame) {
switch (frame->format()) {
case OB_FORMAT_I420:
format_convert_filter_.setFormatConvertType(FORMAT_I420_TO_RGB888);
break;
case OB_FORMAT_MJPG:
format_convert_filter_.setFormatConvertType(FORMAT_MJPEG_TO_RGB888);
break;
case OB_FORMAT_YUYV:
format_convert_filter_.setFormatConvertType(FORMAT_YUYV_TO_RGB888);
break;
case OB_FORMAT_NV21:
format_convert_filter_.setFormatConvertType(FORMAT_NV21_TO_RGB888);
break;
case OB_FORMAT_NV12:
format_convert_filter_.setFormatConvertType(FORMAT_NV12_TO_RGB888);
break;
default:
return false;
}
return true;
}
void OBCameraNode::publishColorFrame(std::shared_ptr<ob::ColorFrame> frame) { void OBCameraNode::publishColorFrame(std::shared_ptr<ob::ColorFrame> frame) {
format_convert_filter.setFormatConvertType(FORMAT_I420_TO_RGB888); if (!rbgFormatConvertRGB888(frame)) {
frame = format_convert_filter.process(frame)->as<ob::ColorFrame>(); RCLCPP_ERROR_STREAM(
format_convert_filter.setFormatConvertType(FORMAT_RGB888_TO_BGR); logger_, "can not convert " << magic_enum::enum_name(frame->format()) << " to RGB888");
frame = format_convert_filter.process(frame)->as<ob::ColorFrame>(); return;
}
frame = format_convert_filter_.process(frame)->as<ob::ColorFrame>();
format_convert_filter_.setFormatConvertType(FORMAT_RGB888_TO_BGR);
frame = format_convert_filter_.process(frame)->as<ob::ColorFrame>();
auto width = frame->width(); auto width = frame->width();
auto height = frame->height(); auto height = frame->height();
auto stream = COLOR; auto stream = COLOR;