annotate data/model/AlignmentModel.h @ 1290:fa574c909c3d 3.0-integration

Add MAD_BUFFER_GUARD padding at end of mp3 buffer, in order to ensure last frame is decoded successfully (otherwise the decoded audio is truncated). Another thing learned from madplay.
author Chris Cannam
date Thu, 24 Nov 2016 17:06:31 +0000
parents 0fd3661bcfff
children c01cbe41aeb5
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@407 20 #include "PathModel.h"
Chris@338 21 #include "base/RealTime.h"
Chris@338 22
Chris@338 23 #include <QString>
Chris@338 24 #include <QStringList>
Chris@297 25
Chris@297 26 class SparseTimeValueModel;
Chris@297 27
Chris@297 28 class AlignmentModel : public Model
Chris@297 29 {
Chris@297 30 Q_OBJECT
Chris@297 31
Chris@297 32 public:
Chris@297 33 AlignmentModel(Model *reference,
Chris@297 34 Model *aligned,
Chris@1010 35 Model *inputModel, // probably an AggregateWaveModel; may be null; I take ownership
Chris@297 36 SparseTimeValueModel *path); // I take ownership
Chris@297 37 ~AlignmentModel();
Chris@297 38
Chris@297 39 virtual bool isOK() const;
Chris@1038 40 virtual sv_frame_t getStartFrame() const;
Chris@1038 41 virtual sv_frame_t getEndFrame() const;
Chris@1040 42 virtual sv_samplerate_t getSampleRate() const;
Chris@297 43 virtual bool isReady(int *completion = 0) const;
Chris@297 44 virtual const ZoomConstraint *getZoomConstraint() const;
Chris@297 45
Chris@345 46 QString getTypeName() const { return tr("Alignment"); }
Chris@345 47
Chris@297 48 const Model *getReferenceModel() const;
Chris@297 49 const Model *getAlignedModel() const;
Chris@297 50
Chris@1038 51 sv_frame_t toReference(sv_frame_t frame) const;
Chris@1038 52 sv_frame_t fromReference(sv_frame_t frame) const;
Chris@297 53
Chris@1016 54 void setPathFrom(SparseTimeValueModel *rawpath);
Chris@407 55 void setPath(PathModel *path);
Chris@407 56
Chris@407 57 virtual void toXml(QTextStream &stream,
Chris@407 58 QString indent = "",
Chris@407 59 QString extraAttributes = "") const;
Chris@407 60
Chris@297 61 signals:
Chris@297 62 void modelChanged();
Chris@1038 63 void modelChangedWithin(sv_frame_t startFrame, sv_frame_t endFrame);
Chris@297 64 void completionChanged();
Chris@297 65
Chris@297 66 protected slots:
Chris@297 67 void pathChanged();
Chris@1038 68 void pathChangedWithin(sv_frame_t startFrame, sv_frame_t endFrame);
Chris@297 69 void pathCompletionChanged();
Chris@297 70
Chris@297 71 protected:
Chris@297 72 Model *m_reference; // I don't own this
Chris@297 73 Model *m_aligned; // I don't own this
Chris@297 74
Chris@297 75 Model *m_inputModel; // I own this
Chris@338 76
Chris@338 77 SparseTimeValueModel *m_rawPath; // I own this
Chris@338 78 mutable PathModel *m_path; // I own this
Chris@338 79 mutable PathModel *m_reversePath; // I own this
Chris@323 80 bool m_pathBegun;
Chris@297 81 bool m_pathComplete;
Chris@297 82
Chris@338 83 void constructPath() const;
Chris@297 84 void constructReversePath() const;
Chris@297 85
Chris@1038 86 sv_frame_t align(PathModel *path, sv_frame_t frame) const;
Chris@297 87 };
Chris@297 88
Chris@297 89 #endif