summaryrefslogtreecommitdiff
path: root/lib/rbcodec/codecs/libopus/celt/pitch.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rbcodec/codecs/libopus/celt/pitch.h')
-rw-r--r--lib/rbcodec/codecs/libopus/celt/pitch.h38
1 files changed, 33 insertions, 5 deletions
diff --git a/lib/rbcodec/codecs/libopus/celt/pitch.h b/lib/rbcodec/codecs/libopus/celt/pitch.h
index caffd24bc4..df317ecc1d 100644
--- a/lib/rbcodec/codecs/libopus/celt/pitch.h
+++ b/lib/rbcodec/codecs/libopus/celt/pitch.h
@@ -35,16 +35,21 @@
35#define PITCH_H 35#define PITCH_H
36 36
37#include "modes.h" 37#include "modes.h"
38#include "cpu_support.h"
38 39
39#if defined(__SSE__) && !defined(FIXED_POINT) 40#if defined(__SSE__) && !defined(FIXED_POINT)
40#include "x86/pitch_sse.h" 41#include "x86/pitch_sse.h"
41#endif 42#endif
42 43
44#if defined(OPUS_ARM_ASM) && defined(FIXED_POINT)
45# include "arm/pitch_arm.h"
46#endif
47
43void pitch_downsample(celt_sig * OPUS_RESTRICT x[], opus_val16 * OPUS_RESTRICT x_lp, 48void pitch_downsample(celt_sig * OPUS_RESTRICT x[], opus_val16 * OPUS_RESTRICT x_lp,
44 int len, int C); 49 int len, int C, int arch);
45 50
46void pitch_search(const opus_val16 * OPUS_RESTRICT x_lp, opus_val16 * OPUS_RESTRICT y, 51void pitch_search(const opus_val16 * OPUS_RESTRICT x_lp, opus_val16 * OPUS_RESTRICT y,
47 int len, int max_pitch, int *pitch); 52 int len, int max_pitch, int *pitch, int arch);
48 53
49opus_val16 remove_doubling(opus_val16 *x, int maxperiod, int minperiod, 54opus_val16 remove_doubling(opus_val16 *x, int maxperiod, int minperiod,
50 int N, int *T0, int prev_period, opus_val16 prev_gain); 55 int N, int *T0, int prev_period, opus_val16 prev_gain);
@@ -52,10 +57,11 @@ opus_val16 remove_doubling(opus_val16 *x, int maxperiod, int minperiod,
52/* OPT: This is the kernel you really want to optimize. It gets used a lot 57/* OPT: This is the kernel you really want to optimize. It gets used a lot
53 by the prefilter and by the PLC. */ 58 by the prefilter and by the PLC. */
54#ifndef OVERRIDE_XCORR_KERNEL 59#ifndef OVERRIDE_XCORR_KERNEL
55static inline void xcorr_kernel(const opus_val16 * x, const opus_val16 * y, opus_val32 sum[4], int len) 60static OPUS_INLINE void xcorr_kernel(const opus_val16 * x, const opus_val16 * y, opus_val32 sum[4], int len)
56{ 61{
57 int j; 62 int j;
58 opus_val16 y_0, y_1, y_2, y_3; 63 opus_val16 y_0, y_1, y_2, y_3;
64 celt_assert(len>=3);
59 y_3=0; /* gcc doesn't realize that y_3 can't be used uninitialized */ 65 y_3=0; /* gcc doesn't realize that y_3 can't be used uninitialized */
60 y_0=*y++; 66 y_0=*y++;
61 y_1=*y++; 67 y_1=*y++;
@@ -119,7 +125,7 @@ static inline void xcorr_kernel(const opus_val16 * x, const opus_val16 * y, opus
119#endif /* OVERRIDE_XCORR_KERNEL */ 125#endif /* OVERRIDE_XCORR_KERNEL */
120 126
121#ifndef OVERRIDE_DUAL_INNER_PROD 127#ifndef OVERRIDE_DUAL_INNER_PROD
122static inline void dual_inner_prod(const opus_val16 *x, const opus_val16 *y01, const opus_val16 *y02, 128static OPUS_INLINE void dual_inner_prod(const opus_val16 *x, const opus_val16 *y01, const opus_val16 *y02,
123 int N, opus_val32 *xy1, opus_val32 *xy2) 129 int N, opus_val32 *xy1, opus_val32 *xy2)
124{ 130{
125 int i; 131 int i;
@@ -140,6 +146,28 @@ opus_val32
140#else 146#else
141void 147void
142#endif 148#endif
143celt_pitch_xcorr(const opus_val16 *_x, const opus_val16 *_y, opus_val32 *xcorr, int len, int max_pitch); 149celt_pitch_xcorr_c(const opus_val16 *_x, const opus_val16 *_y,
150 opus_val32 *xcorr, int len, int max_pitch);
151
152#if !defined(OVERRIDE_PITCH_XCORR)
153/*Is run-time CPU detection enabled on this platform?*/
154# if defined(OPUS_HAVE_RTCD)
155extern
156# if defined(FIXED_POINT)
157opus_val32
158# else
159void
160# endif
161(*const CELT_PITCH_XCORR_IMPL[OPUS_ARCHMASK+1])(const opus_val16 *,
162 const opus_val16 *, opus_val32 *, int, int);
163
164# define celt_pitch_xcorr(_x, _y, xcorr, len, max_pitch, arch) \
165 ((*CELT_PITCH_XCORR_IMPL[(arch)&OPUS_ARCHMASK])(_x, _y, \
166 xcorr, len, max_pitch))
167# else
168# define celt_pitch_xcorr(_x, _y, xcorr, len, max_pitch, arch) \
169 ((void)(arch),celt_pitch_xcorr_c(_x, _y, xcorr, len, max_pitch))
170# endif
171#endif
144 172
145#endif 173#endif