diff options
author | Thomas Grill <xovo@users.sourceforge.net> | 2006-07-01 13:53:20 +0000 |
---|---|---|
committer | Thomas Grill <xovo@users.sourceforge.net> | 2006-07-01 13:53:20 +0000 |
commit | 685365ef51b6d6e26c6c2e89ae544d3919efa69c (patch) | |
tree | 33086a4d3e20f91d153b789b7d0fd882e576df82 /externals/grill | |
parent | 322c35047c31bb9ead78ab25b33881f87203206e (diff) |
some more documentation (proxy objects)
last fixes for release
update docs
optimized DSP processing (less data copying, no more block delay)
fixed send method so that any messages work now
svn path=/trunk/; revision=5330
Diffstat (limited to 'externals/grill')
-rw-r--r-- | externals/grill/dynext/dynext.vcproj | 5 | ||||
-rwxr-xr-x | externals/grill/dynext/readme.txt | 5 | ||||
-rw-r--r-- | externals/grill/dynext/src/main.cpp | 64 |
3 files changed, 40 insertions, 34 deletions
diff --git a/externals/grill/dynext/dynext.vcproj b/externals/grill/dynext/dynext.vcproj index c7ffc7cd..f7edf246 100644 --- a/externals/grill/dynext/dynext.vcproj +++ b/externals/grill/dynext/dynext.vcproj @@ -20,10 +20,11 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="c:\programme\audio\pd-0.39-0\src;..\flext\source" + AdditionalIncludeDirectories="c:\data\pd\pd-cvs\src;..\flext\source" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;PD" BasicRuntimeChecks="3" RuntimeLibrary="5" + RuntimeTypeInfo="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\pd-msvc/d/dyn.pch" AssemblerListingLocation=".\pd-msvc/d/" @@ -38,7 +39,7 @@ Name="VCCustomBuildTool"/> <Tool Name="VCLinkerTool" - AdditionalDependencies="pd.lib pthreadVC.lib" + AdditionalDependencies="pd.lib" OutputFile="$(outdir)/dyn~.dll" LinkIncremental="1" SuppressStartupBanner="TRUE" diff --git a/externals/grill/dynext/readme.txt b/externals/grill/dynext/readme.txt index f28d121c..e779840a 100755 --- a/externals/grill/dynext/readme.txt +++ b/externals/grill/dynext/readme.txt @@ -28,6 +28,9 @@ BUGS: CHANGES: -------- +0.1.2: +- optimized DSP path (less copying, no block delay) + 0.1.1: - using aligned memory - cached several symbols @@ -66,3 +69,5 @@ CHANGES: TODO: -------- - add mute attribute +- separate message and signal proxy objects to save memory + diff --git a/externals/grill/dynext/src/main.cpp b/externals/grill/dynext/src/main.cpp index faf3f137..56c55694 100644 --- a/externals/grill/dynext/src/main.cpp +++ b/externals/grill/dynext/src/main.cpp @@ -2,7 +2,7 @@ dyn~ - dynamical object management for PD -Copyright (c)2003-2005 Thomas Grill (gr@grrrr.org) +Copyright (c)2003-2006 Thomas Grill (gr@grrrr.org) For information on usage and redistribution, and for a DISCLAIMER OF ALL WARRANTIES, see the file, "license.txt," in this distribution. @@ -19,7 +19,7 @@ WARRANTIES, see the file, "license.txt," in this distribution. #error You need at least flext version 0.5.0 #endif -#define DYN_VERSION "0.1.1" +#define DYN_VERSION "0.1.2" #if FLEXT_SYS != FLEXT_SYS_PD @@ -45,7 +45,7 @@ public: dyn(int argc,const t_atom *argv); virtual ~dyn(); - void m_reset() { DoExit(); DoInit(); } + void m_reset(); void m_reload(); // refresh objects/abstractions void m_newobj(int argc,const t_atom *argv); void m_newmsg(int argc,const t_atom *argv); @@ -140,8 +140,6 @@ protected: n = 0,buf = NULL; defsig = 0; } - - static void px_exit(proxy *px) { if(px->buf) FreeAligned(px->buf); } }; // proxy for inbound messages @@ -247,7 +245,7 @@ const t_symbol *dyn::sym_pop = NULL; void dyn::setup(t_classid c) { post(""); - post("dyn~ %s - dynamic object management, (C)2003-2005 Thomas Grill",DYN_VERSION); + post("dyn~ %s - dynamic object management, (C)2003-2006 Thomas Grill",DYN_VERSION); post(""); sym_dynsin = MakeSymbol("dyn_in~"); @@ -259,20 +257,20 @@ void dyn::setup(t_classid c) sym_dyncanvas = MakeSymbol(" dyn~-canvas "); // set up proxy class for inbound messages - pxin_class = class_new(const_cast<t_symbol *>(sym_dynin),(t_newmethod)pxin_new,(t_method)proxy::px_exit,sizeof(proxyin),0, A_NULL); + pxin_class = class_new(const_cast<t_symbol *>(sym_dynin),(t_newmethod)pxin_new,NULL,sizeof(proxyin),0, A_NULL); add_anything(pxin_class,proxyin::px_method); // set up proxy class for inbound signals - pxins_class = class_new(const_cast<t_symbol *>(sym_dynsin),(t_newmethod)pxins_new,(t_method)proxy::px_exit,sizeof(proxyin),0, A_NULL); + pxins_class = class_new(const_cast<t_symbol *>(sym_dynsin),(t_newmethod)pxins_new,NULL,sizeof(proxyin),0, A_NULL); add_dsp(pxins_class,proxyin::dsp); CLASS_MAINSIGNALIN(pxins_class, proxyin, defsig); // set up proxy class for outbound messages - pxout_class = class_new(const_cast<t_symbol *>(sym_dynout),(t_newmethod)pxout_new,(t_method)proxy::px_exit,sizeof(proxyout),0, A_NULL); + pxout_class = class_new(const_cast<t_symbol *>(sym_dynout),(t_newmethod)pxout_new,NULL,sizeof(proxyout),0, A_NULL); add_anything(pxout_class,proxyout::px_method); // set up proxy class for outbound signals - pxouts_class = class_new(const_cast<t_symbol *>(sym_dynsout),(t_newmethod)pxouts_new,(t_method)proxy::px_exit,sizeof(proxyout),0, A_NULL); + pxouts_class = class_new(const_cast<t_symbol *>(sym_dynsout),(t_newmethod)pxouts_new,NULL,sizeof(proxyout),0, A_NULL); add_dsp(pxouts_class,proxyout::dsp); CLASS_MAINSIGNALIN(pxouts_class, proxyout, defsig); @@ -651,6 +649,14 @@ t_gobj *dyn::New(const t_symbol *kind,int _argc_,const t_atom *_argv_,bool add) return newest; } +void dyn::m_reset() +{ + int dsp = canvas_suspend_dsp(); + DoExit(); + DoInit(); + canvas_resume_dsp(dsp); +} + void dyn::m_reload() { post("%s - reload: not implemented yet",thisName()); @@ -837,16 +843,15 @@ void dyn::m_send(int argc,const t_atom *argv) } } - void dyn::proxyin::dsp(proxyin *x,t_signal **sp) { + FLEXT_ASSERT(x->buf && x->n); int n = sp[0]->s_n; if(n != x->n) { - // if vector size has changed make new buffer - if(x->buf) FreeAligned(x->buf); - x->buf = (t_sample *)NewAligned(sizeof(t_sample)*(x->n = n)); + post("dyn~ proxyin - blocksize doesn't match!"); } - dsp_add_copy(x->buf,sp[0]->s_vec,n); + else + dsp_add_copy(x->buf,sp[0]->s_vec,n); } void dyn::proxyin::init(dyn *t,bool s) @@ -860,13 +865,13 @@ void dyn::proxyin::init(dyn *t,bool s) void dyn::proxyout::dsp(proxyout *x,t_signal **sp) { + FLEXT_ASSERT(x->buf && x->n); int n = sp[0]->s_n; if(n != x->n) { - // if vector size has changed make new buffer - if(x->buf) FreeAligned(x->buf); - x->buf = (t_sample *)NewAligned(sizeof(t_sample)*(x->n = n)); + post("dyn~ proxyout - blocksize doesn't match!"); } - dsp_add_copy(sp[0]->s_vec,x->buf,n); + else + dsp_add_copy(sp[0]->s_vec,x->buf,n); } void dyn::proxyout::init(dyn *t,int o,bool s) @@ -879,20 +884,15 @@ void dyn::proxyout::init(dyn *t,int o,bool s) bool dyn::CbDsp() { - // add sub canvas to dsp list (no signal vector to borrow from .. set it to NULL) + int n = Blocksize(); + t_sample *const *in = InSig(),*const *out = OutSig(); + int i; + for(i = 0; i < s_inlets; ++i) pxin[i]->buf = in[i+1],pxin[i]->n = n; + for(i = 0; i < s_outlets; ++i) pxout[i]->buf = out[i],pxout[i]->n = n; + + // add sub canvas to dsp list (no signal vector to borrow from .. set it to NULL) mess1((t_pd *)canvas,const_cast<t_symbol *>(sym_dsp),NULL); return true; } -void dyn::CbSignal() -{ - int i,n = Blocksize(); - t_sample *const *in = InSig(),*const *out = OutSig(); - for(i = 0; i < s_inlets; ++i) - if(pxin[i]->buf) - CopySamples(pxin[i]->buf,in[i+1],n); - - for(i = 0; i < s_outlets; ++i) - if(pxout[i]->buf) - CopySamples(out[i],pxout[i]->buf,n); -} +void dyn::CbSignal() {} |