Skip to content
Snippets Groups Projects
Commit 405a4707 authored by Mathis Rosenhauer's avatar Mathis Rosenhauer
Browse files

No dynamic allocation of cds_buffer. Struct member instead.

parent ece3bd3d
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment