spu: fix first sample, don't play ahead
[pcsx_rearmed.git] / libpcsxcore / plugins.c
index f965e0d..e6d8a11 100644 (file)
@@ -88,6 +88,7 @@ SPUreadDMAMem         SPU_readDMAMem;
 SPUplayADPCMchannel   SPU_playADPCMchannel;\r
 SPUfreeze             SPU_freeze;\r
 SPUregisterCallback   SPU_registerCallback;\r
+SPUregisterScheduleCb SPU_registerScheduleCb;\r
 SPUasync              SPU_async;\r
 SPUplayCDDAchannel    SPU_playCDDAchannel;\r
 \r
@@ -320,6 +321,7 @@ void *hSPUDriver = NULL;
 long CALLBACK SPU__configure(void) { return 0; }\r
 void CALLBACK SPU__about(void) {}\r
 long CALLBACK SPU__test(void) { return 0; }\r
+void CALLBACK SPU__registerScheduleCb(void (CALLBACK *cb)(unsigned int)) {}\r
 \r
 #define LoadSpuSym1(dest, name) \\r
        LoadSym(SPU_##dest, SPU##dest, name, TRUE);\r
@@ -356,6 +358,7 @@ static int LoadSPUplugin(const char *SPUdll) {
        LoadSpuSym1(playADPCMchannel, "SPUplayADPCMchannel");\r
        LoadSpuSym1(freeze, "SPUfreeze");\r
        LoadSpuSym1(registerCallback, "SPUregisterCallback");\r
+       LoadSpuSym0(registerScheduleCb, "SPUregisterScheduleCb");\r
        LoadSpuSymN(async, "SPUasync");\r
        LoadSpuSymN(playCDDAchannel, "SPUplayCDDAchannel");\r
 \r
@@ -702,6 +705,7 @@ int LoadPlugins() {
        char Plugin[MAXPATHLEN];\r
 \r
        ReleasePlugins();\r
+       SysLibError();\r
 \r
        if (UsingIso()) {\r
                LoadCDRplugin(NULL);\r
@@ -794,6 +798,23 @@ void ReleasePlugins() {
 #endif\r
 }\r
 \r
+// for CD swap\r
+int ReloadCdromPlugin()\r
+{\r
+       if (hCDRDriver != NULL || cdrIsoActive()) CDR_shutdown();\r
+       if (hCDRDriver != NULL) SysCloseLibrary(hCDRDriver); hCDRDriver = NULL;\r
+\r
+       if (UsingIso()) {\r
+               LoadCDRplugin(NULL);\r
+       } else {\r
+               char Plugin[MAXPATHLEN];\r
+               sprintf(Plugin, "%s/%s", Config.PluginsDir, Config.Cdr);\r
+               if (LoadCDRplugin(Plugin) == -1) return -1;\r
+       }\r
+\r
+       return CDR_init();\r
+}\r
+\r
 void SetIsoFile(const char *filename) {\r
        if (filename == NULL) {\r
                IsoFile[0] = '\0';\r