gr-osmosdr: fix sdrplay noise in gqrx
This commit is contained in:
91
net-wireless/gr-osmosdr/files/gqrx_spikes.patch
Normal file
91
net-wireless/gr-osmosdr/files/gqrx_spikes.patch
Normal file
@@ -0,0 +1,91 @@
|
||||
--- a/lib/sdrplay/sdrplay_source_c.cc 2017-06-24 23:13:25.747061807 +0200
|
||||
+++ b/lib/sdrplay/sdrplay_source_c.cc 2015-09-20 09:27:29.000000000 +0200
|
||||
@@ -142,8 +142,11 @@
|
||||
*/
|
||||
sdrplay_source_c::~sdrplay_source_c ()
|
||||
{
|
||||
- free(_dev);
|
||||
- _dev = NULL;
|
||||
+ if (_dev != NULL)
|
||||
+ {
|
||||
+ free(_dev);
|
||||
+ _dev = NULL;
|
||||
+ }
|
||||
_buf_mutex.lock();
|
||||
if (_running)
|
||||
{
|
||||
@@ -214,10 +217,10 @@
|
||||
gr_complex *out = (gr_complex *)output_items[0];
|
||||
int cnt = noutput_items;
|
||||
unsigned int sampNum;
|
||||
+ unsigned int sampNumStart;
|
||||
int grChanged;
|
||||
int rfChanged;
|
||||
int fsChanged;
|
||||
-
|
||||
if (_uninit)
|
||||
{
|
||||
return WORK_DONE;
|
||||
@@ -230,27 +233,35 @@
|
||||
}
|
||||
|
||||
_buf_mutex.lock();
|
||||
-
|
||||
- if (_buf_offset)
|
||||
+ sampNumStart = sampNum;
|
||||
+ int first_offset = _buf_offset;
|
||||
+ if (_buf_offset > 0)
|
||||
{
|
||||
- for (int i = _buf_offset; i < _dev->samplesPerPacket; i++)
|
||||
+ for (int i = _buf_offset; i < _dev->samplesPerPacket; i++)
|
||||
{
|
||||
*out++ = gr_complex( float(_bufi[i]) * (1.0f/2048.0f), float(_bufq[i]) * (1.0f/2048.0f) );
|
||||
}
|
||||
- cnt -= (_dev->samplesPerPacket - _buf_offset);
|
||||
+ if (cnt > ( _dev ->samplesPerPacket - _buf_offset ))
|
||||
+ {
|
||||
+ cnt = cnt - (_dev->samplesPerPacket - _buf_offset);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ _buf_offset = _buf_offset + cnt;
|
||||
+ cnt = 0;
|
||||
+ }
|
||||
}
|
||||
|
||||
- while ((cnt - _dev->samplesPerPacket) >= 0)
|
||||
+ while ((cnt - _dev->samplesPerPacket) > 0)
|
||||
{
|
||||
mir_sdr_ReadPacket(_bufi.data(), _bufq.data(), &sampNum, &grChanged, &rfChanged, &fsChanged);
|
||||
for (int i = 0; i < _dev->samplesPerPacket; i++)
|
||||
{
|
||||
*out++ = gr_complex( float(_bufi[i]) * (1.0f/2048.0f), float(_bufq[i]) * (1.0f/2048.0f) );
|
||||
}
|
||||
- cnt -= _dev->samplesPerPacket;
|
||||
+ cnt = cnt - _dev->samplesPerPacket;
|
||||
}
|
||||
-
|
||||
- _buf_offset = 0;
|
||||
+
|
||||
if (cnt)
|
||||
{
|
||||
mir_sdr_ReadPacket(_bufi.data(), _bufq.data(), &sampNum, &grChanged, &rfChanged, &fsChanged);
|
||||
@@ -258,10 +269,15 @@
|
||||
{
|
||||
*out++ = gr_complex( float(_bufi[i]) * (1.0f/2048.0f), float(_bufq[i]) * (1.0f/2048.0f) );
|
||||
}
|
||||
- _buf_offset = cnt;
|
||||
- }
|
||||
- _buf_mutex.unlock();
|
||||
+ _buf_offset = cnt;
|
||||
|
||||
+ }
|
||||
+ int items = sampNum - sampNumStart;
|
||||
+ if ( (items + _dev->samplesPerPacket - first_offset - noutput_items) != (_dev->samplesPerPacket - cnt))
|
||||
+ {
|
||||
+ std::cerr << "Sampling Error! " << "cnt before return = " << cnt << " noutput_items = " << noutput_items << " first_offset = " << first_offset << " buffer_offset = " << _buf_offset << " Items = " << items << " SpP - _buf_offset = " << _dev->samplesPerPacket - _buf_offset << std::endl;
|
||||
+ }
|
||||
+ _buf_mutex.unlock();
|
||||
return noutput_items;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user