diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2024-06-28 23:59:30 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2024-07-01 10:28:48 +0300 |
commit | 7735d65ce81db570570dc21bb6056da8abd2ae22 (patch) | |
tree | e327330f64cde79cb06f5a2c1977ac66c84785f2 /src/apps/common/dng_writer.cpp | |
parent | 7e3a351a29aa55c06c8e17782bcc33d153784068 (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>
Diffstat (limited to 'src/apps/common/dng_writer.cpp')
-rw-r--r-- | src/apps/common/dng_writer.cpp | 4 |
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; |