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 }