Mercurial > hg > svcore
comparison data/fileio/CodedAudioFileReader.cpp @ 742:c10cb8782576 coreaudio_tests
Merge from branch "default"
author | Chris Cannam |
---|---|
date | Sun, 01 Jul 2012 11:53:00 +0100 |
parents | 029dd9e5cc29 21d39720d5da |
children | 26636c46bcdf |
comparison
equal
deleted
inserted
replaced
666:4efa7429cd85 | 742:c10cb8782576 |
---|---|
20 #include "base/Exceptions.h" | 20 #include "base/Exceptions.h" |
21 #include "base/Profiler.h" | 21 #include "base/Profiler.h" |
22 #include "base/Serialiser.h" | 22 #include "base/Serialiser.h" |
23 #include "base/Resampler.h" | 23 #include "base/Resampler.h" |
24 | 24 |
25 #include <stdint.h> | |
25 #include <iostream> | 26 #include <iostream> |
26 #include <QDir> | 27 #include <QDir> |
27 #include <QMutexLocker> | 28 #include <QMutexLocker> |
28 | 29 |
29 CodedAudioFileReader::CodedAudioFileReader(CacheMode cacheMode, | 30 CodedAudioFileReader::CodedAudioFileReader(CacheMode cacheMode, |
38 m_cacheWriteBufferIndex(0), | 39 m_cacheWriteBufferIndex(0), |
39 m_cacheWriteBufferSize(16384), | 40 m_cacheWriteBufferSize(16384), |
40 m_resampler(0), | 41 m_resampler(0), |
41 m_resampleBuffer(0) | 42 m_resampleBuffer(0) |
42 { | 43 { |
43 std::cerr << "CodedAudioFileReader::CodedAudioFileReader: rate " << targetRate << std::endl; | 44 SVDEBUG << "CodedAudioFileReader::CodedAudioFileReader: rate " << targetRate << endl; |
44 | 45 |
45 m_frameCount = 0; | 46 m_frameCount = 0; |
46 m_sampleRate = targetRate; | 47 m_sampleRate = targetRate; |
47 } | 48 } |
48 | 49 |
52 | 53 |
53 endSerialised(); | 54 endSerialised(); |
54 | 55 |
55 if (m_cacheFileWritePtr) sf_close(m_cacheFileWritePtr); | 56 if (m_cacheFileWritePtr) sf_close(m_cacheFileWritePtr); |
56 | 57 |
57 std::cerr << "CodedAudioFileReader::~CodedAudioFileReader: deleting cache file reader" << std::endl; | 58 SVDEBUG << "CodedAudioFileReader::~CodedAudioFileReader: deleting cache file reader" << endl; |
58 | 59 |
59 delete m_cacheFileReader; | 60 delete m_cacheFileReader; |
60 delete[] m_cacheWriteBuffer; | 61 delete[] m_cacheWriteBuffer; |
61 | 62 |
62 if (m_cacheFileName != "") { | 63 if (m_cacheFileName != "") { |
63 if (!QFile(m_cacheFileName).remove()) { | 64 if (!QFile(m_cacheFileName).remove()) { |
64 std::cerr << "WARNING: CodedAudioFileReader::~CodedAudioFileReader: Failed to delete cache file \"" << m_cacheFileName.toStdString() << "\"" << std::endl; | 65 std::cerr << "WARNING: CodedAudioFileReader::~CodedAudioFileReader: Failed to delete cache file \"" << m_cacheFileName << "\"" << std::endl; |
65 } | 66 } |
66 } | 67 } |
67 | 68 |
68 delete m_resampler; | 69 delete m_resampler; |
69 delete[] m_resampleBuffer; | 70 delete[] m_resampleBuffer; |
70 } | 71 } |
71 | 72 |
72 void | 73 void |
73 CodedAudioFileReader::startSerialised(QString id) | 74 CodedAudioFileReader::startSerialised(QString id) |
74 { | 75 { |
75 std::cerr << "CodedAudioFileReader::startSerialised(" << id.toStdString() << ")" << std::endl; | 76 SVDEBUG << "CodedAudioFileReader::startSerialised(" << id << ")" << endl; |
76 | 77 |
77 delete m_serialiser; | 78 delete m_serialiser; |
78 m_serialiser = new Serialiser(id); | 79 m_serialiser = new Serialiser(id); |
79 } | 80 } |
80 | 81 |
90 void | 91 void |
91 CodedAudioFileReader::initialiseDecodeCache() | 92 CodedAudioFileReader::initialiseDecodeCache() |
92 { | 93 { |
93 QMutexLocker locker(&m_cacheMutex); | 94 QMutexLocker locker(&m_cacheMutex); |
94 | 95 |
95 std::cerr << "CodedAudioFileReader::initialiseDecodeCache: file rate = " << m_fileRate << std::endl; | 96 SVDEBUG << "CodedAudioFileReader::initialiseDecodeCache: file rate = " << m_fileRate << endl; |
96 | 97 |
97 if (m_fileRate == 0) { | 98 if (m_fileRate == 0) { |
98 std::cerr << "CodedAudioFileReader::initialiseDecodeCache: ERROR: File sample rate unknown (bug in subclass implementation?)" << std::endl; | 99 SVDEBUG << "CodedAudioFileReader::initialiseDecodeCache: ERROR: File sample rate unknown (bug in subclass implementation?)" << endl; |
99 m_fileRate = 48000; // got to have something | 100 m_fileRate = 48000; // got to have something |
100 } | 101 } |
101 if (m_sampleRate == 0) { | 102 if (m_sampleRate == 0) { |
102 m_sampleRate = m_fileRate; | 103 m_sampleRate = m_fileRate; |
103 std::cerr << "CodedAudioFileReader::initialiseDecodeCache: rate (from file) = " << m_fileRate << std::endl; | 104 SVDEBUG << "CodedAudioFileReader::initialiseDecodeCache: rate (from file) = " << m_fileRate << endl; |
104 } | 105 } |
105 if (m_fileRate != m_sampleRate) { | 106 if (m_fileRate != m_sampleRate) { |
106 std::cerr << "CodedAudioFileReader: resampling " << m_fileRate << " -> " << m_sampleRate << std::endl; | 107 std::cerr << "CodedAudioFileReader: resampling " << m_fileRate << " -> " << m_sampleRate << std::endl; |
107 m_resampler = new Resampler(Resampler::FastestTolerable, | 108 m_resampler = new Resampler(Resampler::FastestTolerable, |
108 m_channelCount, | 109 m_channelCount, |
142 // information here | 143 // information here |
143 | 144 |
144 m_cacheFileReader = new WavFileReader(m_cacheFileName); | 145 m_cacheFileReader = new WavFileReader(m_cacheFileName); |
145 | 146 |
146 if (!m_cacheFileReader->isOK()) { | 147 if (!m_cacheFileReader->isOK()) { |
147 std::cerr << "ERROR: CodedAudioFileReader::initialiseDecodeCache: Failed to construct WAV file reader for temporary file: " << m_cacheFileReader->getError().toStdString() << std::endl; | 148 std::cerr << "ERROR: CodedAudioFileReader::initialiseDecodeCache: Failed to construct WAV file reader for temporary file: " << m_cacheFileReader->getError() << std::endl; |
148 delete m_cacheFileReader; | 149 delete m_cacheFileReader; |
149 m_cacheFileReader = 0; | 150 m_cacheFileReader = 0; |
150 m_cacheMode = CacheInMemory; | 151 m_cacheMode = CacheInMemory; |
151 sf_close(m_cacheFileWritePtr); | 152 sf_close(m_cacheFileWritePtr); |
152 } | 153 } |
153 | 154 |
154 } else { | 155 } else { |
155 std::cerr << "CodedAudioFileReader::initialiseDecodeCache: failed to open cache file \"" << m_cacheFileName.toStdString() << "\" (" << m_channelCount << " channels, sample rate " << m_sampleRate << " for writing, falling back to in-memory cache" << std::endl; | 156 std::cerr << "CodedAudioFileReader::initialiseDecodeCache: failed to open cache file \"" << m_cacheFileName << "\" (" << m_channelCount << " channels, sample rate " << m_sampleRate << " for writing, falling back to in-memory cache" << std::endl; |
156 m_cacheMode = CacheInMemory; | 157 m_cacheMode = CacheInMemory; |
157 } | 158 } |
158 | 159 |
159 } catch (DirectoryCreationFailed f) { | 160 } catch (DirectoryCreationFailed f) { |
160 std::cerr << "CodedAudioFileReader::initialiseDecodeCache: failed to create temporary directory! Falling back to in-memory cache" << std::endl; | 161 std::cerr << "CodedAudioFileReader::initialiseDecodeCache: failed to create temporary directory! Falling back to in-memory cache" << std::endl; |
352 // Lock is only required in CacheInMemory mode (the cache file | 353 // Lock is only required in CacheInMemory mode (the cache file |
353 // reader is expected to be thread safe and manage its own | 354 // reader is expected to be thread safe and manage its own |
354 // locking) | 355 // locking) |
355 | 356 |
356 if (!m_initialised) { | 357 if (!m_initialised) { |
357 std::cerr << "CodedAudioFileReader::getInterleavedFrames: not initialised" << std::endl; | 358 SVDEBUG << "CodedAudioFileReader::getInterleavedFrames: not initialised" << endl; |
358 return; | 359 return; |
359 } | 360 } |
360 | 361 |
361 switch (m_cacheMode) { | 362 switch (m_cacheMode) { |
362 | 363 |