comparison data/model/WritableWaveFileModel.h @ 1133:e994747fb9dd tony-2.0-integration

Adjust model update during recording or writing a new wave file. Formerly we were using the model's completion percentage to indicate write proportion and completion -- that's not a good idea because some layers will reasonably avoid rendering at all until a model reaches 100% completion (it's supposed to report only progress on the initial model generation, and the model shouldn't change during completion updates).
author Chris Cannam
date Tue, 13 Oct 2015 14:26:40 +0100
parents efea94b04d5a
children 3aea4f7617bb
comparison
equal deleted inserted replaced
1131:db946591a391 1133:e994747fb9dd
31 WritableWaveFileModel(sv_samplerate_t sampleRate, int channels, QString path = ""); 31 WritableWaveFileModel(sv_samplerate_t sampleRate, int channels, QString path = "");
32 ~WritableWaveFileModel(); 32 ~WritableWaveFileModel();
33 33
34 /** 34 /**
35 * Call addSamples to append a block of samples to the end of the 35 * Call addSamples to append a block of samples to the end of the
36 * file. Caller should also call setCompletion to update the 36 * file. Caller should also call setWriteProportion() to update
37 * progress of this file, if it has a known end point, and should 37 * the progress of this file, if it has a known end point, and
38 * call setCompletion(100) when the file has been written. 38 * should call writeComplete() when the file has been written.
39 */ 39 */
40 virtual bool addSamples(float **samples, sv_frame_t count); 40 virtual bool addSamples(float **samples, sv_frame_t count);
41
42 /**
43 * Set the proportion of the file which has been written so far,
44 * as a percentage. This may be used to indicate progress.
45 *
46 * Note that this differs from the "completion" percentage
47 * reported through isReady()/getCompletion(). That percentage is
48 * updated when "internal processing has advanced... but the model
49 * has not changed externally", i.e. it reports progress in
50 * calculating the initial state of a model. In contrast, an
51 * update to setWriteProportion corresponds to a change in the
52 * externally visible state of the model (i.e. it contains more
53 * data than before).
54 */
55 void setWriteProportion(int proportion);
56
57 /**
58 * Indicate that writing is complete. You should call this even if
59 * you have never called setWriteProportion().
60 */
61 void writeComplete();
62
63 static const int PROPORTION_UNKNOWN;
64
65 /**
66 * Get the proportion of the file which has been written so far,
67 * as a percentage. Return PROPORTION_UNKNOWN if unknown.
68 */
69 int getWriteProportion() const;
41 70
42 bool isOK() const; 71 bool isOK() const;
43 bool isReady(int *) const; 72 bool isReady(int *) const;
44 73
45 virtual void setCompletion(int completion); // percentage 74 /**
46 virtual int getCompletion() const { return m_completion; } 75 * Return the generation completion percentage of this model. This
76 * is always 100, because the model is always in a complete state
77 * -- it just contains varying amounts of data depending on how
78 * much has been written.
79 */
80 virtual int getCompletion() const { return 100; }
47 81
48 const ZoomConstraint *getZoomConstraint() const { 82 const ZoomConstraint *getZoomConstraint() const {
49 static PowerOfSqrtTwoZoomConstraint zc; 83 static PowerOfSqrtTwoZoomConstraint zc;
50 return &zc; 84 return &zc;
51 } 85 }
99 WavFileReader *m_reader; 133 WavFileReader *m_reader;
100 sv_samplerate_t m_sampleRate; 134 sv_samplerate_t m_sampleRate;
101 int m_channels; 135 int m_channels;
102 sv_frame_t m_frameCount; 136 sv_frame_t m_frameCount;
103 sv_frame_t m_startFrame; 137 sv_frame_t m_startFrame;
104 int m_completion; 138 int m_proportion;
105 }; 139 };
106 140
107 #endif 141 #endif
108 142