mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 13:00:26 -04:00 
			
		
		
		
	SDRDaemonSink: 16/24 bit support (1): works for 16 bit stream
This commit is contained in:
		
							parent
							
								
									5dfc60331c
								
							
						
					
					
						commit
						7158107e58
					
				| @ -25,9 +25,6 @@ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| const int SDRdaemonSourceBuffer::m_sampleSize = 2; | ||||
| const int SDRdaemonSourceBuffer::m_iqSampleSize = 2 * m_sampleSize; | ||||
| 
 | ||||
| SDRdaemonSourceBuffer::SDRdaemonSourceBuffer() : | ||||
|         m_decoderIndexHead(nbDecoderSlots/2), | ||||
|         m_frameHead(0), | ||||
| @ -152,7 +149,7 @@ void SDRdaemonSourceBuffer::rwCorrectionEstimate(int slotIndex) | ||||
| 			dBytes = (nbDecoderSlots * sizeof(BufferFrame)) - normalizedReadIndex - rwDelta; | ||||
| 		} | ||||
| 
 | ||||
|         m_balCorrection = (m_balCorrection / 4) + (dBytes / (int) (m_iqSampleSize * m_nbReads)); // correction is in number of samples. Alpha = 0.25
 | ||||
|         m_balCorrection = (m_balCorrection / 4) + (dBytes / (int) (m_currentMeta.m_sampleBytes * 2 * m_nbReads)); // correction is in number of samples. Alpha = 0.25
 | ||||
| 
 | ||||
|         if (m_balCorrection < -m_balCorrLimit) { | ||||
|             m_balCorrection = -m_balCorrLimit; | ||||
| @ -310,9 +307,9 @@ void SDRdaemonSourceBuffer::writeData(char *array) | ||||
|                 int sampleRate =  metaData->m_sampleRate; | ||||
| 
 | ||||
|                 if (sampleRate > 0) { | ||||
|                     m_bufferLenSec = (float) m_framesNbBytes / (float) (sampleRate * m_iqSampleSize); | ||||
|                     m_bufferLenSec = (float) m_framesNbBytes / (float) (sampleRate * m_currentMeta.m_sampleBytes * 2); | ||||
|                     m_balCorrLimit = sampleRate / 1000; // +/- 1 ms correction max per read
 | ||||
|                     m_readNbBytes = (sampleRate * m_iqSampleSize) / 20; | ||||
|                     m_readNbBytes = (sampleRate * m_currentMeta.m_sampleBytes * 2) / 20; | ||||
|                 } | ||||
| 
 | ||||
|                 printMeta("SDRdaemonSourceBuffer::writeData: new meta", metaData); // print for change other than timestamp
 | ||||
|  | ||||
| @ -52,6 +52,8 @@ public: | ||||
|         void init() | ||||
|         { | ||||
|             memset((char *) this, 0, sizeof(MetaDataFEC)); | ||||
|             m_sampleBits = 16; // assume 16 bits samples to start with
 | ||||
|             m_sampleBytes = 2; | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
| @ -158,8 +160,6 @@ public: | ||||
| 
 | ||||
|     static const int m_udpPayloadSize = SDRDAEMONSOURCE_UDPSIZE; | ||||
|     static const int m_nbOriginalBlocks = SDRDAEMONSOURCE_NBORIGINALBLOCKS; | ||||
| 	static const int m_sampleSize; | ||||
| 	static const int m_iqSampleSize; | ||||
| 
 | ||||
| private: | ||||
|     static const int nbDecoderSlots = SDRDAEMONSOURCE_NBDECODERSLOTS; | ||||
|  | ||||
| @ -57,6 +57,7 @@ SDRdaemonSourceGui::SDRdaemonSourceGui(DeviceUISet *deviceUISet, QWidget* parent | ||||
| 	m_nbOriginalBlocks(128), | ||||
|     m_nbFECBlocks(0), | ||||
|     m_sampleBits(16), | ||||
|     m_sampleBytes(2), | ||||
|     m_samplesCount(0), | ||||
|     m_tickCount(0), | ||||
|     m_addressEdited(false), | ||||
| @ -211,6 +212,7 @@ bool SDRdaemonSourceGui::handleMessage(const Message& message) | ||||
|         m_avgNbRecovery = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getAvgNbRecovery(); | ||||
|         m_nbOriginalBlocks = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getNbOriginalBlocksPerFrame(); | ||||
|         m_sampleBits = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getSampleBits(); | ||||
|         m_sampleBytes = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getSampleBytes(); | ||||
| 
 | ||||
|         int nbFECBlocks = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getNbFECBlocksPerFrame(); | ||||
| 
 | ||||
|  | ||||
| @ -86,6 +86,7 @@ private: | ||||
|     int m_nbOriginalBlocks; | ||||
|     int m_nbFECBlocks; | ||||
|     int m_sampleBits; | ||||
|     int m_sampleBytes; | ||||
| 
 | ||||
| 	int m_samplesCount; | ||||
| 	std::size_t m_tickCount; | ||||
|  | ||||
| @ -141,6 +141,7 @@ public: | ||||
|         int getNbOriginalBlocksPerFrame() const { return m_nbOriginalBlocksPerFrame; } | ||||
|         int getNbFECBlocksPerFrame() const { return m_nbFECBlocksPerFrame; } | ||||
|         int getSampleBits() const { return m_sampleBits; } | ||||
|         int getSampleBytes() const { return m_sampleBytes; } | ||||
| 
 | ||||
| 		static MsgReportSDRdaemonSourceStreamTiming* create(uint32_t tv_sec, | ||||
| 				uint32_t tv_usec, | ||||
| @ -156,7 +157,8 @@ public: | ||||
|                 float avgNbRecovery, | ||||
|                 int nbOriginalBlocksPerFrame, | ||||
|                 int nbFECBlocksPerFrame, | ||||
|                 int sampleBits) | ||||
|                 int sampleBits, | ||||
|                 int sampleBytes) | ||||
| 		{ | ||||
| 			return new MsgReportSDRdaemonSourceStreamTiming(tv_sec, | ||||
| 					tv_usec, | ||||
| @ -172,7 +174,8 @@ public: | ||||
|                     avgNbRecovery, | ||||
|                     nbOriginalBlocksPerFrame, | ||||
|                     nbFECBlocksPerFrame, | ||||
|                     sampleBits); | ||||
|                     sampleBits, | ||||
|                     sampleBytes); | ||||
| 		} | ||||
| 
 | ||||
| 	protected: | ||||
| @ -191,6 +194,7 @@ public: | ||||
|         int      m_nbOriginalBlocksPerFrame; | ||||
|         int      m_nbFECBlocksPerFrame; | ||||
|         int      m_sampleBits; | ||||
|         int      m_sampleBytes; | ||||
| 
 | ||||
| 		MsgReportSDRdaemonSourceStreamTiming(uint32_t tv_sec, | ||||
| 				uint32_t tv_usec, | ||||
| @ -206,7 +210,8 @@ public: | ||||
|                 float avgNbRecovery, | ||||
|                 int nbOriginalBlocksPerFrame, | ||||
|                 int nbFECBlocksPerFrame, | ||||
|                 int sampleBits) : | ||||
|                 int sampleBits, | ||||
|                 int sampleBytes) : | ||||
| 			Message(), | ||||
| 			m_tv_sec(tv_sec), | ||||
| 			m_tv_usec(tv_usec), | ||||
| @ -222,7 +227,8 @@ public: | ||||
|             m_avgNbRecovery(avgNbRecovery), | ||||
|             m_nbOriginalBlocksPerFrame(nbOriginalBlocksPerFrame), | ||||
|             m_nbFECBlocksPerFrame(nbFECBlocksPerFrame), | ||||
|             m_sampleBits(sampleBits) | ||||
|             m_sampleBits(sampleBits), | ||||
|             m_sampleBytes(sampleBytes) | ||||
| 		{ } | ||||
| 	}; | ||||
| 
 | ||||
|  | ||||
| @ -263,8 +263,8 @@ void SDRdaemonSourceUDPHandler::tick() | ||||
|         m_readLengthSamples += m_sdrDaemonBuffer.getRWBalanceCorrection(); | ||||
|     } | ||||
| 
 | ||||
|     m_readLength = m_readLengthSamples * SDRdaemonSourceBuffer::m_iqSampleSize; | ||||
|     const SDRdaemonSourceBuffer::MetaDataFEC& metaData =  m_sdrDaemonBuffer.getCurrentMeta(); | ||||
|     m_readLength = m_readLengthSamples * metaData.m_sampleBytes * 2; | ||||
| 
 | ||||
|     if (SDR_RX_SAMP_SZ == metaData.m_sampleBits) // same sample size
 | ||||
|     { | ||||
| @ -332,6 +332,7 @@ void SDRdaemonSourceUDPHandler::tick() | ||||
| 	        int nbOriginalBlocks = m_sdrDaemonBuffer.getCurrentMeta().m_nbOriginalBlocks; | ||||
| 	        int nbFECblocks = m_sdrDaemonBuffer.getCurrentMeta().m_nbFECBlocks; | ||||
| 	        int sampleBits = m_sdrDaemonBuffer.getCurrentMeta().m_sampleBits; | ||||
| 	        int sampleBytes = m_sdrDaemonBuffer.getCurrentMeta().m_sampleBytes; | ||||
| 
 | ||||
| 	        //framesDecodingStatus = (minNbOriginalBlocks == nbOriginalBlocks ? 2 : (minNbOriginalBlocks < nbOriginalBlocks - nbFECblocks ? 0 : 1));
 | ||||
| 	        if (minNbBlocks < nbOriginalBlocks) { | ||||
| @ -357,7 +358,8 @@ void SDRdaemonSourceUDPHandler::tick() | ||||
| 	            m_sdrDaemonBuffer.getAvgNbRecovery(), | ||||
| 	            nbOriginalBlocks, | ||||
| 	            nbFECblocks, | ||||
| 	            sampleBits); | ||||
| 	            sampleBits, | ||||
| 	            sampleBytes); | ||||
| 
 | ||||
| 	            m_outputMessageQueueToGUI->push(report); | ||||
| 		} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user