зеркало из https://github.com/mozilla/gecko-dev.git
96 строки
4.9 KiB
Diff
96 строки
4.9 KiB
Diff
diff --git a/media/libspeex_resampler/src/arch.h b/media/libspeex_resampler/src/arch.h
|
|
--- a/media/libspeex_resampler/src/arch.h
|
|
+++ b/media/libspeex_resampler/src/arch.h
|
|
@@ -172,26 +172,23 @@ typedef float spx_word32_t;
|
|
#define SHL(a,shift) (a)
|
|
#define SATURATE(x,a) (x)
|
|
|
|
#define ADD16(a,b) ((a)+(b))
|
|
#define SUB16(a,b) ((a)-(b))
|
|
#define ADD32(a,b) ((a)+(b))
|
|
#define SUB32(a,b) ((a)-(b))
|
|
#define MULT16_16_16(a,b) ((a)*(b))
|
|
+#define MULT16_32_32(a,b) ((a)*(b))
|
|
#define MULT16_16(a,b) ((spx_word32_t)(a)*(spx_word32_t)(b))
|
|
#define MAC16_16(c,a,b) ((c)+(spx_word32_t)(a)*(spx_word32_t)(b))
|
|
|
|
-#define MULT16_32_Q11(a,b) ((a)*(b))
|
|
-#define MULT16_32_Q13(a,b) ((a)*(b))
|
|
-#define MULT16_32_Q14(a,b) ((a)*(b))
|
|
#define MULT16_32_Q15(a,b) ((a)*(b))
|
|
#define MULT16_32_P15(a,b) ((a)*(b))
|
|
|
|
-#define MAC16_32_Q11(c,a,b) ((c)+(a)*(b))
|
|
#define MAC16_32_Q15(c,a,b) ((c)+(a)*(b))
|
|
|
|
#define MAC16_16_Q11(c,a,b) ((c)+(a)*(b))
|
|
#define MAC16_16_Q13(c,a,b) ((c)+(a)*(b))
|
|
#define MAC16_16_P13(c,a,b) ((c)+(a)*(b))
|
|
#define MULT16_16_Q11_32(a,b) ((a)*(b))
|
|
#define MULT16_16_Q13(a,b) ((a)*(b))
|
|
#define MULT16_16_Q14(a,b) ((a)*(b))
|
|
diff --git a/media/libspeex_resampler/src/fixed_generic.h b/media/libspeex_resampler/src/fixed_generic.h
|
|
--- a/media/libspeex_resampler/src/fixed_generic.h
|
|
+++ b/media/libspeex_resampler/src/fixed_generic.h
|
|
@@ -64,32 +64,27 @@
|
|
|
|
#define ADD16(a,b) ((spx_word16_t)((spx_word16_t)(a)+(spx_word16_t)(b)))
|
|
#define SUB16(a,b) ((spx_word16_t)(a)-(spx_word16_t)(b))
|
|
#define ADD32(a,b) ((spx_word32_t)(a)+(spx_word32_t)(b))
|
|
#define SUB32(a,b) ((spx_word32_t)(a)-(spx_word32_t)(b))
|
|
|
|
|
|
/* result fits in 16 bits */
|
|
-#define MULT16_16_16(a,b) ((((spx_word16_t)(a))*((spx_word16_t)(b))))
|
|
+#define MULT16_16_16(a,b) (((spx_word16_t)(a))*((spx_word16_t)(b)))
|
|
+/* result fits in 32 bits */
|
|
+#define MULT16_32_32(a,b) (((spx_word16_t)(a))*((spx_word32_t)(b)))
|
|
|
|
/* (spx_word32_t)(spx_word16_t) gives TI compiler a hint that it's 16x16->32 multiply */
|
|
#define MULT16_16(a,b) (((spx_word32_t)(spx_word16_t)(a))*((spx_word32_t)(spx_word16_t)(b)))
|
|
|
|
#define MAC16_16(c,a,b) (ADD32((c),MULT16_16((a),(b))))
|
|
-#define MULT16_32_Q12(a,b) ADD32(MULT16_16((a),SHR((b),12)), SHR(MULT16_16((a),((b)&0x00000fff)),12))
|
|
-#define MULT16_32_Q13(a,b) ADD32(MULT16_16((a),SHR((b),13)), SHR(MULT16_16((a),((b)&0x00001fff)),13))
|
|
-#define MULT16_32_Q14(a,b) ADD32(MULT16_16((a),SHR((b),14)), SHR(MULT16_16((a),((b)&0x00003fff)),14))
|
|
-
|
|
-#define MULT16_32_Q11(a,b) ADD32(MULT16_16((a),SHR((b),11)), SHR(MULT16_16((a),((b)&0x000007ff)),11))
|
|
-#define MAC16_32_Q11(c,a,b) ADD32(c,ADD32(MULT16_16((a),SHR((b),11)), SHR(MULT16_16((a),((b)&0x000007ff)),11)))
|
|
-
|
|
-#define MULT16_32_P15(a,b) ADD32(MULT16_16((a),SHR((b),15)), PSHR(MULT16_16((a),((b)&0x00007fff)),15))
|
|
-#define MULT16_32_Q15(a,b) ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15))
|
|
-#define MAC16_32_Q15(c,a,b) ADD32(c,ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15)))
|
|
+#define MULT16_32_P15(a,b) ADD32(MULT16_32_32(a,SHR((b),15)), PSHR(MULT16_16((a),((b)&0x00007fff)),15))
|
|
+#define MULT16_32_Q15(a,b) ADD32(MULT16_32_32(a,SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15))
|
|
+#define MAC16_32_Q15(c,a,b) ADD32(c,MULT16_32_Q15(a,b))
|
|
|
|
|
|
#define MAC16_16_Q11(c,a,b) (ADD32((c),SHR(MULT16_16((a),(b)),11)))
|
|
#define MAC16_16_Q13(c,a,b) (ADD32((c),SHR(MULT16_16((a),(b)),13)))
|
|
#define MAC16_16_P13(c,a,b) (ADD32((c),SHR(ADD32(4096,MULT16_16((a),(b))),13)))
|
|
|
|
#define MULT16_16_Q11_32(a,b) (SHR(MULT16_16((a),(b)),11))
|
|
#define MULT16_16_Q13(a,b) (SHR(MULT16_16((a),(b)),13))
|
|
diff --git a/media/libspeex_resampler/src/resample.c b/media/libspeex_resampler/src/resample.c
|
|
--- a/media/libspeex_resampler/src/resample.c
|
|
+++ b/media/libspeex_resampler/src/resample.c
|
|
@@ -474,17 +474,17 @@ static int resampler_basic_interpolate_s
|
|
const spx_word16_t curr_in=iptr[j];
|
|
accum[0] += MULT16_16(curr_in,st->sinc_table[4+(j+1)*st->oversample-offset-2]);
|
|
accum[1] += MULT16_16(curr_in,st->sinc_table[4+(j+1)*st->oversample-offset-1]);
|
|
accum[2] += MULT16_16(curr_in,st->sinc_table[4+(j+1)*st->oversample-offset]);
|
|
accum[3] += MULT16_16(curr_in,st->sinc_table[4+(j+1)*st->oversample-offset+1]);
|
|
}
|
|
|
|
cubic_coef(frac, interp);
|
|
- sum = MULT16_32_Q15(interp[0],SHR32(accum[0], 1)) + MULT16_32_Q15(interp[1],SHR32(accum[1], 1)) + MULT16_32_Q15(interp[2],SHR32(accum[2], 1)) + MULT16_32_Q15(interp[3],SHR32(accum[3], 1));
|
|
+ sum = MULT16_32_Q15(interp[0],accum[0]) + MULT16_32_Q15(interp[1],accum[1]) + MULT16_32_Q15(interp[2],accum[2]) + MULT16_32_Q15(interp[3],accum[3]);
|
|
sum = SATURATE32PSHR(sum, 15, 32767);
|
|
#ifdef OVERRIDE_INTERPOLATE_PRODUCT_SINGLE
|
|
} else {
|
|
cubic_coef(frac, interp);
|
|
sum = interpolate_product_single(iptr, st->sinc_table + st->oversample + 4 - offset - 2, N, st->oversample, interp);
|
|
}
|
|
#endif
|
|
|