summaryrefslogtreecommitdiff
path: root/src/screenshooter.c
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2012-05-29 12:15:47 -0400
committerKristian Høgsberg <krh@bitplanet.net>2012-05-29 12:15:47 -0400
commit053be42a4ed4910e5d1f4c89c94a8d04da4842b9 (patch)
treebb0546b0e6a80643c93dc2eaaba7be2b66919ab0 /src/screenshooter.c
parentdb0623a5f054324b27aa9cf40474aa9f283e6723 (diff)
downloadweston-053be42a4ed4910e5d1f4c89c94a8d04da4842b9.tar.gz
wcap: Compute per-component deltas
Diffstat (limited to 'src/screenshooter.c')
-rw-r--r--src/screenshooter.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/screenshooter.c b/src/screenshooter.c
index da06ae3a..246796eb 100644
--- a/src/screenshooter.c
+++ b/src/screenshooter.c
@@ -240,6 +240,18 @@ output_run(uint32_t *p, uint32_t delta, int run)
return p;
}
+static uint32_t
+component_delta(uint32_t next, uint32_t prev)
+{
+ unsigned char dr, dg, db;
+
+ dr = (next >> 16) - (prev >> 16);
+ dg = (next >> 8) - (prev >> 8);
+ db = (next >> 0) - (prev >> 0);
+
+ return (dr << 16) | (dg << 8) | (db << 0);
+}
+
static void
weston_recorder_frame_notify(struct wl_listener *listener, void *data)
{
@@ -295,7 +307,7 @@ weston_recorder_frame_notify(struct wl_listener *listener, void *data)
stride * (r[i].y2 - j - 1) + r[i].x1;
for (k = 0; k < width; k++) {
next = *s++;
- delta = (next - *d) & 0x00ffffff;
+ delta = component_delta(next, *d);
*d++ = next;
if (run == 0 || delta == prev) {
run++;