From d98c43d3504590fd9a0ff3a524e29ecbfeeb0925 Mon Sep 17 00:00:00 2001 From: Josh Coalson Date: Sun, 13 May 2001 05:17:01 +0000 Subject: [PATCH] use new FLAC__memory_alloc_* routines to alloc aligned data --- src/libFLAC/encoder.c | 148 +++++++++--------------------------------- 1 file changed, 31 insertions(+), 117 deletions(-) diff --git a/src/libFLAC/encoder.c b/src/libFLAC/encoder.c index b0a2c339..5acc4f96 100644 --- a/src/libFLAC/encoder.c +++ b/src/libFLAC/encoder.c @@ -30,6 +30,7 @@ #include "private/fixed.h" #include "private/lpc.h" #include "private/md5.h" +#include "private/memory.h" #ifdef min #undef min @@ -76,6 +77,16 @@ typedef struct FLAC__EncoderPrivate { FLAC__EncoderWriteStatus (*write_callback)(const FLAC__Encoder *encoder, const byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data); void (*metadata_callback)(const FLAC__Encoder *encoder, const FLAC__StreamMetaData *metadata, void *client_data); void *client_data; + /* unaligned (original) pointers to allocated data */ + int32 *integer_signal_unaligned[FLAC__MAX_CHANNELS]; + int32 *integer_signal_mid_side_unaligned[2]; + real *real_signal_unaligned[FLAC__MAX_CHANNELS]; + real *real_signal_mid_side_unaligned[2]; + int32 *residual_workspace_unaligned[FLAC__MAX_CHANNELS][2]; + int32 *residual_workspace_mid_side_unaligned[2][2]; + uint32 *abs_residual_unaligned; + uint32 *abs_residual_partition_sums_unaligned; + unsigned *raw_bits_per_partition_unaligned; } FLAC__EncoderPrivate; static bool encoder_resize_buffers_(FLAC__Encoder *encoder, unsigned new_size); @@ -123,11 +134,6 @@ bool encoder_resize_buffers_(FLAC__Encoder *encoder, unsigned new_size) { bool ok; unsigned i, channel; - int32 *previous_is, *current_is; - real *previous_rs, *current_rs; - int32 *residual; - uint32 *abs_residual; - unsigned *raw_bits_per_partition; assert(new_size > 0); assert(encoder->state == FLAC__ENCODER_OK); @@ -137,129 +143,37 @@ bool encoder_resize_buffers_(FLAC__Encoder *encoder, unsigned new_size) if(new_size <= encoder->guts->input_capacity) return true; - ok = 1; - if(ok) { - for(i = 0; ok && i < encoder->channels; i++) { - /* integer version of the signal */ - previous_is = encoder->guts->integer_signal[i]; - current_is = (int32*)malloc(sizeof(int32) * new_size); - if(0 == current_is) { - encoder->state = FLAC__ENCODER_MEMORY_ALLOCATION_ERROR; - ok = 0; - } - else { - encoder->guts->integer_signal[i] = current_is; - if(previous_is != 0) - free(previous_is); - } - /* real version of the signal */ - previous_rs = encoder->guts->real_signal[i]; - current_rs = (real*)malloc(sizeof(real) * new_size); - if(0 == current_rs) { - encoder->state = FLAC__ENCODER_MEMORY_ALLOCATION_ERROR; - ok = 0; - } - else { - encoder->guts->real_signal[i] = current_rs; - if(previous_rs != 0) - free(previous_rs); - } - } + ok = true; + for(i = 0; ok && i < encoder->channels; i++) { + ok = ok && FLAC__memory_alloc_aligned_int32_array(new_size, &encoder->guts->integer_signal_unaligned[i], &encoder->guts->integer_signal[i]); + ok = ok && FLAC__memory_alloc_aligned_real_array(new_size, &encoder->guts->real_signal_unaligned[i], &encoder->guts->real_signal[i]); } - if(ok) { + for(i = 0; ok && i < 2; i++) { + ok = ok && FLAC__memory_alloc_aligned_int32_array(new_size, &encoder->guts->integer_signal_mid_side_unaligned[i], &encoder->guts->integer_signal_mid_side[i]); + ok = ok && FLAC__memory_alloc_aligned_real_array(new_size, &encoder->guts->real_signal_mid_side_unaligned[i], &encoder->guts->real_signal_mid_side[i]); + } + for(channel = 0; ok && channel < encoder->channels; channel++) { for(i = 0; ok && i < 2; i++) { - /* integer version of the signal */ - previous_is = encoder->guts->integer_signal_mid_side[i]; - current_is = (int32*)malloc(sizeof(int32) * new_size); - if(0 == current_is) { - encoder->state = FLAC__ENCODER_MEMORY_ALLOCATION_ERROR; - ok = 0; - } - else { - encoder->guts->integer_signal_mid_side[i] = current_is; - if(previous_is != 0) - free(previous_is); - } - /* real version of the signal */ - previous_rs = encoder->guts->real_signal_mid_side[i]; - current_rs = (real*)malloc(sizeof(real) * new_size); - if(0 == current_rs) { - encoder->state = FLAC__ENCODER_MEMORY_ALLOCATION_ERROR; - ok = 0; - } - else { - encoder->guts->real_signal_mid_side[i] = current_rs; - if(previous_rs != 0) - free(previous_rs); - } + ok = ok && FLAC__memory_alloc_aligned_int32_array(new_size, &encoder->guts->residual_workspace_unaligned[channel][i], &encoder->guts->residual_workspace[channel][i]); } } - if(ok) { - for(channel = 0; channel < encoder->channels; channel++) { - for(i = 0; i < 2; i++) { - residual = (int32*)malloc(sizeof(int32) * new_size); - if(0 == residual) { - encoder->state = FLAC__ENCODER_MEMORY_ALLOCATION_ERROR; - ok = 0; - } - else { - if(encoder->guts->residual_workspace[channel][i] != 0) - free(encoder->guts->residual_workspace[channel][i]); - encoder->guts->residual_workspace[channel][i] = residual; - } - } - } - for(channel = 0; channel < 2; channel++) { - for(i = 0; i < 2; i++) { - residual = (int32*)malloc(sizeof(int32) * new_size); - if(0 == residual) { - encoder->state = FLAC__ENCODER_MEMORY_ALLOCATION_ERROR; - ok = 0; - } - else { - if(encoder->guts->residual_workspace_mid_side[channel][i] != 0) - free(encoder->guts->residual_workspace_mid_side[channel][i]); - encoder->guts->residual_workspace_mid_side[channel][i] = residual; - } - } - } - abs_residual = (uint32*)malloc(sizeof(uint32) * new_size); - if(0 == abs_residual) { - encoder->state = FLAC__ENCODER_MEMORY_ALLOCATION_ERROR; - ok = 0; - } - else { - if(encoder->guts->abs_residual != 0) - free(encoder->guts->abs_residual); - encoder->guts->abs_residual = abs_residual; + for(channel = 0; ok && channel < 2; channel++) { + for(i = 0; ok && i < 2; i++) { + ok = ok && FLAC__memory_alloc_aligned_int32_array(new_size, &encoder->guts->residual_workspace_mid_side_unaligned[channel][i], &encoder->guts->residual_workspace_mid_side[channel][i]); } + } + ok = ok && FLAC__memory_alloc_aligned_uint32_array(new_size, &encoder->guts->abs_residual_unaligned, &encoder->guts->abs_residual); #ifdef FLAC__PRECOMPUTE_PARTITION_SUMS - abs_residual = (uint32*)malloc(sizeof(uint32) * (new_size * 2)); - if(0 == abs_residual) { - encoder->state = FLAC__ENCODER_MEMORY_ALLOCATION_ERROR; - ok = 0; - } - else { - if(encoder->guts->abs_residual_partition_sums != 0) - free(encoder->guts->abs_residual_partition_sums); - encoder->guts->abs_residual_partition_sums = abs_residual; - } + ok = ok && FLAC__memory_alloc_aligned_uint32_array(new_size * 2, &encoder->guts->abs_residual_partition_sums_unaligned, &encoder->guts->abs_residual_partition_sums); #endif #ifdef FLAC__SEARCH_FOR_ESCAPES - raw_bits_per_partition = (unsigned*)malloc(sizeof(unsigned) * (new_size * 2)); - if(0 == raw_bits_per_partition) { - encoder->state = FLAC__ENCODER_MEMORY_ALLOCATION_ERROR; - ok = 0; - } - else { - if(encoder->guts->raw_bits_per_partition != 0) - free(encoder->guts->raw_bits_per_partition); - encoder->guts->raw_bits_per_partition = raw_bits_per_partition; - } + ok = ok && FLAC__memory_alloc_aligned_unsigned_array(new_size * 2, &encoder->guts->raw_bits_per_partition_unaligned, &encoder->guts->raw_bits_per_partition); #endif - } + if(ok) encoder->guts->input_capacity = new_size; + else + encoder->state = FLAC__ENCODER_MEMORY_ALLOCATION_ERROR; return ok; }