annotate data/model/AlignmentModel.h @ 299:576be0d0d218

* Merge transform directory from sv-match-alignment branch (the previous comment included notes for this stuff, but I missed it in the actual merge) * Fix crash when a transform fails to create an output model and the thread that created the transform then deletes its input model thinking it's no longer needed, even though the transform run thread is still using it -- fix is to wait() on the transform before returning the null output model
author Chris Cannam
date Fri, 28 Sep 2007 16:15:06 +0000
parents c022976d18e8
children a71dec01c4d3
rev   line source
Chris@297 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@297 2
Chris@297 3 /*
Chris@297 4 Sonic Visualiser
Chris@297 5 An audio file viewer and annotation editor.
Chris@297 6 Centre for Digital Music, Queen Mary, University of London.
Chris@297 7 This file copyright 2007 QMUL.
Chris@297 8
Chris@297 9 This program is free software; you can redistribute it and/or
Chris@297 10 modify it under the terms of the GNU General Public License as
Chris@297 11 published by the Free Software Foundation; either version 2 of the
Chris@297 12 License, or (at your option) any later version. See the file
Chris@297 13 COPYING included with this distribution for more information.
Chris@297 14 */
Chris@297 15
Chris@297 16 #ifndef _ALIGNMENT_MODEL_H_
Chris@297 17 #define _ALIGNMENT_MODEL_H_
Chris@297 18
Chris@297 19 #include "Model.h"
Chris@297 20
Chris@297 21 class SparseTimeValueModel;
Chris@297 22
Chris@297 23 class AlignmentModel : public Model
Chris@297 24 {
Chris@297 25 Q_OBJECT
Chris@297 26
Chris@297 27 public:
Chris@297 28 AlignmentModel(Model *reference,
Chris@297 29 Model *aligned,
Chris@297 30 Model *inputModel, // probably an AggregateWaveModel; I take ownership
Chris@297 31 SparseTimeValueModel *path); // I take ownership
Chris@297 32 ~AlignmentModel();
Chris@297 33
Chris@297 34 virtual bool isOK() const;
Chris@297 35 virtual size_t getStartFrame() const;
Chris@297 36 virtual size_t getEndFrame() const;
Chris@297 37 virtual size_t getSampleRate() const;
Chris@297 38 virtual Model *clone() const;
Chris@297 39 virtual bool isReady(int *completion = 0) const;
Chris@297 40 virtual const ZoomConstraint *getZoomConstraint() const;
Chris@297 41
Chris@297 42 const Model *getReferenceModel() const;
Chris@297 43 const Model *getAlignedModel() const;
Chris@297 44
Chris@297 45 size_t toReference(size_t frame) const;
Chris@297 46 size_t fromReference(size_t frame) const;
Chris@297 47
Chris@297 48 signals:
Chris@297 49 void modelChanged();
Chris@297 50 void modelChanged(size_t startFrame, size_t endFrame);
Chris@297 51 void completionChanged();
Chris@297 52
Chris@297 53 protected slots:
Chris@297 54 void pathChanged();
Chris@297 55 void pathChanged(size_t startFrame, size_t endFrame);
Chris@297 56 void pathCompletionChanged();
Chris@297 57
Chris@297 58 protected:
Chris@297 59 Model *m_reference; // I don't own this
Chris@297 60 Model *m_aligned; // I don't own this
Chris@297 61
Chris@297 62 Model *m_inputModel; // I own this
Chris@297 63 SparseTimeValueModel *m_path; // I own this
Chris@297 64 mutable SparseTimeValueModel *m_reversePath; // I own this
Chris@297 65 bool m_pathComplete;
Chris@297 66
Chris@297 67 void constructReversePath() const;
Chris@297 68
Chris@297 69 size_t align(SparseTimeValueModel *path, size_t frame) const;
Chris@297 70 };
Chris@297 71
Chris@297 72 #endif