annotate data/model/AggregateWaveModel.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 5877d68815c7
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 _AGGREGATE_WAVE_MODEL_H_
Chris@297 17 #define _AGGREGATE_WAVE_MODEL_H_
Chris@297 18
Chris@297 19 #include "RangeSummarisableTimeValueModel.h"
Chris@297 20 #include "PowerOfSqrtTwoZoomConstraint.h"
Chris@297 21
Chris@297 22 #include <vector>
Chris@297 23
Chris@297 24 class AggregateWaveModel : public RangeSummarisableTimeValueModel
Chris@297 25 {
Chris@297 26 Q_OBJECT
Chris@297 27
Chris@297 28 public:
Chris@297 29 struct ModelChannelSpec
Chris@297 30 {
Chris@297 31 ModelChannelSpec(RangeSummarisableTimeValueModel *m, int c) :
Chris@297 32 model(m), channel(c) { }
Chris@297 33 RangeSummarisableTimeValueModel *model;
Chris@297 34 int channel;
Chris@297 35 };
Chris@297 36
Chris@297 37 typedef std::vector<ModelChannelSpec> ChannelSpecList;
Chris@297 38
Chris@297 39 AggregateWaveModel(ChannelSpecList channelSpecs);
Chris@297 40 ~AggregateWaveModel();
Chris@297 41
Chris@297 42 bool isOK() const;
Chris@297 43 bool isReady(int *) const;
Chris@297 44
Chris@297 45 size_t getComponentCount() const;
Chris@297 46 ModelChannelSpec getComponent(size_t c) const;
Chris@297 47
Chris@297 48 const ZoomConstraint *getZoomConstraint() const { return &m_zoomConstraint; }
Chris@297 49
Chris@297 50 size_t getFrameCount() const;
Chris@297 51 size_t getChannelCount() const;
Chris@297 52 size_t getSampleRate() const;
Chris@297 53
Chris@297 54 virtual Model *clone() const;
Chris@297 55
Chris@297 56 float getValueMinimum() const { return -1.0f; }
Chris@297 57 float getValueMaximum() const { return 1.0f; }
Chris@297 58
Chris@297 59 virtual size_t getStartFrame() const { return 0; }
Chris@297 60 virtual size_t getEndFrame() const { return getFrameCount(); }
Chris@297 61
Chris@297 62 virtual size_t getValues(int channel, size_t start, size_t end,
Chris@297 63 float *buffer) const;
Chris@297 64
Chris@297 65 virtual size_t getValues(int channel, size_t start, size_t end,
Chris@297 66 double *buffer) const;
Chris@297 67
Chris@297 68 virtual void getRanges(size_t channel, size_t start, size_t end,
Chris@297 69 RangeBlock &ranges,
Chris@297 70 size_t &blockSize) const;
Chris@297 71
Chris@297 72 virtual Range getRange(size_t channel, size_t start, size_t end) const;
Chris@297 73
Chris@297 74 virtual void toXml(QTextStream &out,
Chris@297 75 QString indent = "",
Chris@297 76 QString extraAttributes = "") const;
Chris@297 77
Chris@297 78 signals:
Chris@297 79 void modelChanged();
Chris@297 80 void modelChanged(size_t, size_t);
Chris@297 81 void completionChanged();
Chris@297 82
Chris@297 83 protected slots:
Chris@297 84 void componentModelChanged();
Chris@297 85 void componentModelChanged(size_t, size_t);
Chris@297 86 void componentModelCompletionChanged();
Chris@297 87
Chris@297 88 protected:
Chris@297 89 ChannelSpecList m_components;
Chris@297 90 static PowerOfSqrtTwoZoomConstraint m_zoomConstraint;
Chris@297 91 };
Chris@297 92
Chris@297 93 #endif
Chris@297 94