mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2025-12-20 07:00:09 +01:00
wcap: Compute per-component deltas
This commit is contained in:
parent
db0623a5f0
commit
053be42a4e
2 changed files with 22 additions and 3 deletions
|
|
@ -240,6 +240,18 @@ output_run(uint32_t *p, uint32_t delta, int run)
|
||||||
return p;
|
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
|
static void
|
||||||
weston_recorder_frame_notify(struct wl_listener *listener, void *data)
|
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;
|
stride * (r[i].y2 - j - 1) + r[i].x1;
|
||||||
for (k = 0; k < width; k++) {
|
for (k = 0; k < width; k++) {
|
||||||
next = *s++;
|
next = *s++;
|
||||||
delta = (next - *d) & 0x00ffffff;
|
delta = component_delta(next, *d);
|
||||||
*d++ = next;
|
*d++ = next;
|
||||||
if (run == 0 || delta == prev) {
|
if (run == 0 || delta == prev) {
|
||||||
run++;
|
run++;
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,8 @@ wcap_decoder_decode_rectangle(struct wcap_decoder *decoder,
|
||||||
uint32_t v, *p = decoder->p, *d;
|
uint32_t v, *p = decoder->p, *d;
|
||||||
int width = rect->x2 - rect->x1, height = rect->y2 - rect->y1;
|
int width = rect->x2 - rect->x1, height = rect->y2 - rect->y1;
|
||||||
int x, i, j, k, l, count = width * height;
|
int x, i, j, k, l, count = width * height;
|
||||||
|
unsigned char r, g, b, dr, dg, db;
|
||||||
|
|
||||||
d = decoder->frame + (rect->y2 - 1) * decoder->width;
|
d = decoder->frame + (rect->y2 - 1) * decoder->width;
|
||||||
x = rect->x1;
|
x = rect->x1;
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
@ -55,8 +56,14 @@ wcap_decoder_decode_rectangle(struct wcap_decoder *decoder,
|
||||||
j = 1 << (l - 0xe0 + 7);
|
j = 1 << (l - 0xe0 + 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dr = (v >> 16);
|
||||||
|
dg = (v >> 8);
|
||||||
|
db = (v >> 0);
|
||||||
for (k = 0; k < j; k++) {
|
for (k = 0; k < j; k++) {
|
||||||
d[x] = (d[x] + v) | 0xff000000;
|
r = (d[x] >> 16) + dr;
|
||||||
|
g = (d[x] >> 8) + dg;
|
||||||
|
b = (d[x] >> 0) + db;
|
||||||
|
d[x] = 0xff000000 | (r << 16) | (g << 8) | b;
|
||||||
x++;
|
x++;
|
||||||
if (x == rect->x2) {
|
if (x == rect->x2) {
|
||||||
x = rect->x1;
|
x = rect->x1;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue