diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2016-10-29 21:44:42 +0800 |
---|---|---|
committer | Sebastian Rasmussen <sebras@gmail.com> | 2016-12-14 20:39:20 +0100 |
commit | 337df9247e7c00cc32305c51014b7c9f037f2d68 (patch) | |
tree | 3399c0acde0ac5e8ecaf4cb58ca47946bede9703 /source/fitz | |
parent | aad556efd43b4b742c4cadc5093ff6bc1696eee8 (diff) | |
download | mupdf-337df9247e7c00cc32305c51014b7c9f037f2d68.tar.xz |
jpx: Optimize sample writing function.
Diffstat (limited to 'source/fitz')
-rw-r--r-- | source/fitz/load-jpx.c | 97 |
1 files changed, 29 insertions, 68 deletions
diff --git a/source/fitz/load-jpx.c b/source/fitz/load-jpx.c index c3491bc3..583aec02 100644 --- a/source/fitz/load-jpx.c +++ b/source/fitz/load-jpx.c @@ -109,8 +109,9 @@ jpx_write(unsigned char * pucData, short sComponent, unsigned long ulRow, fz_jpxd *state = (fz_jpxd *) param; JP2_Property_Value hstep, vstep; unsigned char *row; - int x, y, w, h, n, i; + int w, h, n, entires, expand; JP2_Property_Value x, y, i, bps, sign; + JP2_Property_Value k; w = state->pix->w; h = state->pix->h; @@ -125,106 +126,66 @@ jpx_write(unsigned char * pucData, short sComponent, unsigned long ulRow, bps = state->bpss[sComponent]; sign = state->signs[sComponent]; + palette = state->palette ? state->palette->ppulPalette : NULL; + entries = state->palette ? state->palette->ulEntries : 1; + expand = state->expand_indexed; + row = state->pix->samples + state->pix->stride * ulRow * vstep + n * ulStart * hstep + sComponent; - if (state->palette) + for (y = 0; ulRow * vstep + y < (JP2_Property_Value)h && y < vstep; y++) { - for (y = 0; ulRow * vstep + y < (JP2_Property_value)h && y < vstep; y++) - { - unsigned char *p = row; + unsigned char *p = row; - for (i = 0; i < ulNum; i++) + for (i = 0; i < ulNum; i++) + { + for (x = 0; (ulStart + i) * hstep + x < (JP2_Property_Value)w && x < hstep; x++) { - for (x = 0; (ulStart + i) * hstep + x < (JP2_Property_Value)w && x < hstep; x++) + if (palette) { - unsigned char v = fz_clampi(pucData[i], 0, state->palette->ulEntries - 1); - - if (state->expand_indexed) - { - int k; - for (k = 0; k < n; k++) - p[k] = state->palette->ppulPalette[k][v]; - p += n; - } - else - { - *p = v; - p++; - } + unsigned char v = fz_clampi(pucData[i], 0, entries - 1); + + if (expand) + { + for (k = 0; k < n; k++) + p[k] = palette[k][v]; + } + else + *p = v; } - } - - row += state->pix->stride; - } - } - else - { - if (bps > 8) - { - for (y = 0; ulRow * vstep + y < (JP2_Property_Value)h && y < vstep; y++) - { - unsigned char *p = row; - - for (i = 0; i < ulNum; i++) + else { - for (x = 0; (ulStart + i) * hstep + x < (JP2_Property_Value)w && x < hstep; x++) + if (bps > 8) { unsigned int v = (pucData[2 * i + 1] << 8) | pucData[2 * i + 0]; v &= (1 << bps) - 1; v -= sign; *p = v >> (bps - 8); - p += n; } - } - - row += state->pix->stride; - } - } - else if (bps == 8) - { - for (y = 0; ulRow * vstep + y < (JP2_Property_Value)h && y < vstep; y++) - { - unsigned char *p = row; - - for (i = 0; i < ulNum; i++) - { - for (x = 0; (ulStart + i) * hstep + x < (JP2_Property_Value)w && x < hstep; x++) + else if (bps == 8) { unsigned int v = pucData[i]; v &= (1 << bps) - 1; v -= sign; *p = v; - p += n; } - } - - row += state->pix->stride; - } - } - else - { - for (y = 0; ulRow * vstep + y < (JP2_Property_Value)h && y < vstep; y++) - { - unsigned char *p = row; - - for (i = 0; i < ulNum; i++) - { - for (x = 0; (ulStart + i) * hstep + x < (JP2_Property_Value)w && x < hstep; x++) + else { unsigned int v = pucData[i]; v &= (1 << bps) - 1; v -= sign; *p = v << (8 - bps); - p += n; } + } - row += state->pix->stride; + p += n; } } + + row += state->pix->stride; } return cJP2_Error_OK; |