summaryrefslogtreecommitdiff
path: root/apps/codecs/libfaad/sbr_qmf.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/libfaad/sbr_qmf.c')
-rw-r--r--apps/codecs/libfaad/sbr_qmf.c45
1 files changed, 43 insertions, 2 deletions
diff --git a/apps/codecs/libfaad/sbr_qmf.c b/apps/codecs/libfaad/sbr_qmf.c
index 3651eedf95..944e619c5a 100644
--- a/apps/codecs/libfaad/sbr_qmf.c
+++ b/apps/codecs/libfaad/sbr_qmf.c
@@ -109,7 +109,7 @@ void sbr_qmf_analysis_32(sbr_info *sbr, qmfa_info *qmfa, const real_t *input,
109 /* window and summation to create array u */ 109 /* window and summation to create array u */
110 for (n = 0; n < 64; n++) 110 for (n = 0; n < 64; n++)
111 { 111 {
112 idx0 = qmfa->x_index + n; idx1 = n * 2 * 5; 112 idx0 = qmfa->x_index + n; idx1 = n * 10;
113 u[n] = FAAD_ANALYSIS_SCALE1( 113 u[n] = FAAD_ANALYSIS_SCALE1(
114 MUL_F(qmfa->x[idx0 ], qmf_c[idx1 ]) + 114 MUL_F(qmfa->x[idx0 ], qmf_c[idx1 ]) +
115 MUL_F(qmfa->x[idx0 + 64], qmf_c[idx1 + 2]) + 115 MUL_F(qmfa->x[idx0 + 64], qmf_c[idx1 + 2]) +
@@ -512,7 +512,7 @@ void sbr_qmf_synthesis_64(sbr_info *sbr, qmfs_info *qmfs, qmf_t X[MAX_NTSRHFG][6
512 p_buf_1 = qmfs->v + qmfs->v_index; 512 p_buf_1 = qmfs->v + qmfs->v_index;
513 513
514 /* calculate 64 output samples and window */ 514 /* calculate 64 output samples and window */
515 515#if !defined(CPU_ARM)
516 for (k = 0; k < 64; k++) 516 for (k = 0; k < 64; k++)
517 { 517 {
518 idx0 = k*10; 518 idx0 = k*10;
@@ -528,6 +528,47 @@ void sbr_qmf_synthesis_64(sbr_info *sbr, qmfs_info *qmfs, qmf_t X[MAX_NTSRHFG][6
528 MUL_F(p_buf_1[k+1024 ], qmf_c[idx0+8]) + 528 MUL_F(p_buf_1[k+1024 ], qmf_c[idx0+8]) +
529 MUL_F(p_buf_1[k+1024+192], qmf_c[idx0+9])); 529 MUL_F(p_buf_1[k+1024+192], qmf_c[idx0+9]));
530 } 530 }
531#else
532 const real_t *qtab = qmf_c;
533 real_t *pbuf = p_buf_1;
534 for (k = 0; k < 64; k++, pbuf++)
535 {
536 real_t *pout = &output[out++];
537 asm volatile (
538 "ldmia %[qtab]!, { r0-r3 } \n\t"
539 "ldr r4, [%[pbuf]] \n\t"
540 "smull r5, r6, r4, r0 \n\t"
541 "ldr r4, [%[pbuf], #192*4] \n\t"
542 "smlal r5, r6, r4, r1 \n\t"
543 "ldr r4, [%[pbuf], #256*4] \n\t"
544 "smlal r5, r6, r4, r2 \n\t"
545 "ldr r4, [%[pbuf], #448*4] \n\t"
546 "smlal r5, r6, r4, r3 \n\t"
547
548 "ldmia %[qtab]!, { r0-r3 } \n\t"
549 "ldr r4, [%[pbuf], #512*4] \n\t"
550 "smlal r5, r6, r4, r0 \n\t"
551 "ldr r4, [%[pbuf], #704*4] \n\t"
552 "smlal r5, r6, r4, r1 \n\t"
553 "ldr r4, [%[pbuf], #768*4] \n\t"
554 "smlal r5, r6, r4, r2 \n\t"
555 "ldr r4, [%[pbuf], #960*4] \n\t"
556 "smlal r5, r6, r4, r3 \n\t"
557
558 "ldmia %[qtab]!, { r0-r1 } \n\t"
559 "mov r2, #1024*4 \n\t"
560 "ldr r4, [%[pbuf], r2] \n\t"
561 "smlal r5, r6, r4, r0 \n\t"
562 "mov r2, #1216*4 \n\t"
563 "ldr r4, [%[pbuf], r2] \n\t"
564 "smlal r5, r6, r4, r1 \n\t"
565
566 "str r6, [%[pout]] \n"
567 : [qtab] "+r" (qtab)
568 : [pbuf] "r" (pbuf), [pout] "r" (pout)
569 : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "memory");
570 }
571#endif
531 572
532 /* update ringbuffer index */ 573 /* update ringbuffer index */
533 qmfs->v_index -= 128; 574 qmfs->v_index -= 128;