debug(renderfx): log tung buoc load VST3 de xac dinh diem treo (Ozone Pro)

This commit is contained in:
2026-08-22 11:54:48 +07:00
parent 068de2cb23
commit c07b792bd4
+20 -4
View File
@@ -438,20 +438,27 @@ bool vst3FxLoadInner(Vst3FxState* s, const std::string& path, double sampleRate,
setPluginSearchPath(path);
#endif
Module::Ptr module = Module::create(path, err);
if (!module) return false;
if (!module) { std::cerr << "[RenderFx] STEP module.create FAILED: " << err << std::endl; return false; }
std::cerr << "[RenderFx] STEP module.create OK" << std::endl;
const PluginFactory& factory = module->getFactory();
ClassInfo chosen;
if (!pickFxClass(factory, chosen)) {
err = "no audio-effect class in " + path;
std::cerr << "[RenderFx] STEP pickFxClass FAILED: " << err << std::endl;
return false;
}
std::cerr << "[RenderFx] STEP pickFxClass OK: " << chosen.name() << std::endl;
IPtr<IComponent> component = factory.createInstance<IComponent>(chosen.ID());
if (!component) { err = "createInstance<IComponent> failed"; return false; }
if (!component) { std::cerr << "[RenderFx] STEP createInstance FAILED" << std::endl; err = "createInstance<IComponent> failed"; return false; }
std::cerr << "[RenderFx] STEP createInstance OK" << std::endl;
IPtr<HostApplication> hostApp = owned(new HostApplication());
FUnknownPtr<Steinberg::IPluginBase> plugBase(component.get());
if (!plugBase || plugBase->initialize(hostApp) != kResultOk) {
err = "component initialize failed"; return false;
err = "component initialize failed";
std::cerr << "[RenderFx] STEP initialize FAILED" << std::endl;
return false;
}
std::cerr << "[RenderFx] STEP initialize OK" << std::endl;
IPtr<IEditController> controller;
bool isSingle = false;
if (component->queryInterface(IEditController::iid, (void**)&controller) == kResultTrue) {
@@ -467,13 +474,15 @@ bool vst3FxLoadInner(Vst3FxState* s, const std::string& path, double sampleRate,
}
}
}
if (!controller) { err = "no edit controller"; return false; }
if (!controller) { err = "no edit controller"; std::cerr << "[RenderFx] STEP controller FAILED" << std::endl; return false; }
std::cerr << "[RenderFx] STEP controller OK" << std::endl;
s->controllerIsComponent = isSingle;
controller->setComponentHandler(&s->componentHandler);
FUnknownPtr<IConnectionPoint> compCP(component);
FUnknownPtr<IConnectionPoint> ctrlCP(controller);
if (compCP && ctrlCP) { compCP->connect(ctrlCP); ctrlCP->connect(compCP); }
std::cerr << "[RenderFx] STEP connection points OK" << std::endl;
int32 numAudioInputs = component->getBusCount(kAudio, kInput);
for (int32 i = 0; i < numAudioInputs; ++i) component->activateBus(kAudio, kInput, i, true);
@@ -483,6 +492,7 @@ bool vst3FxLoadInner(Vst3FxState* s, const std::string& path, double sampleRate,
for (int32 i = 0; i < numEventInputs; ++i) component->activateBus(kEvent, kInput, i, true);
int32 numEventOutputs = component->getBusCount(kEvent, kOutput);
for (int32 i = 0; i < numEventOutputs; ++i) component->activateBus(kEvent, kOutput, i, true);
std::cerr << "[RenderFx] STEP buses activated (ain=" << numAudioInputs << " aout=" << numAudioOutputs << ")" << std::endl;
if (numAudioInputs < 1 || numAudioOutputs < 1) {
err = "plugin has no audio in/out (instrument?)"; return false;
}
@@ -490,12 +500,18 @@ bool vst3FxLoadInner(Vst3FxState* s, const std::string& path, double sampleRate,
FUnknownPtr<IAudioProcessor> processor(component);
if (!processor) { err = "no IAudioProcessor"; return false; }
ProcessSetup setup{kRealtime, kSample32, maxBlockSize, sampleRate};
std::cerr << "[RenderFx] STEP setupProcessing begin" << std::endl;
if (processor->setupProcessing(setup) != kResultOk) { err = "setupProcessing failed"; return false; }
std::cerr << "[RenderFx] STEP setupProcessing OK" << std::endl;
std::cerr << "[RenderFx] STEP setActive begin" << std::endl;
if (component->setActive(true) != kResultOk) { err = "setActive failed"; return false; }
std::cerr << "[RenderFx] STEP setActive OK" << std::endl;
processor->setProcessing(true);
std::cerr << "[RenderFx] STEP setProcessing OK" << std::endl;
if (!s->processData.prepare(*component, maxBlockSize, kSample32)) {
err = "processData.prepare failed"; return false;
}
std::cerr << "[RenderFx] STEP processData.prepare OK" << std::endl;
BusInfo bi = {};
if (component->getBusInfo(kAudio, kInput, 0, bi) == kResultOk && bi.channelCount > 0)