mirror of
https://github.com/f4exb/sdrangel.git
synced 2026-06-02 22:14:45 -04:00
Add instant replay
This commit is contained in:
@@ -44,6 +44,7 @@
|
||||
|
||||
MESSAGE_CLASS_DEFINITION(AirspyHFInput::MsgConfigureAirspyHF, Message)
|
||||
MESSAGE_CLASS_DEFINITION(AirspyHFInput::MsgStartStop, Message)
|
||||
MESSAGE_CLASS_DEFINITION(AirspyHFInput::MsgSaveReplay, Message)
|
||||
|
||||
const qint64 AirspyHFInput::loLowLimitFreqHF = 9000L;
|
||||
const qint64 AirspyHFInput::loHighLimitFreqHF = 31000000L;
|
||||
@@ -181,7 +182,7 @@ bool AirspyHFInput::start()
|
||||
}
|
||||
|
||||
m_airspyHFWorkerThread = new QThread();
|
||||
m_airspyHFWorker = new AirspyHFWorker(m_dev, &m_sampleFifo);
|
||||
m_airspyHFWorker = new AirspyHFWorker(m_dev, &m_sampleFifo, &m_replayBuffer);
|
||||
m_airspyHFWorker->moveToThread(m_airspyHFWorkerThread);
|
||||
int sampleRateIndex = m_settings.m_devSampleRateIndex;
|
||||
|
||||
@@ -289,6 +290,18 @@ int AirspyHFInput::getSampleRate() const
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t AirspyHFInput::getSampleRateFromIndex(int devSampleRateIndex) const
|
||||
{
|
||||
if (devSampleRateIndex >= m_sampleRates.size()) {
|
||||
devSampleRateIndex = m_sampleRates.size() - 1;
|
||||
}
|
||||
if (devSampleRateIndex >= 0) {
|
||||
return m_sampleRates[devSampleRateIndex];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
quint64 AirspyHFInput::getCenterFrequency() const
|
||||
{
|
||||
return m_settings.m_centerFrequency;
|
||||
@@ -346,6 +359,12 @@ bool AirspyHFInput::handleMessage(const Message& message)
|
||||
|
||||
return true;
|
||||
}
|
||||
else if (MsgSaveReplay::match(message))
|
||||
{
|
||||
MsgSaveReplay& cmd = (MsgSaveReplay&) message;
|
||||
m_replayBuffer.save(cmd.getFilename(), getSampleRateFromIndex(m_settings.m_devSampleRateIndex), getCenterFrequency());
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
@@ -416,6 +435,10 @@ bool AirspyHFInput::applySettings(const AirspyHFSettings& settings, const QList<
|
||||
m_airspyHFWorker->setSamplerate(m_sampleRates[sampleRateIndex]);
|
||||
}
|
||||
}
|
||||
|
||||
if (settings.m_devSampleRateIndex != m_settings.m_devSampleRateIndex) {
|
||||
m_replayBuffer.clear();
|
||||
}
|
||||
}
|
||||
|
||||
if (settingsKeys.contains("log2Decim") || force)
|
||||
@@ -568,6 +591,18 @@ bool AirspyHFInput::applySettings(const AirspyHFSettings& settings, const QList<
|
||||
m_settings.applySettings(settingsKeys, settings);
|
||||
}
|
||||
|
||||
if (settingsKeys.contains("replayLength") || settingsKeys.contains("devSampleRate") || force) {
|
||||
m_replayBuffer.setSize(m_settings.m_replayLength, getSampleRateFromIndex(m_settings.m_devSampleRateIndex));
|
||||
}
|
||||
|
||||
if (settingsKeys.contains("replayOffset") || settingsKeys.contains("devSampleRate") || force) {
|
||||
m_replayBuffer.setReadOffset(((unsigned)(m_settings.m_replayOffset * getSampleRateFromIndex(m_settings.m_devSampleRateIndex))) * 2);
|
||||
}
|
||||
|
||||
if (settingsKeys.contains("replayLoop") || force) {
|
||||
m_replayBuffer.setLoop(m_settings.m_replayLoop);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user