1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-02-16 22:53:45 -05:00

SigMF file sink: optimized decimation

This commit is contained in:
f4exb 2020-07-19 01:32:49 +02:00
parent 52178ee2b4
commit 2b8ec229d1

View File

@ -83,13 +83,12 @@ void SigMFFileSinkSink::stopRecording()
void SigMFFileSinkSink::feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end)
{
for (SampleVector::const_iterator it = begin; it < end; ++it)
{
if (m_decimator.getDecim() == 1)
{
m_sampleBuffer.push_back(*it);
}
else
SampleVector::const_iterator beginw = begin;
SampleVector::const_iterator endw = end;
if (m_decimator.getDecim() != 1)
{
for (SampleVector::const_iterator it = begin; it < end; ++it)
{
Complex c(it->real(), it->imag());
c *= m_nco.nextIQ();
@ -99,25 +98,29 @@ void SigMFFileSinkSink::feed(const SampleVector::const_iterator& begin, const Sa
m_sampleBuffer.push_back(Sample(ci.real(), ci.imag()));
}
}
}
beginw = m_sampleBuffer.begin();
endw = m_sampleBuffer.end();
}
if (!m_record && (m_settings.m_preRecordTime != 0)) {
m_preRecordFill = m_preRecordBuffer.write(m_sampleBuffer.begin(), m_sampleBuffer.end());
m_preRecordFill = m_preRecordBuffer.write(beginw, endw);
}
if (m_settings.m_squelchRecordingEnable)
{
int nbToWrite = m_sampleBuffer.end() - m_sampleBuffer.begin();
int nbToWrite = endw - beginw;
if (m_squelchOpen)
{
m_fileSink.feed(m_sampleBuffer.begin(), m_sampleBuffer.end(), true);
m_fileSink.feed(beginw, endw, true);
}
else
{
if (nbToWrite < m_postSquelchCounter)
{
m_fileSink.feed(m_sampleBuffer.begin(), m_sampleBuffer.end(), true);
m_fileSink.feed(beginw, endw, true);
m_postSquelchCounter -= nbToWrite;
}
else
@ -128,7 +131,7 @@ void SigMFFileSinkSink::feed(const SampleVector::const_iterator& begin, const Sa
m_msgQueueToGUI->push(msg);
}
m_fileSink.feed(m_sampleBuffer.begin(), m_sampleBuffer.begin() + m_postSquelchCounter, true);
m_fileSink.feed(beginw, endw + m_postSquelchCounter, true);
nbToWrite = m_postSquelchCounter;
m_postSquelchCounter = 0;
@ -144,8 +147,8 @@ void SigMFFileSinkSink::feed(const SampleVector::const_iterator& begin, const Sa
}
else if (m_record)
{
m_fileSink.feed(m_sampleBuffer.begin(), m_sampleBuffer.end(), true);
int nbSamples = m_sampleBuffer.end() - m_sampleBuffer.begin();
m_fileSink.feed(beginw, endw, true);
int nbSamples = endw - beginw;
m_byteCount += nbSamples * sizeof(Sample);
if (m_sinkSampleRate > 0) {
@ -154,10 +157,12 @@ void SigMFFileSinkSink::feed(const SampleVector::const_iterator& begin, const Sa
}
if (m_spectrumSink) {
m_spectrumSink->feed(m_sampleBuffer.begin(), m_sampleBuffer.end(), false);
m_spectrumSink->feed(beginw, endw, false);
}
m_sampleBuffer.clear();
if (m_decimator.getDecim() != 1) {
m_sampleBuffer.clear();
}
}
void SigMFFileSinkSink::applyChannelSettings(