diff options
author | Mathis Rosenhauer <rosenhauer@dkrz.de> | 2014-07-29 12:00:16 +0200 |
---|---|---|
committer | Mathis Rosenhauer <rosenhauer@dkrz.de> | 2014-07-29 15:35:50 +0200 |
commit | 136f733aad73f3099e38101a9169e4d7d9e08b74 (patch) | |
tree | 10eb5545c98faa192ff20b76d3306052be7a89e8 /src/sz_compat.c | |
parent | aa5a267eb5c57f404e138acdf40172015a9fd2a6 (diff) | |
download | libaec-136f733aad73f3099e38101a9169e4d7d9e08b74.tar.gz libaec-136f733aad73f3099e38101a9169e4d7d9e08b74.tar.bz2 libaec-136f733aad73f3099e38101a9169e4d7d9e08b74.zip |
Clean up.
Diffstat (limited to 'src/sz_compat.c')
-rw-r--r-- | src/sz_compat.c | 104 |
1 files changed, 52 insertions, 52 deletions
diff --git a/src/sz_compat.c b/src/sz_compat.c index 68a75b2..755fb47 100644 --- a/src/sz_compat.c +++ b/src/sz_compat.c @@ -3,6 +3,10 @@ #include <string.h> #include "szlib.h" +#if HAVE_CONFIG_H +# include <config.h> +#endif + #define NOPTS 129 static int convert_options(int sz_opts) @@ -62,22 +66,17 @@ static void deinterleave_buffer(void *dest, const void *src, dest8[i * wordsize + j] = src8[j * (n / wordsize) + i]; } -static size_t add_padding(void *dest, const void *src, size_t total, +static void add_padding(void *dest, const void *src, size_t total, size_t line_size, size_t padding_size, int pixel_size, int pp) { size_t i, j, k; const char *pixel; - const char zero_pixel[] = {0, 0, 0, 0, 0, 0, 0, 0}; - size_t padded_line_size = line_size + padding_size; + const char zero_pixel[] = {0, 0, 0, 0}; pixel = zero_pixel; j = 0; for (i = 0; i < total; i += line_size) { - if (i + line_size > total) { - line_size = total - i; - padding_size = padded_line_size - line_size; - } memcpy((char *)dest + j, (char *)src + i, line_size); j += line_size; if (pp) @@ -86,12 +85,11 @@ static size_t add_padding(void *dest, const void *src, size_t total, memcpy((char *)dest + j + k, pixel, pixel_size); j += padding_size; } - return j; } -static size_t remove_padding(void *buf, size_t total, - size_t line_size, size_t padding_size, - int pixel_size) +static void remove_padding(void *buf, size_t total, + size_t line_size, size_t padding_size, + int pixel_size) { size_t i, j; size_t padded_line_size = line_size + padding_size; @@ -101,7 +99,6 @@ static size_t remove_padding(void *buf, size_t total, memmove((char *)buf + i, (char *)buf + j, line_size); i += line_size; } - return i; } int SZ_BufftoBuffCompress(void *dest, size_t *destLen, @@ -110,12 +107,11 @@ int SZ_BufftoBuffCompress(void *dest, size_t *destLen, { struct aec_stream strm; int status; - void *padbuf = 0; - void *buf = 0; + void *padbuf; + void *buf; size_t padding_size; - size_t padded_length; size_t scanlines; - size_t buf_size; + size_t padbuf_size; int pixel_size; int pad_scanline; int interleave; @@ -126,15 +122,18 @@ int SZ_BufftoBuffCompress(void *dest, size_t *destLen, strm.flags = convert_options(param->options_mask); strm.avail_out = *destLen; strm.next_out = dest; + buf = 0; + padbuf = 0; - pad_scanline = param->pixels_per_scanline % param->pixels_per_block; interleave = param->bits_per_pixel == 32 || param->bits_per_pixel == 64; - + pad_scanline = param->pixels_per_scanline % param->pixels_per_block; if (interleave) { strm.bits_per_sample = 8; buf = malloc(sourceLen); - if (buf == NULL) - return SZ_MEM_ERROR; + if (buf == NULL) { + status = SZ_MEM_ERROR; + goto CLEANUP; + } interleave_buffer(buf, source, sourceLen, param->bits_per_pixel / 8); } else { strm.bits_per_sample = param->bits_per_pixel; @@ -144,26 +143,24 @@ int SZ_BufftoBuffCompress(void *dest, size_t *destLen, pixel_size = bits_to_bytes(strm.bits_per_sample); if (pad_scanline) { - scanlines = (sourceLen / pixel_size + param->pixels_per_scanline - 1) - / param->pixels_per_scanline; - buf_size = strm.rsi * param->pixels_per_block * pixel_size * scanlines; - - padbuf = malloc(buf_size); - if (padbuf == NULL) - return SZ_MEM_ERROR; - - padding_size = ( - param->pixels_per_block - - (param->pixels_per_scanline % param->pixels_per_block) - ) * pixel_size; + scanlines = sourceLen / param->pixels_per_scanline; + padbuf_size = strm.rsi * strm.block_size * pixel_size * scanlines; + padbuf = malloc(padbuf_size); + if (padbuf == NULL) { + status = SZ_MEM_ERROR; + goto CLEANUP; + } - padded_length = add_padding(padbuf, buf, sourceLen, - param->pixels_per_scanline * pixel_size, - padding_size, pixel_size, - strm.flags & AEC_DATA_PREPROCESS); + padding_size = + (strm.rsi * strm.block_size - param->pixels_per_scanline) + * pixel_size; + add_padding(padbuf, buf, sourceLen, + param->pixels_per_scanline * pixel_size, + padding_size, pixel_size, + strm.flags & AEC_DATA_PREPROCESS); strm.next_in = padbuf; - strm.avail_in = padded_length; + strm.avail_in = padbuf_size; } else { strm.next_in = buf; strm.avail_in = sourceLen; @@ -172,11 +169,11 @@ int SZ_BufftoBuffCompress(void *dest, size_t *destLen, status = aec_buffer_encode(&strm); *destLen = strm.total_out; +CLEANUP: if (pad_scanline && padbuf) free(padbuf); if (interleave && buf) free(buf); - return status; } @@ -186,7 +183,7 @@ int SZ_BufftoBuffDecompress(void *dest, size_t *destLen, { struct aec_stream strm; int status; - void *buf = 0; + void *buf; size_t padding_size; size_t scanlines; size_t buf_size, total_out; @@ -201,6 +198,7 @@ int SZ_BufftoBuffDecompress(void *dest, size_t *destLen, strm.flags = convert_options(param->options_mask); strm.avail_in = sourceLen; strm.next_in = source; + buf = 0; pad_scanline = param->pixels_per_scanline % param->pixels_per_block; deinterleave = param->bits_per_pixel == 32 || param->bits_per_pixel == 64; @@ -217,14 +215,15 @@ int SZ_BufftoBuffDecompress(void *dest, size_t *destLen, if (pad_scanline) { scanlines = (*destLen / pixel_size + param->pixels_per_scanline - 1) / param->pixels_per_scanline; - buf_size = strm.rsi * param->pixels_per_block - * pixel_size * scanlines; + buf_size = strm.rsi * strm.block_size * pixel_size * scanlines; } else { buf_size = *destLen; } buf = malloc(buf_size); - if (buf == NULL) - return SZ_MEM_ERROR; + if (buf == NULL) { + status = SZ_MEM_ERROR; + goto CLEANUP; + } strm.next_out = buf; strm.avail_out = buf_size; } else { @@ -234,16 +233,16 @@ int SZ_BufftoBuffDecompress(void *dest, size_t *destLen, status = aec_buffer_decode(&strm); if (status != AEC_OK) - return status; + goto CLEANUP; if (pad_scanline) { - padding_size = ( - param->pixels_per_block - - (param->pixels_per_scanline % param->pixels_per_block) - ) * pixel_size; - total_out = remove_padding(buf, strm.total_out, - param->pixels_per_scanline * pixel_size, - padding_size, pixel_size); + padding_size = + (strm.rsi * strm.block_size - param->pixels_per_scanline) + * pixel_size; + remove_padding(buf, strm.total_out, + param->pixels_per_scanline * pixel_size, + padding_size, pixel_size); + total_out = scanlines * param->pixels_per_scanline * pixel_size; } else { total_out = strm.total_out; } @@ -256,10 +255,11 @@ int SZ_BufftoBuffDecompress(void *dest, size_t *destLen, else if (pad_scanline) memcpy(dest, buf, *destLen); +CLEANUP: if (extra_buffer && buf) free(buf); - return SZ_OK; + return status; } int SZ_encoder_enabled(void) |