Commit 1fbe4ee2 authored by Mathis Rosenhauer's avatar Mathis Rosenhauer
Browse files

Signed PP purely 32 bit.

parent 15c041d8
...@@ -248,7 +248,7 @@ static void preprocess_unsigned(struct aec_stream *strm) ...@@ -248,7 +248,7 @@ static void preprocess_unsigned(struct aec_stream *strm)
struct internal_state *state = strm->state; struct internal_state *state = strm->state;
const uint32_t *restrict x = state->data_raw; const uint32_t *restrict x = state->data_raw;
uint32_t *restrict d = state->data_pp; uint32_t *restrict d = state->data_pp;
uint32_t xmax = (uint32_t)state->xmax; uint32_t xmax = state->xmax;
uint32_t rsi = strm->rsi * strm->block_size - 1; uint32_t rsi = strm->rsi * strm->block_size - 1;
unsigned int i; unsigned int i;
...@@ -279,14 +279,14 @@ static void preprocess_signed(struct aec_stream *strm) ...@@ -279,14 +279,14 @@ static void preprocess_signed(struct aec_stream *strm)
Preprocess RSI of signed samples. Preprocess RSI of signed samples.
*/ */
int64_t D; uint32_t D;
struct internal_state *state = strm->state; struct internal_state *state = strm->state;
uint32_t *restrict d = state->data_pp;
int32_t *restrict x = (int32_t *)state->data_raw; int32_t *restrict x = (int32_t *)state->data_raw;
uint32_t m = UINT64_C(1) << (strm->bits_per_sample - 1); uint32_t *restrict d = state->data_pp;
int64_t xmax = state->xmax; int32_t xmax = (int32_t)state->xmax;
int64_t xmin = state->xmin; int32_t xmin = (int32_t)state->xmin;
uint32_t rsi = strm->rsi * strm->block_size - 1; uint32_t rsi = strm->rsi * strm->block_size - 1;
uint32_t m = UINT64_C(1) << (strm->bits_per_sample - 1);
unsigned int i; unsigned int i;
state->ref = 1; state->ref = 1;
...@@ -297,17 +297,17 @@ static void preprocess_signed(struct aec_stream *strm) ...@@ -297,17 +297,17 @@ static void preprocess_signed(struct aec_stream *strm)
for (i = 0; i < rsi; i++) { for (i = 0; i < rsi; i++) {
x[i + 1] = (x[i + 1] ^ m) - m; x[i + 1] = (x[i + 1] ^ m) - m;
if (x[i + 1] < x[i]) { if (x[i + 1] < x[i]) {
D = (int64_t)x[i] - x[i + 1]; D = (uint32_t)(x[i] - x[i + 1]);
if (D <= xmax - x[i]) if (D <= (uint32_t)(xmax - x[i]))
d[i + 1] = 2 * (uint32_t)D - 1; d[i + 1] = 2 * D - 1;
else else
d[i + 1] = (uint32_t)xmax - x[i + 1]; d[i + 1] = xmax - x[i + 1];
} else { } else {
D = (int64_t)x[i + 1] - x[i]; D = (uint32_t)(x[i + 1] - x[i]);
if (D <= x[i] - xmin) if (D <= (uint32_t)(x[i] - xmin))
d[i + 1] = 2 * (uint32_t)D; d[i + 1] = 2 * D;
else else
d[i + 1] = x[i + 1] - (uint32_t)xmin; d[i + 1] = x[i + 1] - xmin;
} }
} }
state->uncomp_len = (strm->block_size - 1) * strm->bits_per_sample; state->uncomp_len = (strm->block_size - 1) * strm->bits_per_sample;
...@@ -854,8 +854,8 @@ int aec_encode_init(struct aec_stream *strm) ...@@ -854,8 +854,8 @@ int aec_encode_init(struct aec_stream *strm)
state->rsi_len = strm->rsi * strm->block_size * state->bytes_per_sample; state->rsi_len = strm->rsi * strm->block_size * state->bytes_per_sample;
if (strm->flags & AEC_DATA_SIGNED) { if (strm->flags & AEC_DATA_SIGNED) {
state->xmin = -(INT64_C(1) << (strm->bits_per_sample - 1));
state->xmax = (UINT64_C(1) << (strm->bits_per_sample - 1)) - 1; state->xmax = (UINT64_C(1) << (strm->bits_per_sample - 1)) - 1;
state->xmin = ~state->xmax;
state->preprocess = preprocess_signed; state->preprocess = preprocess_signed;
} else { } else {
state->xmin = 0; state->xmin = 0;
......
...@@ -81,10 +81,10 @@ struct internal_state { ...@@ -81,10 +81,10 @@ struct internal_state {
int id_len; int id_len;
/* minimum integer for preprocessing */ /* minimum integer for preprocessing */
int64_t xmin; uint32_t xmin;
/* maximum integer for preprocessing */ /* maximum integer for preprocessing */
int64_t xmax; uint32_t xmax;
uint32_t i; uint32_t i;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment