summaryrefslogtreecommitdiff
path: root/src/image.cpp
diff options
context:
space:
mode:
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;
}
}