mirror of
https://github.com/orbbec/OrbbecSDK_ROS2.git
synced 2026-10-12 07:19:50 +08:00
add rbgFormatConvertRGB888
This commit is contained in:
@@ -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_;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user