1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-05-29 05:22:25 -04:00

DATV demod: player refactoring: preliminary cleanup (3)

This commit is contained in:
f4exb 2021-04-05 02:42:36 +02:00
parent 1c0aa9cd8e
commit d22cd45b14
4 changed files with 27 additions and 13 deletions

View File

@ -62,7 +62,7 @@ DATVDemodSink::~DATVDemodSink()
m_blnInitialized = false; m_blnInitialized = false;
//Immediately exit from DATVideoStream if waiting for data before killing thread //Immediately exit from DATVideoStream if waiting for data before killing thread
m_objVideoStream->ThreadTimeOut = 0; m_objVideoStream->setThreadTimeout(0);
m_objVideoStream->deleteLater(); m_objVideoStream->deleteLater();
stopVideo(); stopVideo();
@ -173,8 +173,8 @@ bool DATVDemodSink::playVideo()
if (m_objVideoStream->bytesAvailable() > 0) if (m_objVideoStream->bytesAvailable() > 0)
{ {
m_objVideoStream->MultiThreaded = true; m_objVideoStream->setMultiThreaded(true);
m_objVideoStream->ThreadTimeOut = DATVideoRenderThread::videoThreadTimeoutMs; m_objVideoStream->setThreadTimeout(DATVideoRenderThread::videoThreadTimeoutMs);
m_objRenderThread->start(); m_objRenderThread->start();
} }

View File

@ -235,7 +235,7 @@ class DATVideoRenderThread : public QThread
m_renderingVideo = false; m_renderingVideo = false;
} }
static const int videoThreadTimeoutMs = 500; static const int videoThreadTimeoutMs = 1000;
private: private:
DATVideoRender *m_renderer; DATVideoRender *m_renderer;

View File

@ -26,8 +26,8 @@ DATVideostream::DATVideostream():
m_intTotalReceived = 0; m_intTotalReceived = 0;
m_intPacketReceived = 0; m_intPacketReceived = 0;
m_intMemoryLimit = m_defaultMemoryLimit; m_intMemoryLimit = m_defaultMemoryLimit;
MultiThreaded = false; m_multiThreaded = false;
ThreadTimeOut = -1; m_threadTimeout = -1;
m_objeventLoop.connect(this,SIGNAL(onDataAvailable()), &m_objeventLoop, SLOT(quit()),Qt::QueuedConnection); m_objeventLoop.connect(this,SIGNAL(onDataAvailable()), &m_objeventLoop, SLOT(quit()),Qt::QueuedConnection);
} }
@ -59,6 +59,18 @@ void DATVideostream::resetTotalReceived()
emit onDataPackets(&m_intBytesWaiting, &m_intPercentBuffer, &m_intTotalReceived); emit onDataPackets(&m_intBytesWaiting, &m_intPercentBuffer, &m_intTotalReceived);
} }
void DATVideostream::setMultiThreaded(bool multiThreaded)
{
if (multiThreaded)
{
if (m_objeventLoop.isRunning()) {
m_objeventLoop.exit();
}
}
m_multiThreaded = multiThreaded;
}
int DATVideostream::pushData(const char * chrData, int intSize) int DATVideostream::pushData(const char * chrData, int intSize)
{ {
if (intSize <= 0) { if (intSize <= 0) {
@ -146,7 +158,7 @@ qint64 DATVideostream::readData(char *data, qint64 len)
{ {
m_objMutex.unlock(); m_objMutex.unlock();
if (MultiThreaded == true) if (m_multiThreaded == true)
{ {
intThreadLoop=0; intThreadLoop=0;
@ -155,9 +167,9 @@ qint64 DATVideostream::readData(char *data, qint64 len)
QThread::msleep(5); QThread::msleep(5);
intThreadLoop++; intThreadLoop++;
if (ThreadTimeOut >= 0) if (m_threadTimeout >= 0)
{ {
if (intThreadLoop*5 > ThreadTimeOut) { if (intThreadLoop*5 > m_threadTimeout) {
return -1; return -1;
} }
} }
@ -172,7 +184,7 @@ qint64 DATVideostream::readData(char *data, qint64 len)
} }
//Read DATA //Read DATA
intEffectiveLen=m_objFIFO.head().size(); intEffectiveLen = m_objFIFO.head().size();
if (intExpectedLen < intEffectiveLen) if (intExpectedLen < intEffectiveLen)
{ {

View File

@ -34,14 +34,14 @@ public:
DATVideostream(); DATVideostream();
~DATVideostream(); ~DATVideostream();
bool MultiThreaded; static const int m_defaultMemoryLimit = 2820000;
int ThreadTimeOut;
static const int m_defaultMemoryLimit = 2048000;
static const int m_minStackSize = 4; static const int m_minStackSize = 4;
int pushData(const char * chrData, int intSize); int pushData(const char * chrData, int intSize);
void resetTotalReceived(); void resetTotalReceived();
void cleanUp(); void cleanUp();
void setMultiThreaded(bool multiThreaded);
void setThreadTimeout(int timeOut) { m_threadTimeout = timeOut; }
virtual bool isSequential() const; virtual bool isSequential() const;
virtual qint64 bytesAvailable() const; virtual qint64 bytesAvailable() const;
@ -62,6 +62,8 @@ protected:
virtual qint64 readLineData(char *data, qint64 maxSize); virtual qint64 readLineData(char *data, qint64 maxSize);
private: private:
bool m_multiThreaded;
int m_threadTimeout;
QEventLoop m_objeventLoop; QEventLoop m_objeventLoop;
QMutex m_objMutex; QMutex m_objMutex;