mirror of
https://github.com/orbbec/OrbbecSDK_ROS2.git
synced 2026-10-06 21:17:46 +08:00
add python launch file
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#include "orbbec_camera/gst_decoder.h"
|
||||
#include <rclcpp/rclcpp.hpp>
|
||||
#include <utility>
|
||||
#include <gst/app/gstappsrc.h>
|
||||
#include <gst/app/gstappsink.h>
|
||||
#include <glog/logging.h>
|
||||
@@ -20,9 +21,12 @@ std::string hwDecoderToString(HWDecoder hw_decoder) {
|
||||
}
|
||||
}
|
||||
|
||||
GstreamerMjpegDecoder::GstreamerMjpegDecoder(int width, int height, HWDecoder hw_decoder)
|
||||
GstreamerMjpegDecoder::GstreamerMjpegDecoder(int width, int height, std::string jpeg_decoder,
|
||||
std::string video_convert, std::string jpeg_parse)
|
||||
: MjpegDecoder(width, height),
|
||||
hw_decoder_(hwDecoderToString(hw_decoder)),
|
||||
jpeg_decoder_(std::move(jpeg_decoder)),
|
||||
video_convert_(std::move(video_convert)),
|
||||
jpeg_parse_(std::move(jpeg_parse)),
|
||||
buffer_size_(width * height * 3) {
|
||||
gst_init(NULL, NULL);
|
||||
buffer_pool_ = gst_buffer_pool_new();
|
||||
@@ -30,7 +34,7 @@ GstreamerMjpegDecoder::GstreamerMjpegDecoder(int width, int height, HWDecoder hw
|
||||
GstStructure* config = gst_buffer_pool_get_config(buffer_pool_);
|
||||
CHECK_NOTNULL(config);
|
||||
gst_buffer_pool_config_set_params(config, NULL, buffer_size_, 0, 0);
|
||||
if (hw_decoder_ == "unknown") {
|
||||
if (jpeg_decoder_ == "unknown") {
|
||||
RCLCPP_ERROR_STREAM(rclcpp::get_logger("gstreamer_mjpeg_decoder"), "hw decoder is unknown");
|
||||
throw std::runtime_error("hw decoder is unknown");
|
||||
}
|
||||
@@ -45,10 +49,13 @@ GstreamerMjpegDecoder::GstreamerMjpegDecoder(int width, int height, HWDecoder hw
|
||||
throw std::runtime_error("gst buffer pool set active error");
|
||||
}
|
||||
// Create GStreamer elements
|
||||
RCLCPP_INFO_STREAM(rclcpp::get_logger("gstreamer_mjpeg_decoder"),
|
||||
"hw decoder: " << jpeg_decoder_ << ", video convert: " << video_convert_
|
||||
<< ", jpeg parse: " << jpeg_parse_);
|
||||
appsrc_ = gst_element_factory_make("appsrc", "appsrc");
|
||||
jpegparse_ = gst_element_factory_make("jpegparse", "jpegparse");
|
||||
jpegdec_ = gst_element_factory_make(hw_decoder_.c_str(), hw_decoder_.c_str());
|
||||
videoconvert_ = gst_element_factory_make("videoconvert", "videoconvert");
|
||||
jpegparse_ = gst_element_factory_make(jpeg_parse_.c_str(), jpeg_parse_.c_str());
|
||||
jpegdec_ = gst_element_factory_make(jpeg_decoder_.c_str(), jpeg_decoder_.c_str());
|
||||
videoconvert_ = gst_element_factory_make(video_convert_.c_str(), video_convert_.c_str());
|
||||
appsink_ = gst_element_factory_make("appsink", "appsink");
|
||||
|
||||
// Check for null pointers
|
||||
|
||||
@@ -50,8 +50,8 @@ OBCameraNode::OBCameraNode(rclcpp::Node *node, std::shared_ptr<ob::Device> devic
|
||||
#if defined(USE_RK_HW_DECODER)
|
||||
mjpeg_decoder_ = std::make_unique<RKMjpegDecoder>(width_[COLOR], height_[COLOR]);
|
||||
#elif defined(USE_GST_HW_DECODER)
|
||||
mjpeg_decoder_ =
|
||||
std::make_unique<GstreamerMjpegDecoder>(width_[COLOR], height_[COLOR], hw_decoder_);
|
||||
mjpeg_decoder_ = std::make_unique<GstreamerMjpegDecoder>(
|
||||
width_[COLOR], height_[COLOR], jpeg_decoder_, video_convert_, jpeg_parse_);
|
||||
#endif
|
||||
startStreams();
|
||||
if (enable_d2c_viewer_) {
|
||||
@@ -428,9 +428,9 @@ void OBCameraNode::getParameters() {
|
||||
setAndGetNodeParameter<int>(soft_filter_speckle_size_, "soft_filter_speckle_size", -1);
|
||||
setAndGetNodeParameter<double>(liner_accel_cov_, "linear_accel_cov", 0.0003);
|
||||
setAndGetNodeParameter<double>(angular_vel_cov_, "angular_vel_cov", 0.02);
|
||||
int hw_decoder = 0;
|
||||
setAndGetNodeParameter<int>(hw_decoder, "hw_decoder", 3);
|
||||
hw_decoder_ = static_cast<HWDecoder>(hw_decoder);
|
||||
setAndGetNodeParameter<std::string>(jpeg_decoder_, "jpeg_decoder", "avdec_mjpeg");
|
||||
setAndGetNodeParameter<std::string>(video_convert_, "video_convert", "videoconvert");
|
||||
setAndGetNodeParameter<std::string>(jpeg_parse_, "jpeg_parse", "jpegparse");
|
||||
}
|
||||
|
||||
void OBCameraNode::setupTopics() {
|
||||
|
||||
Reference in New Issue
Block a user