Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(134)

Side by Side Diff: Source/platform/audio/mac/FFTFrameMac.cpp

Issue 176843021: Remove redundancies of multiply() in FFTFrame. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/platform/audio/ipp/FFTFrameIPP.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 // Copy/setup frame data 91 // Copy/setup frame data
92 unsigned nbytes = sizeof(float) * m_FFTSize; 92 unsigned nbytes = sizeof(float) * m_FFTSize;
93 memcpy(realData(), frame.m_frame.realp, nbytes); 93 memcpy(realData(), frame.m_frame.realp, nbytes);
94 memcpy(imagData(), frame.m_frame.imagp, nbytes); 94 memcpy(imagData(), frame.m_frame.imagp, nbytes);
95 } 95 }
96 96
97 FFTFrame::~FFTFrame() 97 FFTFrame::~FFTFrame()
98 { 98 {
99 } 99 }
100 100
101 void FFTFrame::multiply(const FFTFrame& frame)
102 {
103 FFTFrame& frame1 = *this;
104 const FFTFrame& frame2 = frame;
105
106 float* realP1 = frame1.realData();
107 float* imagP1 = frame1.imagData();
108 const float* realP2 = frame2.realData();
109 const float* imagP2 = frame2.imagData();
110
111 unsigned halfSize = m_FFTSize / 2;
112 float real0 = realP1[0];
113 float imag0 = imagP1[0];
114
115 // Complex multiply
116 VectorMath::zvmul(realP1, imagP1, realP2, imagP2, realP1, imagP1, halfSize);
117
118 // Multiply the packed DC/nyquist component
119 realP1[0] = real0 * realP2[0];
120 imagP1[0] = imag0 * imagP2[0];
121 }
122
123 void FFTFrame::doFFT(const float* data) 101 void FFTFrame::doFFT(const float* data)
124 { 102 {
125 AudioFloatArray scaledData(m_FFTSize); 103 AudioFloatArray scaledData(m_FFTSize);
126 // veclib fft returns a result that is twice as large as would be expected. Compensate for that 104 // veclib fft returns a result that is twice as large as would be expected. Compensate for that
127 // by scaling the input by half so the FFT has the correct scaling. 105 // by scaling the input by half so the FFT has the correct scaling.
128 float scale = 0.5f; 106 float scale = 0.5f;
129 VectorMath::vsmul(data, 1, &scale, scaledData.data(), 1, m_FFTSize); 107 VectorMath::vsmul(data, 1, &scale, scaledData.data(), 1, m_FFTSize);
130 108
131 vDSP_ctoz((DSPComplex*)scaledData.data(), 2, &m_frame, 1, m_FFTSize / 2); 109 vDSP_ctoz((DSPComplex*)scaledData.data(), 2, &m_frame, 1, m_FFTSize / 2);
132 vDSP_fft_zrip(m_FFTSetup, &m_frame, 1, m_log2FFTSize, FFT_FORWARD); 110 vDSP_fft_zrip(m_FFTSetup, &m_frame, 1, m_log2FFTSize, FFT_FORWARD);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 float* FFTFrame::imagData() const 161 float* FFTFrame::imagData() const
184 { 162 {
185 return m_frame.imagp; 163 return m_frame.imagp;
186 } 164 }
187 165
188 } // namespace WebCore 166 } // namespace WebCore
189 167
190 #endif // #if OS(MACOSX) 168 #endif // #if OS(MACOSX)
191 169
192 #endif // ENABLE(WEB_AUDIO) 170 #endif // ENABLE(WEB_AUDIO)
OLDNEW
« no previous file with comments | « Source/platform/audio/ipp/FFTFrameIPP.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698