summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/amrwbenc/src/autocorr.c
diff options
context:
space:
mode:
Diffstat (limited to 'media/libstagefright/codecs/amrwbenc/src/autocorr.c')
-rw-r--r--media/libstagefright/codecs/amrwbenc/src/autocorr.c182
1 files changed, 91 insertions, 91 deletions
diff --git a/media/libstagefright/codecs/amrwbenc/src/autocorr.c b/media/libstagefright/codecs/amrwbenc/src/autocorr.c
index 0b2ea89..3ea53f7 100644
--- a/media/libstagefright/codecs/amrwbenc/src/autocorr.c
+++ b/media/libstagefright/codecs/amrwbenc/src/autocorr.c
@@ -31,100 +31,100 @@
#define UNUSED(x) (void)(x)
void Autocorr(
- Word16 x[], /* (i) : Input signal */
- Word16 m, /* (i) : LPC order */
- Word16 r_h[], /* (o) Q15: Autocorrelations (msb) */
- Word16 r_l[] /* (o) : Autocorrelations (lsb) */
- )
+ Word16 x[], /* (i) : Input signal */
+ Word16 m, /* (i) : LPC order */
+ Word16 r_h[], /* (o) Q15: Autocorrelations (msb) */
+ Word16 r_l[] /* (o) : Autocorrelations (lsb) */
+ )
{
- Word32 i, norm, shift;
- Word16 y[L_WINDOW];
- Word32 L_sum, L_sum1, L_tmp, F_LEN;
- Word16 *p1,*p2,*p3;
- const Word16 *p4;
+ Word32 i, norm, shift;
+ Word16 y[L_WINDOW];
+ Word32 L_sum, L_sum1, L_tmp, F_LEN;
+ Word16 *p1,*p2,*p3;
+ const Word16 *p4;
UNUSED(m);
- /* Windowing of signal */
- p1 = x;
- p4 = vo_window;
- p3 = y;
-
- for (i = 0; i < L_WINDOW; i+=4)
- {
- *p3++ = vo_mult_r((*p1++), (*p4++));
- *p3++ = vo_mult_r((*p1++), (*p4++));
- *p3++ = vo_mult_r((*p1++), (*p4++));
- *p3++ = vo_mult_r((*p1++), (*p4++));
- }
-
- /* calculate energy of signal */
- L_sum = vo_L_deposit_h(16); /* sqrt(256), avoid overflow after rounding */
- for (i = 0; i < L_WINDOW; i++)
- {
- L_tmp = vo_L_mult(y[i], y[i]);
- L_tmp = (L_tmp >> 8);
- L_sum += L_tmp;
- }
-
- /* scale signal to avoid overflow in autocorrelation */
- norm = norm_l(L_sum);
- shift = 4 - (norm >> 1);
- if(shift > 0)
- {
- p1 = y;
- for (i = 0; i < L_WINDOW; i+=4)
- {
- *p1 = vo_shr_r(*p1, shift);
- p1++;
- *p1 = vo_shr_r(*p1, shift);
- p1++;
- *p1 = vo_shr_r(*p1, shift);
- p1++;
- *p1 = vo_shr_r(*p1, shift);
- p1++;
- }
- }
-
- /* Compute and normalize r[0] */
- L_sum = 1;
- for (i = 0; i < L_WINDOW; i+=4)
- {
- L_sum += vo_L_mult(y[i], y[i]);
- L_sum += vo_L_mult(y[i+1], y[i+1]);
- L_sum += vo_L_mult(y[i+2], y[i+2]);
- L_sum += vo_L_mult(y[i+3], y[i+3]);
- }
-
- norm = norm_l(L_sum);
- L_sum = (L_sum << norm);
-
- r_h[0] = L_sum >> 16;
- r_l[0] = (L_sum & 0xffff)>>1;
-
- /* Compute r[1] to r[m] */
- for (i = 1; i <= 8; i++)
- {
- L_sum1 = 0;
- L_sum = 0;
- F_LEN = (Word32)(L_WINDOW - 2*i);
- p1 = y;
- p2 = y + (2*i)-1;
- do{
- L_sum1 += *p1 * *p2++;
- L_sum += *p1++ * *p2;
- }while(--F_LEN!=0);
-
- L_sum1 += *p1 * *p2++;
-
- L_sum1 = L_sum1<<norm;
- L_sum = L_sum<<norm;
-
- r_h[(2*i)-1] = L_sum1 >> 15;
- r_l[(2*i)-1] = L_sum1 & 0x00007fff;
- r_h[(2*i)] = L_sum >> 15;
- r_l[(2*i)] = L_sum & 0x00007fff;
- }
- return;
+ /* Windowing of signal */
+ p1 = x;
+ p4 = vo_window;
+ p3 = y;
+
+ for (i = 0; i < L_WINDOW; i+=4)
+ {
+ *p3++ = vo_mult_r((*p1++), (*p4++));
+ *p3++ = vo_mult_r((*p1++), (*p4++));
+ *p3++ = vo_mult_r((*p1++), (*p4++));
+ *p3++ = vo_mult_r((*p1++), (*p4++));
+ }
+
+ /* calculate energy of signal */
+ L_sum = vo_L_deposit_h(16); /* sqrt(256), avoid overflow after rounding */
+ for (i = 0; i < L_WINDOW; i++)
+ {
+ L_tmp = vo_L_mult(y[i], y[i]);
+ L_tmp = (L_tmp >> 8);
+ L_sum += L_tmp;
+ }
+
+ /* scale signal to avoid overflow in autocorrelation */
+ norm = norm_l(L_sum);
+ shift = 4 - (norm >> 1);
+ if(shift > 0)
+ {
+ p1 = y;
+ for (i = 0; i < L_WINDOW; i+=4)
+ {
+ *p1 = vo_shr_r(*p1, shift);
+ p1++;
+ *p1 = vo_shr_r(*p1, shift);
+ p1++;
+ *p1 = vo_shr_r(*p1, shift);
+ p1++;
+ *p1 = vo_shr_r(*p1, shift);
+ p1++;
+ }
+ }
+
+ /* Compute and normalize r[0] */
+ L_sum = 1;
+ for (i = 0; i < L_WINDOW; i+=4)
+ {
+ L_sum += vo_L_mult(y[i], y[i]);
+ L_sum += vo_L_mult(y[i+1], y[i+1]);
+ L_sum += vo_L_mult(y[i+2], y[i+2]);
+ L_sum += vo_L_mult(y[i+3], y[i+3]);
+ }
+
+ norm = norm_l(L_sum);
+ L_sum = (L_sum << norm);
+
+ r_h[0] = L_sum >> 16;
+ r_l[0] = (L_sum & 0xffff)>>1;
+
+ /* Compute r[1] to r[m] */
+ for (i = 1; i <= 8; i++)
+ {
+ L_sum1 = 0;
+ L_sum = 0;
+ F_LEN = (Word32)(L_WINDOW - 2*i);
+ p1 = y;
+ p2 = y + (2*i)-1;
+ do{
+ L_sum1 += *p1 * *p2++;
+ L_sum += *p1++ * *p2;
+ }while(--F_LEN!=0);
+
+ L_sum1 += *p1 * *p2++;
+
+ L_sum1 = L_sum1<<norm;
+ L_sum = L_sum<<norm;
+
+ r_h[(2*i)-1] = L_sum1 >> 15;
+ r_l[(2*i)-1] = L_sum1 & 0x00007fff;
+ r_h[(2*i)] = L_sum >> 15;
+ r_l[(2*i)] = L_sum & 0x00007fff;
+ }
+ return;
}