From 8f560bc2b5a612857f95f2c1352d69f3069030bf Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Sat, 5 Apr 2008 08:56:43 +0000 Subject: Greyscale library: Always use reconstructing inversion, because it's legal to use unbuffered drawing functions in buffered mode, meaning that the chunky buffer might not be in sync with what's displayed. Mpegplayer does this. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16975 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/lib/grey_core.c | 50 +++++++++++++++++++------------------------- 1 file changed, 21 insertions(+), 29 deletions(-) (limited to 'apps/plugins/lib') diff --git a/apps/plugins/lib/grey_core.c b/apps/plugins/lib/grey_core.c index 1326599..143d09a 100644 --- a/apps/plugins/lib/grey_core.c +++ b/apps/plugins/lib/grey_core.c @@ -253,41 +253,33 @@ static void invert_gvalues(void) unsigned x = 0; unsigned last_x; - if (_grey_info.flags & GREY_BUFFERED) - { - fill_gvalues(); - grey_update(); - } - else /* Unbuffered - need crude reconstruction */ + /* Step 1: Calculate a transposed table for undoing the old mapping */ + for (i = 0; i < 256; i++) { - /* Step 1: Calculate a transposed table for undoing the old mapping */ - for (i = 0; i < 256; i++) + last_x = x; + x = _grey_info.gvalue[i]; + if (x > last_x) { - last_x = x; - x = _grey_info.gvalue[i]; - if (x > last_x) - { - rev_tab[last_x++] = (last_i + i) / 2; - while (x > last_x) - rev_tab[last_x++] = i; - last_i = i; - } + rev_tab[last_x++] = (last_i + i) / 2; + while (x > last_x) + rev_tab[last_x++] = i; + last_i = i; } - rev_tab[last_x++] = (last_i + 255) / 2; - while (256 > last_x) - rev_tab[last_x++] = 255; + } + rev_tab[last_x++] = (last_i + 255) / 2; + while (256 > last_x) + rev_tab[last_x++] = 255; - /* Step 2: Calculate new mapping */ - fill_gvalues(); + /* Step 2: Calculate new mapping */ + fill_gvalues(); - /* Step 3: Transpose all pixel values */ - val = _grey_info.values; - end = val + _GREY_MULUQ(_grey_info.width, _grey_info.height); + /* Step 3: Transpose all pixel values */ + val = _grey_info.values; + end = val + _GREY_MULUQ(_grey_info.width, _grey_info.height); - do - *val = _grey_info.gvalue[rev_tab[*val]]; - while (++val < end); - } + do + *val = _grey_info.gvalue[rev_tab[*val]]; + while (++val < end); } #endif -- cgit v1.1