mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 13:00:26 -04:00 
			
		
		
		
	Rx channel demods: prevent possible reading past audio buffer end - take 2. For #1661
This commit is contained in:
		
							parent
							
								
									59e664c028
								
							
						
					
					
						commit
						3f392d3be7
					
				| @ -203,11 +203,11 @@ void AMDemodSink::processOneSample(Complex &ci) | ||||
| 
 | ||||
|     if (m_audioBufferFill >= m_audioBuffer.size()) | ||||
|     { | ||||
|         uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill); | ||||
|         std:;size_t res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], std::min(m_audioBufferFill, m_audioBuffer.size())); | ||||
| 
 | ||||
|         if (res != m_audioBufferFill) | ||||
|         { | ||||
|             qDebug("AMDemodSink::processOneSample: %u/%u audio samples written", res, m_audioBufferFill); | ||||
|             qDebug("AMDemodSink::processOneSample: %lu/%lu audio samples written", res, m_audioBufferFill); | ||||
|             m_audioFifo.clear(); | ||||
|         } | ||||
| 
 | ||||
|  | ||||
| @ -124,7 +124,7 @@ private: | ||||
| 
 | ||||
| 	AudioVector m_audioBuffer; | ||||
| 	AudioFifo m_audioFifo; | ||||
| 	uint32_t m_audioBufferFill; | ||||
| 	std::size_t m_audioBufferFill; | ||||
|     QVector<qint16> m_demodBuffer; | ||||
|     int m_demodBufferFill; | ||||
| 
 | ||||
|  | ||||
| @ -225,10 +225,10 @@ 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); | ||||
| 					std::size_t res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], std::min(m_audioBufferFill, m_audioBuffer.size())); | ||||
| 
 | ||||
| 					if(res != m_audioBufferFill) { | ||||
| 						qDebug("BFMDemodSink::feed: %u/%u audio samples written", res, m_audioBufferFill); | ||||
| 						qDebug("BFMDemodSink::feed: %lu/%lu audio samples written", res, m_audioBufferFill); | ||||
| 					} | ||||
| 
 | ||||
| 					m_audioBufferFill = 0; | ||||
|  | ||||
| @ -114,7 +114,7 @@ private: | ||||
| 
 | ||||
|     int m_audioSampleRate; | ||||
|     AudioVector m_audioBuffer; | ||||
|     uint m_audioBufferFill; | ||||
|     std::size_t m_audioBufferFill; | ||||
|     AudioFifo m_audioFifo; | ||||
| 	SampleVector m_sampleBuffer; | ||||
| 
 | ||||
|  | ||||
| @ -446,11 +446,11 @@ void DABDemodSink::processOneAudioSample(Complex &ci) | ||||
| 
 | ||||
|     if (m_audioBufferFill >= m_audioBuffer.size()) | ||||
|     { | ||||
|         uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill); | ||||
|         std::size_t res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], std::min(m_audioBufferFill, m_audioBuffer.size())); | ||||
| 
 | ||||
|         if (res != m_audioBufferFill) | ||||
|         { | ||||
|             qDebug("DABDemodSink::audio: %u/%u audio samples written", res, m_audioBufferFill); | ||||
|             qDebug("DABDemodSink::audio: %lu/%lu audio samples written", res, m_audioBufferFill); | ||||
|             m_audioFifo.clear(); | ||||
|         } | ||||
| 
 | ||||
|  | ||||
| @ -140,7 +140,7 @@ private: | ||||
|     Real m_audioInterpolatorDistanceRemain; | ||||
|     AudioVector m_audioBuffer; | ||||
|     AudioFifo m_audioFifo; | ||||
|     uint32_t m_audioBufferFill; | ||||
|     std::size_t m_audioBufferFill; | ||||
| 
 | ||||
|     QVector<qint16> m_demodBuffer; | ||||
|     int m_demodBufferFill; | ||||
|  | ||||
| @ -64,7 +64,6 @@ DSDDemodSink::DSDDemodSink() : | ||||
|     m_signalFormat(signalFormatNone) | ||||
| { | ||||
| 	m_audioBuffer.resize(1<<14); | ||||
| 	m_audioBufferFill = 0; | ||||
|     m_demodBuffer.resize(1<<12); | ||||
|     m_demodBufferFill = 0; | ||||
| 
 | ||||
|  | ||||
| @ -141,7 +141,6 @@ private: | ||||
| 
 | ||||
| 	SampleVector m_scopeSampleBuffer; | ||||
| 	AudioVector m_audioBuffer; | ||||
| 	uint m_audioBufferFill; | ||||
| 	FixReal *m_sampleBuffer; //!< samples ring buffer
 | ||||
| 	int m_sampleBufferIndex; | ||||
| 	int m_scaleFromShort; | ||||
|  | ||||
| @ -330,10 +330,10 @@ void FreeDVDemodSink::pushSampleToAudio(int16_t sample) | ||||
| 
 | ||||
|     if (m_audioBufferFill >= m_audioBuffer.size()) | ||||
|     { | ||||
|         uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill); | ||||
|         std::size_t res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], std::min(m_audioBufferFill, m_audioBuffer.size())); | ||||
| 
 | ||||
|         if (res != m_audioBufferFill) { | ||||
|             qDebug("FreeDVDemodSink::pushSampleToAudio: %u/%u samples written", res, m_audioBufferFill); | ||||
|             qDebug("FreeDVDemodSink::pushSampleToAudio: %lu/%lu samples written", res, m_audioBufferFill); | ||||
|         } | ||||
| 
 | ||||
|         m_audioBufferFill = 0; | ||||
|  | ||||
| @ -182,7 +182,7 @@ private: | ||||
| 	SampleVector m_sampleBuffer; | ||||
| 
 | ||||
| 	AudioVector m_audioBuffer; | ||||
| 	uint m_audioBufferFill; | ||||
| 	std::size_t m_audioBufferFill; | ||||
| 	AudioFifo m_audioFifo; | ||||
| 
 | ||||
|     struct freedv *m_freeDV; | ||||
|  | ||||
| @ -316,11 +316,11 @@ void ILSDemodSink::processOneAudioSample(Complex &ci) | ||||
| 
 | ||||
|     if (m_audioBufferFill >= m_audioBuffer.size()) | ||||
|     { | ||||
|         uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill); | ||||
|         std::size_t res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], std::min(m_audioBufferFill, m_audioBuffer.size())); | ||||
| 
 | ||||
|         if (res != m_audioBufferFill) | ||||
|         { | ||||
|             qDebug("ILSDemodSink::processOneAudioSample: %u/%u audio samples written", res, m_audioBufferFill); | ||||
|             qDebug("ILSDemodSink::processOneAudioSample: %lu/%lu audio samples written", res, m_audioBufferFill); | ||||
|             m_audioFifo.clear(); | ||||
|         } | ||||
| 
 | ||||
|  | ||||
| @ -149,7 +149,7 @@ private: | ||||
|     Real m_audioInterpolatorDistanceRemain; | ||||
|     AudioVector m_audioBuffer; | ||||
|     AudioFifo m_audioFifo; | ||||
|     uint32_t m_audioBufferFill; | ||||
|     std::size_t m_audioBufferFill; | ||||
| 
 | ||||
|     SampleVector m_sampleBuffer; | ||||
|     static const int m_sampleBufferSize = ILSDemodSettings::ILSDEMOD_CHANNEL_SAMPLE_RATE / 20; | ||||
|  | ||||
| @ -520,10 +520,10 @@ 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); | ||||
|         std::size_t res = m_audioFifo->write((const quint8*)&m_audioBuffer[0], std::min(m_audioBufferFill, m_audioBuffer.size())); | ||||
| 
 | ||||
|         if (res != m_audioBufferFill) { | ||||
|             qDebug("M17DemodProcessor::processAudio: %u/%u audio samples written", res, m_audioBufferFill); | ||||
|             qDebug("M17DemodProcessor::processAudio: %lu/%lu audio samples written", res, m_audioBufferFill); | ||||
|         } | ||||
| 
 | ||||
|         m_audioBufferFill = 0; | ||||
|  | ||||
| @ -117,7 +117,7 @@ private: | ||||
|     AudioFifo *m_audioFifo; | ||||
|     bool m_audioMute; | ||||
|     AudioVector m_audioBuffer; | ||||
|     uint m_audioBufferFill; | ||||
|     std::size_t m_audioBufferFill; | ||||
|     float m_volume; | ||||
|     int m_upsampling;            //!< upsampling factor
 | ||||
|     float m_upsamplingFactors[7]; | ||||
|  | ||||
| @ -60,7 +60,6 @@ M17DemodSink::M17DemodSink() : | ||||
|     m_scopeEnabled(true) | ||||
| { | ||||
| 	m_audioBuffer.resize(1<<14); | ||||
| 	m_audioBufferFill = 0; | ||||
|     m_demodBuffer.resize(1<<12); | ||||
|     m_demodBufferFill = 0; | ||||
|     m_m17DemodProcessor.setAudioFifo(&m_audioFifo); | ||||
|  | ||||
| @ -167,7 +167,6 @@ private: | ||||
| 
 | ||||
| 	SampleVector m_scopeSampleBuffer; | ||||
| 	AudioVector m_audioBuffer; | ||||
| 	uint m_audioBufferFill; | ||||
| 	FixReal *m_sampleBuffer; //!< samples ring buffer
 | ||||
| 	int m_sampleBufferIndex; | ||||
| 	int m_scaleFromShort; | ||||
|  | ||||
| @ -244,11 +244,11 @@ void NFMDemodSink::processOneSample(Complex &ci) | ||||
| 
 | ||||
|     if (m_audioBufferFill >= m_audioBuffer.size()) | ||||
|     { | ||||
|         uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill); | ||||
|         std::size_t res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], std::min(m_audioBufferFill, m_audioBuffer.size())); | ||||
| 
 | ||||
|         if (res != m_audioBufferFill) | ||||
|         { | ||||
|             qDebug("NFMDemodSink::processOneSample: %u/%u audio samples written m_audioSampleRate: %u m_channelSampleRate: %d", | ||||
|             qDebug("NFMDemodSink::processOneSample: %lu/%lu audio samples written m_audioSampleRate: %u m_channelSampleRate: %d", | ||||
|                 res, m_audioBufferFill, m_audioSampleRate, m_channelSampleRate); | ||||
|         } | ||||
| 
 | ||||
|  | ||||
| @ -103,7 +103,7 @@ private: | ||||
| 
 | ||||
|     int m_audioSampleRate; | ||||
|     AudioVector m_audioBuffer; | ||||
|     uint m_audioBufferFill; | ||||
|     std::size_t m_audioBufferFill; | ||||
|     AudioFifo m_audioFifo; | ||||
|     QVector<qint16> m_demodBuffer; | ||||
|     int m_demodBufferFill; | ||||
|  | ||||
| @ -241,10 +241,10 @@ void SSBDemodSink::processOneSample(Complex &ci) | ||||
| 
 | ||||
|         if (m_audioBufferFill >= m_audioBuffer.size()) | ||||
|         { | ||||
|             uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill); | ||||
|             std::size_t res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], std::min(m_audioBufferFill, m_audioBuffer.size())); | ||||
| 
 | ||||
|             if (res != m_audioBufferFill) { | ||||
|                 qDebug("SSBDemodSink::processOneSample: %u/%u samples written", res, m_audioBufferFill); | ||||
|                 qDebug("SSBDemodSink::processOneSample: %lu/%lu samples written", res, m_audioBufferFill); | ||||
|             } | ||||
| 
 | ||||
|             m_audioBufferFill = 0; | ||||
|  | ||||
| @ -121,7 +121,7 @@ private: | ||||
| 	SampleVector m_sampleBuffer; | ||||
| 
 | ||||
| 	AudioVector m_audioBuffer; | ||||
| 	uint m_audioBufferFill; | ||||
| 	std::size_t m_audioBufferFill; | ||||
| 	AudioFifo m_audioFifo; | ||||
| 	quint32 m_audioSampleRate; | ||||
| 
 | ||||
|  | ||||
| @ -149,11 +149,11 @@ void VORDemodSCSink::processOneAudioSample(Complex &ci) | ||||
| 
 | ||||
|     if (m_audioBufferFill >= m_audioBuffer.size()) | ||||
|     { | ||||
|         uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill); | ||||
|         std::size_t res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], std::min(m_audioBufferFill, m_audioBuffer.size())); | ||||
| 
 | ||||
|         if (res != m_audioBufferFill) | ||||
|         { | ||||
|             qDebug("VORDemodSCSink::processOneAudioSample: %u/%u audio samples written", res, m_audioBufferFill); | ||||
|             qDebug("VORDemodSCSink::processOneAudioSample: %lu/%lu audio samples written", res, m_audioBufferFill); | ||||
|             m_audioFifo.clear(); | ||||
|         } | ||||
| 
 | ||||
|  | ||||
| @ -115,7 +115,7 @@ private: | ||||
|     Real m_audioInterpolatorDistanceRemain; | ||||
|     AudioVector m_audioBuffer; | ||||
|     AudioFifo m_audioFifo; | ||||
|     uint32_t m_audioBufferFill; | ||||
|     std::size_t m_audioBufferFill; | ||||
| 
 | ||||
|     NCO m_ncoRef; | ||||
|     Lowpass<Complex> m_lowpassRef; | ||||
|  | ||||
| @ -126,10 +126,10 @@ 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); | ||||
| 					std::size_t res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], std::min(m_audioBufferFill, m_audioBuffer.size())); | ||||
| 
 | ||||
| 					if (res != m_audioBufferFill) { | ||||
| 						qDebug("WFMDemodSink::feed: %u/%u audio samples written", res, m_audioBufferFill); | ||||
| 						qDebug("WFMDemodSink::feed: %lu/%lu audio samples written", res, m_audioBufferFill); | ||||
| 					} | ||||
| 
 | ||||
| 					m_audioBufferFill = 0; | ||||
|  | ||||
| @ -114,7 +114,7 @@ private: | ||||
| 	Real m_fmExcursion; | ||||
| 
 | ||||
| 	AudioVector m_audioBuffer; | ||||
| 	uint m_audioBufferFill; | ||||
| 	std::size_t m_audioBufferFill; | ||||
| 
 | ||||
| 	AudioFifo m_audioFifo; | ||||
| 	PhaseDiscriminators m_phaseDiscri; | ||||
|  | ||||
| @ -314,10 +314,10 @@ void UDPSinkSink::audioReadyRead() | ||||
| 
 | ||||
| 					if (m_audioBufferFill >= m_audioBuffer.size()) | ||||
| 					{ | ||||
| 						uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill); | ||||
| 						std::size_t res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], std::min(m_audioBufferFill, m_sampleBuffer.size())); | ||||
| 
 | ||||
| 						if (res != m_audioBufferFill) { | ||||
| 							qDebug("UDPSinkSink::audioReadyRead: (stereo) lost %u samples", m_audioBufferFill - res); | ||||
| 							qDebug("WFMDemodSink::feed: %lu/%lu audio samples written", res, m_audioBufferFill); | ||||
| 						} | ||||
| 
 | ||||
| 						m_audioBufferFill = 0; | ||||
|  | ||||
| @ -104,7 +104,7 @@ private: | ||||
|     UDPSinkUtil<Sample24> *m_udpBuffer24; | ||||
| 
 | ||||
| 	AudioVector m_audioBuffer; | ||||
| 	uint m_audioBufferFill; | ||||
| 	std::size_t m_audioBufferFill; | ||||
| 	AudioFifo m_audioFifo; | ||||
| 
 | ||||
| 	BasebandSampleSink* m_spectrum; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user