Mercurial > hg > piper-cpp
comparison vamp-client/PiperCapnpClient.h @ 91:c897c9a8daf1
Implement reset()
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Thu, 13 Oct 2016 11:33:19 +0100 |
parents | 6429a99abcad |
children | 21f8af53eaf0 |
comparison
equal
deleted
inserted
replaced
90:6429a99abcad | 91:c897c9a8daf1 |
---|---|
34 | 34 |
35 if (!m_transport->isOK()) { | 35 if (!m_transport->isOK()) { |
36 throw std::runtime_error("Piper server failed to start"); | 36 throw std::runtime_error("Piper server failed to start"); |
37 } | 37 } |
38 | 38 |
39 Vamp::HostExt::PluginStaticData psd; | |
40 Vamp::HostExt::PluginConfiguration defaultConfig; | |
41 PluginHandleMapper::Handle handle = | |
42 serverLoad(key, inputSampleRate, adapterFlags, psd, defaultConfig); | |
43 | |
44 Vamp::Plugin *plugin = new PiperStubPlugin(this, | |
45 key, | |
46 inputSampleRate, | |
47 adapterFlags, | |
48 psd, | |
49 defaultConfig); | |
50 | |
51 m_mapper.addPlugin(handle, plugin); | |
52 | |
53 return plugin; | |
54 } | |
55 | |
56 PluginHandleMapper::Handle | |
57 serverLoad(std::string key, float inputSampleRate, int adapterFlags, | |
58 Vamp::HostExt::PluginStaticData &psd, | |
59 Vamp::HostExt::PluginConfiguration &defaultConfig) { | |
60 | |
39 Vamp::HostExt::LoadRequest request; | 61 Vamp::HostExt::LoadRequest request; |
40 request.pluginKey = key; | 62 request.pluginKey = key; |
41 request.inputSampleRate = inputSampleRate; | 63 request.inputSampleRate = inputSampleRate; |
42 request.adapterFlags = adapterFlags; | 64 request.adapterFlags = adapterFlags; |
43 | 65 |
46 | 68 |
47 VampnProto::buildRpcRequest_Load(builder, request); | 69 VampnProto::buildRpcRequest_Load(builder, request); |
48 ReqId id = getId(); | 70 ReqId id = getId(); |
49 builder.getId().setNumber(id); | 71 builder.getId().setNumber(id); |
50 | 72 |
51 auto arr = messageToFlatArray(message); | 73 auto arr = capnp::messageToFlatArray(message); |
52 | 74 |
53 auto responseBuffer = m_transport->call(arr.asChars().begin(), | 75 auto responseBuffer = m_transport->call(arr.asChars().begin(), |
54 arr.asChars().size()); | 76 arr.asChars().size()); |
55 | 77 |
56 //!!! ... --> will also need some way to kill this process | 78 //!!! ... --> will also need some way to kill this process |
63 //!!! handle (explicit) error case | 85 //!!! handle (explicit) error case |
64 | 86 |
65 checkResponseType(reader, RpcResponse::Response::Which::LOAD, id); | 87 checkResponseType(reader, RpcResponse::Response::Which::LOAD, id); |
66 | 88 |
67 const LoadResponse::Reader &lr = reader.getResponse().getLoad(); | 89 const LoadResponse::Reader &lr = reader.getResponse().getLoad(); |
68 | |
69 Vamp::HostExt::PluginStaticData psd; | |
70 Vamp::HostExt::PluginConfiguration defaultConfig; | |
71 VampnProto::readExtractorStaticData(psd, lr.getStaticData()); | 90 VampnProto::readExtractorStaticData(psd, lr.getStaticData()); |
72 VampnProto::readConfiguration(defaultConfig, lr.getDefaultConfiguration()); | 91 VampnProto::readConfiguration(defaultConfig, lr.getDefaultConfiguration()); |
73 | 92 return lr.getHandle(); |
74 Vamp::Plugin *plugin = new PiperStubPlugin(this, | |
75 inputSampleRate, | |
76 psd, | |
77 defaultConfig); | |
78 | |
79 m_mapper.addPlugin(lr.getHandle(), plugin); | |
80 | |
81 return plugin; | |
82 }; | 93 }; |
83 | 94 |
84 protected: | 95 protected: |
85 virtual | 96 virtual |
86 Vamp::Plugin::OutputList | 97 Vamp::Plugin::OutputList |
100 | 111 |
101 VampnProto::buildRpcRequest_Configure(builder, request, m_mapper); | 112 VampnProto::buildRpcRequest_Configure(builder, request, m_mapper); |
102 ReqId id = getId(); | 113 ReqId id = getId(); |
103 builder.getId().setNumber(id); | 114 builder.getId().setNumber(id); |
104 | 115 |
105 auto arr = messageToFlatArray(message); | 116 auto arr = capnp::messageToFlatArray(message); |
106 auto responseBuffer = m_transport->call(arr.asChars().begin(), | 117 auto responseBuffer = m_transport->call(arr.asChars().begin(), |
107 arr.asChars().size()); | 118 arr.asChars().size()); |
108 auto karr = toKJArray(responseBuffer); | 119 auto karr = toKJArray(responseBuffer); |
109 capnp::FlatArrayMessageReader responseMessage(karr); | 120 capnp::FlatArrayMessageReader responseMessage(karr); |
110 RpcResponse::Reader reader = responseMessage.getRoot<RpcResponse>(); | 121 RpcResponse::Reader reader = responseMessage.getRoot<RpcResponse>(); |
141 | 152 |
142 VampnProto::buildRpcRequest_Process(builder, request, m_mapper); | 153 VampnProto::buildRpcRequest_Process(builder, request, m_mapper); |
143 ReqId id = getId(); | 154 ReqId id = getId(); |
144 builder.getId().setNumber(id); | 155 builder.getId().setNumber(id); |
145 | 156 |
146 auto arr = messageToFlatArray(message); | 157 auto arr = capnp::messageToFlatArray(message); |
147 auto responseBuffer = m_transport->call(arr.asChars().begin(), | 158 auto responseBuffer = m_transport->call(arr.asChars().begin(), |
148 arr.asChars().size()); | 159 arr.asChars().size()); |
149 auto karr = toKJArray(responseBuffer); | 160 auto karr = toKJArray(responseBuffer); |
150 capnp::FlatArrayMessageReader responseMessage(karr); | 161 capnp::FlatArrayMessageReader responseMessage(karr); |
151 RpcResponse::Reader reader = responseMessage.getRoot<RpcResponse>(); | 162 RpcResponse::Reader reader = responseMessage.getRoot<RpcResponse>(); |
177 | 188 |
178 VampnProto::buildRpcRequest_Finish(builder, request, m_mapper); | 189 VampnProto::buildRpcRequest_Finish(builder, request, m_mapper); |
179 ReqId id = getId(); | 190 ReqId id = getId(); |
180 builder.getId().setNumber(id); | 191 builder.getId().setNumber(id); |
181 | 192 |
182 auto arr = messageToFlatArray(message); | 193 auto arr = capnp::messageToFlatArray(message); |
183 auto responseBuffer = m_transport->call(arr.asChars().begin(), | 194 auto responseBuffer = m_transport->call(arr.asChars().begin(), |
184 arr.asChars().size()); | 195 arr.asChars().size()); |
185 auto karr = toKJArray(responseBuffer); | 196 auto karr = toKJArray(responseBuffer); |
186 capnp::FlatArrayMessageReader responseMessage(karr); | 197 capnp::FlatArrayMessageReader responseMessage(karr); |
187 RpcResponse::Reader reader = responseMessage.getRoot<RpcResponse>(); | 198 RpcResponse::Reader reader = responseMessage.getRoot<RpcResponse>(); |
201 // to be calling us here | 212 // to be calling us here |
202 | 213 |
203 return pr.features; | 214 return pr.features; |
204 } | 215 } |
205 | 216 |
217 virtual void | |
218 reset(PiperStubPlugin *plugin, | |
219 Vamp::HostExt::PluginConfiguration config) override { | |
220 | |
221 // Reload the plugin on the server side, and configure it as requested | |
222 | |
223 if (!m_transport->isOK()) { | |
224 throw std::runtime_error("Piper server failed to start"); | |
225 } | |
226 | |
227 if (m_mapper.havePlugin(plugin)) { | |
228 (void)finish(plugin); // server-side unload | |
229 } | |
230 | |
231 Vamp::HostExt::PluginStaticData psd; | |
232 Vamp::HostExt::PluginConfiguration defaultConfig; | |
233 PluginHandleMapper::Handle handle = | |
234 serverLoad(plugin->getPluginKey(), | |
235 plugin->getInputSampleRate(), | |
236 plugin->getAdapterFlags(), | |
237 psd, defaultConfig); | |
238 | |
239 m_mapper.addPlugin(handle, plugin); | |
240 | |
241 (void)configure(plugin, config); | |
242 } | |
243 | |
206 private: | 244 private: |
207 AssignedPluginHandleMapper m_mapper; | 245 AssignedPluginHandleMapper m_mapper; |
208 ReqId getId() { | 246 ReqId getId() { |
209 //!!! todo: mutex | 247 //!!! todo: mutex |
210 static ReqId m_nextId = 0; | 248 static ReqId m_nextId = 0; |