summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-06-28 23:59:30 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-07-01 10:28:48 +0300
commit7735d65ce81db570570dc21bb6056da8abd2ae22 (patch)
treee327330f64cde79cb06f5a2c1977ac66c84785f2
parent7e3a351a29aa55c06c8e17782bcc33d153784068 (diff)
apps: common: dng_writer: Fix thumbnail generation on BE machines
The 16-bit padded raw 10 and raw 12 formats are stored in memory in little endian order, regardless of the machine's endianness. Swap the 16-bit values on big-endian machines when reading pixels from memory to generate thumbnails. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
-rw-r--r--src/apps/common/dng_writer.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/apps/common/dng_writer.cpp b/src/apps/common/dng_writer.cpp
index 9241f23f..50db5eb3 100644
--- a/src/apps/common/dng_writer.cpp
+++ b/src/apps/common/dng_writer.cpp
@@ -8,6 +8,7 @@
#include "dng_writer.h"
#include <algorithm>
+#include <endian.h>
#include <iostream>
#include <map>
@@ -185,7 +186,8 @@ void thumbScanlineRaw(const FormatInfo &info, void *output, const void *input,
/* Simple averaging that produces greyscale RGB values. */
for (unsigned int x = 0; x < width; x++) {
- uint16_t value = (in[0] + in[1] + in2[0] + in2[1]) >> 2;
+ uint16_t value = (le16toh(in[0]) + le16toh(in[1]) +
+ le16toh(in2[0]) + le16toh(in2[1])) >> 2;
value = value >> shift;
*out++ = value;
*out++ = value;