#ifndef LG_HISTOGRAM_H #define LG_HISTOGRAM_H #include #include /* LG ABI: region ID followed by three planar channels, 256 uint16 bins * per channel. Bin index is the 8-bit intensity (0..255). */ typedef struct { uint32_t id; uint16_t bins[3][256]; } Histogram; _Static_assert(sizeof(Histogram) == 0x604, "LG ABI record size"); _Static_assert(offsetof(Histogram, bins) == 4, "LG ABI channel offset"); static inline unsigned char histogram_mean(const uint16_t bins[256]) { uint64_t count = 0, weight = 0; for (unsigned b = 0; b < 256; b++) { count += bins[b]; weight += (uint64_t)bins[b] * b; } return count ? (unsigned char)((weight + count / 2) / count) : 0; } #endif