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 }