Commit 405a4707 authored by Mathis Rosenhauer's avatar Mathis Rosenhauer
Browse files

No dynamic allocation of cds_buffer. Struct member instead.

parent ece3bd3d
...@@ -66,9 +66,6 @@ ...@@ -66,9 +66,6 @@
#include "encode.h" #include "encode.h"
#include "encode_accessors.h" #include "encode_accessors.h"
/* Marker for Remainder Of Segment condition in zero block encoding */
#define ROS -1
static int m_get_block(struct aec_stream *strm); static int m_get_block(struct aec_stream *strm);
static inline void emit(struct internal_state *state, static inline void emit(struct internal_state *state,
...@@ -471,7 +468,7 @@ static void init_output(struct aec_stream *strm) ...@@ -471,7 +468,7 @@ static void init_output(struct aec_stream *strm)
struct internal_state *state = strm->state; struct internal_state *state = strm->state;
if (strm->avail_out > state->cds_len) { if (strm->avail_out > CDSLEN) {
if (!state->direct_out) { if (!state->direct_out) {
state->direct_out = 1; state->direct_out = 1;
*strm->next_out = *state->cds; *strm->next_out = *state->cds;
...@@ -867,12 +864,6 @@ int aec_encode_init(struct aec_stream *strm) ...@@ -867,12 +864,6 @@ int aec_encode_init(struct aec_stream *strm)
state->block = state->data_pp; state->block = state->data_pp;
/* Largest possible CDS according to specs */
state->cds_len = (5 + 64 * 32) / 8 + 3;
state->cds_buf = malloc(state->cds_len);
if (state->cds_buf == NULL)
return AEC_MEM_ERROR;
strm->total_in = 0; strm->total_in = 0;
strm->total_out = 0; strm->total_out = 0;
...@@ -920,7 +911,6 @@ int aec_encode_end(struct aec_stream *strm) ...@@ -920,7 +911,6 @@ int aec_encode_end(struct aec_stream *strm)
if (strm->flags & AEC_DATA_PREPROCESS) if (strm->flags & AEC_DATA_PREPROCESS)
free(state->data_raw); free(state->data_raw);
free(state->data_pp); free(state->data_pp);
free(state->cds_buf);
free(state); free(state);
return AEC_OK; return AEC_OK;
} }
......
...@@ -66,6 +66,13 @@ ...@@ -66,6 +66,13 @@
#define M_EXIT 0 #define M_EXIT 0
#define MIN(a, b) (((a) < (b))? (a): (b)) #define MIN(a, b) (((a) < (b))? (a): (b))
/* Maximum CDS length in bytes: 5 bits ID, 64 * 32 bits samples, 7
* bits carry from previous CDS */
#define CDSLEN ((5 + 64 * 32 + 7 + 7) / 8)
/* Marker for Remainder Of Segment condition in zero block encoding */
#define ROS -1
struct internal_state { struct internal_state {
int (*mode)(struct aec_stream *); int (*mode)(struct aec_stream *);
uint32_t (*get_sample)(struct aec_stream *); uint32_t (*get_sample)(struct aec_stream *);
...@@ -82,9 +89,8 @@ struct internal_state { ...@@ -82,9 +89,8 @@ struct internal_state {
uint32_t *block; /* current (preprocessed) input block */ uint32_t *block; /* current (preprocessed) input block */
int rsi_len; /* reference sample interval in byte */ int rsi_len; /* reference sample interval in byte */
uint8_t *cds; /* current Coded Data Set output */ uint8_t *cds; /* current Coded Data Set output */
uint8_t *cds_buf; /* buffer for one CDS (only used if uint8_t cds_buf[CDSLEN];/* buffer for one CDS (only used if
* strm->next_out cannot hold full CDS) */ * strm->next_out cannot hold full CDS) */
int cds_len; /* max cds length in byte */
int direct_out; /* cds points to strm->next_out (1) int direct_out; /* cds points to strm->next_out (1)
* or cds_buf (0) */ * or cds_buf (0) */
int bits; /* Free bits (LSB) in output buffer or int bits; /* Free bits (LSB) in output buffer or
......
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