annotate data/fft/FFTFileCacheWriter.h @ 538:87aef350f1dc

* re-enable memory caches!
author Chris Cannam
date Tue, 27 Jan 2009 14:40:04 +0000
parents 3cc4b7cd2aa5
children 107d3f3705c9
rev   line source
Chris@537 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@537 2
Chris@537 3 /*
Chris@537 4 Sonic Visualiser
Chris@537 5 An audio file viewer and annotation editor.
Chris@537 6 Centre for Digital Music, Queen Mary, University of London.
Chris@537 7 This file copyright 2006-2009 Chris Cannam and QMUL.
Chris@537 8
Chris@537 9 This program is free software; you can redistribute it and/or
Chris@537 10 modify it under the terms of the GNU General Public License as
Chris@537 11 published by the Free Software Foundation; either version 2 of the
Chris@537 12 License, or (at your option) any later version. See the file
Chris@537 13 COPYING included with this distribution for more information.
Chris@537 14 */
Chris@537 15
Chris@537 16 #ifndef _FFT_FILE_CACHE_WRITER_H_
Chris@537 17 #define _FFT_FILE_CACHE_WRITER_H_
Chris@537 18
Chris@537 19 #include "FFTCacheStorageType.h"
Chris@537 20 #include "FFTCacheWriter.h"
Chris@537 21 #include "data/fileio/MatrixFile.h"
Chris@537 22
Chris@537 23 class FFTFileCacheWriter : public FFTCacheWriter
Chris@537 24 {
Chris@537 25 public:
Chris@537 26 FFTFileCacheWriter(QString fileBase,
Chris@537 27 FFTCache::StorageType storageType,
Chris@537 28 size_t width, size_t height);
Chris@537 29 ~FFTFileCacheWriter();
Chris@537 30
Chris@537 31 size_t getWidth() const;
Chris@537 32 size_t getHeight() const;
Chris@537 33
Chris@537 34 void setColumnAt(size_t x, float *mags, float *phases, float factor);
Chris@537 35 void setColumnAt(size_t x, float *reals, float *imags);
Chris@537 36
Chris@537 37 static size_t getCacheSize(size_t width, size_t height,
Chris@537 38 FFTCache::StorageType type);
Chris@537 39
Chris@537 40 void allColumnsWritten();
Chris@537 41
Chris@537 42 QString getFileBase() const;
Chris@537 43 FFTCache::StorageType getStorageType() const { return m_storageType; }
Chris@537 44
Chris@537 45 protected:
Chris@537 46 char *m_writebuf;
Chris@537 47
Chris@537 48 void setNormalizationFactorToWritebuf(float newfactor) {
Chris@537 49 size_t h = m_mfc->getHeight();
Chris@537 50 if (h < m_factorSize) return;
Chris@537 51 if (m_storageType != FFTCache::Compact) {
Chris@537 52 ((float *)m_writebuf)[h - 1] = newfactor;
Chris@537 53 } else {
Chris@537 54 union {
Chris@537 55 float f;
Chris@537 56 uint16_t u[2];
Chris@537 57 } factor;
Chris@537 58 factor.f = newfactor;
Chris@537 59 ((uint16_t *)m_writebuf)[h - 2] = factor.u[0];
Chris@537 60 ((uint16_t *)m_writebuf)[h - 1] = factor.u[1];
Chris@537 61 }
Chris@537 62 }
Chris@537 63
Chris@537 64 QString m_fileBase;
Chris@537 65 FFTCache::StorageType m_storageType;
Chris@537 66 size_t m_factorSize;
Chris@537 67 MatrixFile *m_mfc;
Chris@537 68 };
Chris@537 69
Chris@537 70 #endif