- if (!KdenliveSettings::audiothumbnails()) {
- m_audioThumbsQueue.clear();
- m_generatingAudioId.clear();
- return;
- }
- if (!m_audioThumbsQueue.isEmpty()) {
- m_generatingAudioId = m_audioThumbsQueue.takeFirst();
- DocClipBase *clip = getClipById(m_generatingAudioId);
- if (!clip || !clip->slotGetAudioThumbs())
- endAudioThumbsGeneration(m_generatingAudioId);
- } else {
- m_generatingAudioId.clear();
- }
-}
+ Mlt::Profile prof((char*) KdenliveSettings::current_profile().toUtf8().constData());
+ mlt_audio_format audioFormat = mlt_audio_pcm;
+ while (!m_abortAudioThumb && !m_audioThumbsQueue.isEmpty()) {
+ m_thumbsMutex.lock();
+ m_processingAudioThumbId = m_audioThumbsQueue.takeFirst();
+ m_thumbsMutex.unlock();
+ DocClipBase *clip = getClipById(m_processingAudioThumbId);
+ if (!clip || clip->audioThumbCreated()) continue;
+ KUrl url = clip->fileURL();
+ QString hash = clip->getClipHash();
+ if (hash.isEmpty()) continue;
+ QString audioPath = projectFolder() + "/thumbs/" + hash + ".thumb";
+ double lengthInFrames = clip->duration().frames(m_doc->fps());
+ //FIXME: should this be hardcoded??
+ int channels = 2;
+ int frequency = 48000;
+ int arrayWidth = 20;
+ double frame = 0.0;
+ audioByteArray storeIn;
+ QFile f(audioPath);
+ if (QFileInfo(audioPath).size() > 0 && f.open(QIODevice::ReadOnly)) {
+ const QByteArray channelarray = f.readAll();
+ f.close();
+ if (channelarray.size() != arrayWidth*(frame + lengthInFrames) * channels) {
+ kDebug() << "--- BROKEN THUMB FOR: " << url.fileName() << " ---------------------- ";
+ f.remove();
+ continue;
+ }
+ kDebug() << "reading audio thumbs from file";
+
+ int h1 = arrayWidth * channels;
+ int h2 = (int) frame * h1;
+ int h3;
+ for (int z = (int) frame; z < (int)(frame + lengthInFrames) && !m_abortAudioThumb; z++) {
+ h3 = 0;
+ for (int c = 0; c < channels; c++) {
+ QByteArray audioArray(arrayWidth, '\x00');
+ for (int i = 0; i < arrayWidth; i++) {
+ audioArray[i] = channelarray.at(h2 + h3 + i);
+ }
+ h3 += arrayWidth;
+ storeIn[z][c] = audioArray;
+ }
+ h2 += h1;
+ }
+ if (!m_abortAudioThumb) clip->updateAudioThumbnail(storeIn);
+ continue;
+ }
+
+ if (!f.open(QIODevice::WriteOnly)) {
+ kDebug() << "++++++++ ERROR WRITING TO FILE: " << audioPath;
+ kDebug() << "++++++++ DISABLING AUDIO THUMBS";
+ m_thumbsMutex.lock();
+ m_audioThumbsQueue.clear();
+ m_thumbsMutex.unlock();
+ KdenliveSettings::setAudiothumbnails(false);
+ break;
+ }