199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com/* 299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Use of this source code is governed by a BSD-style license 599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * that can be found in the LICENSE file in the root of the source 699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * tree. An additional intellectual property rights grant can be found 799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * in the file PATENTS. All contributing project authors may 899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * be found in the AUTHORS file in the root of the source tree. 999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 1099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * This file was originally licensed as follows. It has been 1199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * relicensed with permission from the copyright holders. 1299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com */ 1399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 1499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com/** 1599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 1699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * File Name: armSP.h 1799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * OpenMAX DL: v1.0.2 1899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Last Modified Revision: 7014 1999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Last Modified Date: Wed, 01 Aug 2007 2099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 2199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. 2299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 2399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 2499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 2599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * File: armSP.h 2699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Brief: Declares API's/Basic Data types used across the OpenMAX Signal Processing domain 2799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 2899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com */ 2999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#ifndef _armSP_H_ 3099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#define _armSP_H_ 3199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 324d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com#include <stdint.h> 334d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 34048e632be7693f6198bfdd54130a0220a2ccb5abrtoy@google.com#include "dl/api/omxtypes.h" 3599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 3699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#ifdef __cplusplus 3799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.comextern "C" { 3899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#endif 3999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com/** FFT Specific declarations */ 4199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.comextern OMX_S32 armSP_FFT_S32TwiddleTable[1026]; 4299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.comextern OMX_F32 armSP_FFT_F32TwiddleTable[]; 4399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 4499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.comtypedef struct ARMsFFTSpec_SC32_Tag 4599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com{ 4699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_U32 N; 4799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_U16 *pBitRev; 4899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_SC32 *pTwiddle; 4999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_SC32 *pBuf; 5099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com}ARMsFFTSpec_SC32; 5199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 5299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 5399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.comtypedef struct ARMsFFTSpec_SC16_Tag 5499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com{ 5599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_U32 N; 5699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_U16 *pBitRev; 5799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_SC16 *pTwiddle; 5899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_SC16 *pBuf; 5999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com}ARMsFFTSpec_SC16; 6099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 6199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.comtypedef struct ARMsFFTSpec_R_SC32_Tag 6299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com{ 6399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_U32 N; 6499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_U16 *pBitRev; 6599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_SC32 *pTwiddle; 6699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_S32 *pBuf; 6799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com}ARMsFFTSpec_R_SC32; 6899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 694512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.orgtypedef struct ARMsFFTSpec_R_SC16_Tag 704512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org{ 714512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_U32 N; 724512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_U16 *pBitRev; 734512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_SC16 *pTwiddle; 744512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_S16 *pBuf; 754512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org} ARMsFFTSpec_R_SC16; 764512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 7799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.comtypedef struct ARMsFFTSpec_R_FC32_Tag 7899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com{ 7999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_U32 N; 8099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_U16* pBitRev; 8199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_FC32* pTwiddle; 8299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_F32* pBuf; 8399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com} ARMsFFTSpec_R_FC32; 8499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 8599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.comtypedef struct ARMsFFTSpec_FC32_Tag 8699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com{ 8799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_U32 N; 8899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_U16* pBitRev; 8999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_FC32* pTwiddle; 9099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_FC32* pBuf; 9199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com} ARMsFFTSpec_FC32; 9299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 934d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com/* 944d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com * Compute log2(x), where x must be a power of 2. 954d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com */ 964d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.comstatic inline OMX_U32 fastlog2(long x) { 974d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com OMX_U32 out; 984d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com asm("clz %0,%1\n\t" 994d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com "sub %0, %0, #63\n\t" 1004d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com "neg %0, %0\n\t" 1014d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com : "=r"(out) 1024d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com : "r"(x) 1034d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com :); 1044d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com return out; 1054d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com} 1064d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1074d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com/* 1084d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com * Validate args. All pointers must be non-NULL; the source and 1094d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com * destination pointers must be aligned on a 32-byte boundary; the 1104d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com * FFT spec must have non-NULL pointers; and the FFT size must be 1114d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com * within range. 1124d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com */ 1134d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.comstatic inline int validateParametersFC32(const void* pSrc, 1144d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com const void* pDst, 1154d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com const ARMsFFTSpec_FC32* pFFTSpec) { 1164d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com return pSrc && pDst && pFFTSpec && !(((uintptr_t)pSrc) & 31) && 1174d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com !(((uintptr_t)pDst) & 31) && pFFTSpec->pTwiddle && pFFTSpec->pBuf && 1184d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com (pFFTSpec->N >= 2) && (pFFTSpec->N <= (1 << TWIDDLE_TABLE_ORDER)); 1194d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com} 1204d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 1214d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.comstatic inline int validateParametersF32(const void* pSrc, 1224d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com const void* pDst, 1234d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com const ARMsFFTSpec_R_FC32* pFFTSpec) { 1244d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com return pSrc && pDst && pFFTSpec && !(((uintptr_t)pSrc) & 31) && 1254d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com !(((uintptr_t)pDst) & 31) && pFFTSpec->pTwiddle && pFFTSpec->pBuf && 1264d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com (pFFTSpec->N >= 2) && (pFFTSpec->N <= (1 << TWIDDLE_TABLE_ORDER)); 1274d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com} 1284d09f5abfba45163d1296272ac7d2ddc2cd5f9fbrtoy@google.com 12999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#ifdef __cplusplus 13099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com} 13199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#endif 13299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 13399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com#endif 13499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 13599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com/*End of File*/ 13699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 13799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 13899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 139