File indexing completed on 2025-02-23 04:35:42
0001 /* 0002 SPDX-FileCopyrightText: 2010-2022 Mladen Milinkovic <max@smoothware.net> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef ZOOMBUFFER_H 0008 #define ZOOMBUFFER_H 0009 0010 #include <QMutex> 0011 #include <QThread> 0012 #include <QWaitCondition> 0013 0014 #include "gui/waveform/wavebuffer.h" 0015 0016 namespace SubtitleComposer { 0017 class ZoomBuffer : public QThread 0018 { 0019 Q_OBJECT 0020 0021 public: 0022 explicit ZoomBuffer(WaveBuffer *parent); 0023 virtual ~ZoomBuffer(); 0024 0025 void setWaveform(const SAMPLE_TYPE * const *waveform); 0026 void setZoomScale(quint32 samplesPerPixel); 0027 void zoomedBuffer(quint32 timeStart, quint32 timeEnd, WaveZoomData **buffers, quint32 *bufLen); 0028 0029 inline quint32 samplesPerPixel() const { return m_samplesPerPixel; } 0030 0031 private: 0032 void run() override; 0033 void updateZoomRange(quint32 *start, quint32 end); 0034 void stopAndClear(); 0035 void start(); 0036 0037 signals: 0038 void zoomedBufferReady(); 0039 0040 private: 0041 WaveBuffer *m_waveBuffer; 0042 0043 quint32 m_samplesPerPixel; 0044 WaveZoomData **m_waveformZoomed; 0045 quint32 m_waveformZoomedSize; 0046 const SAMPLE_TYPE * const *m_waveform; 0047 0048 QMutex m_publicMutex; 0049 0050 bool m_restartProcessing; 0051 0052 QMutex m_reqMutex; 0053 quint32 m_reqStart = 0; 0054 quint32 m_reqEnd = 0; 0055 quint32 *m_reqLen = nullptr; 0056 }; 0057 } 0058 0059 #endif // ZOOMBUFFER_H