Mercurial > hg > svcore
comparison data/model/WaveFileModel.cpp @ 742:c10cb8782576 coreaudio_tests
Merge from branch "default"
author | Chris Cannam |
---|---|
date | Sun, 01 Jul 2012 11:53:00 +0100 |
parents | 1424aa29ae95 |
children | c9fc7728ab0d |
comparison
equal
deleted
inserted
replaced
666:4efa7429cd85 | 742:c10cb8782576 |
---|---|
51 m_source.waitForData(); | 51 m_source.waitForData(); |
52 if (m_source.isOK()) { | 52 if (m_source.isOK()) { |
53 m_reader = AudioFileReaderFactory::createThreadingReader | 53 m_reader = AudioFileReaderFactory::createThreadingReader |
54 (m_source, targetRate); | 54 (m_source, targetRate); |
55 if (m_reader) { | 55 if (m_reader) { |
56 std::cerr << "WaveFileModel::WaveFileModel: reader rate: " | 56 SVDEBUG << "WaveFileModel::WaveFileModel: reader rate: " |
57 << m_reader->getSampleRate() << std::endl; | 57 << m_reader->getSampleRate() << endl; |
58 } | 58 } |
59 } | 59 } |
60 if (m_reader) setObjectName(m_reader->getTitle()); | 60 if (m_reader) setObjectName(m_reader->getTitle()); |
61 if (objectName() == "") setObjectName(QFileInfo(m_path).fileName()); | 61 if (objectName() == "") setObjectName(QFileInfo(m_path).fileName()); |
62 if (isOK()) fillCache(); | 62 if (isOK()) fillCache(); |
113 *completion = prevCompletion; | 113 *completion = prevCompletion; |
114 } | 114 } |
115 prevCompletion = *completion; | 115 prevCompletion = *completion; |
116 } | 116 } |
117 #ifdef DEBUG_WAVE_FILE_MODEL | 117 #ifdef DEBUG_WAVE_FILE_MODEL |
118 std::cerr << "WaveFileModel::isReady(): ready = " << ready << ", completion = " << (completion ? *completion : -1) << std::endl; | 118 SVDEBUG << "WaveFileModel::isReady(): ready = " << ready << ", completion = " << (completion ? *completion : -1) << endl; |
119 #endif | 119 #endif |
120 return ready; | 120 return ready; |
121 } | 121 } |
122 | 122 |
123 Model * | 123 Model * |
208 for (size_t i = 0; i < count; ++i) buffer[i] = 0.f; | 208 for (size_t i = 0; i < count; ++i) buffer[i] = 0.f; |
209 return 0; | 209 return 0; |
210 } | 210 } |
211 | 211 |
212 #ifdef DEBUG_WAVE_FILE_MODEL | 212 #ifdef DEBUG_WAVE_FILE_MODEL |
213 // std::cerr << "WaveFileModel::getValues(" << channel << ", " | 213 // SVDEBUG << "WaveFileModel::getValues(" << channel << ", " |
214 // << start << ", " << end << "): calling reader" << std::endl; | 214 // << start << ", " << end << "): calling reader" << endl; |
215 #endif | 215 #endif |
216 | 216 |
217 int channels = getChannelCount(); | 217 int channels = getChannelCount(); |
218 | 218 |
219 SampleBlock frames(count * channels); | 219 SampleBlock frames(count * channels); |
532 ranges.push_back(Range(min, max, total / got)); | 532 ranges.push_back(Range(min, max, total / got)); |
533 } | 533 } |
534 } | 534 } |
535 | 535 |
536 #ifdef DEBUG_WAVE_FILE_MODEL | 536 #ifdef DEBUG_WAVE_FILE_MODEL |
537 cerr << "returning " << ranges.size() << " ranges" << endl; | 537 SVDEBUG << "returning " << ranges.size() << " ranges" << endl; |
538 #endif | 538 #endif |
539 return; | 539 return; |
540 } | 540 } |
541 | 541 |
542 WaveFileModel::Range | 542 WaveFileModel::Range |
605 | 605 |
606 m_mutex.unlock(); | 606 m_mutex.unlock(); |
607 m_fillThread->start(); | 607 m_fillThread->start(); |
608 | 608 |
609 #ifdef DEBUG_WAVE_FILE_MODEL | 609 #ifdef DEBUG_WAVE_FILE_MODEL |
610 std::cerr << "WaveFileModel::fillCache: started fill thread" << std::endl; | 610 SVDEBUG << "WaveFileModel::fillCache: started fill thread" << endl; |
611 #endif | 611 #endif |
612 } | 612 } |
613 | 613 |
614 void | 614 void |
615 WaveFileModel::fillTimerTimedOut() | 615 WaveFileModel::fillTimerTimedOut() |
616 { | 616 { |
617 if (m_fillThread) { | 617 if (m_fillThread) { |
618 size_t fillExtent = m_fillThread->getFillExtent(); | 618 size_t fillExtent = m_fillThread->getFillExtent(); |
619 #ifdef DEBUG_WAVE_FILE_MODEL | 619 #ifdef DEBUG_WAVE_FILE_MODEL |
620 cerr << "WaveFileModel::fillTimerTimedOut: extent = " << fillExtent << endl; | 620 SVDEBUG << "WaveFileModel::fillTimerTimedOut: extent = " << fillExtent << endl; |
621 #endif | 621 #endif |
622 if (fillExtent > m_lastFillExtent) { | 622 if (fillExtent > m_lastFillExtent) { |
623 emit modelChanged(m_lastFillExtent, fillExtent); | 623 emit modelChanged(m_lastFillExtent, fillExtent); |
624 m_lastFillExtent = fillExtent; | 624 m_lastFillExtent = fillExtent; |
625 } | 625 } |
626 } else { | 626 } else { |
627 #ifdef DEBUG_WAVE_FILE_MODEL | 627 #ifdef DEBUG_WAVE_FILE_MODEL |
628 cerr << "WaveFileModel::fillTimerTimedOut: no thread" << std::endl; | 628 SVDEBUG << "WaveFileModel::fillTimerTimedOut: no thread" << endl; |
629 #endif | 629 #endif |
630 emit modelChanged(); | 630 emit modelChanged(); |
631 } | 631 } |
632 } | 632 } |
633 | 633 |
644 emit modelChanged(m_lastFillExtent, getEndFrame()); | 644 emit modelChanged(m_lastFillExtent, getEndFrame()); |
645 } | 645 } |
646 emit modelChanged(); | 646 emit modelChanged(); |
647 emit ready(); | 647 emit ready(); |
648 #ifdef DEBUG_WAVE_FILE_MODEL | 648 #ifdef DEBUG_WAVE_FILE_MODEL |
649 cerr << "WaveFileModel::cacheFilled" << endl; | 649 SVDEBUG << "WaveFileModel::cacheFilled" << endl; |
650 #endif | 650 #endif |
651 } | 651 } |
652 | 652 |
653 void | 653 void |
654 WaveFileModel::RangeCacheFillThread::run() | 654 WaveFileModel::RangeCacheFillThread::run() |
667 size_t channels = m_model.getChannelCount(); | 667 size_t channels = m_model.getChannelCount(); |
668 bool updating = m_model.m_reader->isUpdating(); | 668 bool updating = m_model.m_reader->isUpdating(); |
669 | 669 |
670 if (updating) { | 670 if (updating) { |
671 while (channels == 0 && !m_model.m_exiting) { | 671 while (channels == 0 && !m_model.m_exiting) { |
672 // std::cerr << "WaveFileModel::fill: Waiting for channels..." << std::endl; | 672 // SVDEBUG << "WaveFileModel::fill: Waiting for channels..." << endl; |
673 sleep(1); | 673 sleep(1); |
674 channels = m_model.getChannelCount(); | 674 channels = m_model.getChannelCount(); |
675 } | 675 } |
676 } | 676 } |
677 | 677 |
688 while (first || updating) { | 688 while (first || updating) { |
689 | 689 |
690 updating = m_model.m_reader->isUpdating(); | 690 updating = m_model.m_reader->isUpdating(); |
691 m_frameCount = m_model.getFrameCount(); | 691 m_frameCount = m_model.getFrameCount(); |
692 | 692 |
693 // std::cerr << "WaveFileModel::fill: frame = " << frame << ", count = " << m_frameCount << std::endl; | 693 // SVDEBUG << "WaveFileModel::fill: frame = " << frame << ", count = " << m_frameCount << endl; |
694 | 694 |
695 while (frame < m_frameCount) { | 695 while (frame < m_frameCount) { |
696 | 696 |
697 // std::cerr << "WaveFileModel::fill inner loop: frame = " << frame << ", count = " << m_frameCount << ", blocksize " << readBlockSize << std::endl; | 697 // SVDEBUG << "WaveFileModel::fill inner loop: frame = " << frame << ", count = " << m_frameCount << ", blocksize " << readBlockSize << endl; |
698 | 698 |
699 if (updating && (frame + readBlockSize > m_frameCount)) break; | 699 if (updating && (frame + readBlockSize > m_frameCount)) break; |
700 | 700 |
701 m_model.m_reader->getInterleavedFrames(frame, readBlockSize, block); | 701 m_model.m_reader->getInterleavedFrames(frame, readBlockSize, block); |
702 | 702 |