mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-04 16:01:14 -05:00
Rx channel demods: prevent possible reading past audio buffer end. For #1661
This commit is contained in:
parent
86881792cc
commit
91f4844452
@ -203,11 +203,15 @@ void AMDemodSink::processOneSample(Complex &ci)
|
||||
|
||||
if (m_audioBufferFill >= m_audioBuffer.size())
|
||||
{
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill);
|
||||
if (m_audioBufferFill > m_audioBuffer.size()) {
|
||||
qDebug("AMDemodSink::processOneSample: dropping %d samples", (int) m_audioBufferFill - (int) m_audioBuffer.size());
|
||||
}
|
||||
|
||||
if (res != m_audioBufferFill)
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBuffer.size());
|
||||
|
||||
if (res != m_audioBuffer.size())
|
||||
{
|
||||
qDebug("AMDemodSink::processOneSample: %u/%u audio samples written", res, m_audioBufferFill);
|
||||
qDebug("AMDemodSink::processOneSample: %u/%lu audio samples written", res, m_audioBuffer.size());
|
||||
m_audioFifo.clear();
|
||||
}
|
||||
|
||||
|
@ -225,10 +225,14 @@ void BFMDemodSink::feed(const SampleVector::const_iterator& begin, const SampleV
|
||||
|
||||
if (m_audioBufferFill >= m_audioBuffer.size())
|
||||
{
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill);
|
||||
if (m_audioBufferFill > m_audioBuffer.size()) {
|
||||
qDebug("BFMDemodSink::processOneSample: dropping %d samples", (int) m_audioBufferFill - (int) m_audioBuffer.size());
|
||||
}
|
||||
|
||||
if(res != m_audioBufferFill) {
|
||||
qDebug("BFMDemodSink::feed: %u/%u audio samples written", res, m_audioBufferFill);
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBuffer.size());
|
||||
|
||||
if(res != m_audioBuffer.size()) {
|
||||
qDebug("BFMDemodSink::feed: %u/%lu audio samples written", res, m_audioBuffer.size());
|
||||
}
|
||||
|
||||
m_audioBufferFill = 0;
|
||||
|
@ -446,11 +446,15 @@ void DABDemodSink::processOneAudioSample(Complex &ci)
|
||||
|
||||
if (m_audioBufferFill >= m_audioBuffer.size())
|
||||
{
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill);
|
||||
if (m_audioBufferFill > m_audioBuffer.size()) {
|
||||
qDebug("DABDemodSink::processOneAudioSample: dropping %d samples", (int) m_audioBufferFill - (int) m_audioBuffer.size());
|
||||
}
|
||||
|
||||
if (res != m_audioBufferFill)
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBuffer.size());
|
||||
|
||||
if (res != m_audioBuffer.size())
|
||||
{
|
||||
qDebug("DABDemodSink::audio: %u/%u audio samples written", res, m_audioBufferFill);
|
||||
qDebug("DABDemodSink::processOneAudioSample: %u/%lu audio samples written", res, m_audioBuffer.size());
|
||||
m_audioFifo.clear();
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,6 @@ DSDDemodSink::DSDDemodSink() :
|
||||
m_dsdDecoder(),
|
||||
m_signalFormat(signalFormatNone)
|
||||
{
|
||||
m_audioBuffer.resize(1<<14);
|
||||
m_audioBufferFill = 0;
|
||||
m_demodBuffer.resize(1<<12);
|
||||
m_demodBufferFill = 0;
|
||||
|
@ -140,7 +140,6 @@ private:
|
||||
MagSqLevelsStore m_magSqLevelStore;
|
||||
|
||||
SampleVector m_scopeSampleBuffer;
|
||||
AudioVector m_audioBuffer;
|
||||
uint m_audioBufferFill;
|
||||
FixReal *m_sampleBuffer; //!< samples ring buffer
|
||||
int m_sampleBufferIndex;
|
||||
|
@ -330,10 +330,14 @@ void FreeDVDemodSink::pushSampleToAudio(int16_t sample)
|
||||
|
||||
if (m_audioBufferFill >= m_audioBuffer.size())
|
||||
{
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill);
|
||||
if (m_audioBufferFill > m_audioBuffer.size()) {
|
||||
qDebug("FreeDVDemodSink::pushSampleToAudio: dropping %d samples", (int) m_audioBufferFill - (int) m_audioBuffer.size());
|
||||
}
|
||||
|
||||
if (res != m_audioBufferFill) {
|
||||
qDebug("FreeDVDemodSink::pushSampleToAudio: %u/%u samples written", res, m_audioBufferFill);
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBuffer.size());
|
||||
|
||||
if (res != m_audioBuffer.size()) {
|
||||
qDebug("FreeDVDemodSink::pushSampleToAudio: %u/%lu samples written", res, m_audioBuffer.size());
|
||||
}
|
||||
|
||||
m_audioBufferFill = 0;
|
||||
|
@ -316,11 +316,15 @@ void ILSDemodSink::processOneAudioSample(Complex &ci)
|
||||
|
||||
if (m_audioBufferFill >= m_audioBuffer.size())
|
||||
{
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill);
|
||||
if (m_audioBufferFill > m_audioBuffer.size()) {
|
||||
qDebug("ILSDemodSink::processOneAudioSample: dropping %d samples", (int) m_audioBufferFill - (int) m_audioBuffer.size());
|
||||
}
|
||||
|
||||
if (res != m_audioBufferFill)
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBuffer.size());
|
||||
|
||||
if (res != m_audioBuffer.size())
|
||||
{
|
||||
qDebug("ILSDemodSink::processOneAudioSample: %u/%u audio samples written", res, m_audioBufferFill);
|
||||
qDebug("ILSDemodSink::processOneAudioSample: %u/%lu audio samples written", res, m_audioBuffer.size());
|
||||
m_audioFifo.clear();
|
||||
}
|
||||
|
||||
|
@ -520,10 +520,14 @@ void M17DemodProcessor::processAudio(const std::array<int16_t, 160>& in)
|
||||
|
||||
if (m_audioBufferFill >= m_audioBuffer.size() - 960)
|
||||
{
|
||||
uint res = m_audioFifo->write((const quint8*)&m_audioBuffer[0], m_audioBufferFill);
|
||||
if (m_audioBufferFill > m_audioBuffer.size()) {
|
||||
qDebug("M17DemodProcessor::processAudio: dropping %d samples", (int) m_audioBufferFill - (int) m_audioBuffer.size());
|
||||
}
|
||||
|
||||
if (res != m_audioBufferFill) {
|
||||
qDebug("M17DemodProcessor::processAudio: %u/%u audio samples written", res, m_audioBufferFill);
|
||||
uint res = m_audioFifo->write((const quint8*)&m_audioBuffer[0], m_audioBuffer.size());
|
||||
|
||||
if (res != m_audioBuffer.size()) {
|
||||
qDebug("M17DemodProcessor::processAudio: %u/%lu audio samples written", res, m_audioBuffer.size());
|
||||
}
|
||||
|
||||
m_audioBufferFill = 0;
|
||||
|
@ -59,7 +59,6 @@ M17DemodSink::M17DemodSink() :
|
||||
m_scopeXY(nullptr),
|
||||
m_scopeEnabled(true)
|
||||
{
|
||||
m_audioBuffer.resize(1<<14);
|
||||
m_audioBufferFill = 0;
|
||||
m_demodBuffer.resize(1<<12);
|
||||
m_demodBufferFill = 0;
|
||||
|
@ -166,7 +166,6 @@ private:
|
||||
MagSqLevelsStore m_magSqLevelStore;
|
||||
|
||||
SampleVector m_scopeSampleBuffer;
|
||||
AudioVector m_audioBuffer;
|
||||
uint m_audioBufferFill;
|
||||
FixReal *m_sampleBuffer; //!< samples ring buffer
|
||||
int m_sampleBufferIndex;
|
||||
|
@ -244,12 +244,16 @@ void NFMDemodSink::processOneSample(Complex &ci)
|
||||
|
||||
if (m_audioBufferFill >= m_audioBuffer.size())
|
||||
{
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill);
|
||||
if (m_audioBufferFill > m_audioBuffer.size()) {
|
||||
qDebug("NFMDemodSink::processOneSample: dropping %d samples", (int) m_audioBufferFill - (int) m_audioBuffer.size());
|
||||
}
|
||||
|
||||
if (res != m_audioBufferFill)
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBuffer.size());
|
||||
|
||||
if (res != m_audioBuffer.size())
|
||||
{
|
||||
qDebug("NFMDemodSink::processOneSample: %u/%u audio samples written m_audioSampleRate: %u m_channelSampleRate: %d",
|
||||
res, m_audioBufferFill, m_audioSampleRate, m_channelSampleRate);
|
||||
qDebug("NFMDemodSink::processOneSample: %u/%lu audio samples written m_audioSampleRate: %u m_channelSampleRate: %d",
|
||||
res, m_audioBuffer.size(), m_audioSampleRate, m_channelSampleRate);
|
||||
}
|
||||
|
||||
m_audioBufferFill = 0;
|
||||
|
@ -241,10 +241,14 @@ void SSBDemodSink::processOneSample(Complex &ci)
|
||||
|
||||
if (m_audioBufferFill >= m_audioBuffer.size())
|
||||
{
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill);
|
||||
if (m_audioBufferFill > m_audioBuffer.size()) {
|
||||
qDebug("SSBDemodSink::processOneSample: dropping %d samples", (int) m_audioBufferFill - (int) m_audioBuffer.size());
|
||||
}
|
||||
|
||||
if (res != m_audioBufferFill) {
|
||||
qDebug("SSBDemodSink::processOneSample: %u/%u samples written", res, m_audioBufferFill);
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBuffer.size());
|
||||
|
||||
if (res != m_audioBuffer.size()) {
|
||||
qDebug("SSBDemodSink::processOneSample: %u/%lu samples written", res, m_audioBuffer.size());
|
||||
}
|
||||
|
||||
m_audioBufferFill = 0;
|
||||
|
@ -149,11 +149,15 @@ void VORDemodSCSink::processOneAudioSample(Complex &ci)
|
||||
|
||||
if (m_audioBufferFill >= m_audioBuffer.size())
|
||||
{
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill);
|
||||
if (m_audioBufferFill > m_audioBuffer.size()) {
|
||||
qDebug("VORDemodSCSink::processOneAudioSample: dropping %d samples", (int) m_audioBufferFill - (int) m_audioBuffer.size());
|
||||
}
|
||||
|
||||
if (res != m_audioBufferFill)
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBuffer.size());
|
||||
|
||||
if (res != m_audioBuffer.size())
|
||||
{
|
||||
qDebug("VORDemodSCSink::processOneAudioSample: %u/%u audio samples written", res, m_audioBufferFill);
|
||||
qDebug("VORDemodSCSink::processOneAudioSample: %u/%lu audio samples written", res, m_audioBuffer.size());
|
||||
m_audioFifo.clear();
|
||||
}
|
||||
|
||||
|
@ -126,10 +126,14 @@ void WFMDemodSink::feed(const SampleVector::const_iterator& begin, const SampleV
|
||||
|
||||
if(m_audioBufferFill >= m_audioBuffer.size())
|
||||
{
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill);
|
||||
if (m_audioBufferFill > m_audioBuffer.size()) {
|
||||
qDebug("WFMDemodSink::feed: dropping %d samples", (int) m_audioBufferFill - (int) m_audioBuffer.size());
|
||||
}
|
||||
|
||||
if (res != m_audioBufferFill) {
|
||||
qDebug("WFMDemodSink::feed: %u/%u audio samples written", res, m_audioBufferFill);
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBuffer.size());
|
||||
|
||||
if (res != m_audioBuffer.size()) {
|
||||
qDebug("WFMDemodSink::feed: %u/%lu audio samples written", res, m_audioBuffer.size());
|
||||
}
|
||||
|
||||
m_audioBufferFill = 0;
|
||||
|
@ -314,10 +314,14 @@ void UDPSinkSink::audioReadyRead()
|
||||
|
||||
if (m_audioBufferFill >= m_audioBuffer.size())
|
||||
{
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill);
|
||||
if (m_audioBufferFill > m_audioBuffer.size()) {
|
||||
qDebug("UDPSinkSink::audioReadyRead: dropping %d samples", (int) m_audioBufferFill - (int) m_audioBuffer.size());
|
||||
}
|
||||
|
||||
if (res != m_audioBufferFill) {
|
||||
qDebug("UDPSinkSink::audioReadyRead: (stereo) lost %u samples", m_audioBufferFill - res);
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBuffer.size());
|
||||
|
||||
if (res != m_audioBuffer.size()) {
|
||||
qDebug("UDPSinkSink::audioReadyRead: %u/%lu audio samples written", res, m_audioBuffer.size());
|
||||
}
|
||||
|
||||
m_audioBufferFill = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user