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 }