comparison data/model/ReadOnlyWaveFileModel.h @ 1527:710e6250a401 zoom

Merge from default branch
author Chris Cannam
date Mon, 17 Sep 2018 13:51:14 +0100
parents b7042aaecebe
children d93e34684da7
comparison
equal deleted inserted replaced
1324:d4a28d1479a8 1527:710e6250a401
34 class ReadOnlyWaveFileModel : public WaveFileModel 34 class ReadOnlyWaveFileModel : public WaveFileModel
35 { 35 {
36 Q_OBJECT 36 Q_OBJECT
37 37
38 public: 38 public:
39 /**
40 * Construct a WaveFileModel from a source path and optional
41 * resampling target rate
42 */
39 ReadOnlyWaveFileModel(FileSource source, sv_samplerate_t targetRate = 0); 43 ReadOnlyWaveFileModel(FileSource source, sv_samplerate_t targetRate = 0);
44
45 /**
46 * Construct a WaveFileModel from a source path using an existing
47 * AudioFileReader. The model does not take ownership of the
48 * AudioFileReader, which remains managed by the caller and must
49 * outlive the model.
50 */
40 ReadOnlyWaveFileModel(FileSource source, AudioFileReader *reader); 51 ReadOnlyWaveFileModel(FileSource source, AudioFileReader *reader);
52
41 ~ReadOnlyWaveFileModel(); 53 ~ReadOnlyWaveFileModel();
42 54
43 bool isOK() const; 55 bool isOK() const;
44 bool isReady(int *) const; 56 bool isReady(int *) const;
45 57
62 virtual sv_frame_t getStartFrame() const { return m_startFrame; } 74 virtual sv_frame_t getStartFrame() const { return m_startFrame; }
63 virtual sv_frame_t getEndFrame() const { return m_startFrame + getFrameCount(); } 75 virtual sv_frame_t getEndFrame() const { return m_startFrame + getFrameCount(); }
64 76
65 void setStartFrame(sv_frame_t startFrame) { m_startFrame = startFrame; } 77 void setStartFrame(sv_frame_t startFrame) { m_startFrame = startFrame; }
66 78
67 virtual std::vector<float> getData(int channel, sv_frame_t start, sv_frame_t count) const; 79 virtual floatvec_t getData(int channel, sv_frame_t start, sv_frame_t count) const;
68 80
69 virtual std::vector<std::vector<float>> getMultiChannelData(int fromchannel, int tochannel, sv_frame_t start, sv_frame_t count) const; 81 virtual std::vector<floatvec_t> getMultiChannelData(int fromchannel, int tochannel, sv_frame_t start, sv_frame_t count) const;
70 82
71 virtual int getSummaryBlockSize(int desired) const; 83 virtual int getSummaryBlockSize(int desired) const;
72 84
73 virtual void getSummaries(int channel, sv_frame_t start, sv_frame_t count, 85 virtual void getSummaries(int channel, sv_frame_t start, sv_frame_t count,
74 RangeBlock &ranges, 86 RangeBlock &ranges,
91 103
92 class RangeCacheFillThread : public Thread 104 class RangeCacheFillThread : public Thread
93 { 105 {
94 public: 106 public:
95 RangeCacheFillThread(ReadOnlyWaveFileModel &model) : 107 RangeCacheFillThread(ReadOnlyWaveFileModel &model) :
96 m_model(model), m_fillExtent(0), 108 m_model(model), m_fillExtent(0),
97 m_frameCount(model.getFrameCount()) { } 109 m_frameCount(model.getFrameCount()) { }
98 110
99 sv_frame_t getFillExtent() const { return m_fillExtent; } 111 sv_frame_t getFillExtent() const { return m_fillExtent; }
100 virtual void run(); 112 virtual void run();
101 113
102 protected: 114 protected:
103 ReadOnlyWaveFileModel &m_model; 115 ReadOnlyWaveFileModel &m_model;
104 sv_frame_t m_fillExtent; 116 sv_frame_t m_fillExtent;
105 sv_frame_t m_frameCount; 117 sv_frame_t m_frameCount;
106 }; 118 };
107 119
108 void fillCache(); 120 void fillCache();
109 121
120 QTimer *m_updateTimer; 132 QTimer *m_updateTimer;
121 sv_frame_t m_lastFillExtent; 133 sv_frame_t m_lastFillExtent;
122 bool m_exiting; 134 bool m_exiting;
123 static PowerOfSqrtTwoZoomConstraint m_zoomConstraint; 135 static PowerOfSqrtTwoZoomConstraint m_zoomConstraint;
124 136
125 mutable std::vector<float> m_directRead; 137 mutable floatvec_t m_directRead;
126 mutable sv_frame_t m_lastDirectReadStart; 138 mutable sv_frame_t m_lastDirectReadStart;
127 mutable sv_frame_t m_lastDirectReadCount; 139 mutable sv_frame_t m_lastDirectReadCount;
128 mutable QMutex m_directReadMutex; 140 mutable QMutex m_directReadMutex;
129 }; 141 };
130 142