summaryrefslogtreecommitdiff
path: root/libavcodec/flacenc.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/flacenc.c')
-rw-r--r--libavcodec/flacenc.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c
index 3b01a3ba1a..f96bc29c72 100644
--- a/libavcodec/flacenc.c
+++ b/libavcodec/flacenc.c
@@ -608,13 +608,14 @@ static void compute_autocorr(const int32_t *data, int len, int lag,
double *autoc)
{
int i, j;
- double tmp[len + lag];
+ double tmp[len + lag + 1];
double *data1= tmp + lag;
apply_welch_window(data, len, data1);
for(j=0; j<lag; j++)
data1[j-lag]= 0.0;
+ data1[len] = 0.0;
for(j=0; j<lag; j+=2){
double sum0 = 1.0, sum1 = 1.0;
@@ -628,8 +629,10 @@ static void compute_autocorr(const int32_t *data, int len, int lag,
if(j==lag){
double sum = 1.0;
- for(i=0; i<len; i++)
- sum += data1[i] * data1[i-j];
+ for(i=0; i<len; i+=2){
+ sum += data1[i ] * data1[i-j ]
+ + data1[i+1] * data1[i-j+1];
+ }
autoc[j] = sum;
}
}
@@ -757,7 +760,7 @@ static int lpc_calc_coefs(const int32_t *samples, int blocksize, int max_order,
assert(max_order >= MIN_LPC_ORDER && max_order <= MAX_LPC_ORDER);
if(use_lpc == 1){
- compute_autocorr(samples, blocksize, max_order+1, autoc);
+ compute_autocorr(samples, blocksize, max_order, autoc);
compute_lpc_coefs(autoc, max_order, lpc, ref);
}else{