annotate dsp/signalconditioning/Framer.cpp @ 515:08bcc06c38ec tip master

Remove fast-math
author Chris Cannam <cannam@all-day-breakfast.com>
date Tue, 28 Jan 2020 15:27:37 +0000
parents 162673c8f9de
children
rev   line source
c@225 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
c@225 2
c@225 3 /*
c@225 4 QM DSP Library
c@225 5
c@225 6 Centre for Digital Music, Queen Mary, University of London.
c@309 7 This file 2005-2006 Christian Landone.
c@309 8
c@309 9 This program is free software; you can redistribute it and/or
c@309 10 modify it under the terms of the GNU General Public License as
c@309 11 published by the Free Software Foundation; either version 2 of the
c@309 12 License, or (at your option) any later version. See the file
c@309 13 COPYING included with this distribution for more information.
c@225 14 */
c@225 15
c@225 16 #include "Framer.h"
c@225 17
cannam@502 18 #include <limits.h>
c@225 19
cannam@502 20 Framer::Framer() :
cannam@502 21 m_sampleLen(0),
cannam@502 22 m_framesRead(0),
cannam@502 23 m_srcBuffer(0),
cannam@502 24 m_dataFrame(0),
cannam@502 25 m_strideFrame(0),
cannam@502 26 m_frameLength(0),
cannam@502 27 m_stepSize(0),
cannam@502 28 m_maxFrames(0),
cannam@502 29 m_srcIndex(0)
c@225 30 {
c@225 31 }
c@225 32
c@225 33 Framer::~Framer()
c@225 34 {
cannam@502 35 delete[] m_dataFrame;
cannam@502 36 delete[] m_strideFrame;
c@225 37 }
c@225 38
cannam@502 39 void Framer::configure(int frameLength, int hop)
c@225 40 {
c@225 41 m_frameLength = frameLength;
c@225 42 m_stepSize = hop;
c@225 43
c@225 44 resetCounters();
c@225 45
cannam@502 46 delete[] m_dataFrame;
c@225 47 m_dataFrame = new double[ m_frameLength ];
c@225 48
cannam@502 49 delete [] m_strideFrame;
c@225 50 m_strideFrame = new double[ m_stepSize ];
c@225 51 }
c@225 52
c@225 53 void Framer::getFrame(double *dst)
c@225 54 {
cannam@502 55 if ((m_srcIndex + int64_t(m_frameLength)) < m_sampleLen) {
c@225 56
cannam@502 57 for (int i = 0; i < m_frameLength; i++) {
cannam@502 58 dst[i] = m_srcBuffer[m_srcIndex++];
cannam@502 59 }
cannam@502 60 m_srcIndex -= (m_frameLength - m_stepSize);
c@225 61
cannam@502 62 } else { // m_srcIndex is within m_frameLength of m_sampleLen
c@225 63
cannam@502 64 int rem = int(m_sampleLen - m_srcIndex);
cannam@502 65 int zero = m_frameLength - rem;
cannam@483 66
cannam@502 67 for (int i = 0; i < rem; i++) {
cannam@502 68 dst[i] = m_srcBuffer[m_srcIndex++];
cannam@483 69 }
cannam@483 70
cannam@502 71 for (int i = 0; i < zero; i++ ) {
cannam@502 72 dst[rem + i] = 0.0;
cannam@483 73 }
cannam@483 74
cannam@502 75 m_srcIndex -= (rem - m_stepSize);
c@225 76 }
c@225 77
c@225 78 m_framesRead++;
c@225 79 }
c@225 80
c@225 81 void Framer::resetCounters()
c@225 82 {
c@225 83 m_framesRead = 0;
cannam@502 84 m_srcIndex = 0;
c@225 85 }
c@225 86
cannam@502 87 int Framer::getMaxNoFrames()
c@225 88 {
c@225 89 return m_maxFrames;
c@225 90 }
c@225 91
cannam@502 92 void Framer::setSource(double *src, int64_t length)
c@225 93 {
c@225 94 m_srcBuffer = src;
cannam@502 95 m_sampleLen = length;
c@225 96
cannam@502 97 int64_t maxFrames = length / int64_t(m_stepSize);
cannam@502 98 if (maxFrames * int64_t(m_stepSize) < length) {
cannam@502 99 ++maxFrames;
cannam@502 100 }
cannam@502 101 if (maxFrames > INT_MAX) maxFrames = INT_MAX;
cannam@502 102 m_maxFrames = maxFrames;
c@225 103 }