Skip to content

Commit 3827bf3

Browse files
Always pad buffer
1 parent 11ca2a7 commit 3827bf3

File tree

1 file changed

+23
-30
lines changed

1 file changed

+23
-30
lines changed

src/sz_compat.c

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ static void deinterleave_buffer(void *dest, const void *src,
6969
dest8[i * wordsize + j] = src8[j * (n / wordsize) + i];
7070
}
7171

72-
static void add_padding(void *dest, const void *src, size_t total,
72+
static void add_padding(void *dest, const void *src, size_t src_length,
7373
size_t line_size, size_t padding_size,
7474
int pixel_size, int pp)
7575
{
@@ -80,8 +80,8 @@ static void add_padding(void *dest, const void *src, size_t total,
8080
pixel = zero_pixel;
8181
j = 0;
8282
i = 0;
83-
while (i < total) {
84-
ls = MIN(total - i, line_size);
83+
while (i < src_length) {
84+
ls = MIN(src_length - i, line_size);
8585
memcpy((char *)dest + j, (char *)src + i, ls);
8686
j += ls;
8787
i += ls;
@@ -94,15 +94,15 @@ static void add_padding(void *dest, const void *src, size_t total,
9494
}
9595
}
9696

97-
static void remove_padding(void *buf, size_t total,
97+
static void remove_padding(void *buf, size_t buf_length,
9898
size_t line_size, size_t padding_size,
9999
int pixel_size)
100100
{
101101
size_t i, j;
102102
size_t padded_line_size = line_size + padding_size;
103103

104104
i = line_size;
105-
for (j = padded_line_size; j < total; j += padded_line_size) {
105+
for (j = padded_line_size; j < buf_length; j += padded_line_size) {
106106
memmove((char *)buf + i, (char *)buf + j, line_size);
107107
i += line_size;
108108
}
@@ -121,7 +121,6 @@ int SZ_BufftoBuffCompress(void *dest, size_t *destLen,
121121
size_t scanlines;
122122
size_t padbuf_size;
123123
int pixel_size;
124-
int pad_scanline;
125124
int interleave;
126125

127126
strm.block_size = param->pixels_per_block;
@@ -134,7 +133,6 @@ int SZ_BufftoBuffCompress(void *dest, size_t *destLen,
134133
padbuf = 0;
135134

136135
interleave = param->bits_per_pixel == 32 || param->bits_per_pixel == 64;
137-
pad_scanline = param->pixels_per_scanline % param->pixels_per_block;
138136
if (interleave) {
139137
strm.bits_per_sample = 8;
140138
buf = malloc(sourceLen);
@@ -150,30 +148,25 @@ int SZ_BufftoBuffCompress(void *dest, size_t *destLen,
150148

151149
pixel_size = bits_to_bytes(strm.bits_per_sample);
152150

153-
if (pad_scanline) {
154-
scanlines = (sourceLen / pixel_size + param->pixels_per_scanline - 1)
155-
/ param->pixels_per_scanline;
156-
padbuf_size = strm.rsi * strm.block_size * pixel_size * scanlines;
157-
padbuf = malloc(padbuf_size);
158-
if (padbuf == NULL) {
159-
status = SZ_MEM_ERROR;
160-
goto CLEANUP;
161-
}
151+
scanlines = (sourceLen / pixel_size + param->pixels_per_scanline - 1)
152+
/ param->pixels_per_scanline;
153+
padbuf_size = strm.rsi * strm.block_size * pixel_size * scanlines;
154+
padbuf = malloc(padbuf_size);
155+
if (padbuf == NULL) {
156+
status = SZ_MEM_ERROR;
157+
goto CLEANUP;
158+
}
162159

163-
padding_size =
164-
(strm.rsi * strm.block_size - param->pixels_per_scanline)
165-
* pixel_size;
160+
padding_size =
161+
(strm.rsi * strm.block_size - param->pixels_per_scanline)
162+
* pixel_size;
166163

167-
add_padding(padbuf, buf, sourceLen,
168-
param->pixels_per_scanline * pixel_size,
169-
padding_size, pixel_size,
170-
strm.flags & AEC_DATA_PREPROCESS);
171-
strm.next_in = padbuf;
172-
strm.avail_in = padbuf_size;
173-
} else {
174-
strm.next_in = buf;
175-
strm.avail_in = sourceLen;
176-
}
164+
add_padding(padbuf, buf, sourceLen,
165+
param->pixels_per_scanline * pixel_size,
166+
padding_size, pixel_size,
167+
strm.flags & AEC_DATA_PREPROCESS);
168+
strm.next_in = padbuf;
169+
strm.avail_in = padbuf_size;
177170

178171
aec_status = aec_buffer_encode(&strm);
179172
if (aec_status == AEC_STREAM_ERROR)
@@ -183,7 +176,7 @@ int SZ_BufftoBuffCompress(void *dest, size_t *destLen,
183176
*destLen = strm.total_out;
184177

185178
CLEANUP:
186-
if (pad_scanline && padbuf)
179+
if (padbuf)
187180
free(padbuf);
188181
if (interleave && buf)
189182
free(buf);

0 commit comments

Comments
 (0)