Mercurial > hg > piper-vamp-js
comparison VamPipePluginLibrary.cpp @ 95:5bc28c888d9a
Merge from branch outputid-string-in-featureset
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Mon, 19 Sep 2016 14:48:43 +0100 |
parents | a97aae321809 |
children | 65fa1b372648 |
comparison
equal
deleted
inserted
replaced
91:fb3912e09acf | 95:5bc28c888d9a |
---|---|
98 break; | 98 break; |
99 case RRType::Process: | 99 case RRType::Process: |
100 rr.processRequest = VampJson::toVampRequest_Process(j, m_mapper, serialisation); | 100 rr.processRequest = VampJson::toVampRequest_Process(j, m_mapper, serialisation); |
101 break; | 101 break; |
102 case RRType::Finish: | 102 case RRType::Finish: |
103 rr.finishPlugin = VampJson::toVampRequest_Finish(j, m_mapper); | 103 rr.finishRequest = VampJson::toVampRequest_Finish(j, m_mapper); |
104 break; | 104 break; |
105 case RRType::NotValid: | 105 case RRType::NotValid: |
106 break; | 106 break; |
107 } | 107 } |
108 | 108 |
121 VampJson::BufferSerialisation serialisation = | 121 VampJson::BufferSerialisation serialisation = |
122 (m_useBase64 ? | 122 (m_useBase64 ? |
123 VampJson::BufferSerialisation::Base64 : | 123 VampJson::BufferSerialisation::Base64 : |
124 VampJson::BufferSerialisation::Text); | 124 VampJson::BufferSerialisation::Text); |
125 | 125 |
126 switch (rr.type) { | 126 if (!rr.success) { |
127 | 127 |
128 case RRType::List: | 128 j = VampJson::fromError(rr.errorText, rr.type); |
129 j = VampJson::fromVampResponse_List("", rr.listResponse); | 129 |
130 break; | 130 } else { |
131 case RRType::Load: | 131 |
132 j = VampJson::fromVampResponse_Load(rr.loadResponse, m_mapper); | 132 switch (rr.type) { |
133 break; | 133 |
134 case RRType::Configure: | 134 case RRType::List: |
135 j = VampJson::fromVampResponse_Configure(rr.configurationResponse); | 135 j = VampJson::fromVampResponse_List("", rr.listResponse); |
136 break; | 136 break; |
137 case RRType::Process: | 137 case RRType::Load: |
138 j = VampJson::fromVampResponse_Process(rr.processResponse, serialisation); | 138 j = VampJson::fromVampResponse_Load(rr.loadResponse, m_mapper); |
139 break; | 139 break; |
140 case RRType::Finish: | 140 case RRType::Configure: |
141 j = VampJson::fromVampResponse_Finish(rr.finishResponse, serialisation); | 141 j = VampJson::fromVampResponse_Configure(rr.configurationResponse, |
142 break; | 142 m_mapper); |
143 case RRType::NotValid: | 143 break; |
144 break; | 144 case RRType::Process: |
145 j = VampJson::fromVampResponse_Process | |
146 (rr.processResponse, m_mapper, serialisation); | |
147 break; | |
148 case RRType::Finish: | |
149 j = VampJson::fromVampResponse_Finish | |
150 (rr.finishResponse, m_mapper, serialisation); | |
151 break; | |
152 case RRType::NotValid: | |
153 break; | |
154 } | |
145 } | 155 } |
146 | 156 |
147 return j.dump(); | 157 return j.dump(); |
148 } | 158 } |
149 | 159 |
150 vector<Vamp::HostExt::PluginStaticData> | 160 Vamp::HostExt::ListResponse |
151 VamPipePluginLibrary::listPluginData() const | 161 VamPipePluginLibrary::listPluginData() const |
152 { | 162 { |
153 vector<Vamp::HostExt::PluginStaticData> data; | 163 Vamp::HostExt::ListResponse resp; |
154 for (auto a: m_adapters) { | 164 for (auto a: m_adapters) { |
155 data.push_back(a.second->getStaticData()); | 165 resp.pluginData.push_back(a.second->getStaticData()); |
156 } | 166 } |
157 return data; | 167 return resp; |
158 } | 168 } |
159 | 169 |
160 Vamp::HostExt::LoadResponse | 170 Vamp::HostExt::LoadResponse |
161 VamPipePluginLibrary::loadPlugin(Vamp::HostExt::LoadRequest req) const | 171 VamPipePluginLibrary::loadPlugin(Vamp::HostExt::LoadRequest req) const |
162 { | 172 { |
207 throw runtime_error("plugin has not been configured"); | 217 throw runtime_error("plugin has not been configured"); |
208 } | 218 } |
209 | 219 |
210 Vamp::Plugin *plugin = m_mapper.handleToPlugin(pluginHandle); | 220 Vamp::Plugin *plugin = m_mapper.handleToPlugin(pluginHandle); |
211 Vamp::RealTime timestamp(sec, nsec); | 221 Vamp::RealTime timestamp(sec, nsec); |
212 | 222 |
223 response.processResponse.plugin = plugin; | |
213 response.processResponse.features = plugin->process(inputBuffers, timestamp); | 224 response.processResponse.features = plugin->process(inputBuffers, timestamp); |
214 response.success = true; | 225 response.success = true; |
215 | 226 |
216 m_useBase64 = true; | 227 m_useBase64 = true; |
217 | 228 |
291 throw runtime_error("wrong block size supplied to process"); | 302 throw runtime_error("wrong block size supplied to process"); |
292 } | 303 } |
293 fbuffers[i] = preq.inputBuffers[i].data(); | 304 fbuffers[i] = preq.inputBuffers[i].data(); |
294 } | 305 } |
295 | 306 |
307 response.processResponse.plugin = preq.plugin; | |
296 response.processResponse.features = | 308 response.processResponse.features = |
297 preq.plugin->process(fbuffers, preq.timestamp); | 309 preq.plugin->process(fbuffers, preq.timestamp); |
298 response.success = true; | 310 response.success = true; |
299 | 311 |
300 delete[] fbuffers; | 312 delete[] fbuffers; |
301 break; | 313 break; |
302 } | 314 } |
303 | 315 |
304 case RRType::Finish: | 316 case RRType::Finish: |
305 { | 317 { |
306 auto h = m_mapper.pluginToHandle(request.finishPlugin); | 318 response.finishResponse.plugin = request.finishRequest.plugin; |
307 | |
308 response.finishResponse.features = | 319 response.finishResponse.features = |
309 request.finishPlugin->getRemainingFeatures(); | 320 request.finishRequest.plugin->getRemainingFeatures(); |
310 | 321 |
311 m_mapper.removePlugin(h); | 322 // We do not delete the plugin here -- we need it in the |
312 delete request.finishPlugin; | 323 // mapper when converting the features. It gets deleted |
324 // below, after the writeResponse() call. | |
325 | |
313 response.success = true; | 326 response.success = true; |
314 break; | 327 break; |
315 } | 328 } |
316 | 329 |
317 case RRType::NotValid: | 330 case RRType::NotValid: |
318 break; | 331 break; |
319 } | 332 } |
320 | 333 |
321 return writeResponse(response); | 334 string rstr = writeResponse(response); |
335 | |
336 if (request.type == RRType::Finish) { | |
337 auto h = m_mapper.pluginToHandle(request.finishRequest.plugin); | |
338 m_mapper.removePlugin(h); | |
339 delete request.finishRequest.plugin; | |
340 } | |
341 | |
342 return rstr; | |
322 | 343 |
323 } catch (const std::exception &e) { | 344 } catch (const std::exception &e) { |
324 return VampJson::fromException(e, request.type).dump(); | 345 return VampJson::fromException(e, request.type).dump(); |
325 } | 346 } |
326 } | 347 } |