comparison transform/ModelTransformerFactory.cpp @ 1713:978c143c767f

Merge from branch single-point
author Chris Cannam
date Fri, 17 May 2019 10:02:43 +0100
parents b17fb3a4560c
children 8efce64dd85e
comparison
equal deleted inserted replaced
1709:ab4fd193262b 1713:978c143c767f
32 32
33 #include <iostream> 33 #include <iostream>
34 #include <set> 34 #include <set>
35 35
36 #include <QRegExp> 36 #include <QRegExp>
37 #include <QMutexLocker>
37 38
38 using std::vector; 39 using std::vector;
39 40
40 ModelTransformerFactory * 41 ModelTransformerFactory *
41 ModelTransformerFactory::m_instance = new ModelTransformerFactory; 42 ModelTransformerFactory::m_instance = new ModelTransformerFactory;
57 AudioPlaySource *source, 58 AudioPlaySource *source,
58 sv_frame_t startFrame, 59 sv_frame_t startFrame,
59 sv_frame_t duration, 60 sv_frame_t duration,
60 UserConfigurator *configurator) 61 UserConfigurator *configurator)
61 { 62 {
63 QMutexLocker locker(&m_mutex);
64
62 ModelTransformer::Input input(nullptr); 65 ModelTransformer::Input input(nullptr);
63 66
64 if (candidateInputModels.empty()) return input; 67 if (candidateInputModels.empty()) return input;
65 68
66 //!!! This will need revision -- we'll have to have a callback 69 //!!! This will need revision -- we'll have to have a callback
210 const ModelTransformer::Input &input, 213 const ModelTransformer::Input &input,
211 QString &message, 214 QString &message,
212 AdditionalModelHandler *handler) 215 AdditionalModelHandler *handler)
213 { 216 {
214 SVDEBUG << "ModelTransformerFactory::transformMultiple: Constructing transformer with input model " << input.getModel() << endl; 217 SVDEBUG << "ModelTransformerFactory::transformMultiple: Constructing transformer with input model " << input.getModel() << endl;
218
219 QMutexLocker locker(&m_mutex);
215 220
216 ModelTransformer *t = createTransformer(transforms, input); 221 ModelTransformer *t = createTransformer(transforms, input);
217 if (!t) return vector<Model *>(); 222 if (!t) return vector<Model *>();
218 223
219 if (handler) { 224 if (handler) {
253 } 258 }
254 259
255 void 260 void
256 ModelTransformerFactory::transformerFinished() 261 ModelTransformerFactory::transformerFinished()
257 { 262 {
263 QMutexLocker locker(&m_mutex);
264
258 QObject *s = sender(); 265 QObject *s = sender();
259 ModelTransformer *transformer = dynamic_cast<ModelTransformer *>(s); 266 ModelTransformer *transformer = dynamic_cast<ModelTransformer *>(s);
260 267
261 // SVDEBUG << "ModelTransformerFactory::transformerFinished(" << transformer << ")" << endl; 268 // SVDEBUG << "ModelTransformerFactory::transformerFinished(" << transformer << ")" << endl;
262 269
297 void 304 void
298 ModelTransformerFactory::modelAboutToBeDeleted(Model *m) 305 ModelTransformerFactory::modelAboutToBeDeleted(Model *m)
299 { 306 {
300 TransformerSet affected; 307 TransformerSet affected;
301 308
302 for (TransformerSet::iterator i = m_runningTransformers.begin(); 309 {
303 i != m_runningTransformers.end(); ++i) { 310 QMutexLocker locker(&m_mutex);
304 311
305 ModelTransformer *t = *i; 312 for (TransformerSet::iterator i = m_runningTransformers.begin();
306 313 i != m_runningTransformers.end(); ++i) {
307 if (t->getInputModel() == m) { 314
308 affected.insert(t); 315 ModelTransformer *t = *i;
309 } else { 316
310 vector<Model *> mm = t->getOutputModels(); 317 if (t->getInputModel() == m) {
311 for (int i = 0; i < (int)mm.size(); ++i) { 318 affected.insert(t);
312 if (mm[i] == m) affected.insert(t); 319 } else {
320 vector<Model *> mm = t->getOutputModels();
321 for (int i = 0; i < (int)mm.size(); ++i) {
322 if (mm[i] == m) affected.insert(t);
323 }
313 } 324 }
314 } 325 }
315 } 326 }
316 327
317 for (TransformerSet::iterator i = affected.begin(); 328 for (TransformerSet::iterator i = affected.begin();
325 // transformerFinished, which will remove from 336 // transformerFinished, which will remove from
326 // m_runningTransformers and delete. 337 // m_runningTransformers and delete.
327 } 338 }
328 } 339 }
329 340
341 bool
342 ModelTransformerFactory::haveRunningTransformers() const
343 {
344 QMutexLocker locker(&m_mutex);
345
346 return (!m_runningTransformers.empty());
347 }