From: Aaron Plattner Date: Tue, 15 Apr 2008 20:58:27 +0000 (-0700) Subject: Add infrastructure for allocating wide scanline buffers. Not yet used. X-Git-Tag: pixman-0.11.2~10 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4e2d2546b79354a1accff8614d50eb8f75a15c98;p=platform%2Fupstream%2Fpixman.git Add infrastructure for allocating wide scanline buffers. Not yet used. Signed-off-by: Soren Sandmann Pedersen --- diff --git a/pixman/pixman-compose.c b/pixman/pixman-compose.c index 7230e08..7daa45b 100644 --- a/pixman/pixman-compose.c +++ b/pixman/pixman-compose.c @@ -145,7 +145,7 @@ static void PIXMAN_COMPOSITE_RECT_GENERAL (const FbComposeData *data, void *src_buffer, void *mask_buffer, - void *dest_buffer) + void *dest_buffer, const int wide) { int i; scanStoreProc store; @@ -437,20 +437,22 @@ void pixman_composite_rect_general (const FbComposeData *data) { uint32_t _scanline_buffer[SCANLINE_BUFFER_LENGTH * 3]; - uint32_t *scanline_buffer = _scanline_buffer; - uint32_t *src_buffer, *mask_buffer, *dest_buffer; + const int wide = 0; + const int Bpp = wide ? 8 : 4; + uint8_t *scanline_buffer = (uint8_t*)_scanline_buffer; + uint8_t *src_buffer, *mask_buffer, *dest_buffer; - if (data->width > SCANLINE_BUFFER_LENGTH) + if (data->width * Bpp > SCANLINE_BUFFER_LENGTH * sizeof(uint32_t)) { - scanline_buffer = (uint32_t *)pixman_malloc_abc (data->width, 3, sizeof (uint32_t)); + scanline_buffer = pixman_malloc_abc (data->width, 3, Bpp); if (!scanline_buffer) return; } src_buffer = scanline_buffer; - mask_buffer = src_buffer + data->width; - dest_buffer = mask_buffer + data->width; + mask_buffer = src_buffer + data->width * Bpp; + dest_buffer = mask_buffer + data->width * Bpp; if (data->src->common.read_func || data->src->common.write_func || @@ -460,15 +462,16 @@ pixman_composite_rect_general (const FbComposeData *data) data->dest->common.write_func) { pixman_composite_rect_general_accessors (data, src_buffer, mask_buffer, - dest_buffer); + dest_buffer, wide); } else { pixman_composite_rect_general_no_accessors (data, src_buffer, - mask_buffer, dest_buffer); + mask_buffer, dest_buffer, + wide); } - if (scanline_buffer != _scanline_buffer) + if ((void*)scanline_buffer != (void*)_scanline_buffer) free (scanline_buffer); } diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h index 588e23c..8792027 100644 --- a/pixman/pixman-private.h +++ b/pixman/pixman-private.h @@ -196,7 +196,8 @@ extern FbComposeFunctions64 pixman_composeFunctions64; void pixman_composite_rect_general_accessors (const FbComposeData *data, void *src_buffer, void *mask_buffer, - void *dest_buffer); + void *dest_buffer, + const int wide); void pixman_composite_rect_general (const FbComposeData *data); fetchProc32 pixman_fetchProcForPicture32 (bits_image_t *);