annotate data/model/Dense3DModelPeakCache.h @ 1188:d9698ee93659 spectrogram-minor-refactor

Extend column logic to peak frequency display as well, and correct some scopes according to whether values are per source column or per target pixel
author Chris Cannam
date Mon, 20 Jun 2016 12:00:32 +0100
parents 546d4e417346
children f6998e304b36
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@545 16 #ifndef _DENSE_3D_MODEL_PEAK_CACHE_H_
Chris@545 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@545 27 Dense3DModelPeakCache(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@545 48 return m_source->getResolution() * m_resolution;
Chris@545 49 }
Chris@545 50
Chris@929 51 virtual int getWidth() const {
Chris@545 52 return m_source->getWidth() / m_resolution + 1;
Chris@545 53 }
Chris@545 54
Chris@929 55 virtual int getHeight() const {
Chris@545 56 return m_source->getHeight();
Chris@545 57 }
Chris@545 58
Chris@545 59 virtual float getMinimumLevel() const {
Chris@545 60 return m_source->getMinimumLevel();
Chris@545 61 }
Chris@545 62
Chris@545 63 virtual float getMaximumLevel() const {
Chris@545 64 return m_source->getMaximumLevel();
Chris@545 65 }
Chris@545 66
Chris@929 67 virtual Column getColumn(int column) const;
Chris@545 68
Chris@929 69 virtual float getValueAt(int column, int n) const;
Chris@545 70
Chris@929 71 virtual QString getBinName(int n) const {
Chris@545 72 return m_source->getBinName(n);
Chris@545 73 }
Chris@545 74
Chris@545 75 virtual bool shouldUseLogValueScale() const {
Chris@545 76 return m_source->shouldUseLogValueScale();
Chris@545 77 }
Chris@545 78
Chris@545 79 QString getTypeName() const { return tr("Dense 3-D Peak Cache"); }
Chris@545 80
Chris@545 81 virtual int getCompletion() const {
Chris@545 82 return m_source->getCompletion();
Chris@545 83 }
Chris@545 84
Chris@545 85 protected slots:
Chris@545 86 void sourceModelChanged();
Chris@545 87 void sourceModelAboutToBeDeleted();
Chris@545 88
Chris@545 89 private:
Chris@545 90 DenseThreeDimensionalModel *m_source;
Chris@545 91 mutable EditableDenseThreeDimensionalModel *m_cache;
Chris@1153 92 mutable std::vector<bool> m_coverage; // must be bool, for space efficiency
Chris@1153 93 // (vector of bool uses 1-bit elements)
Chris@929 94 int m_resolution;
Chris@545 95
Chris@929 96 bool haveColumn(int column) const;
Chris@929 97 void fillColumn(int column) const;
Chris@545 98 };
Chris@545 99
Chris@545 100
Chris@545 101 #endif