diff --git a/src/dsd_main.c b/src/dsd_main.c index 8cee11f..9a71258 100644 --- a/src/dsd_main.c +++ b/src/dsd_main.c @@ -1209,7 +1209,6 @@ usage () printf (" -7 Create/Use Custom directory for Per Call decoded .wav file saving.\n"); printf (" (Single Nested Directory Only! Use Before the -P option!)\n"); printf (" -8 Enable Experimental Source Audio Monitor (Pulse Audio Output Only!)\n"); - printf (" (Caution! May Cause High CPU usage or break when using RTL input!)\n"); printf (" (Its recommended to use Squelch in SDR++ or GQRX, etc, if monitoring mixed analog/digital)\n"); printf (" -P Enable Per Call WAV file saving in AUTO and NXDN decoding classes\n"); printf (" (Per Call can only be used in Ncurses Terminal!)\n"); @@ -1360,8 +1359,6 @@ liveScanner (dsd_opts * opts, dsd_state * state) { open_rtlsdr_stream(opts); opts->rtl_started = 1; //set here so ncurses terminal doesn't attempt to open it again - //safety disable due to HIGH CPU usage this causes when using RTL input - if (opts->monitor_input_audio == 1) opts->monitor_input_audio = 0; } #endif @@ -1565,7 +1562,6 @@ main (int argc, char **argv) case '8': opts.monitor_input_audio = 1; fprintf (stderr,"Experimental Raw Analog Source Monitoring Enabled (Pulse Audio Only!)\n"); - fprintf (stderr,"WARNING! May Cause HIGH CPU Usage and/or break when using RTL Input\n"); break; //rc4 enforcement on DMR (due to missing the PI header) diff --git a/src/dsd_symbol.c b/src/dsd_symbol.c index 4b3fec3..accce8f 100644 --- a/src/dsd_symbol.c +++ b/src/dsd_symbol.c @@ -151,17 +151,10 @@ getSymbol (dsd_opts * opts, dsd_state * state, int have_sync) else if (opts->audio_in_type == 3) { #ifdef USE_RTLSDR - // TODO: need to read demodulated stream here - // get_rtlsdr_sample(&sample); + // Read demodulated stream here if (get_rtlsdr_sample(&sample, opts, state) < 0) - { cleanupAndExit(opts, state); - } - if (opts->monitor_input_audio == 1 && state->lastsynctype == -1 && sample < 32767 && sample > -32767) - { - state->pulse_raw_out_buffer = sample; //steal raw out buffer sample here? - pa_simple_write(opts->pulse_raw_dev_out, (void*)&state->pulse_raw_out_buffer, 2, NULL); - } + //update root means square power level opts->rtl_rms = rtl_return_rms(); #endif @@ -271,10 +264,8 @@ getSymbol (dsd_opts * opts, dsd_state * state, int have_sync) } - //LM server reports massive 'Q overrun, queueing locally' and CPU usage spikes to over 40% on pulse audio daemon - //main issue appears to be using this with rtl input -- issues due to threading, or sampling rate? or just rtl_fm doing its thing and causing issues? - //works fine when using SDR++ as input on the remote and NOT when using rtl direct input - //Went back and tested EDACS analog calls with RTL input, and it doesn't even flinch there or cause any HIGH CPU usage, so no idea why it does so here + //Fixed the RTL monitoring bug, it was left active up above (very old and jank test code), + //so it was constantly spamming pulse audio server with very small samples, then coming here as well. if (have_sync == 0 && opts->monitor_input_audio == 1) { //sanity check to prevent an overflow