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: omxSP_FFTInit_R_S16S32.c 1799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * OpenMAX DL: v1.0.2 1899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Last Modified Revision: 7777 1999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Last Modified Date: Thu, 27 Sep 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 * Description: 2599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Initialize the real forward-FFT specification information struct. 2699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com */ 2799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 285537f70dff0bb4566ebb1ec645d2020974e93493turaj@webrtc.org#include <stdint.h> 295537f70dff0bb4566ebb1ec645d2020974e93493turaj@webrtc.org 30bdf981cb383b7ec472ee86d2fedb53937285f894rtoy@google.com#include "dl/api/arm/armOMX.h" 31048e632be7693f6198bfdd54130a0220a2ccb5abrtoy@google.com#include "dl/api/omxtypes.h" 32048e632be7693f6198bfdd54130a0220a2ccb5abrtoy@google.com#include "dl/sp/api/armSP.h" 33048e632be7693f6198bfdd54130a0220a2ccb5abrtoy@google.com#include "dl/sp/api/omxSP.h" 3499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 3599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com/** 3699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Function: omxSP_FFTInit_R_S16_S32 3799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 3899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Description: 3999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Initialize the real forward-FFT specification information struct. 4099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 4199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Remarks: 4299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * This function is used to initialize the specification structures 4399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * for functions <ippsFFTFwd_RToCCS_S16_S32_Sfs> and 4499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * <ippsFFTInv_CCSToR_S32_S16_Sfs>. Memory for *pFFTSpec must be 4599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * allocated prior to calling this function. The number of bytes 4699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * required for *pFFTSpec can be determined using 4799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * <FFTGetBufSize_R_S16_S32>. 4899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 4999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Parameters: 5099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * [in] order base-2 logarithm of the desired block length; 5199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * valid in the range [0,12]. 5299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * [out] pFFTFwdSpec pointer to the initialized specification structure. 5399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 5499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Return Value: 5599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Standard omxError result. See enumeration for possible result codes. 5699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 5799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com */ 5899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 5999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.comOMXResult omxSP_FFTInit_R_S16S32( 6099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMXFFTSpec_R_S16S32* pFFTSpec, 6199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_INT order 6299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com) 6399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com{ 6499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_INT i,j; 6599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_SC32 *pTwiddle,*pTwiddle1,*pTwiddle2,*pTwiddle3,*pTwiddle4; 6699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_S32 *pBuf; 6799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_U16 *pBitRev; 6899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_U32 pTmp; 6999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_INT Nby2,N,M,diff, step; 7099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com OMX_S32 x,y,xNeg; 7199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com ARMsFFTSpec_R_SC32 *pFFTStruct = 0; 7299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 7399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 7499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pFFTStruct = (ARMsFFTSpec_R_SC32 *) pFFTSpec; 7599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 7699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com /* if order zero no init is needed */ 7799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com if (order == 0) 7899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com { 7999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pFFTStruct->N = 1; 8099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pFFTStruct->pTwiddle = NULL; 8199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pFFTStruct->pBuf = (OMX_S32 *) 8299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com (sizeof(ARMsFFTSpec_R_SC32) + (OMX_S8*) pFFTSpec); 8399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 8499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com return OMX_Sts_NoErr; 8599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com } 8699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 8799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com /* Do the initializations */ 8899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com Nby2 = 1 << (order - 1); 8999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com N = Nby2 << 1; 9099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 9199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 9299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 9399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pBitRev = NULL ; /* optimized implementations don't use bitreversal */ 9499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 9599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle = (OMX_SC32 *) 9699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com (sizeof(ARMsFFTSpec_R_SC32) + (OMX_S8*) pFFTSpec); 9799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 9899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com /* Align to 32 byte boundary */ 995537f70dff0bb4566ebb1ec645d2020974e93493turaj@webrtc.org pTmp = ((uintptr_t)pTwiddle)&31; /* (OMX_U32)pTwiddle % 32 */ 10099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com if(pTmp != 0) 10199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle = (OMX_SC32*) ((OMX_S8*)pTwiddle + (32-pTmp)); 10299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 10399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 10499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pBuf = (OMX_S32*) 10599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com (sizeof(OMX_SC32) * (5*N/8) + (OMX_S8*) pTwiddle); 10699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 10799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com /* Align to 32 byte boundary */ 1085537f70dff0bb4566ebb1ec645d2020974e93493turaj@webrtc.org pTmp = ((uintptr_t)pBuf)&31; /* (OMX_U32)pBuf % 32 */ 10999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com if(pTmp != 0) 11099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pBuf = (OMX_S32*) ((OMX_S8*)pBuf + (32-pTmp)); 11199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 11299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 11399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 11499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 11599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com /* 11699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Filling Twiddle factors : exp^(-j*2*PI*k/ (N/2) ) ; k=0,1,2,...,3/4(N/2) 11799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * N/2 point complex FFT is used to compute N point real FFT 11899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * The original twiddle table "armSP_FFT_S32TwiddleTable" is of size (MaxSize/8 + 1) 11999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Rest of the values i.e., upto MaxSize are calculated using the symmetries of sin and cos 12099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * The max size of the twiddle table needed is 3/4(N/2) for a radix-4 stage 12199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * 12299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * W = (-2 * PI) / N 12399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * N = 1 << order 12499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * W = -PI >> (order - 1) 12599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com */ 12699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 12799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com M = Nby2>>3; 12899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com diff = 12 - (order-1); 12999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com step = 1<<diff; /* step into the twiddle table for the current order */ 13099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 13199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com x = armSP_FFT_S32TwiddleTable[0]; 13299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com y = armSP_FFT_S32TwiddleTable[1]; 13399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com xNeg = 0x7FFFFFFF; 13499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 13599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com if((order-1) >=3) 13699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com { 13799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com /* i = 0 case */ 13899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[0].Re = x; 13999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[0].Im = y; 14099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[2*M].Re = -y; 14199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[2*M].Im = xNeg; 14299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[4*M].Re = xNeg; 14399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[4*M].Im = y; 14499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 14599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 14699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com for (i=1; i<=M; i++) 14799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com { 14899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com j = i*step; 14999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 15099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com x = armSP_FFT_S32TwiddleTable[2*j]; 15199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com y = armSP_FFT_S32TwiddleTable[2*j+1]; 15299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 15399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[i].Re = x; 15499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[i].Im = y; 15599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[2*M-i].Re = -y; 15699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[2*M-i].Im = -x; 15799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[2*M+i].Re = y; 15899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[2*M+i].Im = -x; 15999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[4*M-i].Re = -x; 16099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[4*M-i].Im = y; 16199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[4*M+i].Re = -x; 16299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[4*M+i].Im = -y; 16399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[6*M-i].Re = y; 16499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[6*M-i].Im = x; 16599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com } 16699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 16799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 16899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com } 16999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com else 17099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com { 17199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com if ((order-1) == 2) 17299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com { 17399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[0].Re = x; 17499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[0].Im = y; 17599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[1].Re = -y; 17699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[1].Im = xNeg; 17799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[2].Re = xNeg; 17899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[2].Im = y; 17999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 18099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com } 18199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com if ((order-1) == 1) 18299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com { 18399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[0].Re = x; 18499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle[0].Im = y; 18599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 18699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com } 18799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 18899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 18999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com } 19099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 19199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 19299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com /* 19399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * Now fill the last N/4 values : exp^(-j*2*PI*k/N) ; k=1,3,5,...,N/2-1 19499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * These are used for the final twiddle fix-up for converting complex to real FFT 19599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com */ 19699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 19799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com M = N>>3; 19899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com diff = 12 - order; 19999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com step = 1<<diff; 20099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 20199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle1 = pTwiddle + 3*N/8; 20299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle4 = pTwiddle1 + (N/4-1); 20399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle3 = pTwiddle1 + N/8; 20499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle2 = pTwiddle1 + (N/8-1); 20599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 20699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com x = armSP_FFT_S32TwiddleTable[0]; 20799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com y = armSP_FFT_S32TwiddleTable[1]; 20899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com xNeg = 0x7FFFFFFF; 20999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 21099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com if((order) >=3) 21199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com { 21299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 21399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 21499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com for (i=1; i<=M; i+=2 ) 21599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com { 21699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com j = i*step; 21799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 21899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com x = armSP_FFT_S32TwiddleTable[2*j]; 21999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com y = armSP_FFT_S32TwiddleTable[2*j+1]; 22099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 22199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle1[0].Re = x; 22299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle1[0].Im = y; 22399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle1 += 1; 22499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle2[0].Re = -y; 22599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle2[0].Im = -x; 22699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle2 -= 1; 22799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle3[0].Re = y; 22899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle3[0].Im = -x; 22999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle3 += 1; 23099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle4[0].Re = -x; 23199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle4[0].Im = y; 23299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle4 -= 1; 23399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 23499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com } 23599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 23699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 23799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com } 23899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com else 23999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com { 24099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com if (order == 2) 24199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com { 24299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 24399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle1[0].Re = -y; 24499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pTwiddle1[0].Im = xNeg; 24599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 24699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com } 24799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 24899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 24999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com } 25099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 25199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 25299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com /* Update the structure */ 25399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pFFTStruct->N = N; 25499b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pFFTStruct->pTwiddle = pTwiddle; 25599b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pFFTStruct->pBitRev = pBitRev; 25699b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com pFFTStruct->pBuf = pBuf; 25799b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 25899b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com return OMX_Sts_NoErr; 25999b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com} 26099b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com/***************************************************************************** 26199b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com * END OF FILE 26299b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com *****************************************************************************/ 26399b31ea5d0f4629ceddf4852f96757c9c73654artoy@google.com 264