14512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org/* 24512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 34512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * 44512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Use of this source code is governed by a BSD-style license 54512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * that can be found in the LICENSE file in the root of the source 64512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * tree. An additional intellectual property rights grant can be found 74512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * in the file PATENTS. All contributing project authors may 84512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * be found in the AUTHORS file in the root of the source tree. 94512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * 104512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Some code in this file was originally from file omxSP_FFTInit_R_S16S32.c 114512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * which was licensed as follows. 124512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * It has been relicensed with permission from the copyright holders. 134512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org */ 144512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 154512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org/* 164512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * OpenMAX DL: v1.0.2 174512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Last Modified Revision: 184512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Last Modified Date: 194512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * 204512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. 214512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org */ 224512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 235537f70dff0bb4566ebb1ec645d2020974e93493turaj@webrtc.org#include <stdint.h> 245537f70dff0bb4566ebb1ec645d2020974e93493turaj@webrtc.org 25bdf981cb383b7ec472ee86d2fedb53937285f894rtoy@google.com#include "dl/api/arm/armOMX.h" 264512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org#include "dl/api/omxtypes.h" 274512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org#include "dl/sp/api/armSP.h" 284512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org#include "dl/sp/api/omxSP.h" 294512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 304512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org/** 314512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Function: omxSP_FFTInit_R_S16 324512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * 334512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Description: 344512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Initialize the real forward-FFT specification information struct. 354512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * 364512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Remarks: 374512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * This function is used to initialize the specification structures 384512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * for functions <ippsFFTFwd_RToCCS_S16_Sfs> and 394512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * <ippsFFTInv_CCSToR_S16_Sfs>. Memory for *pFFTSpec must be 404512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * allocated prior to calling this function. The number of bytes 414512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * required for *pFFTSpec can be determined using 424512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * <FFTGetBufSize_R_S16>. 434512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * 444512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Parameters: 454512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * [in] order base-2 logarithm of the desired block length; 464512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * valid in the range [1,12]. 474512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * [out] pFFTFwdSpec pointer to the initialized specification structure. 484512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * 494512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Return Value: 504512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Standard omxError result. See enumeration for possible result codes. 514512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * 524512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org */ 534512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 544512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.orgOMXResult omxSP_FFTInit_R_S16(OMXFFTSpec_R_S16* pFFTSpec, OMX_INT order) { 554512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_INT i = 0, j = 0; 564512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_SC16 *pTwiddle = NULL, *pTwiddle1 = NULL, *pTwiddle2 = NULL; 574512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_SC16 *pTwiddle3 = NULL, *pTwiddle4 = NULL; 584512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_S16 *pBuf = NULL; 594512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_U16 *pBitRev = NULL; 604512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_U32 pTmp = 0; 614512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_INT Nby2 = 0, N = 0, M = 0, diff = 0, step = 0; 624512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_S16 x = 0, y = 0, xNeg = 0; 634512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_S32 xS32 = 0, yS32 = 0; 644512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org ARMsFFTSpec_R_SC16 *pFFTStruct = NULL; 654512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 664512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org /* Order zero not allowed */ 674512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org if (order == 0) { 684512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org return OMX_Sts_BadArgErr; 694512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org } 704512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 714512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org /* Do the initializations */ 724512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pFFTStruct = (ARMsFFTSpec_R_SC16*) pFFTSpec; 734512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org Nby2 = 1 << (order - 1); 744512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org N = Nby2 << 1; 754512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pBitRev = NULL ; /* optimized implementations don't use bitreversal */ 764512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle = (OMX_SC16*) (sizeof(ARMsFFTSpec_R_SC16) + (OMX_S8*)pFFTSpec); 774512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 784512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org /* Align to 32 byte boundary */ 795537f70dff0bb4566ebb1ec645d2020974e93493turaj@webrtc.org pTmp = ((uintptr_t)pTwiddle)&31; /* (uintptr_t)pTwiddle % 32 */ 804512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org if(pTmp != 0) { 814512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle = (OMX_SC16*) ((OMX_S8*)pTwiddle + (32 - pTmp)); 824512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org } 834512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 844512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pBuf = (OMX_S16*) (sizeof(OMX_SC16) * (5 * N / 8) + (OMX_S8*)pTwiddle); 854512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 864512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org /* Align to 32 byte boundary */ 874512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTmp = ((OMX_U32)pBuf)&31; /* (OMX_U32)pBuf % 32 */ 884512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org if(pTmp != 0) { 894512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pBuf = (OMX_S16*)((OMX_S8*)pBuf + (32 - pTmp)); 904512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org } 914512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 924512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org /* 934512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Filling Twiddle factors : exp^(-j*2*PI*k/ (N/2) ) ; k=0,1,2,...,3/4(N/2). 944512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * N/2 point complex FFT is used to compute N point real FFT. 954512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * The original twiddle table "armSP_FFT_S32TwiddleTable" is of size 964512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * (MaxSize/8 + 1). Rest of the values i.e., up to MaxSize are calculated 974512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * using the symmetries of sin and cos. 984512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * The max size of the twiddle table needed is 3/4(N/2) for a radix-4 stage. 994512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * 1004512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * W = (-2 * PI) / N 1014512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * N = 1 << order 1024512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * W = -PI >> (order - 1) 1034512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * 1044512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Note we use S32 twiddle factor table and round the values to 16 bits. 1054512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org */ 1064512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 1074512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org M = Nby2 >> 3; 1084512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org diff = 12 - (order - 1); 1094512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org step = 1 << diff; /* Step into the twiddle table for the current order */ 1104512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 1114512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org xS32 = armSP_FFT_S32TwiddleTable[0]; 1124512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org yS32 = armSP_FFT_S32TwiddleTable[1]; 1134512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org x = (xS32 + 0x8000) >> 16; 1144512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org y = (yS32 + 0x8000) >> 16; 1154512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org xNeg = 0x7FFF; 1164512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 1174512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org if((order-1) >= 3) { 1184512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org /* i = 0 case */ 1194512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[0].Re = x; 1204512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[0].Im = y; 1214512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[2 * M].Re = -y; 1224512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[2 * M].Im = xNeg; 1234512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[4 * M].Re = xNeg; 1244512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[4 * M].Im = y; 1254512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 1264512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org for (i=1; i<=M; i++){ 1274512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_S16 x_neg = 0, y_neg = 0; 1284512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org j = i * step; 1294512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 1304512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org xS32 = armSP_FFT_S32TwiddleTable[2 * j]; 1314512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org yS32 = armSP_FFT_S32TwiddleTable[2 * j + 1]; 1324512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org x = (xS32 + 0x8000) >> 16; 1334512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org y = (yS32 + 0x8000) >> 16; 1344512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org /* |x_neg = -x| doesn't work when x is 0x8000. */ 1354512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org x_neg = (-(xS32 + 0x8000)) >> 16; 1364512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org y_neg = (-(yS32 + 0x8000)) >> 16; 1374512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 1384512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[i].Re = x; 1394512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[i].Im = y; 1404512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[2 * M - i].Re = y_neg; 1414512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[2 * M - i].Im = x_neg; 1424512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[2 * M + i].Re = y; 1434512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[2 * M + i].Im = x_neg; 1444512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[4 * M - i].Re = x_neg; 1454512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[4 * M - i].Im = y; 1464512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[4 * M + i].Re = x_neg; 1474512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[4 * M + i].Im = y_neg; 1484512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[6 * M - i].Re = y; 1494512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[6 * M - i].Im = x; 1504512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org } 1514512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org } 1524512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org else { 1534512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org if ((order - 1) == 2) { 1544512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[0].Re = x; 1554512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[0].Im = y; 1564512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[1].Re = -y; 1574512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[1].Im = xNeg; 1584512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[2].Re = xNeg; 1594512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[2].Im = y; 1604512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org } 1614512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org if ((order-1) == 1) { 1624512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[0].Re = x; 1634512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle[0].Im = y; 1644512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org } 1654512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org } 1664512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 1674512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org /* 1684512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * Now fill the last N/4 values : exp^(-j*2*PI*k/N); k=1,3,5,...,N/2-1. 1694512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * These are used for the final twiddle fix-up for converting complex to 1704512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * real FFT. 1714512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org */ 1724512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 1734512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org M = N >> 3; 1744512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org diff = 12 - order; 1754512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org step = 1 << diff; 1764512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 1774512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle1 = pTwiddle + 3 * N / 8; 1784512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle4 = pTwiddle1 + (N / 4 - 1); 1794512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle3 = pTwiddle1 + N / 8; 1804512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle2 = pTwiddle1 + (N / 8 - 1); 1814512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 1824512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org xS32 = armSP_FFT_S32TwiddleTable[0]; 1834512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org yS32 = armSP_FFT_S32TwiddleTable[1]; 1844512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org x = (xS32 + 0x8000) >> 16; 1854512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org y = (yS32 + 0x8000) >> 16; 1864512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org xNeg = 0x7FFF; 1874512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 1884512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org if((order) >= 3) { 1894512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org for (i = 1; i <= M; i += 2 ) { 1904512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org OMX_S16 x_neg = 0, y_neg = 0; 1914512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 1924512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org j = i*step; 1934512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 1944512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org xS32 = armSP_FFT_S32TwiddleTable[2 * j]; 1954512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org yS32 = armSP_FFT_S32TwiddleTable[2 * j + 1]; 1964512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org x = (xS32 + 0x8000) >> 16; 1974512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org y = (yS32 + 0x8000) >> 16; 1984512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org /* |x_neg = -x| doesn't work when x is 0x8000. */ 1994512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org x_neg = (-(xS32 + 0x8000)) >> 16; 2004512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org y_neg = (-(yS32 + 0x8000)) >> 16; 2014512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 2024512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle1[0].Re = x; 2034512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle1[0].Im = y; 2044512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle1 += 1; 2054512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle2[0].Re = y_neg; 2064512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle2[0].Im = x_neg; 2074512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle2 -= 1; 2084512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle3[0].Re = y; 2094512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle3[0].Im = x_neg; 2104512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle3 += 1; 2114512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle4[0].Re = x_neg; 2124512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle4[0].Im = y; 2134512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle4 -= 1; 2144512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org } 2154512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org } 2164512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org else { 2174512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org if (order == 2) { 2184512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle1[0].Re = -y; 2194512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pTwiddle1[0].Im = xNeg; 2204512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org } 2214512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org } 2224512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 2234512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org /* Update the structure */ 2244512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pFFTStruct->N = N; 2254512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pFFTStruct->pTwiddle = pTwiddle; 2264512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pFFTStruct->pBitRev = pBitRev; 2274512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org pFFTStruct->pBuf = pBuf; 2284512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 2294512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org return OMX_Sts_NoErr; 2304512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org} 2314512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org/***************************************************************************** 2324512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org * END OF FILE 2334512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org *****************************************************************************/ 2344512d0eab7697423f5334ad79588f853c7bd80bbkma@webrtc.org 235