Mercurial > hg > svcore
comparison data/fileio/CodedAudioFileReader.cpp @ 933:d03b3d956358 warnfix_no_size_t
Merge from branch tony_integration
| author | Chris Cannam |
|---|---|
| date | Wed, 18 Jun 2014 08:34:46 +0100 |
| parents | 59e7fe1b1003 9911b8cb53bc |
| children | cc27f35aa75c |
comparison
equal
deleted
inserted
replaced
| 932:e06f03013f46 | 933:d03b3d956358 |
|---|---|
| 26 #include <iostream> | 26 #include <iostream> |
| 27 #include <QDir> | 27 #include <QDir> |
| 28 #include <QMutexLocker> | 28 #include <QMutexLocker> |
| 29 | 29 |
| 30 CodedAudioFileReader::CodedAudioFileReader(CacheMode cacheMode, | 30 CodedAudioFileReader::CodedAudioFileReader(CacheMode cacheMode, |
| 31 int targetRate) : | 31 int targetRate, |
| 32 bool normalised) : | |
| 32 m_cacheMode(cacheMode), | 33 m_cacheMode(cacheMode), |
| 33 m_initialised(false), | 34 m_initialised(false), |
| 34 m_serialiser(0), | 35 m_serialiser(0), |
| 35 m_fileRate(0), | 36 m_fileRate(0), |
| 36 m_cacheFileWritePtr(0), | 37 m_cacheFileWritePtr(0), |
| 38 m_cacheWriteBuffer(0), | 39 m_cacheWriteBuffer(0), |
| 39 m_cacheWriteBufferIndex(0), | 40 m_cacheWriteBufferIndex(0), |
| 40 m_cacheWriteBufferSize(16384), | 41 m_cacheWriteBufferSize(16384), |
| 41 m_resampler(0), | 42 m_resampler(0), |
| 42 m_resampleBuffer(0), | 43 m_resampleBuffer(0), |
| 43 m_fileFrameCount(0) | 44 m_fileFrameCount(0), |
| 44 { | 45 m_normalised(normalised), |
| 45 SVDEBUG << "CodedAudioFileReader::CodedAudioFileReader: rate " << targetRate << endl; | 46 m_max(0.f), |
| 47 m_gain(1.f) | |
| 48 { | |
| 49 SVDEBUG << "CodedAudioFileReader::CodedAudioFileReader: rate " << targetRate << ", normalised = " << normalised << endl; | |
| 46 | 50 |
| 47 m_frameCount = 0; | 51 m_frameCount = 0; |
| 48 m_sampleRate = targetRate; | 52 m_sampleRate = targetRate; |
| 49 } | 53 } |
| 50 | 54 |
| 268 if (!m_initialised) { | 272 if (!m_initialised) { |
| 269 cerr << "WARNING: CodedAudioFileReader::finishDecodeCache: Cache was never initialised!" << endl; | 273 cerr << "WARNING: CodedAudioFileReader::finishDecodeCache: Cache was never initialised!" << endl; |
| 270 return; | 274 return; |
| 271 } | 275 } |
| 272 | 276 |
| 273 // if (m_cacheWriteBufferIndex > 0) { | 277 pushBuffer(m_cacheWriteBuffer, |
| 274 pushBuffer(m_cacheWriteBuffer, | 278 m_cacheWriteBufferIndex / m_channelCount, |
| 275 m_cacheWriteBufferIndex / m_channelCount, | 279 true); |
| 276 true); | |
| 277 // } | |
| 278 | 280 |
| 279 delete[] m_cacheWriteBuffer; | 281 delete[] m_cacheWriteBuffer; |
| 280 m_cacheWriteBuffer = 0; | 282 m_cacheWriteBuffer = 0; |
| 281 | 283 |
| 282 delete[] m_resampleBuffer; | 284 delete[] m_resampleBuffer; |
| 310 } | 312 } |
| 311 | 313 |
| 312 void | 314 void |
| 313 CodedAudioFileReader::pushBufferNonResampling(float *buffer, int sz) | 315 CodedAudioFileReader::pushBufferNonResampling(float *buffer, int sz) |
| 314 { | 316 { |
| 315 float max = 1.0; | 317 float clip = 1.0; |
| 316 int count = sz * m_channelCount; | 318 int count = sz * m_channelCount; |
| 317 | 319 |
| 318 for (int i = 0; i < count; ++i) { | 320 if (m_normalised) { |
| 319 if (buffer[i] > max) buffer[i] = max; | 321 for (int i = 0; i < count; ++i) { |
| 320 } | 322 float v = fabsf(buffer[i]); |
| 321 for (int i = 0; i < count; ++i) { | 323 if (v > m_max) { |
| 322 if (buffer[i] < -max) buffer[i] = -max; | 324 m_max = v; |
| 325 m_gain = 1.f / m_max; | |
| 326 } | |
| 327 } | |
| 328 } else { | |
| 329 for (int i = 0; i < count; ++i) { | |
| 330 if (buffer[i] > clip) buffer[i] = clip; | |
| 331 } | |
| 332 for (int i = 0; i < count; ++i) { | |
| 333 if (buffer[i] < -clip) buffer[i] = -clip; | |
| 334 } | |
| 323 } | 335 } |
| 324 | 336 |
| 325 m_frameCount += sz; | 337 m_frameCount += sz; |
| 326 | 338 |
| 327 switch (m_cacheMode) { | 339 switch (m_cacheMode) { |
| 430 ++idx; | 442 ++idx; |
| 431 } | 443 } |
| 432 m_dataLock.unlock(); | 444 m_dataLock.unlock(); |
| 433 } | 445 } |
| 434 } | 446 } |
| 435 } | 447 |
| 436 | 448 if (m_normalised) { |
| 449 for (int i = 0; i < (int)(count * m_channelCount); ++i) { | |
| 450 frames[i] *= m_gain; | |
| 451 } | |
| 452 } | |
| 453 } | |
| 454 |
