Skip to content

Commit 18e9e05

Browse files
Disconnect iq_swap when not in use...
...to reduce cpu load.
1 parent 4ce4670 commit 18e9e05

File tree

1 file changed

+14
-43
lines changed

1 file changed

+14
-43
lines changed

src/applications/gqrx/receiver.cpp

Lines changed: 14 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -199,25 +199,18 @@ void receiver::set_input_device(const std::string device)
199199
tb->wait();
200200
}
201201

202-
if (d_decim >= 2)
203-
{
204-
tb->disconnect(src, 0, input_decim, 0);
205-
tb->disconnect(input_decim, 0, iq_swap, 0);
206-
}
207-
else
208-
{
209-
tb->disconnect(src, 0, iq_swap, 0);
210-
}
202+
tb->disconnect_all();
211203

212204
#if GNURADIO_VERSION < 0x030802
213205
//Work around GNU Radio bug #3184
214206
//temporarily connect dummy source to ensure that previous device is closed
215207
src = osmosdr::source::make("file="+escape_filename(get_zero_file())+",freq=428e6,rate=96000,repeat=true,throttle=true");
216-
tb->connect(src, 0, iq_swap, 0);
208+
auto null_snk = gr::blocks::null_sink::make(sizeof(gr_complex));
209+
tb->connect(src, 0, null_snk, 0);
217210
tb->start();
218211
tb->stop();
219212
tb->wait();
220-
tb->disconnect(src, 0, iq_swap, 0);
213+
tb->disconnect_all();
221214
#else
222215
src.reset();
223216
#endif
@@ -232,19 +225,10 @@ void receiver::set_input_device(const std::string device)
232225
src = osmosdr::source::make("file="+escape_filename(get_zero_file())+",freq=428e6,rate=96000,repeat=true,throttle=true");
233226
}
234227

228+
set_demod(d_demod, true);
235229
if(src->get_sample_rate() != 0)
236230
set_input_rate(src->get_sample_rate());
237231

238-
if (d_decim >= 2)
239-
{
240-
tb->connect(src, 0, input_decim, 0);
241-
tb->connect(input_decim, 0, iq_swap, 0);
242-
}
243-
else
244-
{
245-
tb->connect(src, 0, iq_swap, 0);
246-
}
247-
248232
if (d_running)
249233
tb->start();
250234

@@ -380,16 +364,6 @@ unsigned int receiver::set_input_decim(unsigned int decim)
380364
tb->wait();
381365
}
382366

383-
if (d_decim >= 2)
384-
{
385-
tb->disconnect(src, 0, input_decim, 0);
386-
tb->disconnect(input_decim, 0, iq_swap, 0);
387-
}
388-
else
389-
{
390-
tb->disconnect(src, 0, iq_swap, 0);
391-
}
392-
393367
input_decim.reset();
394368
d_decim = decim;
395369
if (d_decim >= 2)
@@ -421,16 +395,7 @@ unsigned int receiver::set_input_decim(unsigned int decim)
421395
rx->set_quad_rate(d_quad_rate);
422396
iq_fft->set_quad_rate(d_decim_rate);
423397

424-
if (d_decim >= 2)
425-
{
426-
tb->connect(src, 0, input_decim, 0);
427-
tb->connect(input_decim, 0, iq_swap, 0);
428-
}
429-
else
430-
{
431-
tb->connect(src, 0, iq_swap, 0);
432-
}
433-
398+
set_demod(d_demod, true);
434399
#ifdef CUSTOM_AIRSPY_KERNELS
435400
if (input_devstr.find("airspy") != std::string::npos)
436401
src->set_bandwidth(d_decim_rate);
@@ -465,6 +430,9 @@ void receiver::set_iq_swap(bool reversed)
465430
return;
466431

467432
d_iq_rev = reversed;
433+
// until we have a way to bypass a hier_block2 without overhead
434+
// we do a reconf
435+
set_demod(d_demod, true);
468436
iq_swap->set_enabled(d_iq_rev);
469437
}
470438

@@ -1353,8 +1321,11 @@ void receiver::connect_all(rx_chain type)
13531321
tb->connect(b, 0, iq_sink, 0);
13541322
}
13551323

1356-
tb->connect(b, 0, iq_swap, 0);
1357-
b = iq_swap;
1324+
if(d_iq_rev)
1325+
{
1326+
tb->connect(b, 0, iq_swap, 0);
1327+
b = iq_swap;
1328+
}
13581329

13591330
if (d_dc_cancel)
13601331
{

0 commit comments

Comments
 (0)