Apollo 10.0
自动驾驶开放平台
apollo::dreamview::ImageHandler类 参考

The ImageHandler, built on top of CivetHandler, converts the received ROS image message to an image stream, wrapped by MJPEG Streaming Protocol. 更多...

#include <image_handler.h>

类 apollo::dreamview::ImageHandler 继承关系图:
apollo::dreamview::ImageHandler 的协作图:

Public 成员函数

 ImageHandler ()
 
bool handleGet (CivetServer *server, struct mg_connection *conn)
 
template<>
void OnImage (const std::shared_ptr< Image > &image)
 
template<>
void OnImage (const std::shared_ptr< CompressedImage > &compressed_image)
 

静态 Public 属性

static constexpr double kImageScale = 0.2
 

详细描述

The ImageHandler, built on top of CivetHandler, converts the received ROS image message to an image stream, wrapped by MJPEG Streaming Protocol.

在文件 image_handler.h44 行定义.

构造及析构函数说明

◆ ImageHandler()

apollo::dreamview::ImageHandler::ImageHandler ( )

在文件 image_handler.cc85 行定义.

86 : requests_(0), node_(cyber::CreateNode("image_handler")) {
87 node_->CreateReader<Image>(
88 FLAGS_image_front_topic,
89 [this](const std::shared_ptr<Image> &image) { OnImageFront(image); });
90
91 node_->CreateReader<CompressedImage>(
92 FLAGS_image_short_topic,
93 [this](const std::shared_ptr<CompressedImage> &image) {
94 OnImageShort(image);
95 });
96}
std::unique_ptr< Node > CreateNode(const std::string &node_name, const std::string &name_space)
Definition cyber.cc:33

成员函数说明

◆ handleGet()

bool apollo::dreamview::ImageHandler::handleGet ( CivetServer *  server,
struct mg_connection *  conn 
)

在文件 image_handler.cc98 行定义.

98 {
99 requests_++;
100
101 mg_printf(conn,
102 "HTTP/1.1 200 OK\r\n"
103 "Connection: close\r\n"
104 "Max-Age: 0\r\n"
105 "Expires: 0\r\n"
106 "Cache-Control: no-cache, no-store, must-revalidate, private\r\n"
107 "Pragma: no-cache\r\n"
108 "Content-Type: multipart/x-mixed-replace; "
109 "boundary=--BoundaryString\r\n"
110 "\r\n");
111
112 std::vector<uchar> to_send;
113 while (true) {
114 {
115 std::unique_lock<std::mutex> lock(mutex_);
116 to_send = send_buffer_;
117 }
118
119 if (!to_send.empty()) {
120 // Sends the image data
121 mg_printf(conn,
122 "--BoundaryString\r\n"
123 "Content-type: image/jpeg\r\n"
124 "Content-Length: %zu\r\n"
125 "\r\n",
126 to_send.size());
127
128 if (mg_write(conn, &to_send[0], to_send.size()) <= 0) {
129 requests_--;
130 return false;
131 }
132 mg_printf(conn, "\r\n\r\n");
133 }
134
135 std::unique_lock<std::mutex> lock(mutex_);
136 cvar_.wait(lock);
137 }
138
139 requests_--;
140 return true;
141}

◆ OnImage() [1/2]

template<>
void apollo::dreamview::ImageHandler::OnImage ( const std::shared_ptr< CompressedImage > &  compressed_image)

在文件 image_handler.cc54 行定义.

55 {
56 if (requests_ == 0 ||
57 compressed_image->format() == "h265" /* skip video format */) {
58 return;
59 }
60
61 std::vector<uint8_t> compressed_raw_data(compressed_image->data().begin(),
62 compressed_image->data().end());
63 cv::Mat mat_image = cv::imdecode(compressed_raw_data, cv::IMREAD_COLOR);
64
65 std::unique_lock<std::mutex> lock(mutex_);
66 cv::imencode(".jpg", mat_image, send_buffer_,
67 std::vector<int>() /* params */);
68 cvar_.notify_all();
69}

◆ OnImage() [2/2]

template<>
void apollo::dreamview::ImageHandler::OnImage ( const std::shared_ptr< Image > &  image)

在文件 image_handler.cc34 行定义.

34 {
35 if (requests_ == 0) {
36 return;
37 }
38
39 cv::Mat mat(image->height(), image->width(), CV_8UC3,
40 const_cast<char *>(image->data().data()), image->step());
41 cv::cvtColor(mat, mat, cv::COLOR_RGB2BGR);
42 cv::resize(
43 mat, mat,
44 cv::Size(static_cast<int>(image->width() * ImageHandler::kImageScale),
45 static_cast<int>(image->height() * ImageHandler::kImageScale)),
46 0, 0, cv::INTER_LINEAR);
47
48 std::unique_lock<std::mutex> lock(mutex_);
49 cv::imencode(".jpg", mat, send_buffer_, std::vector<int>() /* params */);
50 cvar_.notify_all();
51}
static constexpr double kImageScale

类成员变量说明

◆ kImageScale

constexpr double apollo::dreamview::ImageHandler::kImageScale = 0.2
staticconstexpr

在文件 image_handler.h47 行定义.


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