File indexing completed on 2024-04-28 04:51:59

0001 /*
0002     SPDX-FileCopyrightText: 2012 Simon Andreas Eugster <simon.eu@gmail.com>
0003     This file is part of kdenlive. See www.kdenlive.org.
0004 
0005 SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0006 */
0007 
0008 #include "audioCorrelationInfo.h"
0009 
0010 AudioCorrelationInfo::AudioCorrelationInfo(size_t mainSize, size_t subSize)
0011     : m_mainSize(mainSize)
0012     , m_subSize(subSize)
0013     , m_max(-1)
0014 {
0015     m_correlationVector = new qint64[m_mainSize + m_subSize + 1];
0016 }
0017 
0018 AudioCorrelationInfo::~AudioCorrelationInfo()
0019 {
0020     delete[] m_correlationVector;
0021 }
0022 
0023 size_t AudioCorrelationInfo::size() const
0024 {
0025     return m_mainSize + m_subSize + 1;
0026 }
0027 
0028 void AudioCorrelationInfo::setMax(qint64 max)
0029 {
0030     m_max = max;
0031 }
0032 
0033 qint64 AudioCorrelationInfo::max() const
0034 {
0035     if (m_max <= 0) {
0036         size_t width = size();
0037         qint64 max = 0;
0038         for (size_t i = 0; i < width; ++i) {
0039             if (m_correlationVector[i] > max) {
0040                 max = m_correlationVector[i];
0041             }
0042         }
0043         Q_ASSERT(max > 0);
0044         return max;
0045     }
0046     return m_max;
0047 }
0048 
0049 size_t AudioCorrelationInfo::maxIndex() const
0050 {
0051     qint64 max = 0;
0052     size_t index = 0;
0053     size_t width = size();
0054 
0055     for (size_t i = 0; i < width; ++i) {
0056         if (m_correlationVector[i] > max) {
0057             max = m_correlationVector[i];
0058             index = i;
0059         }
0060     }
0061 
0062     return index;
0063 }
0064 
0065 qint64 *AudioCorrelationInfo::correlationVector()
0066 {
0067     return m_correlationVector;
0068 }
0069 
0070 QImage AudioCorrelationInfo::toImage(size_t height) const
0071 {
0072     size_t width = size();
0073     qint64 maxVal = max();
0074 
0075     QImage img(int(width), int(height), QImage::Format_ARGB32);
0076     img.fill(qRgb(255, 255, 255));
0077 
0078     if (maxVal == 0) {
0079         return img;
0080     }
0081 
0082     for (int x = 0; x < int(width); ++x) {
0083         int val = img.height() * int(m_correlationVector[x] / maxVal);
0084         for (int y = img.height() - 1; y > img.height() - val - 1; --y) {
0085             img.setPixel(x, y, qRgb(50, 50, 50));
0086         }
0087     }
0088 
0089     return img;
0090 }