From: Even Rouault Date: Fri, 1 Sep 2017 14:31:10 +0000 (+0200) Subject: sparse_array: optimizations for lossy case X-Git-Tag: v2.3.0~39^2~6 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;ds=sidebyside;h=7017e67a01c378a7a1ee5e34dd544c793b5c23e4;p=openjpeg.git sparse_array: optimizations for lossy case --- diff --git a/src/lib/openjp2/sparse_array.c b/src/lib/openjp2/sparse_array.c index 48c4b23b..40459bdb 100644 --- a/src/lib/openjp2/sparse_array.c +++ b/src/lib/openjp2/sparse_array.c @@ -200,6 +200,21 @@ static OPJ_BOOL opj_sparse_array_int32_read_or_write( for (; k < x_incr; k++) { dest_ptr[k * buf_col_stride] = src_ptr[k]; } + } else if (x_incr >= 8 && buf_col_stride == 8) { + for (j = 0; j < y_incr; j++) { + OPJ_UINT32 k; + for (k = 0; k < (x_incr & ~3U); k += 4) { + dest_ptr[k * buf_col_stride] = src_ptr[k]; + dest_ptr[(k + 1) * buf_col_stride] = src_ptr[k + 1]; + dest_ptr[(k + 2) * buf_col_stride] = src_ptr[k + 2]; + dest_ptr[(k + 3) * buf_col_stride] = src_ptr[k + 3]; + } + for (; k < x_incr; k++) { + dest_ptr[k * buf_col_stride] = src_ptr[k]; + } + dest_ptr += buf_line_stride; + src_ptr += block_width; + } } else { /* General case */ for (j = 0; j < y_incr; j++) { @@ -254,6 +269,21 @@ static OPJ_BOOL opj_sparse_array_int32_read_or_write( src_ptr += buf_line_stride; dest_ptr += block_width; } + } else if (x_incr >= 8 && buf_col_stride == 8) { + for (j = 0; j < y_incr; j++) { + OPJ_UINT32 k; + for (k = 0; k < (x_incr & ~3U); k += 4) { + dest_ptr[k] = src_ptr[k * buf_col_stride]; + dest_ptr[k + 1] = src_ptr[(k + 1) * buf_col_stride]; + dest_ptr[k + 2] = src_ptr[(k + 2) * buf_col_stride]; + dest_ptr[k + 3] = src_ptr[(k + 3) * buf_col_stride]; + } + for (; k < x_incr; k++) { + dest_ptr[k] = src_ptr[k * buf_col_stride]; + } + src_ptr += buf_line_stride; + dest_ptr += block_width; + } } else { /* General case */ for (j = 0; j < y_incr; j++) {