1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 *
10 * This file was originally licensed as follows. It has been
11 * relicensed with permission from the copyright holders.
12 */
13
14 /**
15 *
16 * File Name: armSP.h
17 * OpenMAX DL: v1.0.2
18 * Last Modified Revision: 7014
19 * Last Modified Date: Wed, 01 Aug 2007
20 *
21 * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
22 *
23 *
24 *
25 * File: armSP.h
26 * Brief: Declares API's/Basic Data types used across the OpenMAX Signal Processing domain
27 *
28 */
29 #ifndef _armSP_H_
30 #define _armSP_H_
31
32 #include <stdint.h>
33
34 #include "dl/api/omxtypes.h"
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 /** FFT Specific declarations */
41 extern OMX_S32 armSP_FFT_S32TwiddleTable[1026];
42 extern OMX_F32 armSP_FFT_F32TwiddleTable[];
43
44 typedef struct ARMsFFTSpec_SC32_Tag
45 {
46 OMX_U32 N;
47 OMX_U16 *pBitRev;
48 OMX_SC32 *pTwiddle;
49 OMX_SC32 *pBuf;
50 }ARMsFFTSpec_SC32;
51
52
53 typedef struct ARMsFFTSpec_SC16_Tag
54 {
55 OMX_U32 N;
56 OMX_U16 *pBitRev;
57 OMX_SC16 *pTwiddle;
58 OMX_SC16 *pBuf;
59 }ARMsFFTSpec_SC16;
60
61 typedef struct ARMsFFTSpec_R_SC32_Tag
62 {
63 OMX_U32 N;
64 OMX_U16 *pBitRev;
65 OMX_SC32 *pTwiddle;
66 OMX_S32 *pBuf;
67 }ARMsFFTSpec_R_SC32;
68
69 typedef struct ARMsFFTSpec_R_SC16_Tag
70 {
71 OMX_U32 N;
72 OMX_U16 *pBitRev;
73 OMX_SC16 *pTwiddle;
74 OMX_S16 *pBuf;
75 } ARMsFFTSpec_R_SC16;
76
77 typedef struct ARMsFFTSpec_R_FC32_Tag
78 {
79 OMX_U32 N;
80 OMX_U16* pBitRev;
81 OMX_FC32* pTwiddle;
82 OMX_F32* pBuf;
83 } ARMsFFTSpec_R_FC32;
84
85 typedef struct ARMsFFTSpec_FC32_Tag
86 {
87 OMX_U32 N;
88 OMX_U16* pBitRev;
89 OMX_FC32* pTwiddle;
90 OMX_FC32* pBuf;
91 } ARMsFFTSpec_FC32;
92
93 /*
94 * Compute log2(x), where x must be a power of 2.
95 */
fastlog2(long x)96 static inline OMX_U32 fastlog2(long x) {
97 OMX_U32 out;
98 asm("clz %0,%1\n\t"
99 "sub %0, %0, #63\n\t"
100 "neg %0, %0\n\t"
101 : "=r"(out)
102 : "r"(x)
103 :);
104 return out;
105 }
106
107 /*
108 * Validate args. All pointers must be non-NULL; the source and
109 * destination pointers must be aligned on a 32-byte boundary; the
110 * FFT spec must have non-NULL pointers; and the FFT size must be
111 * within range.
112 */
validateParametersFC32(const void * pSrc,const void * pDst,const ARMsFFTSpec_FC32 * pFFTSpec)113 static inline int validateParametersFC32(const void* pSrc,
114 const void* pDst,
115 const ARMsFFTSpec_FC32* pFFTSpec) {
116 return pSrc && pDst && pFFTSpec && !(((uintptr_t)pSrc) & 31) &&
117 !(((uintptr_t)pDst) & 31) && pFFTSpec->pTwiddle && pFFTSpec->pBuf &&
118 (pFFTSpec->N >= 2) && (pFFTSpec->N <= (1 << TWIDDLE_TABLE_ORDER));
119 }
120
validateParametersF32(const void * pSrc,const void * pDst,const ARMsFFTSpec_R_FC32 * pFFTSpec)121 static inline int validateParametersF32(const void* pSrc,
122 const void* pDst,
123 const ARMsFFTSpec_R_FC32* pFFTSpec) {
124 return pSrc && pDst && pFFTSpec && !(((uintptr_t)pSrc) & 31) &&
125 !(((uintptr_t)pDst) & 31) && pFFTSpec->pTwiddle && pFFTSpec->pBuf &&
126 (pFFTSpec->N >= 2) && (pFFTSpec->N <= (1 << TWIDDLE_TABLE_ORDER));
127 }
128
129 #ifdef __cplusplus
130 }
131 #endif
132
133 #endif
134
135 /*End of File*/
136
137
138
139