From aba523d14e16d5bcca0e29f29ad9ecf3562093cf Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 22 May 2020 17:23:04 +0300 Subject: [PATCH 01/11] submodules --- .gitmodules | 12 ++++++++++++ ogg | 1 + opus | 1 + opusfile | 1 + 4 files changed, 15 insertions(+) create mode 160000 ogg create mode 160000 opus create mode 160000 opusfile diff --git a/.gitmodules b/.gitmodules index fec30cac..bf1e33a5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,15 @@ [submodule "librw"] path = librw url = https://github.com/aap/librw +[submodule "opus"] + path = opus + url = https://github.com/xiph/opus.git + branch = master +[submodule "opusfile"] + path = opusfile + url = https://github.com/xiph/opusfile.git + branch = master +[submodule "ogg"] + path = ogg + url = https://github.com/xiph/ogg.git + branch = master diff --git a/ogg b/ogg new file mode 160000 index 00000000..1e8d7cce --- /dev/null +++ b/ogg @@ -0,0 +1 @@ +Subproject commit 1e8d7cce266df61afc9d35db0283bbacc0237aba diff --git a/opus b/opus new file mode 160000 index 00000000..8aa77672 --- /dev/null +++ b/opus @@ -0,0 +1 @@ +Subproject commit 8aa7767207b1e3633004c26aecbb67d1c5118485 diff --git a/opusfile b/opusfile new file mode 160000 index 00000000..eb252537 --- /dev/null +++ b/opusfile @@ -0,0 +1 @@ +Subproject commit eb252537f374e30f7b68b84223c5a2303c05eca2 From 0af4d57408842d501af2fce4617e19a3bf9466eb Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 22 May 2020 17:40:19 +0300 Subject: [PATCH 02/11] opus support --- premake5.lua | 29 ++++++++++ src/audio/oal/stream.cpp | 110 +++++++++++++++++++++++++++++++++++++- src/audio/sampman.h | 37 +++++++++++++ src/audio/sampman_oal.cpp | 64 ++++++++++++++++++++-- 4 files changed, 235 insertions(+), 5 deletions(-) diff --git a/premake5.lua b/premake5.lua index c8494884..c6551a21 100644 --- a/premake5.lua +++ b/premake5.lua @@ -17,6 +17,11 @@ newoption { description = "Build and use librw from this solution" } +newoption { + trigger = "with-opus", + description = "Build with opus" +} + if(_OPTIONS["with-librw"]) then Librw = "librw" else @@ -185,8 +190,25 @@ project "re3" includedirs { "milessdk/include" } includedirs { "eax" } + + includedirs { "openal-soft/include" } + includedirs { "mpg123/include" } + includedirs { "libsndfile/include" } + includedirs { "ogg/include" } + includedirs { "opus/include" } + includedirs { "opusfile/include" } libdirs { "milessdk/lib" } + libdirs { "openal-soft/libs/Win32" } + libdirs { "mpg123/lib" } + libdirs { "libsndfile/lib" } + if _OPTIONS["with-opus"] then + filter "platforms:win*" + libdirs { "ogg/win32/VS2015/Win32/%{cfg.buildcfg}" } + libdirs { "opus/win32/VS2015/Win32/%{cfg.buildcfg}" } + libdirs { "opusfile/win32/VS2015/Win32/Release-NoHTTP" } + filter {} + end if(os.getenv("GTA_III_RE_DIR")) then setpaths("$(GTA_III_RE_DIR)/", "%(cfg.buildtarget.name)", "") @@ -202,6 +224,13 @@ project "re3" filter "platforms:linux*" defines { "OPENAL" } links { "openal", "mpg123", "sndfile", "pthread" } + + if _OPTIONS["with-opus"] then + filter {} + links { "libogg" } + links { "opus" } + links { "opusfile" } + end filter "platforms:*RW33*" staticruntime "on" diff --git a/src/audio/oal/stream.cpp b/src/audio/oal/stream.cpp index 5a9c7d7d..21e4d8c6 100644 --- a/src/audio/oal/stream.cpp +++ b/src/audio/oal/stream.cpp @@ -4,8 +4,9 @@ #include "common.h" #include "sampman.h" -#include -#include +#ifdef AUDIO_OPUS +#include +#else #ifdef _WIN32 typedef long ssize_t; #pragma comment( lib, "libsndfile-1.lib" ) @@ -13,7 +14,11 @@ typedef long ssize_t; #else #include "crossplatform.h" #endif +#include +#include +#endif +#ifndef AUDIO_OPUS class CSndFile : public IDecoder { SNDFILE *m_pfSound; @@ -170,15 +175,111 @@ public: return size; } }; +#else +class COpusFile : public IDecoder +{ + OggOpusFile *m_FileH; + bool m_bOpened; + uint32 m_nRate; + uint32 m_nChannels; +public: + _declspec(noinline) COpusFile(const char *path) : m_FileH(nil), + m_bOpened(false), + m_nRate(0), + m_nChannels(0) + { + int ret; + m_FileH = op_open_file(path, &ret); + + if (m_FileH) { + m_nChannels = op_head(m_FileH, 0)->channel_count; + m_nRate = op_head(m_FileH, 0)->input_sample_rate; + auto tags = op_tags(m_FileH, 0); + for (int i = 0; i < tags->comments; i++) { + if (strncmp(tags->user_comments[i], "SAMPLERATE", sizeof("SAMPLERATE")-1) == 0) + { + sscanf(tags->user_comments[i], "SAMPLERATE=%i", &m_nRate); + break; + } + } + + m_bOpened = true; + } + } + + ~COpusFile() + { + if (m_FileH) + { + op_free(m_FileH); + m_FileH = nil; + } + } + + bool IsOpened() + { + return m_bOpened; + } + + uint32 GetSampleSize() + { + return sizeof(uint16); + } + + uint32 GetSampleCount() + { + if ( !IsOpened() ) return 0; + return op_pcm_total(m_FileH, 0); + } + + uint32 GetSampleRate() + { + return m_nRate; + } + + uint32 GetChannels() + { + return m_nChannels; + } + + void Seek(uint32 milliseconds) + { + if ( !IsOpened() ) return; + op_pcm_seek(m_FileH, ms2samples(milliseconds) * GetSampleSize()); + } + + uint32 Tell() + { + if ( !IsOpened() ) return 0; + return samples2ms(op_pcm_tell(m_FileH)/GetSampleSize()); + } + + uint32 Decode(void *buffer) + { + if ( !IsOpened() ) return 0; + + int size = op_read(m_FileH, (opus_int16 *)buffer, GetBufferSamples(), NULL); + + if (size < 0) + return 0; + + return size * m_nChannels * GetSampleSize(); + } +}; +#endif void CStream::Initialise() { +#ifndef AUDIO_OPUS mpg123_init(); +#endif } void CStream::Terminate() { +#ifndef AUDIO_OPUS mpg123_exit(); +#endif } CStream::CStream(char *filename, ALuint &source, ALuint (&buffers)[NUM_STREAMBUFFERS]) : @@ -213,10 +314,15 @@ CStream::CStream(char *filename, ALuint &source, ALuint (&buffers)[NUM_STREAMBUF DEV("Stream %s\n", m_aFilename); +#ifndef AUDIO_OPUS if (!strcasecmp(&m_aFilename[strlen(m_aFilename) - strlen(".mp3")], ".mp3")) m_pSoundFile = new CMP3File(m_aFilename); else if (!strcasecmp(&m_aFilename[strlen(m_aFilename) - strlen(".wav")], ".wav")) m_pSoundFile = new CSndFile(m_aFilename); +#else + if (!strcasecmp(&m_aFilename[strlen(m_aFilename) - strlen(".opus")], ".opus")) + m_pSoundFile = new COpusFile(m_aFilename); +#endif else m_pSoundFile = nil; ASSERT(m_pSoundFile != nil); diff --git a/src/audio/sampman.h b/src/audio/sampman.h index d3c82943..3eeff476 100644 --- a/src/audio/sampman.h +++ b/src/audio/sampman.h @@ -144,6 +144,42 @@ public: extern cSampleManager SampleManager; extern uint32 BankStartOffset[MAX_SAMPLEBANKS]; +#ifdef AUDIO_OPUS +static char StreamedNameTable[][25] = { + "AUDIO\\HEAD.OPUS", "AUDIO\\CLASS.OPUS", "AUDIO\\KJAH.OPUS", "AUDIO\\RISE.OPUS", "AUDIO\\LIPS.OPUS", "AUDIO\\GAME.OPUS", + "AUDIO\\MSX.OPUS", "AUDIO\\FLASH.OPUS", "AUDIO\\CHAT.OPUS", "AUDIO\\HEAD.OPUS", "AUDIO\\POLICE.OPUS", "AUDIO\\CITY.OPUS", + "AUDIO\\WATER.OPUS", "AUDIO\\COMOPEN.OPUS", "AUDIO\\SUBOPEN.OPUS", "AUDIO\\JB.OPUS", "AUDIO\\BET.OPUS", "AUDIO\\L1_LG.OPUS", + "AUDIO\\L2_DSB.OPUS", "AUDIO\\L3_DM.OPUS", "AUDIO\\L4_PAP.OPUS", "AUDIO\\L5_TFB.OPUS", "AUDIO\\J0_DM2.OPUS", "AUDIO\\J1_LFL.OPUS", + "AUDIO\\J2_KCL.OPUS", "AUDIO\\J3_VH.OPUS", "AUDIO\\J4_ETH.OPUS", "AUDIO\\J5_DST.OPUS", "AUDIO\\J6_TBJ.OPUS", "AUDIO\\T1_TOL.OPUS", + "AUDIO\\T2_TPU.OPUS", "AUDIO\\T3_MAS.OPUS", "AUDIO\\T4_TAT.OPUS", "AUDIO\\T5_BF.OPUS", "AUDIO\\S0_MAS.OPUS", "AUDIO\\S1_PF.OPUS", + "AUDIO\\S2_CTG.OPUS", "AUDIO\\S3_RTC.OPUS", "AUDIO\\S5_LRQ.OPUS", "AUDIO\\S4_BDBA.OPUS", "AUDIO\\S4_BDBB.OPUS", "AUDIO\\S2_CTG2.OPUS", + "AUDIO\\S4_BDBD.OPUS", "AUDIO\\S5_LRQB.OPUS", "AUDIO\\S5_LRQC.OPUS", "AUDIO\\A1_SSO.OPUS", "AUDIO\\A2_PP.OPUS", "AUDIO\\A3_SS.OPUS", + "AUDIO\\A4_PDR.OPUS", "AUDIO\\A5_K2FT.OPUS", "AUDIO\\K1_KBO.OPUS", "AUDIO\\K2_GIS.OPUS", "AUDIO\\K3_DS.OPUS", "AUDIO\\K4_SHI.OPUS", + "AUDIO\\K5_SD.OPUS", "AUDIO\\R0_PDR2.OPUS", "AUDIO\\R1_SW.OPUS", "AUDIO\\R2_AP.OPUS", "AUDIO\\R3_ED.OPUS", "AUDIO\\R4_GF.OPUS", + "AUDIO\\R5_PB.OPUS", "AUDIO\\R6_MM.OPUS", "AUDIO\\D1_STOG.OPUS", "AUDIO\\D2_KK.OPUS", "AUDIO\\D3_ADO.OPUS", "AUDIO\\D5_ES.OPUS", + "AUDIO\\D7_MLD.OPUS", "AUDIO\\D4_GTA.OPUS", "AUDIO\\D4_GTA2.OPUS", "AUDIO\\D6_STS.OPUS", "AUDIO\\A6_BAIT.OPUS", "AUDIO\\A7_ETG.OPUS", + "AUDIO\\A8_PS.OPUS", "AUDIO\\A9_ASD.OPUS", "AUDIO\\K4_SHI2.OPUS", "AUDIO\\C1_TEX.OPUS", "AUDIO\\EL_PH1.OPUS", "AUDIO\\EL_PH2.OPUS", + "AUDIO\\EL_PH3.OPUS", "AUDIO\\EL_PH4.OPUS", "AUDIO\\YD_PH1.OPUS", "AUDIO\\YD_PH2.OPUS", "AUDIO\\YD_PH3.OPUS", "AUDIO\\YD_PH4.OPUS", + "AUDIO\\HD_PH1.OPUS", "AUDIO\\HD_PH2.OPUS", "AUDIO\\HD_PH3.OPUS", "AUDIO\\HD_PH4.OPUS", "AUDIO\\HD_PH5.OPUS", "AUDIO\\MT_PH1.OPUS", + "AUDIO\\MT_PH2.OPUS", "AUDIO\\MT_PH3.OPUS", "AUDIO\\MT_PH4.OPUS", "AUDIO\\MISCOM.OPUS", "AUDIO\\END.OPUS", "AUDIO\\lib_a1.OPUS", + "AUDIO\\lib_a2.OPUS", "AUDIO\\lib_a.OPUS", "AUDIO\\lib_b.OPUS", "AUDIO\\lib_c.OPUS", "AUDIO\\lib_d.OPUS", "AUDIO\\l2_a.OPUS", + "AUDIO\\j4t_1.OPUS", "AUDIO\\j4t_2.OPUS", "AUDIO\\j4t_3.OPUS", "AUDIO\\j4t_4.OPUS", "AUDIO\\j4_a.OPUS", "AUDIO\\j4_b.OPUS", + "AUDIO\\j4_c.OPUS", "AUDIO\\j4_d.OPUS", "AUDIO\\j4_e.OPUS", "AUDIO\\j4_f.OPUS", "AUDIO\\j6_1.OPUS", "AUDIO\\j6_a.OPUS", + "AUDIO\\j6_b.OPUS", "AUDIO\\j6_c.OPUS", "AUDIO\\j6_d.OPUS", "AUDIO\\t4_a.OPUS", "AUDIO\\s1_a.OPUS", "AUDIO\\s1_a1.OPUS", + "AUDIO\\s1_b.OPUS", "AUDIO\\s1_c.OPUS", "AUDIO\\s1_c1.OPUS", "AUDIO\\s1_d.OPUS", "AUDIO\\s1_e.OPUS", "AUDIO\\s1_f.OPUS", + "AUDIO\\s1_g.OPUS", "AUDIO\\s1_h.OPUS", "AUDIO\\s1_i.OPUS", "AUDIO\\s1_j.OPUS", "AUDIO\\s1_k.OPUS", "AUDIO\\s1_l.OPUS", + "AUDIO\\s3_a.OPUS", "AUDIO\\s3_b.OPUS", "AUDIO\\el3_a.OPUS", "AUDIO\\mf1_a.OPUS", "AUDIO\\mf2_a.OPUS", "AUDIO\\mf3_a.OPUS", + "AUDIO\\mf3_b.OPUS", "AUDIO\\mf3_b1.OPUS", "AUDIO\\mf3_c.OPUS", "AUDIO\\mf4_a.OPUS", "AUDIO\\mf4_b.OPUS", "AUDIO\\mf4_c.OPUS", + "AUDIO\\a1_a.OPUS", "AUDIO\\a3_a.OPUS", "AUDIO\\a5_a.OPUS", "AUDIO\\a4_a.OPUS", "AUDIO\\a4_b.OPUS", "AUDIO\\a4_c.OPUS", + "AUDIO\\a4_d.OPUS", "AUDIO\\k1_a.OPUS", "AUDIO\\k3_a.OPUS", "AUDIO\\r1_a.OPUS", "AUDIO\\r2_a.OPUS", "AUDIO\\r2_b.OPUS", + "AUDIO\\r2_c.OPUS", "AUDIO\\r2_d.OPUS", "AUDIO\\r2_e.OPUS", "AUDIO\\r2_f.OPUS", "AUDIO\\r2_g.OPUS", "AUDIO\\r2_h.OPUS", + "AUDIO\\r5_a.OPUS", "AUDIO\\r6_a.OPUS", "AUDIO\\r6_a1.OPUS", "AUDIO\\r6_b.OPUS", "AUDIO\\lo2_a.OPUS", "AUDIO\\lo6_a.OPUS", + "AUDIO\\yd2_a.OPUS", "AUDIO\\yd2_b.OPUS", "AUDIO\\yd2_c.OPUS", "AUDIO\\yd2_c1.OPUS", "AUDIO\\yd2_d.OPUS", "AUDIO\\yd2_e.OPUS", + "AUDIO\\yd2_f.OPUS", "AUDIO\\yd2_g.OPUS", "AUDIO\\yd2_h.OPUS", "AUDIO\\yd2_ass.OPUS", "AUDIO\\yd2_ok.OPUS", "AUDIO\\h5_a.OPUS", + "AUDIO\\h5_b.OPUS", "AUDIO\\h5_c.OPUS", "AUDIO\\ammu_a.OPUS", "AUDIO\\ammu_b.OPUS", "AUDIO\\ammu_c.OPUS", "AUDIO\\door_1.OPUS", + "AUDIO\\door_2.OPUS", "AUDIO\\door_3.OPUS", "AUDIO\\door_4.OPUS", "AUDIO\\door_5.OPUS", "AUDIO\\door_6.OPUS", "AUDIO\\t3_a.OPUS", + "AUDIO\\t3_b.OPUS", "AUDIO\\t3_c.OPUS", "AUDIO\\k1_b.OPUS", "AUDIO\\cat1.OPUS"}; +#else static char StreamedNameTable[][25]= { "AUDIO\\HEAD.WAV", @@ -343,3 +379,4 @@ static char StreamedNameTable[][25]= "AUDIO\\k1_b.WAV", "AUDIO\\cat1.WAV" }; +#endif \ No newline at end of file diff --git a/src/audio/sampman_oal.cpp b/src/audio/sampman_oal.cpp index 30efd7f5..d8d7ac24 100644 --- a/src/audio/sampman_oal.cpp +++ b/src/audio/sampman_oal.cpp @@ -27,6 +27,9 @@ #include "MusicManager.h" #include "Frontend.h" #include "Timer.h" +#ifdef AUDIO_OPUS +#include +#endif //TODO: fix eax3 reverb //TODO: max channals @@ -42,6 +45,10 @@ bool _bSampmanInitialised = false; uint32 BankStartOffset[MAX_SAMPLEBANKS]; +#ifdef AUDIO_OPUS +OggOpusFile *opusSFX; +#endif + int prevprovider=-1; int curprovider=-1; int usingEAX=0; @@ -444,6 +451,8 @@ int8 cSampleManager::GetCurrent3DProviderIndex(void) int8 cSampleManager::SetCurrent3DProvider(uint8 nProvider) { ASSERT( nProvider < m_nNumberOfProviders ); + if (nProvider >= m_nNumberOfProviders) + nProvider = 0; int savedprovider = curprovider; if ( nProvider < m_nNumberOfProviders ) @@ -743,12 +752,37 @@ cSampleManager::LoadSampleBank(uint8 nBank) return false; } +#ifdef AUDIO_OPUS + int ret; + //OggOpusFile *file = op_open_file("AUDIO/SFX0.RAW", &ret); + int samplesRead = 0; + int samplesSize = nSampleBankSize[nBank] / 2; + op_pcm_seek(opusSFX, 0); + while (samplesSize > 0) { + int size = op_read(opusSFX, (opus_int16 *)(nSampleBankMemoryStartAddress[nBank] + samplesRead), samplesSize, NULL); + if (size <= 0) { + // huh? + //assert(0); + break; + } + samplesRead += size*2; + samplesSize -= size; + } + //op_free(file); + + //if (samplesRead != nSampleBankSize[nBank]) + // return false; + + //FILE *fsd = fopen("sfx.temp", "wb"); + //fwrite((void *)nSampleBankMemoryStartAddress[nBank], 1, nSampleBankSize[nBank], fsd); + //fclose(fsd); +#else if ( fseek(fpSampleDataHandle, nSampleBankDiscStartOffset[nBank], SEEK_SET) != 0 ) return false; if ( fread((void *)nSampleBankMemoryStartAddress[nBank], 1, nSampleBankSize[nBank], fpSampleDataHandle) != nSampleBankSize[nBank] ) return false; - +#endif bSampleBankLoaded[nBank] = true; return true; @@ -836,13 +870,28 @@ cSampleManager::LoadPedComment(uint32 nComment) } } } - + +#ifdef AUDIO_OPUS + int samplesRead = 0; + int samplesSize = m_aSamples[nComment].nSize / 2; + op_pcm_seek(opusSFX, m_aSamples[nComment].nOffset / 2); + while (samplesSize > 0) { + int size = + op_read(opusSFX, (opus_int16 *)(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] + PED_BLOCKSIZE * nCurrentPedSlot + samplesRead), samplesSize, NULL); + if (size <= 0) { + return false; + } + samplesRead += size * 2; + samplesSize -= size; + } +#else if ( fseek(fpSampleDataHandle, m_aSamples[nComment].nOffset, SEEK_SET) != 0 ) return false; if ( fread((void *)(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] + PED_BLOCKSIZE*nCurrentPedSlot), 1, m_aSamples[nComment].nSize, fpSampleDataHandle) != m_aSamples[nComment].nSize ) return false; - + +#endif nPedSlotSfx[nCurrentPedSlot] = nComment; alBufferData(pedBuffers[nCurrentPedSlot], @@ -1406,6 +1455,15 @@ cSampleManager::InitialiseSampleBanks(void) nSampleBankSize[SAMPLEBANK_MAIN] = nSampleBankDiscStartOffset[SAMPLEBANK_PED] - nSampleBankDiscStartOffset[SAMPLEBANK_MAIN]; nSampleBankSize[SAMPLEBANK_PED] = _nSampleDataEndOffset - nSampleBankDiscStartOffset[SAMPLEBANK_PED]; + //int error = 0; + //auto encoder = opus_encoder_create(48000, 1, OPUS_APPLICATION_AUDIO, &error); + //error = opus_encoder_ctl(encoder, OPUS_SET_BITRATE(75.5)); + + //nbBytes = opus_encode(encoder, in, FRAME_SIZE, cbits, MAX_PACKET_SIZE); + + int e; + opusSFX = op_open_file("AUDIO/SFX.opus", &e); + return true; } From a705fc7eb83304e5e0d536c88353392bb7310141 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 22 May 2020 17:41:48 +0300 Subject: [PATCH 03/11] fix eax --- eax/eax.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eax/eax.h b/eax/eax.h index 0e2201db..7c0db32e 100644 --- a/eax/eax.h +++ b/eax/eax.h @@ -54,7 +54,8 @@ extern "C" { #include #include #else - #include + #include + #include #endif #ifndef GUID_DEFINED From 97b058d0fa44eb1bb032484a6f4bee6df1f249bd Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 22 May 2020 17:43:26 +0300 Subject: [PATCH 04/11] more checks in premake --- premake5.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/premake5.lua b/premake5.lua index c6551a21..95c03b21 100644 --- a/premake5.lua +++ b/premake5.lua @@ -194,9 +194,11 @@ project "re3" includedirs { "openal-soft/include" } includedirs { "mpg123/include" } includedirs { "libsndfile/include" } - includedirs { "ogg/include" } - includedirs { "opus/include" } - includedirs { "opusfile/include" } + if _OPTIONS["with-opus"] then + includedirs { "ogg/include" } + includedirs { "opus/include" } + includedirs { "opusfile/include" } + end libdirs { "milessdk/lib" } libdirs { "openal-soft/libs/Win32" } From 3a7651e7ab87e21ff510441f98dcbe6711134a18 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Sun, 24 May 2020 00:56:20 +0300 Subject: [PATCH 05/11] Cleanup --- premake5.lua | 1 + src/audio/sampman_oal.cpp | 48 ++++++++++++++------------------------- 2 files changed, 18 insertions(+), 31 deletions(-) diff --git a/premake5.lua b/premake5.lua index c7321dcb..036dad09 100644 --- a/premake5.lua +++ b/premake5.lua @@ -209,6 +209,7 @@ project "re3" libdirs { "opus/win32/VS2015/Win32/%{cfg.buildcfg}" } libdirs { "opusfile/win32/VS2015/Win32/Release-NoHTTP" } filter {} + defines { "AUDIO_OPUS" } end filter "platforms:*oal" diff --git a/src/audio/sampman_oal.cpp b/src/audio/sampman_oal.cpp index ff50ac07..1cd45e4f 100644 --- a/src/audio/sampman_oal.cpp +++ b/src/audio/sampman_oal.cpp @@ -45,10 +45,6 @@ bool _bSampmanInitialised = false; uint32 BankStartOffset[MAX_SAMPLEBANKS]; -#ifdef AUDIO_OPUS -OggOpusFile *opusSFX; -#endif - int prevprovider=-1; int curprovider=-1; int usingEAX=0; @@ -76,7 +72,11 @@ char SampleBankDescFilename[] = "audio/sfx.SDT"; char SampleBankDataFilename[] = "audio/sfx.RAW"; FILE *fpSampleDescHandle; +#ifdef AUDIO_OPUS +OggOpusFile *fpSampleDataHandle; +#else FILE *fpSampleDataHandle; +#endif bool bSampleBankLoaded [MAX_SAMPLEBANKS]; int32 nSampleBankDiscStartOffset [MAX_SAMPLEBANKS]; int32 nSampleBankSize [MAX_SAMPLEBANKS]; @@ -753,13 +753,11 @@ cSampleManager::LoadSampleBank(uint8 nBank) } #ifdef AUDIO_OPUS - int ret; - //OggOpusFile *file = op_open_file("AUDIO/SFX0.RAW", &ret); int samplesRead = 0; int samplesSize = nSampleBankSize[nBank] / 2; - op_pcm_seek(opusSFX, 0); + op_pcm_seek(fpSampleDataHandle, 0); while (samplesSize > 0) { - int size = op_read(opusSFX, (opus_int16 *)(nSampleBankMemoryStartAddress[nBank] + samplesRead), samplesSize, NULL); + int size = op_read(fpSampleDataHandle, (opus_int16 *)(nSampleBankMemoryStartAddress[nBank] + samplesRead), samplesSize, NULL); if (size <= 0) { // huh? //assert(0); @@ -768,14 +766,6 @@ cSampleManager::LoadSampleBank(uint8 nBank) samplesRead += size*2; samplesSize -= size; } - //op_free(file); - - //if (samplesRead != nSampleBankSize[nBank]) - // return false; - - //FILE *fsd = fopen("sfx.temp", "wb"); - //fwrite((void *)nSampleBankMemoryStartAddress[nBank], 1, nSampleBankSize[nBank], fsd); - //fclose(fsd); #else if ( fseek(fpSampleDataHandle, nSampleBankDiscStartOffset[nBank], SEEK_SET) != 0 ) return false; @@ -878,10 +868,10 @@ cSampleManager::LoadPedComment(uint32 nComment) #ifdef AUDIO_OPUS int samplesRead = 0; int samplesSize = m_aSamples[nComment].nSize / 2; - op_pcm_seek(opusSFX, m_aSamples[nComment].nOffset / 2); + op_pcm_seek(fpSampleDataHandle, m_aSamples[nComment].nOffset / 2); while (samplesSize > 0) { - int size = - op_read(opusSFX, (opus_int16 *)(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] + PED_BLOCKSIZE * nCurrentPedSlot + samplesRead), samplesSize, NULL); + int size = op_read(fpSampleDataHandle, (opus_int16 *)(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] + PED_BLOCKSIZE * nCurrentPedSlot + samplesRead), + samplesSize, NULL); if (size <= 0) { return false; } @@ -1425,7 +1415,7 @@ cSampleManager::InitialiseSampleBanks(void) fpSampleDescHandle = fopen(SampleBankDescFilename, "rb"); if ( fpSampleDescHandle == NULL ) return false; - +#ifndef AUDIO_OPUS fpSampleDataHandle = fopen(SampleBankDataFilename, "rb"); if ( fpSampleDataHandle == NULL ) { @@ -1438,9 +1428,14 @@ cSampleManager::InitialiseSampleBanks(void) fseek(fpSampleDataHandle, 0, SEEK_END); int32 _nSampleDataEndOffset = ftell(fpSampleDataHandle); rewind(fpSampleDataHandle); - +#else + int e; + fpSampleDataHandle = op_open_file(SampleBankDataFilename, &e); +#endif fread(m_aSamples, sizeof(tSample), TOTAL_AUDIO_SAMPLES, fpSampleDescHandle); - +#ifdef AUDIO_OPUS + int32 _nSampleDataEndOffset = m_aSamples[TOTAL_AUDIO_SAMPLES - 1].nOffset + m_aSamples[TOTAL_AUDIO_SAMPLES - 1].nSize; +#endif fclose(fpSampleDescHandle); fpSampleDescHandle = NULL; @@ -1458,15 +1453,6 @@ cSampleManager::InitialiseSampleBanks(void) nSampleBankSize[SAMPLEBANK_MAIN] = nSampleBankDiscStartOffset[SAMPLEBANK_PED] - nSampleBankDiscStartOffset[SAMPLEBANK_MAIN]; nSampleBankSize[SAMPLEBANK_PED] = _nSampleDataEndOffset - nSampleBankDiscStartOffset[SAMPLEBANK_PED]; - - //int error = 0; - //auto encoder = opus_encoder_create(48000, 1, OPUS_APPLICATION_AUDIO, &error); - //error = opus_encoder_ctl(encoder, OPUS_SET_BITRATE(75.5)); - - //nbBytes = opus_encode(encoder, in, FRAME_SIZE, cbits, MAX_PACKET_SIZE); - - int e; - opusSFX = op_open_file("AUDIO/SFX.opus", &e); return true; } From e259bb6609fc319f202016b3019e7ea8f3c3b5d2 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Sun, 24 May 2020 18:43:50 +0300 Subject: [PATCH 06/11] fixes --- src/audio/oal/stream.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/audio/oal/stream.cpp b/src/audio/oal/stream.cpp index 597b3fb7..b129f6d4 100644 --- a/src/audio/oal/stream.cpp +++ b/src/audio/oal/stream.cpp @@ -183,7 +183,7 @@ class COpusFile : public IDecoder uint32 m_nRate; uint32 m_nChannels; public: - _declspec(noinline) COpusFile(const char *path) : m_FileH(nil), + COpusFile(const char *path) : m_FileH(nil), m_bOpened(false), m_nRate(0), m_nChannels(0) @@ -194,7 +194,7 @@ public: if (m_FileH) { m_nChannels = op_head(m_FileH, 0)->channel_count; m_nRate = op_head(m_FileH, 0)->input_sample_rate; - auto tags = op_tags(m_FileH, 0); + const OpusTags *tags = op_tags(m_FileH, 0); for (int i = 0; i < tags->comments; i++) { if (strncmp(tags->user_comments[i], "SAMPLERATE", sizeof("SAMPLERATE")-1) == 0) { From 550b813d92f484fb278cd2e1606cc262d217ffb4 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Wed, 29 Jul 2020 16:08:01 +0300 Subject: [PATCH 07/11] premake fix --- premake5.lua | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/premake5.lua b/premake5.lua index 87cb9e2d..3ddc554e 100644 --- a/premake5.lua +++ b/premake5.lua @@ -211,10 +211,11 @@ project "re3" includedirs { "opusfile/include" } end - libdirs { "milessdk/lib" } - libdirs { "openal-soft/libs/Win32" } - libdirs { "mpg123/lib" } - libdirs { "libsndfile/lib" } + filter "platforms:*mss" + defines { "AUDIO_MSS" } + includedirs { "milessdk/include" } + libdirs { "sdk/milessdk/lib" } + if _OPTIONS["with-opus"] then filter "platforms:win*" libdirs { "ogg/win32/VS2015/Win32/%{cfg.buildcfg}" } From e823e018600bbc71fd4a58c50d86f1bd2ce467ff Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Wed, 29 Jul 2020 16:10:59 +0300 Subject: [PATCH 08/11] more fix --- premake5.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/premake5.lua b/premake5.lua index 3ddc554e..57db0fe8 100644 --- a/premake5.lua +++ b/premake5.lua @@ -214,7 +214,7 @@ project "re3" filter "platforms:*mss" defines { "AUDIO_MSS" } includedirs { "milessdk/include" } - libdirs { "sdk/milessdk/lib" } + libdirs { "milessdk/lib" } if _OPTIONS["with-opus"] then filter "platforms:win*" From 8ceeb106ef10126e8e8429c096cadafc689f1ae0 Mon Sep 17 00:00:00 2001 From: shfil Date: Wed, 29 Jul 2020 18:25:27 +0200 Subject: [PATCH 09/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 71a982e9..5d336435 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ such that we have a working game at all times. - **If you use 64-bit D3D9**: We don't ship 64-bit Dx9 SDK. You need to download it from Microsoft if you don't have it(although it should come pre-installed after some Windows version) -> :information_source: **If you choose OpenAL(OAL) on Windows** You must read [Running OAL build on Windows](https://github.com/GTAmodding/re3/wiki/Running-OAL-build-on-Windows). +> :information_source: **If you choose OpenAL on Windows** You must read [Running OpenAL build on Windows](https://github.com/GTAmodding/re3/wiki/Running-OpenAL-build-on-Windows). > :information_source: **Did you notice librw?** re3 uses completely homebrew RenderWare-replacement rendering engine; [librw](https://github.com/aap/librw/). librw comes as submodule of re3, but you also can use LIBRW enviorenment variable to specify path to your own librw. From 2c6f2f24e717a6ba5994346ec7a4fa7b02c6d58d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?eray=20or=C3=A7unus?= Date: Wed, 29 Jul 2020 19:32:06 +0300 Subject: [PATCH 10/11] Fix Win32 OAL build --- premake5.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/premake5.lua b/premake5.lua index 7381da1d..07ca5ced 100644 --- a/premake5.lua +++ b/premake5.lua @@ -225,7 +225,7 @@ project "re3" includedirs { "libsndfile.32/include" } includedirs { "mpg123.32/include" } libdirs { "mpg123.32/lib" } - libdirs { "libsndfile32/lib" } + libdirs { "libsndfile.32/lib" } libdirs { "openal-soft/libs/Win32" } filter "platforms:win-amd64*oal" From a786dd45a4ebc6b91936b5e46d0ef0a9befc05af Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Sun, 2 Aug 2020 19:36:50 +0300 Subject: [PATCH 11/11] Move sdk and eax --- dxsdk/Include/Msvidctl.tlb | Bin 108028 -> 0 bytes dxsdk/Include/Tuner.tlb | Bin 53292 -> 0 bytes premake5.lua | 20 +++++++++--------- {dxsdk => sdk/dx8sdk}/Include/Amvideo.h | 0 {dxsdk => sdk/dx8sdk}/Include/Bdatif.h | 0 {dxsdk => sdk/dx8sdk}/Include/DShow.h | 0 .../dx8sdk}/Include/DShowIDL/Bdatif.idl | 0 .../dx8sdk}/Include/DShowIDL/Mpeg2Data.idl | 0 .../dx8sdk}/Include/DShowIDL/Mpeg2Structs.idl | 0 .../dx8sdk}/Include/DShowIDL/Mstvca.idl | 0 .../dx8sdk}/Include/DShowIDL/Mstvgs.idl | 0 .../dx8sdk}/Include/DShowIDL/Msvidctl.idl | 0 .../dx8sdk}/Include/DShowIDL/Segment.idl | 0 .../dx8sdk}/Include/DShowIDL/Videoacc.idl | 0 .../dx8sdk}/Include/DShowIDL/Vmrender.idl | 0 .../dx8sdk}/Include/DShowIDL/amstream.idl | 0 .../dx8sdk}/Include/DShowIDL/austream.idl | 0 .../dx8sdk}/Include/DShowIDL/axcore.idl | 0 .../dx8sdk}/Include/DShowIDL/axextend.idl | 0 .../dx8sdk}/Include/DShowIDL/bdaiface.idl | 0 .../dx8sdk}/Include/DShowIDL/control.odl | 0 .../dx8sdk}/Include/DShowIDL/ddstream.idl | 0 .../dx8sdk}/Include/DShowIDL/devenum.idl | 0 .../dx8sdk}/Include/DShowIDL/dmodshow.idl | 0 .../dx8sdk}/Include/DShowIDL/dshowasf.idl | 0 .../dx8sdk}/Include/DShowIDL/dvdif.idl | 0 .../dx8sdk}/Include/DShowIDL/dxtrans.idl | 0 .../dx8sdk}/Include/DShowIDL/dyngraph.idl | 0 .../dx8sdk}/Include/DShowIDL/mediaobj.idl | 0 .../dx8sdk}/Include/DShowIDL/medparam.idl | 0 .../dx8sdk}/Include/DShowIDL/mixerocx.idl | 0 .../dx8sdk}/Include/DShowIDL/mmstream.idl | 0 .../dx8sdk}/Include/DShowIDL/mstve.idl | 0 .../dx8sdk}/Include/DShowIDL/qedit.idl | 0 .../dx8sdk}/Include/DShowIDL/regbag.idl | 0 .../dx8sdk}/Include/DShowIDL/sbe.idl | 0 .../dx8sdk}/Include/DShowIDL/strmif.idl | 0 .../dx8sdk}/Include/DShowIDL/tuner.idl | 0 .../dx8sdk}/Include/DShowIDL/tvratings.idl | 0 .../dx8sdk}/Include/DShowIDL/vidcap.idl | 0 .../dx8sdk}/Include/DShowIDL/vmr9.idl | 0 {dxsdk => sdk/dx8sdk}/Include/DxDiag.h | 0 {dxsdk => sdk/dx8sdk}/Include/Iwstdec.h | 0 {dxsdk => sdk/dx8sdk}/Include/Mpeg2Bits.h | 0 {dxsdk => sdk/dx8sdk}/Include/Mpeg2Error.h | 0 {dxsdk => sdk/dx8sdk}/Include/Mstvca.h | 0 {dxsdk => sdk/dx8sdk}/Include/Mstve.h | 0 {dxsdk => sdk/dx8sdk}/Include/Msvidctl.h | 0 {dxsdk => sdk/dx8sdk}/Include/PixPlugin.h | 0 {dxsdk => sdk/dx8sdk}/Include/Segment.h | 0 {dxsdk => sdk/dx8sdk}/Include/activecf.h | 0 {dxsdk => sdk/dx8sdk}/Include/amaudio.h | 0 {dxsdk => sdk/dx8sdk}/Include/amparse.h | 0 {dxsdk => sdk/dx8sdk}/Include/amstream.h | 0 {dxsdk => sdk/dx8sdk}/Include/amva.h | 0 {dxsdk => sdk/dx8sdk}/Include/atsmedia.h | 0 {dxsdk => sdk/dx8sdk}/Include/audevcod.h | 0 {dxsdk => sdk/dx8sdk}/Include/austream.h | 0 {dxsdk => sdk/dx8sdk}/Include/aviriff.h | 0 {dxsdk => sdk/dx8sdk}/Include/bdaiface.h | 0 {dxsdk => sdk/dx8sdk}/Include/bdamedia.h | 0 {dxsdk => sdk/dx8sdk}/Include/bdatypes.h | 0 {dxsdk => sdk/dx8sdk}/Include/comlite.h | 0 {dxsdk => sdk/dx8sdk}/Include/control.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3d.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3d8.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3d8caps.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3d8types.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3d9.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3d9caps.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3d9types.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dcaps.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3drm.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3drmdef.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3drmobj.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3drmwin.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dtypes.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dvec.inl | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx8.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx8core.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx8effect.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx8math.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx8math.inl | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx8mesh.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx8shape.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx8tex.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx9.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx9anim.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx9core.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx9effect.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx9math.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx9math.inl | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx9mesh.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx9shader.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx9shape.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx9tex.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dx9xof.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dxcore.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dxerr.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dxmath.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dxmath.inl | 0 {dxsdk => sdk/dx8sdk}/Include/d3dxshapes.h | 0 {dxsdk => sdk/dx8sdk}/Include/d3dxsprite.h | 0 {dxsdk => sdk/dx8sdk}/Include/ddraw.h | 0 {dxsdk => sdk/dx8sdk}/Include/ddstream.h | 0 {dxsdk => sdk/dx8sdk}/Include/dinput.h | 0 {dxsdk => sdk/dx8sdk}/Include/dinputd.h | 0 {dxsdk => sdk/dx8sdk}/Include/dls1.h | 0 {dxsdk => sdk/dx8sdk}/Include/dls2.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmdls.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmerror.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmksctrl.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmo.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmodshow.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmoimpl.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmoreg.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmort.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmplugin.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmusbuff.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmusicc.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmusicf.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmusici.h | 0 {dxsdk => sdk/dx8sdk}/Include/dmusics.h | 0 {dxsdk => sdk/dx8sdk}/Include/dpaddr.h | 0 {dxsdk => sdk/dx8sdk}/Include/dplay.h | 0 {dxsdk => sdk/dx8sdk}/Include/dplay8.h | 0 {dxsdk => sdk/dx8sdk}/Include/dplobby.h | 0 {dxsdk => sdk/dx8sdk}/Include/dplobby8.h | 0 {dxsdk => sdk/dx8sdk}/Include/dpnathlp.h | 0 {dxsdk => sdk/dx8sdk}/Include/dsconf.h | 0 {dxsdk => sdk/dx8sdk}/Include/dsetup.h | 0 {dxsdk => sdk/dx8sdk}/Include/dshowasf.h | 0 {dxsdk => sdk/dx8sdk}/Include/dsound.h | 0 {dxsdk => sdk/dx8sdk}/Include/dv.h | 0 {dxsdk => sdk/dx8sdk}/Include/dvdevcod.h | 0 {dxsdk => sdk/dx8sdk}/Include/dvdmedia.h | 0 {dxsdk => sdk/dx8sdk}/Include/dvoice.h | 0 {dxsdk => sdk/dx8sdk}/Include/dvp.h | 0 {dxsdk => sdk/dx8sdk}/Include/dx7todx8.h | 0 {dxsdk => sdk/dx8sdk}/Include/dxerr8.h | 0 {dxsdk => sdk/dx8sdk}/Include/dxerr9.h | 0 {dxsdk => sdk/dx8sdk}/Include/dxfile.h | 0 {dxsdk => sdk/dx8sdk}/Include/dxtrans.h | 0 {dxsdk => sdk/dx8sdk}/Include/dxva.h | 0 {dxsdk => sdk/dx8sdk}/Include/edevctrl.h | 0 {dxsdk => sdk/dx8sdk}/Include/edevdefs.h | 0 {dxsdk => sdk/dx8sdk}/Include/errors.h | 0 {dxsdk => sdk/dx8sdk}/Include/evcode.h | 0 {dxsdk => sdk/dx8sdk}/Include/il21dec.h | 0 {dxsdk => sdk/dx8sdk}/Include/ks.h | 0 {dxsdk => sdk/dx8sdk}/Include/ksguid.h | 0 {dxsdk => sdk/dx8sdk}/Include/ksmedia.h | 0 {dxsdk => sdk/dx8sdk}/Include/ksproxy.h | 0 {dxsdk => sdk/dx8sdk}/Include/ksuuids.h | 0 {dxsdk => sdk/dx8sdk}/Include/mediaerr.h | 0 {dxsdk => sdk/dx8sdk}/Include/mediaobj.h | 0 {dxsdk => sdk/dx8sdk}/Include/medparam.h | 0 {dxsdk => sdk/dx8sdk}/Include/mixerocx.h | 0 {dxsdk => sdk/dx8sdk}/Include/mmstream.h | 0 {dxsdk => sdk/dx8sdk}/Include/mpconfig.h | 0 {dxsdk => sdk/dx8sdk}/Include/mpeg2data.h | 0 {dxsdk => sdk/dx8sdk}/Include/mpegtype.h | 0 {dxsdk => sdk/dx8sdk}/Include/multimon.h | 0 {dxsdk => sdk/dx8sdk}/Include/playlist.h | 0 {dxsdk => sdk/dx8sdk}/Include/qedit.h | 0 {dxsdk => sdk/dx8sdk}/Include/qnetwork.h | 0 {dxsdk => sdk/dx8sdk}/Include/regbag.h | 0 {dxsdk => sdk/dx8sdk}/Include/rmxfguid.h | 0 {dxsdk => sdk/dx8sdk}/Include/rmxftmpl.h | 0 {dxsdk => sdk/dx8sdk}/Include/sbe.h | 0 {dxsdk => sdk/dx8sdk}/Include/strmif.h | 0 {dxsdk => sdk/dx8sdk}/Include/strsafe.h | 0 {dxsdk => sdk/dx8sdk}/Include/tune.h | 0 {dxsdk => sdk/dx8sdk}/Include/tuner.h | 0 {dxsdk => sdk/dx8sdk}/Include/tvratings.h | 0 {dxsdk => sdk/dx8sdk}/Include/uuids.h | 0 {dxsdk => sdk/dx8sdk}/Include/vfwmsgs.h | 0 {dxsdk => sdk/dx8sdk}/Include/vidcap.h | 0 {dxsdk => sdk/dx8sdk}/Include/videoacc.h | 0 {dxsdk => sdk/dx8sdk}/Include/vmr9.h | 0 {dxsdk => sdk/dx8sdk}/Include/vpconfig.h | 0 {dxsdk => sdk/dx8sdk}/Include/vpnotify.h | 0 {dxsdk => sdk/dx8sdk}/Include/vptype.h | 0 {dxsdk => sdk/dx8sdk}/Include/xprtdefs.h | 0 {dxsdk => sdk/dx8sdk}/Lib/DxErr8.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/DxErr9.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/amstrmid.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/d3d8.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/d3d9.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/d3dx.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/d3dx8.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/d3dx8d.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/d3dx8dt.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/d3dx9.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/d3dx9d.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/d3dx9dt.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/d3dxd.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/d3dxof.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/ddraw.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/dinput.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/dinput8.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/dmoguids.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/dplayx.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/dsetup.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/dsound.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/dxguid.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/dxtrans.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/encapi.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/ksproxy.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/ksuser.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/msdmo.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/quartz.lib | Bin {dxsdk => sdk/dx8sdk}/Lib/strmiids.lib | Bin {milessdk => sdk/milessdk}/include/mss.h | 0 {milessdk => sdk/milessdk}/lib/mss32.lib | Bin {rwsdk => sdk/rwsdk}/include/d3d8/baaplylt.c | 0 {rwsdk => sdk/rwsdk}/include/d3d8/errcom.def | 0 {rwsdk => sdk/rwsdk}/include/d3d8/errcore.def | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpanisot.h | 0 .../rwsdk}/include/d3d8/rpanisot.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpcollis.h | 0 .../rwsdk}/include/d3d8/rpcollis.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpcriter.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpdbgerr.c | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpdbgerr.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpdmorph.h | 0 .../rwsdk}/include/d3d8/rpdmorph.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rperror.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rphanim.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rphanim.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rplodatm.h | 0 .../rwsdk}/include/d3d8/rplodatm.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rplogo.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rplogo.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpltmap.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpltmap.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpmatfx.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpmatfx.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpmipkl.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpmipkl.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpmorph.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpmorph.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rppatch.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rppatch.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpprtstd.h | 0 .../rwsdk}/include/d3d8/rpprtstd.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpptank.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpptank.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rppvs.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rppvs.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rprandom.h | 0 .../rwsdk}/include/d3d8/rprandom.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpskin.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpskin.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpspline.h | 0 .../rwsdk}/include/d3d8/rpspline.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpstereo.h | 0 .../rwsdk}/include/d3d8/rpstereo.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpusrdat.h | 0 .../rwsdk}/include/d3d8/rpusrdat.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpworld.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rpworld.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rt2d.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rt2d.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rt2danim.h | 0 .../rwsdk}/include/d3d8/rt2danim.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtbary.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtbary.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtbezpat.h | 0 .../rwsdk}/include/d3d8/rtbezpat.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtbmp.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtbmp.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtcharse.h | 0 .../rwsdk}/include/d3d8/rtcharse.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtimport.h | 0 .../rwsdk}/include/d3d8/rtimport.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtintel.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtintel.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtintsec.h | 0 .../rwsdk}/include/d3d8/rtintsec.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtltmap.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtltmap.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtmipk.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtmipk.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtpick.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtpick.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtpitexd.h | 0 .../rwsdk}/include/d3d8/rtpitexd.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtpng.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtpng.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtquat.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtquat.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtras.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtras.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtray.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtray.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtslerp.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtslerp.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtsplpvs.h | 0 .../rwsdk}/include/d3d8/rtsplpvs.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rttiff.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rttiff.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rttilerd.h | 0 .../rwsdk}/include/d3d8/rttilerd.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rttoc.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rttoc.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtvcat.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtvcat.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtworld.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rtworld.rpe | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rwcore.h | 0 {rwsdk => sdk/rwsdk}/include/d3d8/rwplcore.h | 0 {eax => src/audio/eax}/eax-util.cpp | 0 {eax => src/audio/eax}/eax-util.h | 0 {eax => src/audio/eax}/eax.h | 0 316 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 dxsdk/Include/Msvidctl.tlb delete mode 100644 dxsdk/Include/Tuner.tlb rename {dxsdk => sdk/dx8sdk}/Include/Amvideo.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/Bdatif.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShow.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/Bdatif.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/Mpeg2Data.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/Mpeg2Structs.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/Mstvca.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/Mstvgs.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/Msvidctl.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/Segment.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/Videoacc.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/Vmrender.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/amstream.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/austream.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/axcore.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/axextend.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/bdaiface.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/control.odl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/ddstream.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/devenum.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/dmodshow.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/dshowasf.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/dvdif.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/dxtrans.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/dyngraph.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/mediaobj.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/medparam.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/mixerocx.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/mmstream.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/mstve.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/qedit.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/regbag.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/sbe.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/strmif.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/tuner.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/tvratings.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/vidcap.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DShowIDL/vmr9.idl (100%) rename {dxsdk => sdk/dx8sdk}/Include/DxDiag.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/Iwstdec.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/Mpeg2Bits.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/Mpeg2Error.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/Mstvca.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/Mstve.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/Msvidctl.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/PixPlugin.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/Segment.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/activecf.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/amaudio.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/amparse.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/amstream.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/amva.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/atsmedia.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/audevcod.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/austream.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/aviriff.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/bdaiface.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/bdamedia.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/bdatypes.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/comlite.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/control.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3d.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3d8.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3d8caps.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3d8types.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3d9.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3d9caps.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3d9types.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dcaps.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3drm.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3drmdef.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3drmobj.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3drmwin.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dtypes.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dvec.inl (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx8.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx8core.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx8effect.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx8math.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx8math.inl (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx8mesh.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx8shape.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx8tex.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx9.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx9anim.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx9core.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx9effect.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx9math.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx9math.inl (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx9mesh.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx9shader.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx9shape.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx9tex.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dx9xof.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dxcore.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dxerr.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dxmath.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dxmath.inl (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dxshapes.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/d3dxsprite.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/ddraw.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/ddstream.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dinput.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dinputd.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dls1.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dls2.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmdls.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmerror.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmksctrl.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmo.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmodshow.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmoimpl.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmoreg.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmort.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmplugin.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmusbuff.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmusicc.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmusicf.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmusici.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dmusics.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dpaddr.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dplay.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dplay8.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dplobby.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dplobby8.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dpnathlp.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dsconf.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dsetup.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dshowasf.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dsound.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dv.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dvdevcod.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dvdmedia.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dvoice.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dvp.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dx7todx8.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dxerr8.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dxerr9.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dxfile.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dxtrans.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/dxva.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/edevctrl.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/edevdefs.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/errors.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/evcode.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/il21dec.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/ks.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/ksguid.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/ksmedia.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/ksproxy.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/ksuuids.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/mediaerr.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/mediaobj.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/medparam.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/mixerocx.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/mmstream.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/mpconfig.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/mpeg2data.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/mpegtype.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/multimon.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/playlist.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/qedit.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/qnetwork.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/regbag.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/rmxfguid.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/rmxftmpl.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/sbe.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/strmif.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/strsafe.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/tune.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/tuner.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/tvratings.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/uuids.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/vfwmsgs.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/vidcap.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/videoacc.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/vmr9.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/vpconfig.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/vpnotify.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/vptype.h (100%) rename {dxsdk => sdk/dx8sdk}/Include/xprtdefs.h (100%) rename {dxsdk => sdk/dx8sdk}/Lib/DxErr8.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/DxErr9.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/amstrmid.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/d3d8.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/d3d9.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/d3dx.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/d3dx8.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/d3dx8d.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/d3dx8dt.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/d3dx9.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/d3dx9d.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/d3dx9dt.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/d3dxd.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/d3dxof.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/ddraw.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/dinput.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/dinput8.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/dmoguids.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/dplayx.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/dsetup.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/dsound.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/dxguid.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/dxtrans.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/encapi.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/ksproxy.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/ksuser.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/msdmo.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/quartz.lib (100%) rename {dxsdk => sdk/dx8sdk}/Lib/strmiids.lib (100%) rename {milessdk => sdk/milessdk}/include/mss.h (100%) rename {milessdk => sdk/milessdk}/lib/mss32.lib (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/baaplylt.c (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/errcom.def (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/errcore.def (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpanisot.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpanisot.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpcollis.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpcollis.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpcriter.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpdbgerr.c (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpdbgerr.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpdmorph.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpdmorph.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rperror.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rphanim.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rphanim.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rplodatm.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rplodatm.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rplogo.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rplogo.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpltmap.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpltmap.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpmatfx.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpmatfx.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpmipkl.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpmipkl.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpmorph.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpmorph.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rppatch.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rppatch.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpprtstd.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpprtstd.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpptank.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpptank.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rppvs.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rppvs.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rprandom.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rprandom.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpskin.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpskin.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpspline.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpspline.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpstereo.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpstereo.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpusrdat.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpusrdat.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpworld.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rpworld.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rt2d.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rt2d.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rt2danim.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rt2danim.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtbary.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtbary.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtbezpat.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtbezpat.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtbmp.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtbmp.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtcharse.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtcharse.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtimport.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtimport.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtintel.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtintel.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtintsec.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtintsec.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtltmap.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtltmap.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtmipk.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtmipk.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtpick.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtpick.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtpitexd.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtpitexd.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtpng.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtpng.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtquat.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtquat.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtras.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtras.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtray.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtray.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtslerp.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtslerp.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtsplpvs.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtsplpvs.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rttiff.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rttiff.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rttilerd.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rttilerd.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rttoc.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rttoc.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtvcat.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtvcat.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtworld.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rtworld.rpe (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rwcore.h (100%) rename {rwsdk => sdk/rwsdk}/include/d3d8/rwplcore.h (100%) rename {eax => src/audio/eax}/eax-util.cpp (100%) rename {eax => src/audio/eax}/eax-util.h (100%) rename {eax => src/audio/eax}/eax.h (100%) diff --git a/dxsdk/Include/Msvidctl.tlb b/dxsdk/Include/Msvidctl.tlb deleted file mode 100644 index b501106c693c7b10ad286b58d8f64005ce8c2e64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108028 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%0D;!v(8i$-MIhNnTUGUnTO)H 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 P9s?KP(~q03G4THaPF`@R diff --git a/dxsdk/Include/Tuner.tlb b/dxsdk/Include/Tuner.tlb deleted file mode 100644 index c90fc4ec81eba6581ac0fd13d94da041d7e38a1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53292 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