28 #include <IceUtil/Time.h>
54 if (numberImages == 0)
59 QPainter painter(
this);
60 std::scoped_lock lock(imageMutex);
61 painter.drawImage(0, 0, scaledImage);
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()));
143 update(0, 0, width(), height());
145 displayDelay = timeDisplayed - IceUtil::Time::microSeconds(timeReceived);
151 return {(
float)scaledImage.width(), (
float)scaledImage.height()};