From 0d740d2b3bde47c1edd1b78c4c69f6eb2f6c7300 Mon Sep 17 00:00:00 2001 From: Tigran Aivazian Date: Tue, 9 Oct 2012 10:23:29 +0100 Subject: [PATCH] Optimize DjVu drawPage() function We only need to fill the image buffer with white colour if DjVu page rendering function did not fill it in with page data. --- djvu.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/djvu.c b/djvu.c index aad2ac722..27a215b2f 100644 --- a/djvu.c +++ b/djvu.c @@ -476,13 +476,11 @@ static int drawPage(lua_State *L) { unsigned char adjusted_low[16], adjusted_high[16]; int i, adjust_pixels = 0; ddjvu_rect_t pagerect, renderrect; - uint8_t *imagebuffer = malloc((bb->w)*(bb->h)+1); + int bbsize = (bb->w)*(bb->h)+1; + uint8_t *imagebuffer = malloc(bbsize); /*printf("@page %d, @@zoom:%f, offset: (%d, %d)\n", page->num, dc->zoom, dc->offset_x, dc->offset_y);*/ - /* fill pixel map with white color */ - memset(imagebuffer, 0xFF, (bb->w)*(bb->h)+1); - /* render full page into rectangle specified by pagerect */ pagerect.x = 0; pagerect.y = 0; @@ -513,13 +511,8 @@ static int drawPage(lua_State *L) { * So we don't set rotation here. */ - ddjvu_page_render(page->page_ref, - djvu_render_mode, - &pagerect, - &renderrect, - page->doc->pixelformat, - bb->w, - imagebuffer); + if (!ddjvu_page_render(page->page_ref, djvu_render_mode, &pagerect, &renderrect, page->doc->pixelformat, bb->w, imagebuffer)) + memset(imagebuffer, 0xFF, bbsize); uint8_t *bbptr = bb->data; uint8_t *pmptr = imagebuffer;