summaryrefslogtreecommitdiff
path: root/src/image.cpp
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2025-01-23 15:49:39 +0100
committerNikita Kostovsky <nikita@kostovsky.me>2025-01-23 15:49:39 +0100
commit459fe70f53b2f3a7dc33c3833210f60840a23204 (patch)
treeb670c6fe344e499affad0334491ddeaa26d102e0 /src/image.cpp
parent80949709a1132b5198bb8006963f177fcde2e991 (diff)
change img data type to uint8_t, fix loading of bin calibration table
Diffstat (limited to 'src/image.cpp')
-rw-r--r--src/image.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/image.cpp b/src/image.cpp
index 000ca2d..e4d51c1 100644
--- a/src/image.cpp
+++ b/src/image.cpp
@@ -132,13 +132,27 @@ std::shared_ptr<Pixels> Image::pixels() const
void Image::copyFromData(const void *src, size_t size)
{
- if (size > sizeof(data))
- {
- // throw std::logic_error(std::format)
+ if (Q_UNLIKELY(size % sizeof(data) != 0 || size < sizeof(data))) {
+ throw std::logic_error(__func__ + std::string(": wrong data size"));
}
- if (pixelFormat == libcamera::formats::R8)
- {
+ switch (pixelFormat) {
+ case libcamera::formats::R8: {
+ // std::cout << "R8" << std::endl;
memcpy(data, src, size);
+ break;
+ }
+ case libcamera::formats::R16: {
+ // std::cout << "R16" << std::endl;
+#pragma omp parallel
+#pragma omp for
+ for (size_t i = 0; i < img_size; i++) {
+ data[i / img_width][i % img_width] = (((uint16_t *) src)[i] & 0xff00) >> 8;
+ }
+ break;
+ }
+ default:
+ throw std::logic_error(__func__ + std::string(": unsupported pixel format"));
+ break;
}
}