uint32_t v, *p = decoder->p, *d;
int width = rect->x2 - rect->x1, height = rect->y2 - rect->y1;
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;
x = rect->x1;
i = 0;
j = 1 << (l - 0xe0 + 7);
}
+ dr = (v >> 16);
+ dg = (v >> 8);
+ db = (v >> 0);
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++;
if (x == rect->x2) {
x = rect->x1;
{
struct wcap_rectangle *rects;
struct wcap_frame_header *header;
- uint32_t *s;
uint32_t i;
- int width, height;
if (decoder->p == decoder->end)
return 0;
header = decoder->p;
+ decoder->msecs = header->msecs;
+ decoder->count++;
rects = (void *) (header + 1);
decoder->p = (uint32_t *) (rects + header->nrects);
- for (i = 0; i < header->nrects; i++) {
- width = rects[i].x2 - rects[i].x1;
- height = rects[i].y2 - rects[i].y1;
+ for (i = 0; i < header->nrects; i++)
wcap_decoder_decode_rectangle(decoder, &rects[i]);
- }
return 1;
}
return NULL;
decoder->fd = open(filename, O_RDONLY);
- if (decoder->fd == -1)
+ if (decoder->fd == -1) {
+ free(decoder);
return NULL;
+ }
fstat(decoder->fd, &buf);
decoder->size = buf.st_size;
header = decoder->map;
decoder->format = header->format;
+ decoder->count = 0;
decoder->width = header->width;
decoder->height = header->height;
decoder->p = header + 1;