annotate transform/FileFeatureWriter.h @ 537:3cc4b7cd2aa5

* Merge from one-fftdataserver-per-fftmodel branch. This bit of reworking (which is not described very accurately by the title of the branch) turns the MatrixFile object into something that either reads or writes, but not both, and separates the FFT file cache reader and writer implementations separately. This allows the FFT data server to have a single thread owning writers and one reader per "customer" thread, and for all locking to be vastly simplified and concentrated in the data server alone (because none of the classes it makes use of is used in more than one thread at a time). The result is faster and more trustworthy code.
author Chris Cannam
date Tue, 27 Jan 2009 13:25:10 +0000
parents 38b1ddf18d4b
children 7065e921f122
rev   line source
Chris@498 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@498 2
Chris@498 3 /*
Chris@498 4 Sonic Visualiser
Chris@498 5 An audio file viewer and annotation editor.
Chris@498 6
Chris@498 7 Sonic Annotator
Chris@498 8 A utility for batch feature extraction from audio files.
Chris@498 9
Chris@498 10 Mark Levy, Chris Sutton and Chris Cannam, Queen Mary, University of London.
Chris@498 11 Copyright 2007-2008 QMUL.
Chris@498 12
Chris@498 13 This program is free software; you can redistribute it and/or
Chris@498 14 modify it under the terms of the GNU General Public License as
Chris@498 15 published by the Free Software Foundation; either version 2 of the
Chris@498 16 License, or (at your option) any later version. See the file
Chris@498 17 COPYING included with this distribution for more information.
Chris@498 18 */
Chris@498 19
Chris@498 20 #ifndef _FILE_FEATURE_WRITER_H_
Chris@498 21 #define _FILE_FEATURE_WRITER_H_
Chris@498 22
Chris@498 23 #include <string>
Chris@498 24 #include <map>
Chris@498 25 #include <set>
Chris@498 26
Chris@498 27 #include "FeatureWriter.h"
Chris@498 28
Chris@498 29 using std::string;
Chris@498 30 using std::map;
Chris@498 31 using std::set;
Chris@498 32 using std::pair;
Chris@498 33
Chris@498 34 class QTextStream;
Chris@498 35 class QFile;
Chris@498 36
Chris@498 37 class FileFeatureWriter : public FeatureWriter
Chris@498 38 {
Chris@498 39 public:
Chris@498 40 virtual ~FileFeatureWriter();
Chris@498 41
Chris@498 42 virtual ParameterList getSupportedParameters() const;
Chris@498 43 virtual void setParameters(map<string, string> &params);
Chris@498 44
Chris@515 45 virtual void flush();
Chris@531 46 virtual void finish();
Chris@515 47
Chris@498 48 protected:
Chris@498 49 enum FileWriteSupport {
Chris@498 50 SupportOneFilePerTrackTransform = 1,
Chris@498 51 SupportOneFilePerTrack = 2,
Chris@498 52 SupportOneFileTotal = 4
Chris@498 53 };
Chris@498 54
Chris@498 55 FileFeatureWriter(int support, QString extension);
Chris@498 56 QTextStream *getOutputStream(QString, TransformId);
Chris@498 57
Chris@498 58 typedef pair<QString, TransformId> TrackTransformPair;
Chris@498 59 typedef map<TrackTransformPair, QFile *> FileMap;
Chris@498 60 typedef map<QFile *, QTextStream *> FileStreamMap;
Chris@498 61 FileMap m_files;
Chris@498 62 FileStreamMap m_streams;
Chris@512 63 QTextStream *m_prevstream;
Chris@498 64
Chris@498 65 QString getOutputFilename(QString, TransformId);
Chris@498 66 QFile *getOutputFile(QString, TransformId);
Chris@498 67
Chris@498 68 int m_support;
Chris@498 69 QString m_extension;
Chris@498 70 QString m_baseDir;
Chris@498 71 bool m_manyFiles;
Chris@498 72 QString m_singleFileName;
Chris@498 73 bool m_stdout;
Chris@498 74 bool m_append;
Chris@498 75 bool m_force;
Chris@498 76 };
Chris@498 77
Chris@498 78 #endif