Update package changelog.
[profile/ivi/weston.git] / wcap / wcap-decode.c
index d6adc33..f7cabe3 100644 (file)
@@ -42,7 +42,8 @@ wcap_decoder_decode_rectangle(struct wcap_decoder *decoder,
        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;
@@ -55,8 +56,14 @@ wcap_decoder_decode_rectangle(struct wcap_decoder *decoder,
                        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;
@@ -78,22 +85,19 @@ wcap_decoder_get_frame(struct wcap_decoder *decoder)
 {
        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;
 }
@@ -111,8 +115,10 @@ wcap_decoder_create(const char *filename)
                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;
@@ -121,6 +127,7 @@ wcap_decoder_create(const char *filename)
                
        header = decoder->map;
        decoder->format = header->format;
+       decoder->count = 0;
        decoder->width = header->width;
        decoder->height = header->height;
        decoder->p = header + 1;