fix(bridge): VST2 iZotope wrapper 0x7E — add Cores dirs to PATH; skip Ozone Pro fastfail

This commit is contained in:
2026-09-01 22:07:10 +07:00
parent be5ecf0a48
commit aaf58db56f
2 changed files with 23 additions and 12 deletions
+16 -12
View File
@@ -456,16 +456,18 @@ bool vst3FxLoadInner(Vst3FxState* s, const std::string& path, double sampleRate,
int32 maxBlockSize, std::string& err) {
using namespace VST3::Hosting;
#ifdef _WIN32
// Ozone 11 (iZotope) tự __fastfail (c0000409, license/anti-tamper) khi
// load — KHÔNG bị SEH chặn → giết cả bridge process (scan + render +
// realtime). Không load: trả lỗi sạch cho chain. Ozone Pro vẫn load OK.
// ponytail: muốn chạy Ozone 11 → SandboxVst3Host (mỗi module 1 process).
// Ozone 11 / Ozone Pro (iZotope) tự __fastfail (c0000409, license/anti-
// tamper) khi load — KHÔNG bị SEH chặn → giết cả bridge process (scan +
// render + realtime). Không load: trả lỗi sạch cho chain. WER: Ozone
// Pro.vst3 (v9.11.0.1955) cũng crash c0000409 trên fx_vst_bridge.
// ponytail: muốn chạy Ozone → SandboxVst3Host (mỗi module 1 process).
{
std::string low = path;
for (auto& c : low) c = (char)std::tolower((unsigned char)c);
if (low.find("ozone 11") != std::string::npos) {
err = "Ozone 11 not loadable (license fastfail) - use Ozone Pro";
std::cerr << "[RenderFx] skip (Ozone 11): " << path << std::endl;
if (low.find("ozone 11") != std::string::npos ||
low.find("ozone pro") != std::string::npos) {
err = "Ozone not loadable (license fastfail) - use another module";
std::cerr << "[RenderFx] skip (Ozone fastfail): " << path << std::endl;
return false;
}
}
@@ -2092,14 +2094,16 @@ int run_scan_dir(const std::string& dirPath) {
#ifdef HAVE_VST3SDK
for (const auto& p : vst3Paths) {
std::vector<ScanEntry> entries;
// Ozone 11 (iZotope) tự __fastfail (c0000409, license/anti-tamper)
// khi load trong --scan — không bị SEH chặn → chết cả process → mất
// TOÀN BỘ dir → FX list rỗng. Không load: emit UNKNOWN (giống skip
// module lỗi). ponytail: SandboxVst3Host (mỗi module 1 process).
// Ozone 11 / Ozone Pro (iZotope) tự __fastfail (c0000409, license/
// anti-tamper) khi load trong --scan — không bị SEH chặn → chết cả
// process → mất TOÀN BỘ dir → FX list rỗng. Không load: emit UNKNOWN
// (giống skip module lỗi). ponytail: SandboxVst3Host (mỗi module 1
// process).
{
std::string low = p;
for (auto& c : low) c = (char)std::tolower((unsigned char)c);
if (low.find("ozone 11") != std::string::npos) {
if (low.find("ozone 11") != std::string::npos ||
low.find("ozone pro") != std::string::npos) {
emit(p, p.substr(p.find_last_of("/\\") + 1), false, false, "VST3");
continue;
}
+7
View File
@@ -9,6 +9,8 @@
#include "vestige/aeffect.h"
#include "VstDllSearch.h"
#include <windows.h>
#include <cstring>
@@ -301,6 +303,11 @@ Vst2Instrument::~Vst2Instrument() {
}
bool Vst2Instrument::loadPlugin(const std::string& path, double sampleRate) {
// iZotope VST2 wrapper DLL (iZOzonePro.dll...) LoadLibrary companion core
// DLL (iZOzone11Core.dll) ở C:\Program Files\iZotope\<Product>\Cores —
// không cạnh wrapper → iZotope SDK tự hiện MessageBox "Fatal Error 0x7E".
// Append Cores dirs vào PATH trước khi LoadLibraryA.
vstAddDllSearchPath(vstDllSearchExtras());
HMODULE h = LoadLibraryA(path.c_str());
if (!h) {
std::cerr << "[Vst2Instrument] LoadLibraryA failed: " << path