FFTDataServer Class Reference

#include <FFTDataServer.h>

Collaboration diagram for FFTDataServer:

Collaboration graph
[legend]
List of all members.

Detailed Description

Definition at line 36 of file FFTDataServer.h.

Public Member Functions

const DenseTimeValueModelgetModel () const
int getChannel () const
WindowType getWindowType () const
size_t getWindowSize () const
size_t getWindowIncrement () const
size_t getFFTSize () const
bool getPolar () const
size_t getWidth () const
size_t getHeight () const
float getMagnitudeAt (size_t x, size_t y)
float getNormalizedMagnitudeAt (size_t x, size_t y)
float getMaximumMagnitudeAt (size_t x)
float getPhaseAt (size_t x, size_t y)
void getValuesAt (size_t x, size_t y, float &real, float &imaginary)
bool isColumnReady (size_t x)
void suspend ()
void suspendWrites ()
void resume ()
bool isLocalPeak (size_t x, size_t y)
bool isOverThreshold (size_t x, size_t y, float threshold)
size_t getFillCompletion () const
size_t getFillExtent () const

Static Public Member Functions

static FFTDataServergetInstance (const DenseTimeValueModel *model, int channel, WindowType windowType, size_t windowSize, size_t windowIncrement, size_t fftSize, bool polar, StorageAdviser::Criteria criteria=StorageAdviser::NoCriteria, size_t fillFromColumn=0)
static FFTDataServergetFuzzyInstance (const DenseTimeValueModel *model, int channel, WindowType windowType, size_t windowSize, size_t windowIncrement, size_t fftSize, bool polar, StorageAdviser::Criteria criteria=StorageAdviser::NoCriteria, size_t fillFromColumn=0)
static void claimInstance (FFTDataServer *)
static void releaseInstance (FFTDataServer *)
static void modelAboutToBeDeleted (Model *)

Private Types

typedef float fftsample
typedef std::vector< FFTCache * > CacheVector
typedef std::deque< int > IntQueue
typedef std::pair< FFTDataServer *,
int > 
ServerCountPair
typedef std::map< QString,
ServerCountPair
ServerMap
typedef std::deque< FFTDataServer * > ServerQueue

Private Member Functions

 FFTDataServer (QString fileBaseName, const DenseTimeValueModel *model, int channel, WindowType windowType, size_t windowSize, size_t windowIncrement, size_t fftSize, bool polar, StorageAdviser::Criteria criteria, size_t fillFromColumn=0)
virtual ~FFTDataServer ()
 FFTDataServer (const FFTDataServer &)
FFTDataServeroperator= (const FFTDataServer &)
FFTCachegetCache (size_t x, size_t &col)
bool haveCache (size_t x)
void getStorageAdvice (size_t w, size_t h, bool &memory, bool &compact)
FFTCachegetCacheAux (size_t c)
void deleteProcessingData ()
void fillColumn (size_t x)
QString generateFileBasename () const

Static Private Member Functions

static QString generateFileBasename (const DenseTimeValueModel *model, int channel, WindowType windowType, size_t windowSize, size_t windowIncrement, size_t fftSize, bool polar)
static FFTDataServerfindServer (QString)
static void purgeLimbo (int maxSize=3)
static void claimInstance (FFTDataServer *, bool needLock)
static void releaseInstance (FFTDataServer *, bool needLock)

Private Attributes

QString m_fileBaseName
const DenseTimeValueModelm_model
int m_channel
Window< fftsamplem_windower
size_t m_windowSize
size_t m_windowIncrement
size_t m_fftSize
bool m_polar
size_t m_width
size_t m_height
size_t m_cacheWidth
size_t m_cacheWidthPower
size_t m_cacheWidthMask
int m_lastUsedCache
CacheVector m_caches
IntQueue m_dormantCaches
StorageAdviser::Criteria m_criteria
QMutex m_writeMutex
QWaitCondition m_condition
fftsamplem_fftInput
fftf_complex * m_fftOutput
float * m_workbuffer
fftf_plan m_fftPlan
bool m_exiting
bool m_suspended
FillThreadm_fillThread

Static Private Attributes

static ServerMap m_servers
static ServerQueue m_releasedServers
static QMutex m_serverMapMutex

Classes

class  FillThread


Member Typedef Documentation

typedef float FFTDataServer::fftsample [private]

Definition at line 120 of file FFTDataServer.h.

typedef std::vector<FFTCache *> FFTDataServer::CacheVector [private]

Definition at line 155 of file FFTDataServer.h.

typedef std::deque<int> FFTDataServer::IntQueue [private]

Definition at line 158 of file FFTDataServer.h.

typedef std::pair<FFTDataServer *, int> FFTDataServer::ServerCountPair [private]

Definition at line 208 of file FFTDataServer.h.

typedef std::map<QString, ServerCountPair> FFTDataServer::ServerMap [private]

Definition at line 209 of file FFTDataServer.h.

typedef std::deque<FFTDataServer *> FFTDataServer::ServerQueue [private]

Definition at line 210 of file FFTDataServer.h.


Constructor & Destructor Documentation

FFTDataServer::FFTDataServer ( QString  fileBaseName,
const DenseTimeValueModel model,
int  channel,
WindowType  windowType,
size_t  windowSize,
size_t  windowIncrement,
size_t  fftSize,
bool  polar,
StorageAdviser::Criteria  criteria,
size_t  fillFromColumn = 0 
) [private]

Definition at line 479 of file FFTDataServer.cpp.

References fftf_complex, fftf_malloc, fftf_plan_dft_r2c_1d, Model::getEndFrame(), Model::getStartFrame(), StorageAdviser::LongRetentionLikely, m_caches, m_cacheWidth, m_cacheWidthMask, m_cacheWidthPower, m_criteria, m_fftInput, m_fftOutput, m_fftPlan, m_fftSize, m_fillThread, m_height, m_model, m_polar, m_width, m_windowIncrement, m_windowSize, m_workbuffer, StorageAdviser::NoCriteria, StorageAdviser::PrecisionCritical, and StorageAdviser::SpeedCritical.

Referenced by getInstance().

FFTDataServer::~FFTDataServer (  )  [private, virtual]

Definition at line 589 of file FFTDataServer.cpp.

References deleteProcessingData(), m_caches, m_condition, m_exiting, m_fillThread, m_suspended, and m_writeMutex.

FFTDataServer::FFTDataServer ( const FFTDataServer  )  [private]


Member Function Documentation

FFTDataServer * FFTDataServer::getInstance ( const DenseTimeValueModel model,
int  channel,
WindowType  windowType,
size_t  windowSize,
size_t  windowIncrement,
size_t  fftSize,
bool  polar,
StorageAdviser::Criteria  criteria = StorageAdviser::NoCriteria,
size_t  fillFromColumn = 0 
) [static]

Definition at line 48 of file FFTDataServer.cpp.

References FFTDataServer(), findServer(), generateFileBasename(), m_serverMapMutex, and m_servers.

Referenced by getFuzzyInstance().

FFTDataServer * FFTDataServer::getFuzzyInstance ( const DenseTimeValueModel model,
int  channel,
WindowType  windowType,
size_t  windowSize,
size_t  windowIncrement,
size_t  fftSize,
bool  polar,
StorageAdviser::Criteria  criteria = StorageAdviser::NoCriteria,
size_t  fillFromColumn = 0 
) [static]

Definition at line 110 of file FFTDataServer.cpp.

References claimInstance(), DenseTimeValueModel::getChannelCount(), getInstance(), m_serverMapMutex, and m_servers.

Referenced by FFTFuzzyAdapter::FFTFuzzyAdapter(), and FFTModel::getServer().

void FFTDataServer::claimInstance ( FFTDataServer  )  [static]

Definition at line 255 of file FFTDataServer.cpp.

Referenced by FFTModel::FFTModel(), findServer(), and getFuzzyInstance().

void FFTDataServer::releaseInstance ( FFTDataServer  )  [static]

Definition at line 300 of file FFTDataServer.cpp.

Referenced by FFTModel::sourceModelAboutToBeDeleted(), FFTFuzzyAdapter::~FFTFuzzyAdapter(), and FFTModel::~FFTModel().

void FFTDataServer::modelAboutToBeDeleted ( Model  )  [static]

Definition at line 434 of file FFTDataServer.cpp.

References m_releasedServers, m_serverMapMutex, and m_servers.

Referenced by MainWindowBase::modelAboutToBeDeleted(), and FFTModel::sourceModelAboutToBeDeleted().

const DenseTimeValueModel* FFTDataServer::getModel (  )  const [inline]

Definition at line 66 of file FFTDataServer.h.

References m_model.

Referenced by FFTModel::estimateStableFrequency(), FFTModel::getSampleRate(), and FFTModel::isOK().

int FFTDataServer::getChannel (  )  const [inline]

Definition at line 67 of file FFTDataServer.h.

References m_channel.

WindowType FFTDataServer::getWindowType (  )  const [inline]

Definition at line 68 of file FFTDataServer.h.

References m_windower.

size_t FFTDataServer::getWindowSize (  )  const [inline]

Definition at line 69 of file FFTDataServer.h.

References m_windowSize.

size_t FFTDataServer::getWindowIncrement (  )  const [inline]

Definition at line 70 of file FFTDataServer.h.

References m_windowIncrement.

Referenced by FFTFuzzyAdapter::FFTFuzzyAdapter(), FFTModel::FFTModel(), and FFTModel::getResolution().

size_t FFTDataServer::getFFTSize (  )  const [inline]

Definition at line 71 of file FFTDataServer.h.

References m_fftSize.

Referenced by FFTModel::estimateStableFrequency(), FFTFuzzyAdapter::FFTFuzzyAdapter(), FFTModel::FFTModel(), FFTModel::getPeakFrequencies(), and FFTModel::getPeakPickWindowSize().

bool FFTDataServer::getPolar (  )  const [inline]

Definition at line 72 of file FFTDataServer.h.

References m_polar.

size_t FFTDataServer::getWidth (  )  const [inline]

Definition at line 74 of file FFTDataServer.h.

References m_width.

Referenced by FFTModel::getWidth(), and FFTFuzzyAdapter::getWidth().

size_t FFTDataServer::getHeight (  )  const [inline]

Definition at line 75 of file FFTDataServer.h.

References m_height.

Referenced by FFTModel::getHeight(), FFTFuzzyAdapter::getHeight(), and isLocalPeak().

float FFTDataServer::getMagnitudeAt ( size_t  x,
size_t  y 
)

Definition at line 875 of file FFTDataServer.cpp.

References fillColumn(), getCache(), FFTCache::getMagnitudeAt(), FFTCache::haveSetColumnAt(), m_height, and m_width.

Referenced by FFTModel::getMagnitudeAt(), FFTFuzzyAdapter::getMagnitudeAt(), isLocalPeak(), and isOverThreshold().

float FFTDataServer::getNormalizedMagnitudeAt ( size_t  x,
size_t  y 
)

Definition at line 896 of file FFTDataServer.cpp.

References fillColumn(), getCache(), FFTCache::getNormalizedMagnitudeAt(), FFTCache::haveSetColumnAt(), m_height, and m_width.

Referenced by FFTModel::getNormalizedMagnitudeAt(), and FFTFuzzyAdapter::getNormalizedMagnitudeAt().

float FFTDataServer::getMaximumMagnitudeAt ( size_t  x  ) 

Definition at line 913 of file FFTDataServer.cpp.

References fillColumn(), getCache(), FFTCache::getMaximumMagnitudeAt(), FFTCache::haveSetColumnAt(), and m_width.

Referenced by FFTModel::getMaximumMagnitudeAt(), and FFTFuzzyAdapter::getMaximumMagnitudeAt().

float FFTDataServer::getPhaseAt ( size_t  x,
size_t  y 
)

Definition at line 930 of file FFTDataServer.cpp.

References fillColumn(), getCache(), FFTCache::getPhaseAt(), FFTCache::haveSetColumnAt(), m_height, and m_width.

Referenced by FFTModel::getPhaseAt(), and FFTFuzzyAdapter::getPhaseAt().

void FFTDataServer::getValuesAt ( size_t  x,
size_t  y,
float &  real,
float &  imaginary 
)

Definition at line 947 of file FFTDataServer.cpp.

References fillColumn(), getCache(), FFTCache::getValuesAt(), FFTCache::haveSetColumnAt(), m_height, and m_width.

Referenced by FFTModel::getValuesAt(), and FFTFuzzyAdapter::getValuesAt().

bool FFTDataServer::isColumnReady ( size_t  x  ) 

Definition at line 977 of file FFTDataServer.cpp.

References getCache(), haveCache(), FFTCache::haveSetColumnAt(), m_fillThread, m_lastUsedCache, m_suspended, m_width, resume(), and Thread::start().

Referenced by FFTModel::isColumnAvailable(), and FFTFuzzyAdapter::isColumnReady().

void FFTDataServer::suspend (  ) 

Definition at line 632 of file FFTDataServer.cpp.

References m_caches, m_suspended, and m_writeMutex.

Referenced by FFTModel::suspend().

void FFTDataServer::suspendWrites (  ) 

Definition at line 648 of file FFTDataServer.cpp.

References m_suspended.

Referenced by FFTModel::suspendWrites().

void FFTDataServer::resume (  ) 

Definition at line 659 of file FFTDataServer.cpp.

References deleteProcessingData(), m_condition, m_fillThread, and m_suspended.

Referenced by isColumnReady(), and FFTModel::resume().

bool FFTDataServer::isLocalPeak ( size_t  x,
size_t  y 
) [inline]

Definition at line 90 of file FFTDataServer.h.

References getHeight(), and getMagnitudeAt().

bool FFTDataServer::isOverThreshold ( size_t  x,
size_t  y,
float  threshold 
) [inline]

Definition at line 96 of file FFTDataServer.h.

References getMagnitudeAt().

size_t FFTDataServer::getFillCompletion (  )  const

Definition at line 1117 of file FFTDataServer.cpp.

References FFTDataServer::FillThread::getCompletion(), and m_fillThread.

Referenced by FFTModel::getCompletion(), and FFTFuzzyAdapter::getFillCompletion().

size_t FFTDataServer::getFillExtent (  )  const

Definition at line 1124 of file FFTDataServer.cpp.

References Model::getEndFrame(), FFTDataServer::FillThread::getExtent(), m_fillThread, and m_model.

Referenced by FFTModel::getFillExtent(), and FFTFuzzyAdapter::getFillExtent().

FFTDataServer& FFTDataServer::operator= ( const FFTDataServer  )  [private]

FFTCache* FFTDataServer::getCache ( size_t  x,
size_t &  col 
) [inline, private]

Definition at line 140 of file FFTDataServer.h.

References getCacheAux(), m_caches, m_cacheWidthMask, m_cacheWidthPower, and m_lastUsedCache.

Referenced by fillColumn(), getMagnitudeAt(), getMaximumMagnitudeAt(), getNormalizedMagnitudeAt(), getPhaseAt(), getValuesAt(), and isColumnReady().

bool FFTDataServer::haveCache ( size_t  x  )  [inline, private]

Definition at line 149 of file FFTDataServer.h.

References m_caches, m_cacheWidthPower, and m_lastUsedCache.

Referenced by isColumnReady().

void FFTDataServer::getStorageAdvice ( size_t  w,
size_t  h,
bool &  memory,
bool &  compact 
) [private]

Definition at line 679 of file FFTDataServer.cpp.

References StorageAdviser::ConserveSpace, m_criteria, m_polar, m_width, StorageAdviser::PrecisionCritical, StorageAdviser::PreferMemory, purgeLimbo(), StorageAdviser::recommend(), and StorageAdviser::UseMemory.

Referenced by getCacheAux().

FFTCache * FFTDataServer::getCacheAux ( size_t  c  )  [private]

Definition at line 738 of file FFTDataServer.cpp.

References FFTFileCache::Compact, FFTMemoryCache::Compact, getStorageAdvice(), m_caches, m_cacheWidth, m_dormantCaches, m_fileBaseName, m_fillThread, m_height, m_lastUsedCache, m_polar, m_width, m_writeMutex, FFTFileCache::Polar, FFTMemoryCache::Polar, purgeLimbo(), MatrixFile::ReadWrite, FFTFileCache::Rectangular, FFTMemoryCache::Rectangular, FFTCache::reset(), FFTCache::resize(), and Thread::start().

Referenced by getCache().

void FFTDataServer::deleteProcessingData (  )  [private]

Definition at line 617 of file FFTDataServer.cpp.

References fftf_destroy_plan, fftf_free, m_fftInput, m_fftOutput, m_fftPlan, and m_workbuffer.

Referenced by resume(), and ~FFTDataServer().

void FFTDataServer::fillColumn ( size_t  x  )  [private]

Definition at line 1002 of file FFTDataServer.cpp.

References fftf_execute, getCache(), DenseTimeValueModel::getChannelCount(), DenseTimeValueModel::getData(), FFTCache::haveSetColumnAt(), Model::isReady(), m_channel, m_fftInput, m_fftOutput, m_fftPlan, m_fftSize, m_model, m_suspended, m_width, m_windower, m_windowIncrement, m_windowSize, m_workbuffer, m_writeMutex, and FFTCache::setColumnAt().

Referenced by getMagnitudeAt(), getMaximumMagnitudeAt(), getNormalizedMagnitudeAt(), getPhaseAt(), getValuesAt(), and FFTDataServer::FillThread::run().

QString FFTDataServer::generateFileBasename (  )  const [private]

Definition at line 1131 of file FFTDataServer.cpp.

References m_channel, m_fftSize, m_model, m_polar, m_windower, m_windowIncrement, and m_windowSize.

Referenced by getInstance().

QString FFTDataServer::generateFileBasename ( const DenseTimeValueModel model,
int  channel,
WindowType  windowType,
size_t  windowSize,
size_t  windowIncrement,
size_t  fftSize,
bool  polar 
) [static, private]

Definition at line 1139 of file FFTDataServer.cpp.

References XmlExportable::getObjectExportId().

FFTDataServer * FFTDataServer::findServer ( QString   )  [static, private]

Definition at line 228 of file FFTDataServer.cpp.

References claimInstance(), and m_servers.

Referenced by getInstance().

void FFTDataServer::purgeLimbo ( int  maxSize = 3  )  [static, private]

Definition at line 376 of file FFTDataServer.cpp.

References m_releasedServers, and m_servers.

Referenced by getCacheAux(), getStorageAdvice(), and releaseInstance().

void FFTDataServer::claimInstance ( FFTDataServer ,
bool  needLock 
) [static, private]

Definition at line 261 of file FFTDataServer.cpp.

References m_releasedServers, m_serverMapMutex, and m_servers.

void FFTDataServer::releaseInstance ( FFTDataServer ,
bool  needLock 
) [static, private]

Definition at line 306 of file FFTDataServer.cpp.

References m_lastUsedCache, m_releasedServers, m_serverMapMutex, m_servers, and purgeLimbo().


Member Data Documentation

QString FFTDataServer::m_fileBaseName [private]

Definition at line 122 of file FFTDataServer.h.

Referenced by getCacheAux().

const DenseTimeValueModel* FFTDataServer::m_model [private]

Definition at line 123 of file FFTDataServer.h.

Referenced by FFTDataServer(), fillColumn(), generateFileBasename(), getFillExtent(), getModel(), and FFTDataServer::FillThread::run().

int FFTDataServer::m_channel [private]

Definition at line 124 of file FFTDataServer.h.

Referenced by fillColumn(), generateFileBasename(), and getChannel().

Window<fftsample> FFTDataServer::m_windower [private]

Definition at line 126 of file FFTDataServer.h.

Referenced by fillColumn(), generateFileBasename(), and getWindowType().

size_t FFTDataServer::m_windowSize [private]

Definition at line 128 of file FFTDataServer.h.

Referenced by FFTDataServer(), fillColumn(), generateFileBasename(), and getWindowSize().

size_t FFTDataServer::m_windowIncrement [private]

Definition at line 129 of file FFTDataServer.h.

Referenced by FFTDataServer(), fillColumn(), generateFileBasename(), getWindowIncrement(), and FFTDataServer::FillThread::run().

size_t FFTDataServer::m_fftSize [private]

Definition at line 130 of file FFTDataServer.h.

Referenced by FFTDataServer(), fillColumn(), generateFileBasename(), and getFFTSize().

bool FFTDataServer::m_polar [private]

Definition at line 131 of file FFTDataServer.h.

Referenced by FFTDataServer(), generateFileBasename(), getCacheAux(), getPolar(), and getStorageAdvice().

size_t FFTDataServer::m_width [private]

Definition at line 133 of file FFTDataServer.h.

Referenced by FFTDataServer(), fillColumn(), getCacheAux(), getMagnitudeAt(), getMaximumMagnitudeAt(), getNormalizedMagnitudeAt(), getPhaseAt(), getStorageAdvice(), getValuesAt(), getWidth(), and isColumnReady().

size_t FFTDataServer::m_height [private]

Definition at line 134 of file FFTDataServer.h.

Referenced by FFTDataServer(), getCacheAux(), getHeight(), getMagnitudeAt(), getNormalizedMagnitudeAt(), getPhaseAt(), and getValuesAt().

size_t FFTDataServer::m_cacheWidth [private]

Definition at line 135 of file FFTDataServer.h.

Referenced by FFTDataServer(), and getCacheAux().

size_t FFTDataServer::m_cacheWidthPower [private]

Definition at line 136 of file FFTDataServer.h.

Referenced by FFTDataServer(), getCache(), and haveCache().

size_t FFTDataServer::m_cacheWidthMask [private]

Definition at line 137 of file FFTDataServer.h.

Referenced by FFTDataServer(), and getCache().

int FFTDataServer::m_lastUsedCache [private]

Definition at line 139 of file FFTDataServer.h.

Referenced by getCache(), getCacheAux(), haveCache(), isColumnReady(), and releaseInstance().

CacheVector FFTDataServer::m_caches [private]

Definition at line 156 of file FFTDataServer.h.

Referenced by FFTDataServer(), getCache(), getCacheAux(), haveCache(), suspend(), and ~FFTDataServer().

IntQueue FFTDataServer::m_dormantCaches [private]

Definition at line 159 of file FFTDataServer.h.

Referenced by getCacheAux().

StorageAdviser::Criteria FFTDataServer::m_criteria [private]

Definition at line 161 of file FFTDataServer.h.

Referenced by FFTDataServer(), and getStorageAdvice().

QMutex FFTDataServer::m_writeMutex [private]

Definition at line 166 of file FFTDataServer.h.

Referenced by fillColumn(), getCacheAux(), FFTDataServer::FillThread::run(), suspend(), and ~FFTDataServer().

QWaitCondition FFTDataServer::m_condition [private]

Definition at line 167 of file FFTDataServer.h.

Referenced by resume(), FFTDataServer::FillThread::run(), and ~FFTDataServer().

fftsample* FFTDataServer::m_fftInput [private]

Definition at line 169 of file FFTDataServer.h.

Referenced by deleteProcessingData(), FFTDataServer(), and fillColumn().

fftf_complex* FFTDataServer::m_fftOutput [private]

Definition at line 170 of file FFTDataServer.h.

Referenced by deleteProcessingData(), FFTDataServer(), and fillColumn().

float* FFTDataServer::m_workbuffer [private]

Definition at line 171 of file FFTDataServer.h.

Referenced by deleteProcessingData(), FFTDataServer(), and fillColumn().

fftf_plan FFTDataServer::m_fftPlan [private]

Definition at line 172 of file FFTDataServer.h.

Referenced by deleteProcessingData(), FFTDataServer(), and fillColumn().

bool FFTDataServer::m_exiting [private]

Definition at line 192 of file FFTDataServer.h.

Referenced by FFTDataServer::FillThread::run(), and ~FFTDataServer().

bool FFTDataServer::m_suspended [private]

Definition at line 193 of file FFTDataServer.h.

Referenced by fillColumn(), isColumnReady(), resume(), FFTDataServer::FillThread::run(), suspend(), suspendWrites(), and ~FFTDataServer().

FillThread* FFTDataServer::m_fillThread [private]

Definition at line 194 of file FFTDataServer.h.

Referenced by FFTDataServer(), getCacheAux(), getFillCompletion(), getFillExtent(), isColumnReady(), resume(), and ~FFTDataServer().

FFTDataServer::ServerMap FFTDataServer::m_servers [static, private]

Definition at line 212 of file FFTDataServer.h.

Referenced by claimInstance(), findServer(), getFuzzyInstance(), getInstance(), modelAboutToBeDeleted(), purgeLimbo(), and releaseInstance().

FFTDataServer::ServerQueue FFTDataServer::m_releasedServers [static, private]

Definition at line 213 of file FFTDataServer.h.

Referenced by claimInstance(), modelAboutToBeDeleted(), purgeLimbo(), and releaseInstance().

QMutex FFTDataServer::m_serverMapMutex [static, private]

Definition at line 214 of file FFTDataServer.h.

Referenced by claimInstance(), getFuzzyInstance(),