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