comparison data/model/WaveFileModel.cpp @ 265:e08f486e8d8c

* Enable threaded decoding for Ogg and MP3 files. Needs some work on reducing updates to the overview widget
author Chris Cannam
date Wed, 06 Jun 2007 16:24:55 +0000
parents 96a6dd889c68
children 2268963dabd1
comparison
equal deleted inserted replaced
264:260032c26c4f 265:e08f486e8d8c
94 bool 94 bool
95 WaveFileModel::isReady(int *completion) const 95 WaveFileModel::isReady(int *completion) const
96 { 96 {
97 bool ready = (isOK() && (m_fillThread == 0)); 97 bool ready = (isOK() && (m_fillThread == 0));
98 double c = double(m_lastFillExtent) / double(getEndFrame() - getStartFrame()); 98 double c = double(m_lastFillExtent) / double(getEndFrame() - getStartFrame());
99 if (completion) *completion = int(c * 100.0 + 0.01); 99 if (completion) {
100 *completion = int(c * 100.0 + 0.01);
101 if (m_reader) {
102 int decodeCompletion = m_reader->getDecodeCompletion();
103 // std::cerr << "decodeCompletion " << decodeCompletion << ", completion " << *completion << std::endl;
104 // if (decodeCompletion < *completion) *completion = decodeCompletion;
105 if (decodeCompletion < 100) *completion = decodeCompletion;
106 }
107 }
100 #ifdef DEBUG_WAVE_FILE_MODEL 108 #ifdef DEBUG_WAVE_FILE_MODEL
101 std::cerr << "WaveFileModel::isReady(): ready = " << ready << ", completion = " << (completion ? *completion : -1) << std::endl; 109 std::cerr << "WaveFileModel::isReady(): ready = " << ready << ", completion = " << (completion ? *completion : -1) << std::endl;
102 #endif 110 #endif
103 return ready; 111 return ready;
104 } 112 }
484 492
485 // std::cerr << "WaveFileModel::fill: frame = " << frame << ", count = " << m_frameCount << std::endl; 493 // std::cerr << "WaveFileModel::fill: frame = " << frame << ", count = " << m_frameCount << std::endl;
486 494
487 while (frame < m_frameCount) { 495 while (frame < m_frameCount) {
488 496
497 // std::cerr << "WaveFileModel::fill inner loop: frame = " << frame << ", count = " << m_frameCount << ", blocksize " << readBlockSize << std::endl;
498
489 if (updating && (frame + readBlockSize > m_frameCount)) break; 499 if (updating && (frame + readBlockSize > m_frameCount)) break;
490 500
491 m_model.m_reader->getInterleavedFrames(frame, readBlockSize, block); 501 m_model.m_reader->getInterleavedFrames(frame, readBlockSize, block);
502
503 // std::cerr << "block is " << block.size() << std::endl;
492 504
493 for (size_t i = 0; i < readBlockSize; ++i) { 505 for (size_t i = 0; i < readBlockSize; ++i) {
494 506
495 if (channels * i + channels > block.size()) break; 507 if (channels * i + channels > block.size()) break;
496 508
536 if (m_model.m_exiting) break; 548 if (m_model.m_exiting) break;
537 549
538 m_fillExtent = frame; 550 m_fillExtent = frame;
539 } 551 }
540 552
553 // std::cerr << "WaveFileModel: inner loop ended" << std::endl;
554
541 first = false; 555 first = false;
542 if (m_model.m_exiting) break; 556 if (m_model.m_exiting) break;
543 if (updating) { 557 if (updating) {
558 // std::cerr << "sleeping..." << std::endl;
544 sleep(1); 559 sleep(1);
545 } 560 }
546 } 561 }
547 562
548 if (!m_model.m_exiting) { 563 if (!m_model.m_exiting) {