annotate transform/FeatureExtractionModelTransformer.h @ 497:b6dc6c7f402c

Various fixes: * Fix handling of HTTP redirects (avoiding crashes... I hope) * Fix failure to delete FFT models when a feature extraction model transformer was abandoned (also a cause of crashes in the past) * Fix deadlock when said transform was abandoned before its source model was ready because the session was being cleared (and so the source model would never be ready)
author Chris Cannam
date Fri, 28 Nov 2008 13:36:13 +0000
parents a70dcfed59c1
children 1d7ebc05157e
rev   line source
Chris@320 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@320 2
Chris@320 3 /*
Chris@320 4 Sonic Visualiser
Chris@320 5 An audio file viewer and annotation editor.
Chris@320 6 Centre for Digital Music, Queen Mary, University of London.
Chris@320 7 This file copyright 2006 Chris Cannam and QMUL.
Chris@320 8
Chris@320 9 This program is free software; you can redistribute it and/or
Chris@320 10 modify it under the terms of the GNU General Public License as
Chris@320 11 published by the Free Software Foundation; either version 2 of the
Chris@320 12 License, or (at your option) any later version. See the file
Chris@320 13 COPYING included with this distribution for more information.
Chris@320 14 */
Chris@320 15
Chris@328 16 #ifndef _FEATURE_EXTRACTION_PLUGIN_TRANSFORMER_H_
Chris@328 17 #define _FEATURE_EXTRACTION_PLUGIN_TRANSFORMER_H_
Chris@320 18
Chris@350 19 #include "ModelTransformer.h"
Chris@350 20
Chris@361 21 #include <QString>
Chris@361 22
Chris@475 23 #include <vamp-hostsdk/Plugin.h>
Chris@350 24
Chris@350 25 #include <iostream>
Chris@320 26
Chris@320 27 class DenseTimeValueModel;
Chris@320 28
Chris@350 29 class FeatureExtractionModelTransformer : public ModelTransformer
Chris@320 30 {
Chris@320 31 Q_OBJECT
Chris@320 32
Chris@320 33 public:
Chris@350 34 FeatureExtractionModelTransformer(Input input,
Chris@350 35 const Transform &transform);
Chris@331 36 virtual ~FeatureExtractionModelTransformer();
Chris@320 37
Chris@320 38 protected:
Chris@320 39 virtual void run();
Chris@320 40
Chris@320 41 Vamp::Plugin *m_plugin;
Chris@320 42 Vamp::Plugin::OutputDescriptor *m_descriptor;
Chris@320 43 int m_outputFeatureNo;
Chris@320 44
Chris@320 45 void addFeature(size_t blockFrame,
Chris@320 46 const Vamp::Plugin::Feature &feature);
Chris@320 47
Chris@320 48 void setCompletion(int);
Chris@320 49
Chris@363 50 void getFrames(int channelCount, long startFrame, long size,
Chris@363 51 float **buffer);
Chris@320 52
Chris@320 53 // just casts
Chris@441 54
Chris@350 55 DenseTimeValueModel *getConformingInput();
Chris@441 56
Chris@441 57 template <typename ModelClass> bool isOutput() {
Chris@441 58 return dynamic_cast<ModelClass *>(m_output) != 0;
Chris@441 59 }
Chris@441 60
Chris@350 61 template <typename ModelClass> ModelClass *getConformingOutput() {
Chris@320 62 ModelClass *mc = dynamic_cast<ModelClass *>(m_output);
Chris@320 63 if (!mc) {
Chris@331 64 std::cerr << "FeatureExtractionModelTransformer::getOutput: Output model not conformable" << std::endl;
Chris@320 65 }
Chris@320 66 return mc;
Chris@320 67 }
Chris@320 68 };
Chris@320 69
Chris@320 70 #endif
Chris@320 71