From b3cfaffbe0124254f5da70857f6c1cec59184897 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Fri, 25 Mar 2005 04:55:11 +0000 Subject: small OSX things experimenting a bit.... clean handling of plugin deletion (potentially open editor window etc.) svn path=/trunk/; revision=2646 --- externals/grill/vst/src/editorwin.hpp | 5 ++++- externals/grill/vst/src/main.cpp | 21 ++++++++++++++------- externals/grill/vst/src/vsthost.cpp | 3 +-- externals/grill/vst/src/vsthost.h | 14 ++++++++------ externals/grill/vst/src/vstmaster.cpp | 29 ++++++++--------------------- externals/grill/vst/vst.vcproj | 4 ++-- 6 files changed, 37 insertions(+), 39 deletions(-) (limited to 'externals/grill/vst') diff --git a/externals/grill/vst/src/editorwin.hpp b/externals/grill/vst/src/editorwin.hpp index 9d97771b..cbdd807f 100644 --- a/externals/grill/vst/src/editorwin.hpp +++ b/externals/grill/vst/src/editorwin.hpp @@ -56,7 +56,7 @@ static LRESULT CALLBACK wndproc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp) case WM_TIMER: // fall through case WM_ENTERIDLE: - plug->EditorIdle(); +// plug->EditorIdle(); break; #if 0 case WM_WINDOWPOSCHANGED: { @@ -225,7 +225,10 @@ static void threadfun(flext::thr_params *p) } else { TranslateMessage(&msg); +// double tm1 = flext::GetOSTime(); DispatchMessage(&msg); +// double tm2 = flext::GetOSTime(); +// if(tm2-tm1 > 0.01) FLEXT_LOG1("halt %lf",(tm2-tm1)*1000); } } diff --git a/externals/grill/vst/src/main.cpp b/externals/grill/vst/src/main.cpp index d90cac4a..d0e5a6c0 100644 --- a/externals/grill/vst/src/main.cpp +++ b/externals/grill/vst/src/main.cpp @@ -12,8 +12,8 @@ WARRANTIES, see the file, "license.txt," in this distribution. #include "main.h" -#include "Editor.h" -#include "VstHost.h" +#include "editor.h" +#include "vsthost.h" #include #include @@ -26,7 +26,7 @@ WARRANTIES, see the file, "license.txt," in this distribution. #endif -#define VST_VERSION "0.1.0pre24" +#define VST_VERSION "0.1.0pre26" class vst @@ -157,7 +157,7 @@ private: int paramnames; int blsz; - void (VSTPlugin::*vstfun)(t_sample **insigs,t_sample **outsigs,long n); + bool (VSTPlugin::*vstfun)(t_sample **insigs,t_sample **outsigs,long n); bool sigmatch; t_sample **vstin,**vstout,**tmpin,**tmpout; @@ -651,8 +651,12 @@ void vst::CbSignal() for(; i < CntOutSig(); ++i) ZeroSamples(outsigs[i],n); } - else if(sigmatch) - (plug->*vstfun)(const_cast(InSig()),const_cast(OutSig()),Blocksize()); + else if(sigmatch) { + if(!(plug->*vstfun)(const_cast(InSig()),const_cast(OutSig()),Blocksize())) { + for(int i = 0; i < CntOutSig(); ++i) + ZeroSamples(OutSig()[i],Blocksize()); + } + } else { const int inputs = plug->GetNumInputs(),outputs = plug->GetNumOutputs(); const int cntin = CntInSig(),cntout = CntOutSig(); @@ -686,7 +690,10 @@ void vst::CbSignal() } // call plugin DSP function - (plug->*vstfun)(inv,outv,n); + if(!(plug->*vstfun)(inv,outv,n)) { + for(int i = 0; i < outputs; ++i) + ZeroSamples(outsigs[i],n); + } if(more) { // according to mode set dangling output vectors diff --git a/externals/grill/vst/src/vsthost.cpp b/externals/grill/vst/src/vsthost.cpp index 384fca28..9553f38d 100644 --- a/externals/grill/vst/src/vsthost.cpp +++ b/externals/grill/vst/src/vsthost.cpp @@ -169,8 +169,7 @@ bool VSTPlugin::NewPlugin(const char *plugname) dllname = plugname; #if FLEXT_OS == FLEXT_OS_WIN - FLEXT_ASSERT(!hdll); - hdll = LoadLibrary(dllname.c_str()); + hdll = LoadLibraryEx(dllname.c_str(),NULL,0 /*DONT_RESOLVE_DLL_REFERENCES*/); if(hdll) pluginmain = (PVSTMAIN)GetProcAddress(hdll,"main"); audiomaster = Master; diff --git a/externals/grill/vst/src/vsthost.h b/externals/grill/vst/src/vsthost.h index 0b055d40..00225b62 100644 --- a/externals/grill/vst/src/vsthost.h +++ b/externals/grill/vst/src/vsthost.h @@ -216,7 +216,7 @@ public: void AddPitchBend(int value) { - AddMIDI(MIDI_PITCHBEND+midichannel,((value>>7)&127),(value&127)); + AddMIDI(MIDI_PITCHBEND+midichannel,(value&127),((value>>7)&127)); } void AddAftertouch(int value) @@ -291,21 +291,23 @@ private: ////////////////////////////////////////////////////////////////////////////// public: - void processReplacing(float **inputs,float **outputs,long sampleframes ) + bool processReplacing(float **inputs,float **outputs,long sampleframes ) { FLEXT_ASSERT(effect); - effect->processReplacing(effect,inputs,outputs,sampleframes); + effect->processReplacing(effect,inputs,outputs,sampleframes); if(playing) updatepos(sampleframes); + return true; } - void process(float **inputs,float **outputs,long sampleframes ) + bool process(float **inputs,float **outputs,long sampleframes ) { FLEXT_ASSERT(effect); - effect->process(effect,inputs,outputs,sampleframes); - if(playing) updatepos(sampleframes); + effect->process(effect,inputs,outputs,sampleframes); + return true; } private: + void updatepos(long frames); ////////////////////////////////////////////////////////////////////////////// diff --git a/externals/grill/vst/src/vstmaster.cpp b/externals/grill/vst/src/vstmaster.cpp index 00a93c80..03457f82 100644 --- a/externals/grill/vst/src/vstmaster.cpp +++ b/externals/grill/vst/src/vstmaster.cpp @@ -70,9 +70,8 @@ void VSTPlugin::ProcessEvent(const VstEvent &ev) // Host callback dispatcher long VSTPlugin::Master(AEffect *effect, long opcode, long index, long value, void *ptr, float opt) { -#ifdef FLEXT_LOGGING - post("VST -> host: Eff = 0x%.8X, Opcode = %d, Index = %d, Value = %d, PTR = %.8X, OPT = %.3f\n",(int)effect, opcode,index,value,(int)ptr,opt); -#endif + if(opcode != audioMasterGetTime) + FLEXT_LOG6("VST -> host: Eff = 0x%.8X, Opcode = %d, Index = %d, Value = %d, PTR = %.8X, OPT = %.3f\n",(int)effect, opcode,index,value,(int)ptr,opt); VSTPlugin *th = effect?(VSTPlugin *)effect->user:NULL; @@ -101,15 +100,11 @@ long VSTPlugin::Master(AEffect *effect, long opcode, long index, long value, voi case audioMasterPinConnected: // 4 //! \todo set connection state correctly (if possible..) // index=pin, value=0..input, else..output -#ifdef FLEXT_LOGGING - post("Pin connected pin=%li conn=%li",index,value); -#endif + FLEXT_LOG2("Pin connected pin=%li conn=%li",index,value); return 0; // 0 means connected case audioMasterWantMidi: // 6 -#ifdef FLEXT_LOGGING - post("Want MIDI = %li",value); -#endif + FLEXT_LOG1("Want MIDI = %li",value); return 0; // VST header says: "currently ignored" case audioMasterGetTime: { // 7 @@ -166,9 +161,7 @@ long VSTPlugin::Master(AEffect *effect, long opcode, long index, long value, voi case audioMasterSetTime: { // 9 VstTimeInfo *tminfo = static_cast(ptr); -#ifdef FLEXT_DEBUG - post("TimeInfo pos=%lf rate=%lf filter=%li",tminfo->samplePos,tminfo->sampleRate,value); -#endif + FLEXT_LOG3("TimeInfo pos=%lf rate=%lf filter=%li",tminfo->samplePos,tminfo->sampleRate,value); return 0; // not supported } @@ -206,9 +199,7 @@ long VSTPlugin::Master(AEffect *effect, long opcode, long index, long value, voi return VST_VERSION; case audioMasterCanDo: // 37 -#ifdef FLEXT_LOGGING - post("\taudioMasterCanDo PTR = %s",ptr); -#endif + FLEXT_LOG1("\taudioMasterCanDo PTR = %s",ptr); if(!strcmp((char *)ptr,"sendVstEvents")) return 1; else if(!strcmp((char *)ptr,"sendVstMidiEvent")) @@ -259,15 +250,11 @@ long VSTPlugin::Master(AEffect *effect, long opcode, long index, long value, voi return (long)(th?th->dllname.c_str():dllloading.c_str()); case audioMasterUpdateDisplay: // 42 -#ifdef FLEXT_LOGGING - post("UPDATE DISPLAY"); -#endif + FLEXT_LOG("UPDATE DISPLAY"); return 0; default: -#ifdef FLEXT_DEBUG - post("Unknown opcode %li",opcode); -#endif + FLEXT_LOG1("Unknown opcode %li",opcode); return 0; } } diff --git a/externals/grill/vst/vst.vcproj b/externals/grill/vst/vst.vcproj index aa447805..53803407 100644 --- a/externals/grill/vst/vst.vcproj +++ b/externals/grill/vst/vst.vcproj @@ -86,8 +86,8 @@