Mercurial > hg > qm-dsp
comparison dsp/rateconversion/Resampler.cpp @ 140:ce50eef47bdf
Latency fix etc
author | Chris Cannam |
---|---|
date | Mon, 14 Oct 2013 08:19:45 +0100 |
parents | 7fe0da91e9c3 |
children | 54c9e0811ae7 |
comparison
equal
deleted
inserted
replaced
139:7fe0da91e9c3 | 140:ce50eef47bdf |
---|---|
50 kw.cut(filter); | 50 kw.cut(filter); |
51 | 51 |
52 int inputSpacing = m_targetRate / m_gcd; | 52 int inputSpacing = m_targetRate / m_gcd; |
53 int outputSpacing = m_sourceRate / m_gcd; | 53 int outputSpacing = m_sourceRate / m_gcd; |
54 | 54 |
55 m_latency = int((m_filterLength / 2) / outputSpacing); | 55 m_latency = int(ceil((m_filterLength / 2.0) / outputSpacing)); |
56 | 56 |
57 int bufferLength = 0; | 57 int bufferLength = 0; |
58 | 58 |
59 m_phaseData = new Phase[inputSpacing]; | 59 m_phaseData = new Phase[inputSpacing]; |
60 | 60 |
128 { | 128 { |
129 int m = 0; | 129 int m = 0; |
130 int offset = 0; | 130 int offset = 0; |
131 | 131 |
132 while (remaining >= m_phaseData[m_phase].take) { | 132 while (remaining >= m_phaseData[m_phase].take) { |
133 std::cerr << "remaining = " << remaining << ", m = " << m << ", take = " << m_phaseData[m_phase].take << std::endl; | 133 // std::cerr << "remaining = " << remaining << ", m = " << m << ", take = " << m_phaseData[m_phase].take << std::endl; |
134 int advance = m_phaseData[m_phase].take; | 134 int advance = m_phaseData[m_phase].take; |
135 dst[m] = reconstructOne(src + offset); | 135 dst[m] = reconstructOne(src + offset); |
136 offset += advance; | 136 offset += advance; |
137 remaining -= advance; | 137 remaining -= advance; |
138 m_phase = m_phaseData[m_phase].nextPhase; | 138 m_phase = m_phaseData[m_phase].nextPhase; |
139 std::cerr << "remaining -> " << remaining << ", new phase has advance " << m_phaseData[m_phase].take << std::endl; | 139 // std::cerr << "remaining -> " << remaining << ", new phase has advance " << m_phaseData[m_phase].take << std::endl; |
140 ++m; | 140 ++m; |
141 } | 141 } |
142 | 142 |
143 if (remaining > 0) { | 143 // if (remaining > 0) { |
144 std::cerr << "have " << remaining << " spare, pushing to buffer" << std::endl; | 144 // std::cerr << "have " << remaining << " spare, pushing to buffer" << std::endl; |
145 } | 145 // } |
146 | 146 |
147 for (int i = 0; i < remaining; ++i) { | 147 for (int i = 0; i < remaining; ++i) { |
148 m_buffer.push_back(src[offset + i]); | 148 m_buffer.push_back(src[offset + i]); |
149 } | 149 } |
150 | 150 |