85 IceUtil::Time imageTimestamp,
86 IceUtil::Time receiveTimestamp)
88 std::scoped_lock lock(bufferMutex);
89 this->imageTimestamp = imageTimestamp;
90 this->receiveTimestamp = receiveTimestamp;
91 if (inputWidth != images[0]->width || inputHeight != images[0]->height ||
92 this->numberImages != numberImages)
94 inputWidth = images[0]->width;
95 inputHeight = images[0]->height;
96 this->numberImages = numberImages;
103 buffer =
new unsigned char[inputWidth * inputHeight * 4 * numberImages];
107 for (
int i = 0; i < numberImages; i++)
109 if (images[i]->type == CByteImage::eRGB24)
111 unsigned char* pixels = images[i]->pixels;
112 int* output = (
int*)buffer;
115 for (
int y = 0; y < inputHeight; y++)
117 int baseOffset = y * inputWidth * numberImages + i * inputWidth;
118 for (
int x = 0;
x < inputWidth;
x++)
120 output[
x + baseOffset] = 255 << 24 | pixels[inputOffset] << 16 |
121 pixels[inputOffset + 1] << 8 |
122 pixels[inputOffset + 2];
129 QImage image(buffer, inputWidth * this->numberImages, inputHeight, QImage::Format_RGB32);
131 std::scoped_lock lock2(imageMutex);
133 image.scaled(width(), height(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
136 QMetaObject::invokeMethod(
137 this,
"updateImage", Q_ARG(
long, receiveTimestamp.toMicroSeconds()));