Index: celt/fixed_c5x.h |
diff --git a/celt/pitch.h b/celt/fixed_c5x.h |
similarity index 51% |
copy from celt/pitch.h |
copy to celt/fixed_c5x.h |
index 2757071a6fbfaace2ec77bcdc2de5128b0d2feb7..156ba45d05f0b75b4e83be2a2e2f04deadfebe3c 100644 |
--- a/celt/pitch.h |
+++ b/celt/fixed_c5x.h |
@@ -1,11 +1,8 @@ |
-/* Copyright (c) 2007-2008 CSIRO |
- Copyright (c) 2007-2009 Xiph.Org Foundation |
- Written by Jean-Marc Valin */ |
+/* Copyright (C) 2003 Jean-Marc Valin */ |
/** |
- @file pitch.h |
- @brief Pitch analysis |
- */ |
- |
+ @file fixed_c5x.h |
+ @brief Fixed-point operations for the TI C5x DSP family |
+*/ |
/* |
Redistribution and use in source and binary forms, with or without |
modification, are permitted provided that the following conditions |
@@ -31,18 +28,52 @@ |
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
-#ifndef PITCH_H |
-#define PITCH_H |
+#ifndef FIXED_C5X_H |
+#define FIXED_C5X_H |
+ |
+#include "dsplib.h" |
+ |
+#undef IMUL32 |
+static inline long IMUL32(long i, long j) |
+{ |
+ long ac0, ac1; |
+ ac0 = _lmpy(i>>16,j); |
+ ac1 = ac0 + _lmpy(i,j>>16); |
+ return _lmpyu(i,j) + (ac1<<16); |
+} |
+ |
+#undef MAX16 |
+#define MAX16(a,b) _max(a,b) |
+ |
+#undef MIN16 |
+#define MIN16(a,b) _min(a,b) |
+ |
+#undef MAX32 |
+#define MAX32(a,b) _lmax(a,b) |
+ |
+#undef MIN32 |
+#define MIN32(a,b) _lmin(a,b) |
+ |
+#undef VSHR32 |
+#define VSHR32(a, shift) _lshl(a,-(shift)) |
+ |
+#undef MULT16_16_Q15 |
+#define MULT16_16_Q15(a,b) (_smpy(a,b)) |
+ |
+#undef MULT16_16SU |
+#define MULT16_16SU(a,b) _lmpysu(a,b) |
-#include "modes.h" |
+#undef MULT_16_16 |
+#define MULT_16_16(a,b) _lmpy(a,b) |
-void pitch_downsample(celt_sig * OPUS_RESTRICT x[], opus_val16 * OPUS_RESTRICT x_lp, |
- int len, int C); |
+/* FIXME: This is technically incorrect and is bound to cause problems. Is there any cleaner solution? */ |
+#undef MULT16_32_Q15 |
+#define MULT16_32_Q15(a,b) ADD32(SHL(MULT16_16((a),SHR((b),16)),1), SHR(MULT16_16SU((a),(b)),15)) |
-void pitch_search(const opus_val16 * OPUS_RESTRICT x_lp, opus_val16 * OPUS_RESTRICT y, |
- int len, int max_pitch, int *pitch); |
+#define celt_ilog2(x) (30 - _lnorm(x)) |
+#define OVERRIDE_CELT_ILOG2 |
-opus_val16 remove_doubling(opus_val16 *x, int maxperiod, int minperiod, |
- int N, int *T0, int prev_period, opus_val16 prev_gain); |
+#define celt_maxabs16(x, len) MAX32(EXTEND32(maxval((DATA *)x, len)),-EXTEND32(minval((DATA *)x, len))) |
+#define OVERRIDE_CELT_MAXABS16 |
-#endif |
+#endif /* FIXED_C5X_H */ |