annotate transform/FileFeatureWriter.h @ 1671:82d03c9661f9 single-point

Rework isReady()/getCompletion() on models. Previously the new overhauled models were implementing getCompletion() but inheriting a version of isReady() (from the Model base) that didn't call it, referring only to isOK(). So they were reporting completion as soon as they had begun. Instead hoist getCompletion() to abstract base and call it from Model::isReady().
author Chris Cannam
date Wed, 27 Mar 2019 13:15:16 +0000
parents ad5f892c0c4d
children
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@1581 20 #ifndef SV_FILE_FEATURE_WRITER_H
Chris@1581 21 #define SV_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@1035 35 class QTextCodec;
Chris@498 36 class QFile;
Chris@498 37
Chris@498 38 class FileFeatureWriter : public FeatureWriter
Chris@498 39 {
Chris@498 40 public:
Chris@498 41 virtual ~FileFeatureWriter();
Chris@498 42
Chris@1580 43 ParameterList getSupportedParameters() const override;
Chris@1580 44 void setParameters(map<string, string> &params) override;
Chris@498 45
Chris@1580 46 void testOutputFile(QString trackId, TransformId transformId) override;
Chris@1580 47 void flush() override;
Chris@1580 48 void finish() override;
Chris@515 49
Chris@498 50 protected:
Chris@498 51 enum FileWriteSupport {
Chris@498 52 SupportOneFilePerTrackTransform = 1,
Chris@498 53 SupportOneFilePerTrack = 2,
Chris@997 54 SupportOneFileTotal = 4,
Chris@997 55 SupportStdOut = 8
Chris@498 56 };
Chris@498 57
Chris@498 58 FileFeatureWriter(int support, QString extension);
Chris@1035 59 QTextStream *getOutputStream(QString, TransformId, QTextCodec *);
Chris@498 60
Chris@498 61 typedef pair<QString, TransformId> TrackTransformPair;
Chris@999 62 typedef map<TrackTransformPair, QString> FileNameMap;
Chris@498 63 typedef map<TrackTransformPair, QFile *> FileMap;
Chris@498 64 typedef map<QFile *, QTextStream *> FileStreamMap;
Chris@498 65 FileMap m_files;
Chris@999 66 FileNameMap m_filenames;
Chris@498 67 FileStreamMap m_streams;
Chris@512 68 QTextStream *m_prevstream;
Chris@498 69
Chris@999 70 TrackTransformPair getFilenameKey(QString, TransformId);
Chris@999 71
Chris@999 72 // Come up with a suitable output filename for the given track ID -
Chris@999 73 // transform ID combo. Fail if it already exists, etc.
Chris@999 74 QString createOutputFilename(QString, TransformId);
Chris@999 75
Chris@999 76 // Look up and return the output filename for the given track ID -
Chris@999 77 // transform ID combo.
Chris@498 78 QString getOutputFilename(QString, TransformId);
Chris@999 79
Chris@999 80 // Look up and return the output file handle for the given track
Chris@999 81 // ID - transform ID combo. Return 0 if it could not be opened.
Chris@498 82 QFile *getOutputFile(QString, TransformId);
Chris@591 83
Chris@591 84 // subclass can implement this to be called before file is opened for append
Chris@930 85 virtual void reviewFileForAppending(QString) { }
Chris@498 86
Chris@498 87 int m_support;
Chris@498 88 QString m_extension;
Chris@498 89 QString m_baseDir;
Chris@498 90 bool m_manyFiles;
Chris@498 91 QString m_singleFileName;
Chris@498 92 bool m_stdout;
Chris@498 93 bool m_append;
Chris@498 94 bool m_force;
Chris@498 95 };
Chris@498 96
Chris@498 97 #endif