From 405a4707c26a093f3b0061487b6655e9cee3acf3 Mon Sep 17 00:00:00 2001 From: Mathis Rosenhauer Date: Fri, 15 Mar 2013 13:45:13 +0100 Subject: [PATCH] No dynamic allocation of cds_buffer. Struct member instead. --- src/encode.c | 12 +----------- src/encode.h | 10 ++++++++-- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/encode.c b/src/encode.c index d18dd34..e70624b 100644 --- a/src/encode.c +++ b/src/encode.c @@ -66,9 +66,6 @@ #include "encode.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 inline void emit(struct internal_state *state, @@ -471,7 +468,7 @@ static void init_output(struct aec_stream *strm) struct internal_state *state = strm->state; - if (strm->avail_out > state->cds_len) { + if (strm->avail_out > CDSLEN) { if (!state->direct_out) { state->direct_out = 1; *strm->next_out = *state->cds; @@ -867,12 +864,6 @@ int aec_encode_init(struct aec_stream *strm) 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_out = 0; @@ -920,7 +911,6 @@ int aec_encode_end(struct aec_stream *strm) if (strm->flags & AEC_DATA_PREPROCESS) free(state->data_raw); free(state->data_pp); - free(state->cds_buf); free(state); return AEC_OK; } diff --git a/src/encode.h b/src/encode.h index c2a1ba2..490718e 100644 --- a/src/encode.h +++ b/src/encode.h @@ -66,6 +66,13 @@ #define M_EXIT 0 #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 { int (*mode)(struct aec_stream *); uint32_t (*get_sample)(struct aec_stream *); @@ -82,9 +89,8 @@ struct internal_state { uint32_t *block; /* current (preprocessed) input block */ int rsi_len; /* reference sample interval in byte */ 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) */ - int cds_len; /* max cds length in byte */ int direct_out; /* cds points to strm->next_out (1) * or cds_buf (0) */ int bits; /* Free bits (LSB) in output buffer or -- 2.7.4