bongozone / vcvrack-rtlsdr

📻 FM radio for rtl-sdr USB dongles in the VCVRack environment
https://vcvrack.com/plugins.html#SDR
GNU General Public License v2.0
21 stars 7 forks source link

EXPERIMENT: Don't wait on hopping mutex to improve tuner granularity. #39

Open wizardishungry opened 6 years ago

wizardishungry commented 6 years ago

Idea for improving the number of tuning operations per second #8

The current implementation of RtlSdr_tune signals s->hop_m to let the tuning thread know to tune the SDR. Why not try moving controller_thread_fn's mutex wait out of the loop body.

safe_cond_wait(&s->hop, &s->hop_m);
  1. Instrument code to count frequency transitions per second.
  2. Pop in code that makes step call the tuner every time.
  3. Record the performance.
  4. Remove the mutex (safe_cond_signal in RtlSdr_tune & safe_cond_wait in the loop body) and record again.
  5. Report back here.

In the shipping version of the code, the tuning thread should keep track of what it tuned to and only tune again (ie call optimal_settings & rtlsdr_set_center_freq) if the frequency has changed.

If we're thinking of calling optimal_settings & rtlsdr_set_center_freq directly inside RtlSdr_tune, remember that rtlsdr_set_center_freq will hang Rack & glitch the audio if you call it as fast as you can.