aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavcodec/flacenc.c32
1 files changed, 10 insertions, 22 deletions
diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c
index 1ec09bbf66..9259d0fc28 100644
--- a/libavcodec/flacenc.c
+++ b/libavcodec/flacenc.c
@@ -583,34 +583,22 @@ static void apply_welch_window(const int32_t *data, int len, double *w_data)
static void compute_autocorr(const int32_t *data, int len, int lag,
double *autoc)
{
- int i;
- double *data1;
- int lag_ptr, ptr;
+ int i, lag_ptr;
+ double tmp[len + lag];
+ double *data1= tmp + lag;
- data1 = av_malloc(len * sizeof(double));
apply_welch_window(data, len, data1);
- for(i=0; i<lag; i++) autoc[i] = 1.0;
-
- ptr = 0;
- while(ptr <= lag) {
- lag_ptr = 0;
- while(lag_ptr <= ptr) {
- autoc[ptr-lag_ptr] += data1[ptr] * data1[lag_ptr];
- lag_ptr++;
- }
- ptr++;
+ for(i=0; i<lag; i++){
+ autoc[i] = 1.0;
+ data1[i-lag]= 0.0;
}
- while(ptr < len) {
- lag_ptr = ptr - lag;
- while(lag_ptr <= ptr) {
- autoc[ptr-lag_ptr] += data1[ptr] * data1[lag_ptr];
- lag_ptr++;
+
+ for(i=0; i<len; i++){
+ for(lag_ptr= i-lag; lag_ptr<=i; lag_ptr++){
+ autoc[i-lag_ptr] += data1[i] * data1[lag_ptr];
}
- ptr++;
}
-
- av_freep(&data1);
}
/**