Apollo 11.0
自动驾驶开放平台
apollo::drivers::smartereye::CompressComponent类 参考

#include <compress_component.h>

类 apollo::drivers::smartereye::CompressComponent 继承关系图:
apollo::drivers::smartereye::CompressComponent 的协作图:

Public 成员函数

bool Init () override
 
bool Proc (const std::shared_ptr< Image > &image) override
 
- Public 成员函数 继承自 apollo::cyber::Component< M0, M1, M2, M3 >
 Component ()
 
 ~Component () override
 
bool Initialize (const ComponentConfig &config) override
 init the component by protobuf object.
 
bool Process (const std::shared_ptr< M0 > &msg0, const std::shared_ptr< M1 > &msg1, const std::shared_ptr< M2 > &msg2, const std::shared_ptr< M3 > &msg3)
 
- Public 成员函数 继承自 apollo::cyber::ComponentBase
virtual ~ComponentBase ()
 
virtual bool Initialize (const TimerComponentConfig &config)
 
virtual void Shutdown ()
 
template<typename T >
bool GetProtoConfig (T *config) const
 

额外继承的成员函数

- Public 类型 继承自 apollo::cyber::ComponentBase
template<typename M >
using Reader = cyber::Reader< M >
 
- Protected 成员函数 继承自 apollo::cyber::ComponentBase
virtual void Clear ()
 
const std::string & ConfigFilePath () const
 
void LoadConfigFiles (const ComponentConfig &config)
 
void LoadConfigFiles (const TimerComponentConfig &config)
 
- Protected 属性 继承自 apollo::cyber::ComponentBase
std::atomic< bool > is_shutdown_ = {false}
 
std::shared_ptr< Node > node_ = nullptr
 
std::string config_file_path_ = ""
 
std::vector< std::shared_ptr< ReaderBase > > readers_
 

详细描述

在文件 compress_component.h 第 36 行定义.

成员函数说明

◆ Init()

bool apollo::drivers::smartereye::CompressComponent::Init ( )
overridevirtual

实现了 apollo::cyber::ComponentBase.

在文件 compress_component.cc 第 30 行定义.

30 {
31 if (!GetProtoConfig(&config_)) {
32 AERROR << "Parse config file failed: " << ConfigFilePath();
33 return false;
34 }
35 AINFO << "Camera config: \n" << config_.DebugString();
36 try {
37 image_pool_.reset(new CCObjectPool<CompressedImage>(
38 config_.compress_conf().image_pool_size()));
39 image_pool_->ConstructAll();
40 } catch (const std::bad_alloc& e) {
41 AERROR << e.what();
42 return false;
43 }
44
45 writer_ = node_->CreateWriter<CompressedImage>(
46 config_.compress_conf().output_channel());
47 return true;
48}
bool GetProtoConfig(T *config) const
const std::string & ConfigFilePath() const
std::shared_ptr< Node > node_
#define AERROR
Definition log.h:44
#define AINFO
Definition log.h:42

◆ Proc()

bool apollo::drivers::smartereye::CompressComponent::Proc ( const std::shared_ptr< Image > &  image)
override

在文件 compress_component.cc 第 96 行定义.

96 {
97 ADEBUG << "procing compressed";
98 if (cyber_unlikely(image->height() != height_ || image->width() != width_)) {
99 AERROR << "Setting resolution is " << width_ << "x" << height_ << ", but received " << image->width() << "x"
100 << image->height();
101 return false;
102 }
103 // auto compressed_image = image_pool_->GetObject();
104 auto compressed_image = writer_->AcquireMessage();
105 compressed_image->mutable_header()->CopyFrom(image->header());
106 compressed_image->set_frame_id(image->frame_id());
107 compressed_image->set_measurement_time(image->measurement_time());
108 compressed_image->set_height(height_);
109 compressed_image->set_width(width_);
110
111#ifdef __aarch64__
112 compressed_image->set_format(image->encoding() + "; jpeg compressed");
113 auto nvbuffer = nvbuffer_pool_->GetObject();
114 auto downsampled_image = downsampled_image_pool_->GetObject();
115 if (cyber_unlikely(
116 YUV422ToYUV420(const_cast<char*>(image->data().data()), (downsampled_image->first).data()) != 0)) {
117 AERROR << "Failed to downsample image";
118 return false;
119 }
120 if (cyber_unlikely(ReadBuffer((downsampled_image->first).data(), &(*nvbuffer)) != 0)) {
121 AERROR << "Failed to convert image to nvbuffer";
122 return false;
123 }
124 auto out_buffer = (downsampled_image->second).data();
125 auto buffer_size = static_cast<uint64_t>(buffer_size_);
126
127 auto ret = jpegenc_->encodeFromBuffer(*nvbuffer, JCS_YCbCr, &out_buffer, buffer_size, 95);
128 if (cyber_unlikely(ret != 0)) {
129 AERROR << "nvjpeg failed to compress image";
130 }
131 compressed_image->set_data((downsampled_image->second).data(), buffer_size);
132#else
133 compressed_image->set_format(image->encoding() + "; jpeg compressed bgr8");
134
135 std::vector<int> params;
136 params.resize(3, 0);
137 params[0] = cv::IMWRITE_JPEG_QUALITY;
138 params[1] = 95;
139
140 try {
141 cv::Mat mat_image(
142 image->height(), image->width(), CV_8UC3, const_cast<char*>(image->data().data()), image->step());
143 cv::Mat tmp_mat;
144 cv::cvtColor(mat_image, tmp_mat, cv::COLOR_RGB2BGR);
145 std::vector<uint8_t> compress_buffer;
146 if (!cv::imencode(".jpg", tmp_mat, compress_buffer, params)) {
147 AERROR << "cv::imencode (jpeg) failed on input image";
148 return false;
149 }
150 compressed_image->set_data(compress_buffer.data(), compress_buffer.size());
151 } catch (std::exception& e) {
152 AERROR << "cv::imencode (jpeg) exception :" << e.what();
153 return false;
154 }
155#endif
156 writer_->Write(compressed_image);
157 return true;
158}
#define cyber_unlikely(x)
Definition macros.h:28
#define ADEBUG
Definition log.h:41

该类的文档由以下文件生成: