comparison layer/SpectrogramLayer.cpp @ 1555:745be36202aa spectrogram-export

Provide export model
author Chris Cannam
date Tue, 07 Jan 2020 11:18:43 +0000
parents e6362cf5ff1d
children 3b45788b7804
comparison
equal deleted inserted replaced
1554:a0b2f3b4dd2f 1555:745be36202aa
32 32
33 #include "ColourMapper.h" 33 #include "ColourMapper.h"
34 #include "PianoScale.h" 34 #include "PianoScale.h"
35 #include "PaintAssistant.h" 35 #include "PaintAssistant.h"
36 #include "Colour3DPlotRenderer.h" 36 #include "Colour3DPlotRenderer.h"
37 #include "Colour3DPlotExporter.h"
37 38
38 #include <QPainter> 39 #include <QPainter>
39 #include <QImage> 40 #include <QImage>
40 #include <QPixmap> 41 #include <QPixmap>
41 #include <QRect> 42 #include <QRect>
140 if (m_verticallyFixed) return; 141 if (m_verticallyFixed) return;
141 m_verticallyFixed = true; 142 m_verticallyFixed = true;
142 recreateFFTModel(); 143 recreateFFTModel();
143 } 144 }
144 145
146 ModelId
147 SpectrogramLayer::getExportModel(LayerGeometryProvider *v) const
148 {
149 //!!! Creating Colour3DPlotExporters is cheap, so perhaps we
150 // should create one on every call - calls probably being
151 // infrequent - to avoid having to worry about view lifecycles. We
152 // can't delete them on the same call of course as we need to
153 // return a valid id, so we could push them onto a list that then
154 // gets cleared (with calls to
155 // Colour3DPlotExporter::discardSources() and
156 // ModelById::release()) in deleteDerivedModels()
157
158 Colour3DPlotExporter::Sources sources;
159 sources.verticalBinLayer = this;
160 sources.fft = m_fftModel;
161 sources.source = sources.fft;
162 sources.provider = v;
163
164 Colour3DPlotExporter::Parameters params;
165 params.binDisplay = m_binDisplay;
166
167 ModelId exporter = ModelById::add
168 (std::make_shared<Colour3DPlotExporter>(sources, params));
169 m_exporters.push_back(exporter);
170 return exporter;
171 }
172
145 void 173 void
146 SpectrogramLayer::deleteDerivedModels() 174 SpectrogramLayer::deleteDerivedModels()
147 { 175 {
148 ModelById::release(m_fftModel); 176 ModelById::release(m_fftModel);
149 ModelById::release(m_peakCache); 177 ModelById::release(m_peakCache);
150 ModelById::release(m_wholeCache); 178 ModelById::release(m_wholeCache);
151 179
180 for (auto exporterId: m_exporters) {
181 if (auto exporter =
182 ModelById::getAs<Colour3DPlotExporter>(exporterId)) {
183 exporter->discardSources();
184 }
185 ModelById::release(exporterId);
186 }
187 m_exporters.clear();
188
152 m_fftModel = {}; 189 m_fftModel = {};
153 m_peakCache = {}; 190 m_peakCache = {};
154 m_wholeCache = {}; 191 m_wholeCache = {};
155 } 192 }
156 193