Mercurial > hg > qm-dsp
comparison dsp/signalconditioning/Framer.cpp @ 505:930b5b0f707d
Merge branch 'codestyle-and-tidy'
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Wed, 05 Jun 2019 12:55:15 +0100 |
parents | 162673c8f9de |
children |
comparison
equal
deleted
inserted
replaced
471:e3335cb213da | 505:930b5b0f707d |
---|---|
12 License, or (at your option) any later version. See the file | 12 License, or (at your option) any later version. See the file |
13 COPYING included with this distribution for more information. | 13 COPYING included with this distribution for more information. |
14 */ | 14 */ |
15 | 15 |
16 #include "Framer.h" | 16 #include "Framer.h" |
17 #include <math.h> | |
18 | 17 |
19 ////////////////////////////////////////////////////////////////////// | 18 #include <limits.h> |
20 // Construction/Destruction | |
21 ////////////////////////////////////////////////////////////////////// | |
22 | 19 |
23 Framer::Framer() | 20 Framer::Framer() : |
21 m_sampleLen(0), | |
22 m_framesRead(0), | |
23 m_srcBuffer(0), | |
24 m_dataFrame(0), | |
25 m_strideFrame(0), | |
26 m_frameLength(0), | |
27 m_stepSize(0), | |
28 m_maxFrames(0), | |
29 m_srcIndex(0) | |
24 { | 30 { |
25 m_dataFrame = NULL; | |
26 m_strideFrame = NULL; | |
27 } | 31 } |
28 | 32 |
29 Framer::~Framer() | 33 Framer::~Framer() |
30 { | 34 { |
31 if( m_dataFrame != NULL ) | 35 delete[] m_dataFrame; |
32 delete [] m_dataFrame; | 36 delete[] m_strideFrame; |
33 | |
34 if( m_strideFrame != NULL ) | |
35 delete [] m_strideFrame; | |
36 } | 37 } |
37 | 38 |
38 void Framer::configure( unsigned int frameLength, unsigned int hop ) | 39 void Framer::configure(int frameLength, int hop) |
39 { | 40 { |
40 m_frameLength = frameLength; | 41 m_frameLength = frameLength; |
41 m_stepSize = hop; | 42 m_stepSize = hop; |
42 | 43 |
43 resetCounters(); | 44 resetCounters(); |
44 | 45 |
45 if( m_dataFrame != NULL ) | 46 delete[] m_dataFrame; |
46 { | |
47 delete [] m_dataFrame; | |
48 m_dataFrame = NULL; | |
49 } | |
50 m_dataFrame = new double[ m_frameLength ]; | 47 m_dataFrame = new double[ m_frameLength ]; |
51 | 48 |
52 if( m_strideFrame != NULL ) | 49 delete [] m_strideFrame; |
53 { | |
54 delete [] m_strideFrame; | |
55 m_strideFrame = NULL; | |
56 } | |
57 m_strideFrame = new double[ m_stepSize ]; | 50 m_strideFrame = new double[ m_stepSize ]; |
58 } | 51 } |
59 | 52 |
60 void Framer::getFrame(double *dst) | 53 void Framer::getFrame(double *dst) |
61 { | 54 { |
55 if ((m_srcIndex + int64_t(m_frameLength)) < m_sampleLen) { | |
62 | 56 |
63 if( (m_ulSrcIndex + ( m_frameLength) ) < m_ulSampleLen ) | 57 for (int i = 0; i < m_frameLength; i++) { |
64 { | 58 dst[i] = m_srcBuffer[m_srcIndex++]; |
65 for( unsigned int u = 0; u < m_frameLength; u++) | 59 } |
66 { | 60 m_srcIndex -= (m_frameLength - m_stepSize); |
67 dst[ u ] = m_srcBuffer[ m_ulSrcIndex++ ]; | |
68 } | |
69 m_ulSrcIndex -= ( m_frameLength - m_stepSize ); | |
70 } | |
71 else | |
72 { | |
73 unsigned int rem = (m_ulSampleLen - m_ulSrcIndex ); | |
74 unsigned int zero = m_frameLength - rem; | |
75 | 61 |
76 for( unsigned int u = 0; u < rem; u++ ) | 62 } else { // m_srcIndex is within m_frameLength of m_sampleLen |
77 { | |
78 dst[ u ] = m_srcBuffer[ m_ulSrcIndex++ ]; | |
79 } | |
80 | |
81 for( unsigned int u = 0; u < zero; u++ ) | |
82 { | |
83 dst[ rem + u ] = 0; | |
84 } | |
85 | 63 |
86 m_ulSrcIndex -= (( rem - m_stepSize ) ); | 64 int rem = int(m_sampleLen - m_srcIndex); |
65 int zero = m_frameLength - rem; | |
66 | |
67 for (int i = 0; i < rem; i++) { | |
68 dst[i] = m_srcBuffer[m_srcIndex++]; | |
69 } | |
70 | |
71 for (int i = 0; i < zero; i++ ) { | |
72 dst[rem + i] = 0.0; | |
73 } | |
74 | |
75 m_srcIndex -= (rem - m_stepSize); | |
87 } | 76 } |
88 | 77 |
89 m_framesRead++; | 78 m_framesRead++; |
90 } | 79 } |
91 | 80 |
92 void Framer::resetCounters() | 81 void Framer::resetCounters() |
93 { | 82 { |
94 m_framesRead = 0; | 83 m_framesRead = 0; |
95 m_ulSrcIndex = 0; | 84 m_srcIndex = 0; |
96 } | 85 } |
97 | 86 |
98 unsigned int Framer::getMaxNoFrames() | 87 int Framer::getMaxNoFrames() |
99 { | 88 { |
100 return m_maxFrames; | 89 return m_maxFrames; |
101 } | 90 } |
102 | 91 |
103 void Framer::setSource(double *src, unsigned int length) | 92 void Framer::setSource(double *src, int64_t length) |
104 { | 93 { |
105 m_srcBuffer = src; | 94 m_srcBuffer = src; |
106 m_ulSampleLen = length; | 95 m_sampleLen = length; |
107 | 96 |
108 m_maxFrames = (unsigned int)ceil( (double)m_ulSampleLen/(double)m_stepSize ) ; | 97 int64_t maxFrames = length / int64_t(m_stepSize); |
98 if (maxFrames * int64_t(m_stepSize) < length) { | |
99 ++maxFrames; | |
100 } | |
101 if (maxFrames > INT_MAX) maxFrames = INT_MAX; | |
102 m_maxFrames = maxFrames; | |
109 } | 103 } |