mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 13:00:26 -04:00 
			
		
		
		
	File Input: refactored FileInputThread to FileInputWorker object moved to thread (contribution from Vort). Fixes #562
This commit is contained in:
		
							parent
							
								
									252156ccbf
								
							
						
					
					
						commit
						c75c35acad
					
				| @ -3,7 +3,7 @@ project(fileinput) | |||||||
| set(fileinput_SOURCES | set(fileinput_SOURCES | ||||||
| 	fileinput.cpp | 	fileinput.cpp | ||||||
| 	fileinputplugin.cpp | 	fileinputplugin.cpp | ||||||
| 	fileinputthread.cpp | 	fileinputworker.cpp | ||||||
|     fileinputsettings.cpp |     fileinputsettings.cpp | ||||||
|     fileinputwebapiadapter.cpp |     fileinputwebapiadapter.cpp | ||||||
| ) | ) | ||||||
| @ -11,7 +11,7 @@ set(fileinput_SOURCES | |||||||
| set(fileinput_HEADERS | set(fileinput_HEADERS | ||||||
| 	fileinput.h | 	fileinput.h | ||||||
| 	fileinputplugin.h | 	fileinputplugin.h | ||||||
| 	fileinputthread.h | 	fileinputworker.h | ||||||
|     fileinputsettings.h |     fileinputsettings.h | ||||||
|     fileinputwebapiadapter.h |     fileinputwebapiadapter.h | ||||||
| ) | ) | ||||||
|  | |||||||
| @ -35,7 +35,7 @@ | |||||||
| #include "device/deviceapi.h" | #include "device/deviceapi.h" | ||||||
| 
 | 
 | ||||||
| #include "fileinput.h" | #include "fileinput.h" | ||||||
| #include "fileinputthread.h" | #include "fileinputworker.h" | ||||||
| 
 | 
 | ||||||
| MESSAGE_CLASS_DEFINITION(FileInput::MsgConfigureFileInput, Message) | MESSAGE_CLASS_DEFINITION(FileInput::MsgConfigureFileInput, Message) | ||||||
| MESSAGE_CLASS_DEFINITION(FileInput::MsgConfigureFileSourceName, Message) | MESSAGE_CLASS_DEFINITION(FileInput::MsgConfigureFileSourceName, Message) | ||||||
| @ -52,7 +52,7 @@ MESSAGE_CLASS_DEFINITION(FileInput::MsgReportHeaderCRC, Message) | |||||||
| FileInput::FileInput(DeviceAPI *deviceAPI) : | FileInput::FileInput(DeviceAPI *deviceAPI) : | ||||||
|     m_deviceAPI(deviceAPI), |     m_deviceAPI(deviceAPI), | ||||||
| 	m_settings(), | 	m_settings(), | ||||||
| 	m_fileInputThread(nullptr), | 	m_fileInputWorker(nullptr), | ||||||
| 	m_deviceDescription(), | 	m_deviceDescription(), | ||||||
| 	m_fileName("..."), | 	m_fileName("..."), | ||||||
| 	m_sampleRate(0), | 	m_sampleRate(0), | ||||||
| @ -157,10 +157,10 @@ void FileInput::seekFileStream(int seekMillis) | |||||||
| { | { | ||||||
| 	QMutexLocker mutexLocker(&m_mutex); | 	QMutexLocker mutexLocker(&m_mutex); | ||||||
| 
 | 
 | ||||||
| 	if ((m_ifstream.is_open()) && m_fileInputThread && !m_fileInputThread->isRunning()) | 	if ((m_ifstream.is_open()) && m_fileInputWorker && !m_fileInputWorker->isRunning()) | ||||||
| 	{ | 	{ | ||||||
|         quint64 seekPoint = ((m_recordLength * seekMillis) / 1000) * m_sampleRate; |         quint64 seekPoint = ((m_recordLength * seekMillis) / 1000) * m_sampleRate; | ||||||
| 		m_fileInputThread->setSamplesCount(seekPoint); | 		m_fileInputWorker->setSamplesCount(seekPoint); | ||||||
|         seekPoint *= (m_sampleSize == 24 ? 8 : 4); // + sizeof(FileSink::Header)
 |         seekPoint *= (m_sampleSize == 24 ? 8 : 4); // + sizeof(FileSink::Header)
 | ||||||
| 		m_ifstream.clear(); | 		m_ifstream.clear(); | ||||||
| 		m_ifstream.seekg(seekPoint + sizeof(FileRecord::Header), std::ios::beg); | 		m_ifstream.seekg(seekPoint + sizeof(FileRecord::Header), std::ios::beg); | ||||||
| @ -194,9 +194,11 @@ bool FileInput::start() | |||||||
| 		return false; | 		return false; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	m_fileInputThread = new FileInputThread(&m_ifstream, &m_sampleFifo, m_masterTimer, &m_inputMessageQueue); | 	m_fileInputWorker = new FileInputWorker(&m_ifstream, &m_sampleFifo, m_masterTimer, &m_inputMessageQueue); | ||||||
| 	m_fileInputThread->setSampleRateAndSize(m_settings.m_accelerationFactor * m_sampleRate, m_sampleSize); // Fast Forward: 1 corresponds to live. 1/2 is half speed, 2 is double speed
 | 	m_fileInputWorker->moveToThread(&m_fileInputWorkerThread); | ||||||
| 	m_fileInputThread->startWork(); | 	m_fileInputWorker->setSampleRateAndSize(m_settings.m_accelerationFactor * m_sampleRate, m_sampleSize); // Fast Forward: 1 corresponds to live. 1/2 is half speed, 2 is double speed
 | ||||||
|  | 	startWorker(); | ||||||
|  | 
 | ||||||
| 	m_deviceDescription = "FileInput"; | 	m_deviceDescription = "FileInput"; | ||||||
| 
 | 
 | ||||||
| 	mutexLocker.unlock(); | 	mutexLocker.unlock(); | ||||||
| @ -215,11 +217,11 @@ void FileInput::stop() | |||||||
| 	qDebug() << "FileInput::stop"; | 	qDebug() << "FileInput::stop"; | ||||||
| 	QMutexLocker mutexLocker(&m_mutex); | 	QMutexLocker mutexLocker(&m_mutex); | ||||||
| 
 | 
 | ||||||
| 	if (m_fileInputThread) | 	if (m_fileInputWorker) | ||||||
| 	{ | 	{ | ||||||
| 		m_fileInputThread->stopWork(); | 		stopWorker(); | ||||||
| 		delete m_fileInputThread; | 		delete m_fileInputWorker; | ||||||
| 		m_fileInputThread = nullptr; | 		m_fileInputWorker = nullptr; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	m_deviceDescription.clear(); | 	m_deviceDescription.clear(); | ||||||
| @ -230,6 +232,20 @@ void FileInput::stop() | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void FileInput::startWorker() | ||||||
|  | { | ||||||
|  | 	m_fileInputWorker->startWork(); | ||||||
|  | 	m_fileInputWorkerThread.start(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void FileInput::stopWorker() | ||||||
|  | { | ||||||
|  | 	m_fileInputWorker->stopWork(); | ||||||
|  | 	m_fileInputWorkerThread.quit(); | ||||||
|  | 	m_fileInputWorkerThread.wait(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| QByteArray FileInput::serialize() const | QByteArray FileInput::serialize() const | ||||||
| { | { | ||||||
|     return m_settings.serialize(); |     return m_settings.serialize(); | ||||||
| @ -313,12 +329,12 @@ bool FileInput::handleMessage(const Message& message) | |||||||
| 		MsgConfigureFileInputWork& conf = (MsgConfigureFileInputWork&) message; | 		MsgConfigureFileInputWork& conf = (MsgConfigureFileInputWork&) message; | ||||||
| 		bool working = conf.isWorking(); | 		bool working = conf.isWorking(); | ||||||
| 
 | 
 | ||||||
| 		if (m_fileInputThread != 0) | 		if (m_fileInputWorker != 0) | ||||||
| 		{ | 		{ | ||||||
| 			if (working) { | 			if (working) { | ||||||
| 				m_fileInputThread->startWork(); | 				startWorker(); | ||||||
| 			} else { | 			} else { | ||||||
| 				m_fileInputThread->stopWork(); | 				stopWorker(); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| @ -336,11 +352,11 @@ bool FileInput::handleMessage(const Message& message) | |||||||
| 	{ | 	{ | ||||||
| 		MsgReportFileInputStreamTiming *report; | 		MsgReportFileInputStreamTiming *report; | ||||||
| 
 | 
 | ||||||
| 		if (m_fileInputThread != 0) | 		if (m_fileInputWorker != 0) | ||||||
| 		{ | 		{ | ||||||
| 			if (getMessageQueueToGUI()) | 			if (getMessageQueueToGUI()) | ||||||
| 			{ | 			{ | ||||||
|                 report = MsgReportFileInputStreamTiming::create(m_fileInputThread->getSamplesCount()); |                 report = MsgReportFileInputStreamTiming::create(m_fileInputWorker->getSamplesCount()); | ||||||
|                 getMessageQueueToGUI()->push(report); |                 getMessageQueueToGUI()->push(report); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| @ -370,21 +386,21 @@ bool FileInput::handleMessage(const Message& message) | |||||||
| 
 | 
 | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|     else if (FileInputThread::MsgReportEOF::match(message)) |     else if (FileInputWorker::MsgReportEOF::match(message)) | ||||||
|     { |     { | ||||||
|         qDebug() << "FileInput::handleMessage: MsgReportEOF"; |         qDebug() << "FileInput::handleMessage: MsgReportEOF"; | ||||||
|         m_fileInputThread->stopWork(); | 		stopWorker(); | ||||||
| 
 | 
 | ||||||
|         if (getMessageQueueToGUI()) |         if (getMessageQueueToGUI()) | ||||||
|         { |         { | ||||||
|             MsgReportFileInputStreamTiming *report = MsgReportFileInputStreamTiming::create(m_fileInputThread->getSamplesCount()); |             MsgReportFileInputStreamTiming *report = MsgReportFileInputStreamTiming::create(m_fileInputWorker->getSamplesCount()); | ||||||
|             getMessageQueueToGUI()->push(report); |             getMessageQueueToGUI()->push(report); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (m_settings.m_loop) |         if (m_settings.m_loop) | ||||||
|         { |         { | ||||||
|             seekFileStream(0); |             seekFileStream(0); | ||||||
|             m_fileInputThread->startWork(); | 			startWorker(); | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
| @ -415,14 +431,14 @@ bool FileInput::applySettings(const FileInputSettings& settings, bool force) | |||||||
|     { |     { | ||||||
|         reverseAPIKeys.append("accelerationFactor"); |         reverseAPIKeys.append("accelerationFactor"); | ||||||
| 
 | 
 | ||||||
|         if (m_fileInputThread) |         if (m_fileInputWorker) | ||||||
|         { |         { | ||||||
|             QMutexLocker mutexLocker(&m_mutex); |             QMutexLocker mutexLocker(&m_mutex); | ||||||
|             if (!m_sampleFifo.setSize(m_settings.m_accelerationFactor * m_sampleRate * sizeof(Sample))) { |             if (!m_sampleFifo.setSize(m_settings.m_accelerationFactor * m_sampleRate * sizeof(Sample))) { | ||||||
|                 qCritical("FileInput::applySettings: could not reallocate sample FIFO size to %lu", |                 qCritical("FileInput::applySettings: could not reallocate sample FIFO size to %lu", | ||||||
|                         m_settings.m_accelerationFactor * m_sampleRate * sizeof(Sample)); |                         m_settings.m_accelerationFactor * m_sampleRate * sizeof(Sample)); | ||||||
|             } |             } | ||||||
|             m_fileInputThread->setSampleRateAndSize(settings.m_accelerationFactor * m_sampleRate, m_sampleSize); // Fast Forward: 1 corresponds to live. 1/2 is half speed, 2 is double speed
 | 			m_fileInputWorker->setSampleRateAndSize(settings.m_accelerationFactor * m_sampleRate, m_sampleSize); // Fast Forward: 1 corresponds to live. 1/2 is half speed, 2 is double speed
 | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -571,8 +587,8 @@ void FileInput::webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response) | |||||||
|     qint64 t_msec = 0; |     qint64 t_msec = 0; | ||||||
|     quint64 samplesCount = 0; |     quint64 samplesCount = 0; | ||||||
| 
 | 
 | ||||||
|     if (m_fileInputThread) { |     if (m_fileInputWorker) { | ||||||
|         samplesCount = m_fileInputThread->getSamplesCount(); |         samplesCount = m_fileInputWorker->getSamplesCount(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (m_sampleRate > 0) |     if (m_sampleRate > 0) | ||||||
|  | |||||||
| @ -25,6 +25,8 @@ | |||||||
| #include <QString> | #include <QString> | ||||||
| #include <QByteArray> | #include <QByteArray> | ||||||
| #include <QTimer> | #include <QTimer> | ||||||
|  | #include <QThread> | ||||||
|  | #include <QMutex> | ||||||
| #include <QNetworkRequest> | #include <QNetworkRequest> | ||||||
| 
 | 
 | ||||||
| #include "dsp/devicesamplesource.h" | #include "dsp/devicesamplesource.h" | ||||||
| @ -32,7 +34,7 @@ | |||||||
| 
 | 
 | ||||||
| class QNetworkAccessManager; | class QNetworkAccessManager; | ||||||
| class QNetworkReply; | class QNetworkReply; | ||||||
| class FileInputThread; | class FileInputWorker; | ||||||
| class DeviceAPI; | class DeviceAPI; | ||||||
| 
 | 
 | ||||||
| class FileInput : public DeviceSampleSource { | class FileInput : public DeviceSampleSource { | ||||||
| @ -333,7 +335,8 @@ public: | |||||||
| 	QMutex m_mutex; | 	QMutex m_mutex; | ||||||
| 	FileInputSettings m_settings; | 	FileInputSettings m_settings; | ||||||
| 	std::ifstream m_ifstream; | 	std::ifstream m_ifstream; | ||||||
| 	FileInputThread* m_fileInputThread; | 	FileInputWorker* m_fileInputWorker; | ||||||
|  | 	QThread m_fileInputWorkerThread; | ||||||
| 	QString m_deviceDescription; | 	QString m_deviceDescription; | ||||||
| 	QString m_fileName; | 	QString m_fileName; | ||||||
| 	int m_sampleRate; | 	int m_sampleRate; | ||||||
| @ -345,6 +348,8 @@ public: | |||||||
|     QNetworkAccessManager *m_networkManager; |     QNetworkAccessManager *m_networkManager; | ||||||
|     QNetworkRequest m_networkRequest; |     QNetworkRequest m_networkRequest; | ||||||
| 
 | 
 | ||||||
|  | 	void startWorker(); | ||||||
|  | 	void stopWorker(); | ||||||
| 	void openFileStream(); | 	void openFileStream(); | ||||||
| 	void seekFileStream(int seekMillis); | 	void seekFileStream(int seekMillis); | ||||||
| 	bool applySettings(const FileInputSettings& settings, bool force = false); | 	bool applySettings(const FileInputSettings& settings, bool force = false); | ||||||
|  | |||||||
| @ -21,18 +21,18 @@ | |||||||
| #include <QDebug> | #include <QDebug> | ||||||
| 
 | 
 | ||||||
| #include "dsp/filerecord.h" | #include "dsp/filerecord.h" | ||||||
| #include "fileinputthread.h" | #include "fileinputworker.h" | ||||||
| #include "dsp/samplesinkfifo.h" | #include "dsp/samplesinkfifo.h" | ||||||
| #include "util/messagequeue.h" | #include "util/messagequeue.h" | ||||||
| 
 | 
 | ||||||
| MESSAGE_CLASS_DEFINITION(FileInputThread::MsgReportEOF, Message) | MESSAGE_CLASS_DEFINITION(FileInputWorker::MsgReportEOF, Message) | ||||||
| 
 | 
 | ||||||
| FileInputThread::FileInputThread(std::ifstream *samplesStream, | FileInputWorker::FileInputWorker(std::ifstream *samplesStream, | ||||||
|         SampleSinkFifo* sampleFifo, |         SampleSinkFifo* sampleFifo, | ||||||
|         const QTimer& timer, |         const QTimer& timer, | ||||||
|         MessageQueue *fileInputMessageQueue, |         MessageQueue *fileInputMessageQueue, | ||||||
|         QObject* parent) : |         QObject* parent) : | ||||||
| 	QThread(parent), | 	QObject(parent), | ||||||
| 	m_running(false), | 	m_running(false), | ||||||
| 	m_ifstream(samplesStream), | 	m_ifstream(samplesStream), | ||||||
| 	m_fileBuf(0), | 	m_fileBuf(0), | ||||||
| @ -52,7 +52,7 @@ FileInputThread::FileInputThread(std::ifstream *samplesStream, | |||||||
|     assert(m_ifstream != 0); |     assert(m_ifstream != 0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| FileInputThread::~FileInputThread() | FileInputWorker::~FileInputWorker() | ||||||
| { | { | ||||||
| 	if (m_running) { | 	if (m_running) { | ||||||
| 		stopWork(); | 		stopWork(); | ||||||
| @ -67,20 +67,16 @@ FileInputThread::~FileInputThread() | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void FileInputThread::startWork() | void FileInputWorker::startWork() | ||||||
| { | { | ||||||
| 	qDebug() << "FileInputThread::startWork: "; | 	qDebug() << "FileInputThread::startWork: "; | ||||||
| 
 | 
 | ||||||
|     if (m_ifstream->is_open()) |     if (m_ifstream->is_open()) | ||||||
|     { |     { | ||||||
|         qDebug() << "FileInputThread::startWork: file stream open, starting..."; |         qDebug() << "FileInputThread::startWork: file stream open, starting..."; | ||||||
|         m_startWaitMutex.lock(); |  | ||||||
|         m_elapsedTimer.start(); |         m_elapsedTimer.start(); | ||||||
|         start(); |  | ||||||
|         while(!m_running) |  | ||||||
|             m_startWaiter.wait(&m_startWaitMutex, 100); |  | ||||||
|         m_startWaitMutex.unlock(); |  | ||||||
|         connect(&m_timer, SIGNAL(timeout()), this, SLOT(tick())); |         connect(&m_timer, SIGNAL(timeout()), this, SLOT(tick())); | ||||||
|  | 		m_running = true; | ||||||
|     } |     } | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
| @ -88,15 +84,14 @@ void FileInputThread::startWork() | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void FileInputThread::stopWork() | void FileInputWorker::stopWork() | ||||||
| { | { | ||||||
| 	qDebug() << "FileInputThread::stopWork"; | 	qDebug() << "FileInputThread::stopWork"; | ||||||
| 	disconnect(&m_timer, SIGNAL(timeout()), this, SLOT(tick())); | 	disconnect(&m_timer, SIGNAL(timeout()), this, SLOT(tick())); | ||||||
| 	m_running = false; | 	m_running = false; | ||||||
| 	wait(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void FileInputThread::setSampleRateAndSize(int samplerate, quint32 samplesize) | void FileInputWorker::setSampleRateAndSize(int samplerate, quint32 samplesize) | ||||||
| { | { | ||||||
| 	qDebug() << "FileInputThread::setSampleRateAndSize:" | 	qDebug() << "FileInputThread::setSampleRateAndSize:" | ||||||
| 			<< " new rate:" << samplerate | 			<< " new rate:" << samplerate | ||||||
| @ -121,7 +116,7 @@ void FileInputThread::setSampleRateAndSize(int samplerate, quint32 samplesize) | |||||||
| 	//m_samplerate = samplerate;
 | 	//m_samplerate = samplerate;
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void FileInputThread::setBuffers(std::size_t chunksize) | void FileInputWorker::setBuffers(std::size_t chunksize) | ||||||
| { | { | ||||||
|     if (chunksize > m_bufsize) |     if (chunksize > m_bufsize) | ||||||
|     { |     { | ||||||
| @ -159,20 +154,7 @@ void FileInputThread::setBuffers(std::size_t chunksize) | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void FileInputThread::run() | void FileInputWorker::tick() | ||||||
| { |  | ||||||
| 	m_running = true; |  | ||||||
| 	m_startWaiter.wakeAll(); |  | ||||||
| 
 |  | ||||||
| 	while(m_running) // actual work is in the tick() function
 |  | ||||||
| 	{ |  | ||||||
| 		sleep(1); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	m_running = false; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void FileInputThread::tick() |  | ||||||
| { | { | ||||||
| 	if (m_running) | 	if (m_running) | ||||||
| 	{ | 	{ | ||||||
| @ -203,7 +185,7 @@ void FileInputThread::tick() | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void FileInputThread::writeToSampleFifo(const quint8* buf, qint32 nbBytes) | void FileInputWorker::writeToSampleFifo(const quint8* buf, qint32 nbBytes) | ||||||
| { | { | ||||||
| 	if (m_samplesize == 16) | 	if (m_samplesize == 16) | ||||||
| 	{ | 	{ | ||||||
| @ -15,12 +15,9 @@ | |||||||
| // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | ||||||
| ///////////////////////////////////////////////////////////////////////////////////
 | ///////////////////////////////////////////////////////////////////////////////////
 | ||||||
| 
 | 
 | ||||||
| #ifndef INCLUDE_FILEINPUTTHREAD_H | #ifndef INCLUDE_FILEINPUTWORKER_H | ||||||
| #define INCLUDE_FILEINPUTTHREAD_H | #define INCLUDE_FILEINPUTWORKER_H | ||||||
| 
 | 
 | ||||||
| #include <QThread> |  | ||||||
| #include <QMutex> |  | ||||||
| #include <QWaitCondition> |  | ||||||
| #include <QTimer> | #include <QTimer> | ||||||
| #include <QElapsedTimer> | #include <QElapsedTimer> | ||||||
| #include <iostream> | #include <iostream> | ||||||
| @ -35,7 +32,7 @@ | |||||||
| class SampleSinkFifo; | class SampleSinkFifo; | ||||||
| class MessageQueue; | class MessageQueue; | ||||||
| 
 | 
 | ||||||
| class FileInputThread : public QThread { | class FileInputWorker : public QObject { | ||||||
| 	Q_OBJECT | 	Q_OBJECT | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
| @ -53,12 +50,12 @@ public: | |||||||
|         { } |         { } | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
| 	FileInputThread(std::ifstream *samplesStream, | 	FileInputWorker(std::ifstream *samplesStream, | ||||||
| 	        SampleSinkFifo* sampleFifo, | 	        SampleSinkFifo* sampleFifo, | ||||||
| 	        const QTimer& timer, | 	        const QTimer& timer, | ||||||
| 	        MessageQueue *fileInputMessageQueue, | 	        MessageQueue *fileInputMessageQueue, | ||||||
| 	        QObject* parent = NULL); | 	        QObject* parent = NULL); | ||||||
| 	~FileInputThread(); | 	~FileInputWorker(); | ||||||
| 
 | 
 | ||||||
| 	void startWork(); | 	void startWork(); | ||||||
| 	void stopWork(); | 	void stopWork(); | ||||||
| @ -69,8 +66,6 @@ public: | |||||||
|     void setSamplesCount(quint64 samplesCount) { m_samplesCount = samplesCount; } |     void setSamplesCount(quint64 samplesCount) { m_samplesCount = samplesCount; } | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
| 	QMutex m_startWaitMutex; |  | ||||||
| 	QWaitCondition m_startWaiter; |  | ||||||
| 	volatile bool m_running; | 	volatile bool m_running; | ||||||
| 
 | 
 | ||||||
| 	std::ifstream* m_ifstream; | 	std::ifstream* m_ifstream; | ||||||
| @ -90,7 +85,6 @@ private: | |||||||
|     QElapsedTimer m_elapsedTimer; |     QElapsedTimer m_elapsedTimer; | ||||||
|     bool m_throttleToggle; |     bool m_throttleToggle; | ||||||
| 
 | 
 | ||||||
| 	void run(); |  | ||||||
| 	//void decimate1(SampleVector::iterator* it, const qint16* buf, qint32 len);
 | 	//void decimate1(SampleVector::iterator* it, const qint16* buf, qint32 len);
 | ||||||
| 	void writeToSampleFifo(const quint8* buf, qint32 nbBytes); | 	void writeToSampleFifo(const quint8* buf, qint32 nbBytes); | ||||||
| 
 | 
 | ||||||
| @ -98,4 +92,4 @@ private slots: | |||||||
| 	void tick(); | 	void tick(); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #endif // INCLUDE_FILEINPUTTHREAD_H
 | #endif // INCLUDE_FILEINPUTWORKER_H
 | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user