From 7735d65ce81db570570dc21bb6056da8abd2ae22 Mon Sep 17 00:00:00 2001
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Date: Fri, 28 Jun 2024 23:59:30 +0300
Subject: 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>
---
 src/apps/common/dng_writer.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'src/apps/common')

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;
-- 
cgit v1.2.1