if (strm->bits_per_sample > 32 || strm->bits_per_sample == 0)
return AEC_CONF_ERROR;
- if (strm->block_size != 8
- && strm->block_size != 16
- && strm->block_size != 32
- && strm->block_size != 64)
- return AEC_CONF_ERROR;
+ if (strm->flags & AEC_NOT_ENFORCE) {
+ /* All even block sizes are allowed. */
+ if (strm->block_size & 1)
+ return AEC_CONF_ERROR;
+ } else {
+ /* Only allow standard conforming block sizes */
+ if (strm->block_size != 8
+ && strm->block_size != 16
+ && strm->block_size != 32
+ && strm->block_size != 64)
+ return AEC_CONF_ERROR;
+ }
if (strm->rsi > 4096)
return AEC_CONF_ERROR;
/* Pad RSI to byte boundary. Only for decoding CCSDS sample data. */
#define AEC_PAD_RSI 32
+/* Do not enforce standard regarding legal block sizes. */
+#define AEC_NOT_ENFORCE 64
+
/*************************************/
/* Return codes of library functions */
/*************************************/
}
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 line_size, size_t padding_size,
+ int pixel_size, int pp)
{
size_t i, j, k, ls, ps;
const char *pixel;
strm.block_size = param->pixels_per_block;
strm.rsi = (param->pixels_per_scanline + param->pixels_per_block - 1)
/ param->pixels_per_block;
- strm.flags = convert_options(param->options_mask);
+ strm.flags = AEC_NOT_ENFORCE | convert_options(param->options_mask);
strm.avail_out = *destLen;
strm.next_out = dest;
buf = 0;