annotate data/model/Dense3DModelPeakCache.h @ 1310:aa1b1fc2d018 mp3-gapless

Stop reporting sync errors only when we really are at eof, i.e. after the input callback has been called again (previously we just tested whether we'd buffered up all the input, which of course we do in one go at the start)
author Chris Cannam
date Tue, 29 Nov 2016 16:45:29 +0000
parents 9884efa1f88a
children df59bf0b4236
rev   line source
Chris@545 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@545 2
Chris@545 3 /*
Chris@545 4 Sonic Visualiser
Chris@545 5 An audio file viewer and annotation editor.
Chris@545 6 Centre for Digital Music, Queen Mary, University of London.
Chris@545 7 This file copyright 2009 QMUL.
Chris@545 8
Chris@545 9 This program is free software; you can redistribute it and/or
Chris@545 10 modify it under the terms of the GNU General Public License as
Chris@545 11 published by the Free Software Foundation; either version 2 of the
Chris@545 12 License, or (at your option) any later version. See the file
Chris@545 13 COPYING included with this distribution for more information.
Chris@545 14 */
Chris@545 15
Chris@1191 16 #ifndef DENSE_3D_MODEL_PEAK_CACHE_H
Chris@1191 17 #define DENSE_3D_MODEL_PEAK_CACHE_H
Chris@545 18
Chris@545 19 #include "DenseThreeDimensionalModel.h"
Chris@545 20 #include "EditableDenseThreeDimensionalModel.h"
Chris@545 21
Chris@545 22 class Dense3DModelPeakCache : public DenseThreeDimensionalModel
Chris@545 23 {
Chris@546 24 Q_OBJECT
Chris@546 25
Chris@545 26 public:
Chris@1191 27 Dense3DModelPeakCache(const DenseThreeDimensionalModel *source,
Chris@929 28 int columnsPerPeak);
Chris@545 29 ~Dense3DModelPeakCache();
Chris@545 30
Chris@546 31 virtual bool isOK() const {
Chris@546 32 return m_source && m_source->isOK();
Chris@546 33 }
Chris@546 34
Chris@1040 35 virtual sv_samplerate_t getSampleRate() const {
Chris@546 36 return m_source->getSampleRate();
Chris@546 37 }
Chris@546 38
Chris@1038 39 virtual sv_frame_t getStartFrame() const {
Chris@546 40 return m_source->getStartFrame();
Chris@546 41 }
Chris@546 42
Chris@1038 43 virtual sv_frame_t getEndFrame() const {
Chris@546 44 return m_source->getEndFrame();
Chris@546 45 }
Chris@546 46
Chris@929 47 virtual int getResolution() const {
Chris@1190 48 return m_source->getResolution() * m_columnsPerPeak;
Chris@545 49 }
Chris@545 50
Chris@1190 51 virtual int getColumnsPerPeak() const {
Chris@1190 52 return m_columnsPerPeak;
Chris@1190 53 }
Chris@1190 54
Chris@929 55 virtual int getWidth() const {
Chris@1192 56 int sourceWidth = m_source->getWidth();
Chris@1192 57 if ((sourceWidth % m_columnsPerPeak) == 0) {
Chris@1192 58 return sourceWidth / m_columnsPerPeak;
Chris@1192 59 } else {
Chris@1192 60 return sourceWidth / m_columnsPerPeak + 1;
Chris@1192 61 }
Chris@545 62 }
Chris@545 63
Chris@929 64 virtual int getHeight() const {
Chris@545 65 return m_source->getHeight();
Chris@545 66 }
Chris@545 67
Chris@545 68 virtual float getMinimumLevel() const {
Chris@545 69 return m_source->getMinimumLevel();
Chris@545 70 }
Chris@545 71
Chris@545 72 virtual float getMaximumLevel() const {
Chris@545 73 return m_source->getMaximumLevel();
Chris@545 74 }
Chris@545 75
Chris@929 76 virtual Column getColumn(int column) const;
Chris@545 77
Chris@929 78 virtual float getValueAt(int column, int n) const;
Chris@545 79
Chris@929 80 virtual QString getBinName(int n) const {
Chris@545 81 return m_source->getBinName(n);
Chris@545 82 }
Chris@545 83
Chris@545 84 virtual bool shouldUseLogValueScale() const {
Chris@545 85 return m_source->shouldUseLogValueScale();
Chris@545 86 }
Chris@545 87
Chris@545 88 QString getTypeName() const { return tr("Dense 3-D Peak Cache"); }
Chris@545 89
Chris@545 90 virtual int getCompletion() const {
Chris@545 91 return m_source->getCompletion();
Chris@545 92 }
Chris@545 93
Chris@545 94 protected slots:
Chris@545 95 void sourceModelChanged();
Chris@545 96 void sourceModelAboutToBeDeleted();
Chris@545 97
Chris@545 98 private:
Chris@1191 99 const DenseThreeDimensionalModel *m_source;
Chris@545 100 mutable EditableDenseThreeDimensionalModel *m_cache;
Chris@1153 101 mutable std::vector<bool> m_coverage; // must be bool, for space efficiency
Chris@1153 102 // (vector of bool uses 1-bit elements)
Chris@1190 103 int m_columnsPerPeak;
Chris@545 104
Chris@929 105 bool haveColumn(int column) const;
Chris@929 106 void fillColumn(int column) const;
Chris@545 107 };
Chris@545 108
Chris@545 109
Chris@545 110 #endif