mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-08-18 05:32:25 -04:00
SDRDaemonSink: wait for queue stabilization to start rate control
This commit is contained in:
parent
98a1f1952f
commit
4518984ddb
@ -58,6 +58,7 @@ SDRdaemonSinkOutput::SDRdaemonSinkOutput(DeviceSinkAPI *deviceAPI) :
|
|||||||
m_lastSampleCount(0),
|
m_lastSampleCount(0),
|
||||||
m_lastRemoteTimestampRateCorrection(0),
|
m_lastRemoteTimestampRateCorrection(0),
|
||||||
m_lastTimestampRateCorrection(0),
|
m_lastTimestampRateCorrection(0),
|
||||||
|
m_lastQueueLength(-2),
|
||||||
m_nbRemoteSamplesSinceRateCorrection(0),
|
m_nbRemoteSamplesSinceRateCorrection(0),
|
||||||
m_nbSamplesSinceRateCorrection(0),
|
m_nbSamplesSinceRateCorrection(0),
|
||||||
m_chunkSizeCorrection(0)
|
m_chunkSizeCorrection(0)
|
||||||
@ -93,6 +94,7 @@ bool SDRdaemonSinkOutput::start()
|
|||||||
|
|
||||||
m_lastRemoteTimestampRateCorrection = 0;
|
m_lastRemoteTimestampRateCorrection = 0;
|
||||||
m_lastTimestampRateCorrection = 0;
|
m_lastTimestampRateCorrection = 0;
|
||||||
|
m_lastQueueLength = -2; // set first value out of bounds
|
||||||
|
|
||||||
double delay = ((127*127*m_settings.m_txDelay) / m_settings.m_sampleRate)/(128 + m_settings.m_nbFECBlocks);
|
double delay = ((127*127*m_settings.m_txDelay) / m_settings.m_sampleRate)/(128 + m_settings.m_nbFECBlocks);
|
||||||
m_sdrDaemonSinkThread->setTxDelay((int) (delay*1e6));
|
m_sdrDaemonSinkThread->setTxDelay((int) (delay*1e6));
|
||||||
@ -514,7 +516,8 @@ void SDRdaemonSinkOutput::analyzeApiReply(const QJsonObject& jsonObject)
|
|||||||
|
|
||||||
uint64_t timestampUs = tv.tv_sec*1000000ULL + tv.tv_usec;
|
uint64_t timestampUs = tv.tv_sec*1000000ULL + tv.tv_usec;
|
||||||
|
|
||||||
if (m_lastRemoteTimestampRateCorrection == 0)
|
// on initial state wait for queue stabilization
|
||||||
|
if ((m_lastRemoteTimestampRateCorrection == 0) && (queueLength >= m_lastQueueLength-1) && (queueLength <= m_lastQueueLength+1))
|
||||||
{
|
{
|
||||||
m_lastRemoteTimestampRateCorrection = remoteTimestampUs;
|
m_lastRemoteTimestampRateCorrection = remoteTimestampUs;
|
||||||
m_lastTimestampRateCorrection = timestampUs;
|
m_lastTimestampRateCorrection = timestampUs;
|
||||||
@ -545,6 +548,7 @@ void SDRdaemonSinkOutput::analyzeApiReply(const QJsonObject& jsonObject)
|
|||||||
|
|
||||||
m_lastRemoteSampleCount = remoteSampleCount;
|
m_lastRemoteSampleCount = remoteSampleCount;
|
||||||
m_lastSampleCount = sampleCount;
|
m_lastSampleCount = sampleCount;
|
||||||
|
m_lastQueueLength = queueLength;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,6 +183,7 @@ private:
|
|||||||
uint32_t m_lastSampleCount;
|
uint32_t m_lastSampleCount;
|
||||||
uint64_t m_lastRemoteTimestampRateCorrection;
|
uint64_t m_lastRemoteTimestampRateCorrection;
|
||||||
uint64_t m_lastTimestampRateCorrection;
|
uint64_t m_lastTimestampRateCorrection;
|
||||||
|
int m_lastQueueLength;
|
||||||
uint32_t m_nbRemoteSamplesSinceRateCorrection;
|
uint32_t m_nbRemoteSamplesSinceRateCorrection;
|
||||||
uint32_t m_nbSamplesSinceRateCorrection;
|
uint32_t m_nbSamplesSinceRateCorrection;
|
||||||
int m_chunkSizeCorrection;
|
int m_chunkSizeCorrection;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user