diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c index 75d77d18da1705a828ff2061b687b12eb63decbd..aba02aba689ccf7702c68a8b0e1ae1875fa26a0a 100644 --- a/libavcodec/flacenc.c +++ b/libavcodec/flacenc.c @@ -301,20 +301,19 @@ static void calc_sums(int pmax, uint32_t *data, int n, int pred_order, uint32_t sums[][256]) { int i, j; - int parts, cnt; - uint32_t *res; + int parts; + uint32_t *res, *res_end; /* sums for highest level */ parts = (1 << pmax); res = &data[pred_order]; - cnt = (n >> pmax) - pred_order; + res_end = &data[n >> pmax]; for(i=0; i<parts; i++) { - if(i == 1) cnt = (n >> pmax); - if(i > 0) res = &data[i*cnt]; sums[pmax][i] = 0; - for(j=0; j<cnt; j++) { - sums[pmax][i] += res[j]; + while(res < res_end){ + sums[pmax][i] += *(res++); } + res_end+= n >> pmax; } /* sums for lower levels */ for(i=pmax-1; i>=0; i--) {