Skip to content

Commit

Permalink
- replaced our buggy fft implementation with rfft
Browse files Browse the repository at this point in the history
  • Loading branch information
Memphiz authored and popcornmix committed May 15, 2015
1 parent 3e926e7 commit 8815bf1
Show file tree
Hide file tree
Showing 11 changed files with 107 additions and 569 deletions.
58 changes: 48 additions & 10 deletions Kodi.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ DIRECTORY_ARCHIVES=$(DVDPLAYER_ARCHIVES) \
lib/SlingboxLib/SlingboxLib.a \
xbmc/addons/addons.a \
xbmc/cdrip/cdrip.a \
xbmc/contrib/kissfft/kissfft.a \
xbmc/cores/AudioEngine/audioengine.a \
xbmc/cores/DllLoader/dllloader.a \
xbmc/cores/DllLoader/exports/exports.a \
Expand Down
23 changes: 17 additions & 6 deletions project/VS2010Express/XBMC.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,14 @@
<ClCompile Include="..\..\xbmc\BackgroundInfoLoader.cpp" />
<ClCompile Include="..\..\xbmc\CompileInfo.cpp" />
<ClCompile Include="..\..\xbmc\ContextMenuManager.cpp" />
<ClCompile Include="..\..\xbmc\contrib\kissfft\kiss_fft.c">
<CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
<CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsCpp</CompileAs>
</ClCompile>
<ClCompile Include="..\..\xbmc\contrib\kissfft\kiss_fftr.c">
<CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
<CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsCpp</CompileAs>
</ClCompile>
<ClCompile Include="..\..\xbmc\cores\AudioEngine\AEFactory.cpp" />
<ClCompile Include="..\..\xbmc\cores\AudioEngine\AEResampleFactory.cpp" />
<ClCompile Include="..\..\xbmc\cores\AudioEngine\AESinkFactory.cpp" />
Expand Down Expand Up @@ -826,6 +834,9 @@
<ClInclude Include="..\..\xbmc\ApplicationPlayer.h" />
<ClInclude Include="..\..\xbmc\AppParamParser.h" />
<ClInclude Include="..\..\xbmc\CompileInfo.h" />
<ClInclude Include="..\..\xbmc\contrib\kissfft\kiss_fft.h" />
<ClInclude Include="..\..\xbmc\contrib\kissfft\kiss_fftr.h" />
<ClInclude Include="..\..\xbmc\contrib\kissfft\_kiss_fft_guts.h" />
<ClInclude Include="..\..\xbmc\cores\DataCacheCore.h" />
<ClInclude Include="..\..\xbmc\cores\AudioEngine\AEFactory.h" />
<ClInclude Include="..\..\xbmc\cores\AudioEngine\AEResampleFactory.h" />
Expand Down Expand Up @@ -1024,6 +1035,7 @@
<ClInclude Include="..\..\xbmc\utils\Locale.h" />
<ClInclude Include="..\..\xbmc\utils\params_check_macros.h" />
<ClInclude Include="..\..\xbmc\utils\ProgressJob.h" />
<ClInclude Include="..\..\xbmc\utils\rfft.h" />
<ClInclude Include="..\..\xbmc\utils\RssManager.h" />
<ClInclude Include="..\..\xbmc\utils\Speed.h" />
<ClInclude Include="..\..\xbmc\utils\StringValidation.h" />
Expand Down Expand Up @@ -1147,6 +1159,7 @@
<ClCompile Include="..\..\xbmc\utils\LegacyPathTranslation.cpp" />
<ClCompile Include="..\..\xbmc\utils\Locale.cpp" />
<ClCompile Include="..\..\xbmc\utils\ProgressJob.cpp" />
<ClCompile Include="..\..\xbmc\utils\rfft.cpp" />
<ClCompile Include="..\..\xbmc\utils\RssManager.cpp" />
<ClCompile Include="..\..\xbmc\utils\Speed.cpp" />
<ClCompile Include="..\..\xbmc\utils\StringValidation.cpp" />
Expand All @@ -1159,6 +1172,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\xbmc\utils\test\Testrfft.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\xbmc\utils\test\TestUrlOptions.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
Expand Down Expand Up @@ -1195,7 +1212,6 @@
<ClCompile Include="..\..\xbmc\utils\DatabaseUtils.cpp" />
<ClCompile Include="..\..\xbmc\utils\EndianSwap.cpp" />
<ClCompile Include="..\..\xbmc\utils\Fanart.cpp" />
<ClCompile Include="..\..\xbmc\utils\fft.cpp" />
<ClCompile Include="..\..\xbmc\utils\FileOperationJob.cpp" />
<ClCompile Include="..\..\xbmc\utils\FileUtils.cpp" />
<ClCompile Include="..\..\xbmc\utils\fstrcmp.c">
Expand Down Expand Up @@ -1425,10 +1441,6 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\xbmc\utils\test\Testfft.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\xbmc\utils\TimeSmoother.cpp" />
<ClCompile Include="..\..\xbmc\utils\TimeUtils.cpp" />
<ClCompile Include="..\..\xbmc\utils\URIUtils.cpp" />
Expand Down Expand Up @@ -2053,7 +2065,6 @@
<ClInclude Include="..\..\xbmc\utils\DatabaseUtils.h" />
<ClInclude Include="..\..\xbmc\utils\EndianSwap.h" />
<ClInclude Include="..\..\xbmc\utils\Fanart.h" />
<ClInclude Include="..\..\xbmc\utils\fft.h" />
<ClInclude Include="..\..\xbmc\utils\FileOperationJob.h" />
<ClInclude Include="..\..\xbmc\utils\FileUtils.h" />
<ClInclude Include="..\..\xbmc\utils\fstrcmp.h" />
Expand Down
39 changes: 30 additions & 9 deletions project/VS2010Express/XBMC.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,12 @@
<Filter Include="interfaces\legacy\wsgi">
<UniqueIdentifier>{4750236a-887e-40c1-af3e-1e095f5960e0}</UniqueIdentifier>
</Filter>
<Filter Include="contrib">
<UniqueIdentifier>{9c3139a5-4a8a-4533-af30-cd79ee250997}</UniqueIdentifier>
</Filter>
<Filter Include="contrib\kissfft">
<UniqueIdentifier>{d811b1d1-5e81-4d89-9173-f02818c897ab}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\xbmc\win32\pch.cpp">
Expand Down Expand Up @@ -1387,9 +1393,6 @@
<ClCompile Include="..\..\xbmc\utils\Fanart.cpp">
<Filter>utils</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\utils\fft.cpp">
<Filter>utils</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\utils\FileOperationJob.cpp">
<Filter>utils</Filter>
</ClCompile>
Expand Down Expand Up @@ -2371,9 +2374,6 @@
<ClCompile Include="..\..\xbmc\utils\test\Testfastmemcpy.cpp">
<Filter>utils\test</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\utils\test\Testfft.cpp">
<Filter>utils\test</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\utils\test\TestFileOperationJob.cpp">
<Filter>utils\test</Filter>
</ClCompile>
Expand Down Expand Up @@ -3087,6 +3087,18 @@
<ClCompile Include="..\..\xbmc\test\TestUtil.cpp">
<Filter>test</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\utils\rfft.cpp">
<Filter>utils</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\utils\test\Testrfft.cpp">
<Filter>utils\test</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\contrib\kissfft\kiss_fft.c">
<Filter>contrib\kissfft</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\contrib\kissfft\kiss_fftr.c">
<Filter>contrib\kissfft</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\xbmc\win32\pch.h">
Expand Down Expand Up @@ -4297,9 +4309,6 @@
<ClInclude Include="..\..\xbmc\utils\Fanart.h">
<Filter>utils</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\utils\fft.h">
<Filter>utils</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\utils\FileOperationJob.h">
<Filter>utils</Filter>
</ClInclude>
Expand Down Expand Up @@ -5971,6 +5980,18 @@
<ClInclude Include="..\..\xbmc\music\EmbeddedArt.h">
<Filter>music</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\utils\rfft.h">
<Filter>utils</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\contrib\kissfft\_kiss_fft_guts.h">
<Filter>contrib\kissfft</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\contrib\kissfft\kiss_fft.h">
<Filter>contrib\kissfft</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\contrib\kissfft\kiss_fftr.h">
<Filter>contrib\kissfft</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\xbmc\win32\XBMC_PC.rc">
Expand Down
18 changes: 5 additions & 13 deletions xbmc/addons/Visualisation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
*/
#include "system.h"
#include "Visualisation.h"
#include "utils/fft.h"
#include "GUIInfoManager.h"
#include "Application.h"
#include "guilib/GraphicContext.h"
Expand Down Expand Up @@ -278,21 +277,14 @@ void CVisualisation::OnAudioData(const float* pAudioData, int iAudioDataLength)
if (m_bWantsFreq)
{
const float *psAudioData = ptrAudioBuffer->Get();
memcpy(m_fFreq, psAudioData, AUDIO_BUFFER_SIZE * sizeof(float));

// FFT the data
twochanwithwindow(m_fFreq, AUDIO_BUFFER_SIZE);
if (!m_transform)
m_transform.reset(new RFFT(AUDIO_BUFFER_SIZE/2, false)); // half due to stereo

// Normalize the data
float fMinData = (float)AUDIO_BUFFER_SIZE * AUDIO_BUFFER_SIZE * 3 / 8 * 0.5 * 0.5; // 3/8 for the Hann window, 0.5 as minimum amplitude
float fInvMinData = 1.0f/fMinData;
for (int i = 0; i < AUDIO_BUFFER_SIZE + 2; i++)
{
m_fFreq[i] *= fInvMinData;
}
m_transform->calc(psAudioData, m_fFreq);

// Transfer data to our visualisation
AudioData(psAudioData, AUDIO_BUFFER_SIZE, m_fFreq, AUDIO_BUFFER_SIZE);
AudioData(psAudioData, AUDIO_BUFFER_SIZE, m_fFreq, AUDIO_BUFFER_SIZE/2); // half due to complex-conjugate
}
else
{ // Transfer data to our visualisation
Expand Down Expand Up @@ -327,7 +319,7 @@ void CVisualisation::ClearBuffers()
delete pAudioBuffer;
m_vecBuffers.pop_front();
}
for (int j = 0; j < AUDIO_BUFFER_SIZE*2; j++)
for (int j = 0; j < AUDIO_BUFFER_SIZE; j++)
{
m_fFreq[j] = 0.0f;
}
Expand Down
5 changes: 4 additions & 1 deletion xbmc/addons/Visualisation.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
#include "cores/IAudioCallback.h"
#include "include/xbmc_vis_types.h"
#include "guilib/IRenderingCallback.h"
#include "utils/rfft.h"

#include <algorithm>
#include <map>
#include <list>
#include <memory>
Expand Down Expand Up @@ -102,8 +104,9 @@ namespace ADDON
std::list<CAudioBuffer*> m_vecBuffers;
int m_iNumBuffers; // Number of Audio buffers
bool m_bWantsFreq;
float m_fFreq[2*AUDIO_BUFFER_SIZE]; // Frequency data
float m_fFreq[AUDIO_BUFFER_SIZE]; // Frequency data
bool m_bCalculate_Freq; // True if the vis wants freq data
std::unique_ptr<RFFT> m_transform;

// track information
std::string m_AlbumThumb;
Expand Down
2 changes: 1 addition & 1 deletion xbmc/utils/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ SRCS += fastmemcpy-arm.S
SRCS += FileOperationJob.cpp
SRCS += FileUtils.cpp
SRCS += fstrcmp.c
SRCS += fft.cpp
SRCS += GLUtils.cpp
SRCS += GroupUtils.cpp
SRCS += HTMLUtil.cpp
Expand All @@ -49,6 +48,7 @@ SRCS += POUtils.cpp
SRCS += ProgressJob.cpp
SRCS += RecentlyAddedJob.cpp
SRCS += RegExp.cpp
SRCS += rfft.cpp
SRCS += RingBuffer.cpp
SRCS += RssManager.cpp
SRCS += RssReader.cpp
Expand Down
Loading

0 comments on commit 8815bf1

Please sign in to comment.