31 if (data_size_ < img.byteCount()) {
36 data_ =
new GLubyte[img.byteCount()];
37 if (data_ ==
nullptr) {
41 data_size_ = img.byteCount();
45 image_height_ = img.height();
46 image_width_ = img.width();
48 memcpy(data_, img.bits(), img.byteCount());
51 texture_format_ = GL_RGBA;
56 const std::shared_ptr<const apollo::drivers::Image>& imgData) {
57 std::size_t imgSize = imgData->width() * imgData->height() * 3;
59 if (
static_cast<std::size_t
>(data_size_) < imgSize) {
64 data_ =
new GLubyte[imgSize];
65 if (data_ ==
nullptr) {
69 data_size_ =
static_cast<GLsizei
>(imgSize);
73 texture_format_ = GL_RGB;
74 if (imgData->encoding() == std::string(
"yuyv")) {
76 reinterpret_cast<const GLubyte*
>(imgData->data().c_str());
79 for (std::size_t i = 0; i < imgData->data().size(); i += 4) {
80 int y = 298 * (src[i] - 16);
81 int u = src[i + 1] - 128;
83 int v = src[i + 3] - 128;
89#define CLAMP(v) static_cast<GLubyte>((v) > 255 ? 255 : ((v) < 0 ? 0 : v))
90 *dst++ =
CLAMP((y + v + 128) >> 8);
91 *dst++ =
CLAMP((y - u - v1 + 128) >> 8);
92 *dst++ =
CLAMP((y + u1 + 128) >> 8);
94 y = 298 * (src[i + 2] - 16);
96 *dst++ =
CLAMP((y + v + 128) >> 8);
97 *dst++ =
CLAMP((y - u - v1 + 128) >> 8);
98 *dst++ =
CLAMP((y + u1 + 128) >> 8);
101 }
else if (imgData->encoding() == std::string(
"rgb8")) {
102 memcpy(data_, imgData->data().c_str(), imgSize);
103 }
else if (imgData->encoding() == std::string(
"bgr8")) {
104 memcpy(data_, imgData->data().c_str(), imgSize);
105 texture_format_ = GL_BGR;
107 memset(data_, 0, imgSize);
108 std::cerr <<
"Cannot support this format (" << imgData->encoding()
109 <<
") image" << std::endl;
113 image_height_ = imgData->height();
114 image_width_ = imgData->width();
bool UpdateData(const QImage &img)