diff options
author | David Robillard <d@drobilla.net> | 2010-02-20 21:52:36 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2010-02-20 21:52:36 +0000 |
commit | 46e5de590817756b21a7a5d99bd4963df343f455 (patch) | |
tree | 7d7b3b63297b24d84e5b42cc8aeb22d4212738b5 /src/client | |
parent | b96a4015ae39b5bdd9afbd82898c0168a0a8e613 (diff) | |
download | ingen-46e5de590817756b21a7a5d99bd4963df343f455.tar.gz ingen-46e5de590817756b21a7a5d99bd4963df343f455.tar.bz2 ingen-46e5de590817756b21a7a5d99bd4963df343f455.zip |
Heavy overhaul of buffer management and polyphony.
* Working polyphony when nodes are instantiated at desired polyphony
level (dynamic still doesn't work)
* Use shared silent buffer for disconnected audio inputs (save memory)
* Eliminate redundant patch compiling on delete and disconnect-all
events that have child events
* Fix a ton of crash bugs and other issues I've since forgotten
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2468 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/ClientStore.cpp | 19 | ||||
-rw-r--r-- | src/client/PatchModel.cpp | 15 | ||||
-rw-r--r-- | src/client/PatchModel.hpp | 15 |
3 files changed, 23 insertions, 26 deletions
diff --git a/src/client/ClientStore.cpp b/src/client/ClientStore.cpp index b12cdd7b..8a6e008b 100644 --- a/src/client/ClientStore.cpp +++ b/src/client/ClientStore.cpp @@ -249,10 +249,10 @@ void ClientStore::put(const URI& uri, const Resource::Properties& properties) { typedef Resource::Properties::const_iterator iterator; - LOG(debug) << "PUT " << uri << " {" << endl; + /*LOG(info) << "PUT " << uri << " {" << endl; for (iterator i = properties.begin(); i != properties.end(); ++i) - LOG(debug) << " " << i->first << " = " << i->second << " :: " << i->second.type() << endl; - LOG(debug) << "}" << endl; + LOG(info) << " " << i->first << " = " << i->second << " :: " << i->second.type() << endl; + LOG(info) << "}" << endl;*/ bool is_path = Path::is_valid(uri.str()); bool is_meta = ResourceImpl::is_meta_uri(uri); @@ -292,11 +292,7 @@ ClientStore::put(const URI& uri, const Resource::Properties& properties) ResourceImpl::type(properties, is_patch, is_node, is_port, is_output, data_type); if (is_patch) { - uint32_t poly = 1; - iterator p = properties.find(uris.ingen_polyphony); - if (p != properties.end() && p->second.is_valid() && p->second.type() == Atom::INT) - poly = p->second.get_int32(); - SharedPtr<PatchModel> model(new PatchModel(path, poly)); + SharedPtr<PatchModel> model(new PatchModel(path)); model->set_properties(properties); add_object(model); } else if (is_node) { @@ -340,6 +336,13 @@ ClientStore::put(const URI& uri, const Resource::Properties& properties) void ClientStore::delta(const URI& uri, const Resource::Properties& remove, const Resource::Properties& add) { + typedef Resource::Properties::const_iterator iterator; + /*LOG(info) << "DELTA " << uri << " {" << endl; + for (iterator i = remove.begin(); i != remove.end(); ++i) + LOG(info) << " - " << i->first << " = " << i->second << " :: " << i->second.type() << endl; + for (iterator i = add.begin(); i != add.end(); ++i) + LOG(info) << " + " << i->first << " = " << i->second << " :: " << i->second.type() << endl; + LOG(info) << "}" << endl;*/ bool is_meta = ResourceImpl::is_meta_uri(uri); string path_str = is_meta ? (string("/") + uri.chop_start("#")) : uri.str(); if (!Path::is_valid(path_str)) { diff --git a/src/client/PatchModel.cpp b/src/client/PatchModel.cpp index 7d44eb1c..bf4168d6 100644 --- a/src/client/PatchModel.cpp +++ b/src/client/PatchModel.cpp @@ -169,22 +169,19 @@ PatchModel::enabled() const } -Raul::Atom& -PatchModel::set_meta_property(const Raul::URI& key, const Atom& value) +uint32_t +PatchModel::internal_poly() const { - if (key == Shared::LV2URIMap::instance().ingen_polyphony) - _poly = value.get_int32(); - - return NodeModel::set_meta_property(key, value); + const Raul::Atom& poly = get_property(Shared::LV2URIMap::instance().ingen_polyphony); + return poly.is_valid() ? poly.get_int32() : 1; } bool PatchModel::polyphonic() const { - return (_parent) - ? (_poly > 1) && _poly == PtrCast<PatchModel>(_parent)->poly() && _poly > 1 - : (_poly > 1); + const Raul::Atom& poly = get_property(Shared::LV2URIMap::instance().ingen_polyphonic); + return poly.is_valid() && poly.get_bool(); } diff --git a/src/client/PatchModel.hpp b/src/client/PatchModel.hpp index d87c4ee8..1590aa10 100644 --- a/src/client/PatchModel.hpp +++ b/src/client/PatchModel.hpp @@ -46,10 +46,11 @@ public: SharedPtr<ConnectionModel> get_connection(const Raul::Path& src_port_path, const Raul::Path& dst_port_path) const; - uint32_t poly() const { return _poly; } - uint32_t internal_polyphony() const { return _poly; } - bool enabled() const; - bool polyphonic() const; + //uint32_t poly() const { return _poly; } + bool enabled() const; + bool polyphonic() const; + + uint32_t internal_poly() const; /** "editable" = arranging,connecting,adding,deleting,etc * not editable (control mode) you can just change controllers (performing) @@ -62,8 +63,6 @@ public: } } - virtual Raul::Atom& set_meta_property(const Raul::URI& key, const Raul::Atom& value); - // Signals sigc::signal<void, SharedPtr<NodeModel> > signal_new_node; sigc::signal<void, SharedPtr<NodeModel> > signal_removed_node; @@ -74,10 +73,9 @@ public: private: friend class ClientStore; - PatchModel(const Raul::Path& patch_path, size_t internal_poly) + PatchModel(const Raul::Path& patch_path) : NodeModel("http://drobilla.net/ns/ingen#Patch", patch_path) , _connections(new Connections()) - , _poly(internal_poly) , _editable(true) { } @@ -90,7 +88,6 @@ private: void remove_connection(const Raul::Path& src_port_path, const Raul::Path& dst_port_path); SharedPtr<Connections> _connections; - uint32_t _poly; bool _editable; }; |