Fix some hardcoded assumptions in recording.c

There were some hardcoded branches handling left/right gain for line-in
or FM radio inputs. If the target only has a microphone, these bits are
useless and cause compile errors due to missing audiohw settings, etc.
This patch #ifdef's them out.

Change-Id: If6a6918b2fabb256261c84651803bbf44deacb1a
This commit is contained in:
Aidan MacDonald 2021-05-29 15:45:10 +01:00
parent 8e65f1db55
commit acc7d16e3b
2 changed files with 103 additions and 60 deletions

View file

@ -58,6 +58,8 @@ static int pm_max_right;
#if defined(HAVE_AGC) || defined(HAVE_HISTOGRAM) #if defined(HAVE_AGC) || defined(HAVE_HISTOGRAM)
static int pm_peakhold_left; /* max. peak values between peakhold calls */ static int pm_peakhold_left; /* max. peak values between peakhold calls */
static int pm_peakhold_right; /* used for AGC and histogram display */ static int pm_peakhold_right; /* used for AGC and histogram display */
#endif
#ifdef HAVE_HISTOGRAM
static long next_histogram_update; static long next_histogram_update;
#endif #endif

View file

@ -68,7 +68,9 @@
#include "splash.h" #include "splash.h"
#include "screen_access.h" #include "screen_access.h"
#include "action.h" #include "action.h"
#ifdef HAVE_FMRADIO_REC
# include "radio.h" # include "radio.h"
#endif
#include "viewport.h" #include "viewport.h"
#include "list.h" #include "list.h"
#include "general.h" #include "general.h"
@ -233,9 +235,9 @@ static long hist_time = 0;
static void set_gain(void) static void set_gain(void)
{ {
switch(global_settings.rec_source) {
#ifdef HAVE_MIC_REC #ifdef HAVE_MIC_REC
if(global_settings.rec_source == AUDIO_SRC_MIC) case AUDIO_SRC_MIC:
{
if (global_settings.rec_mic_gain > sound_max(SOUND_MIC_GAIN)) if (global_settings.rec_mic_gain > sound_max(SOUND_MIC_GAIN))
global_settings.rec_mic_gain = sound_max(SOUND_MIC_GAIN); global_settings.rec_mic_gain = sound_max(SOUND_MIC_GAIN);
@ -244,10 +246,11 @@ static void set_gain(void)
audio_set_recording_gain(global_settings.rec_mic_gain, audio_set_recording_gain(global_settings.rec_mic_gain,
0, AUDIO_GAIN_MIC); 0, AUDIO_GAIN_MIC);
} break;
else
#endif /* MIC */ #endif /* MIC */
{ #if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
HAVE_LINE_REC_(case AUDIO_SRC_LINEIN:)
HAVE_FMRADIO_REC_(case AUDIO_SRC_FMRADIO:)
if (global_settings.rec_left_gain > sound_max(SOUND_LEFT_GAIN)) if (global_settings.rec_left_gain > sound_max(SOUND_LEFT_GAIN))
global_settings.rec_left_gain = sound_max(SOUND_LEFT_GAIN); global_settings.rec_left_gain = sound_max(SOUND_LEFT_GAIN);
@ -260,11 +263,13 @@ static void set_gain(void)
if (global_settings.rec_right_gain < sound_min(SOUND_RIGHT_GAIN)) if (global_settings.rec_right_gain < sound_min(SOUND_RIGHT_GAIN))
global_settings.rec_right_gain = sound_min(SOUND_RIGHT_GAIN); global_settings.rec_right_gain = sound_min(SOUND_RIGHT_GAIN);
/* AUDIO_SRC_LINEIN, AUDIO_SRC_FMRADIO, AUDIO_SRC_SPDIF */
audio_set_recording_gain(global_settings.rec_left_gain, audio_set_recording_gain(global_settings.rec_left_gain,
global_settings.rec_right_gain, global_settings.rec_right_gain,
AUDIO_GAIN_LINEIN); AUDIO_GAIN_LINEIN);
break;
#endif
} }
/* reset the clipping indicators */ /* reset the clipping indicators */
peak_meter_set_clip_hold(global_settings.peak_meter_clip_hold); peak_meter_set_clip_hold(global_settings.peak_meter_clip_hold);
update_list = true; update_list = true;
@ -332,6 +337,11 @@ static bool agc_gain_is_max(bool left, bool right)
static void change_recording_gain(bool increment, bool left, bool right) static void change_recording_gain(bool increment, bool left, bool right)
{ {
#if !defined(HAVE_LINE_REC) || !defined(HAVE_FMRADIO_REC)
(void)left;
(void)right;
#endif
int factor = (increment ? 1 : -1); int factor = (increment ? 1 : -1);
switch (global_settings.rec_source) switch (global_settings.rec_source)
@ -789,26 +799,30 @@ static const char* reclist_get_name(int selected_item, void * data,
buf2, sizeof(buf2))); buf2, sizeof(buf2)));
break; break;
case ITEM_GAIN: case ITEM_GAIN:
switch(global_settings.rec_source) {
#ifdef HAVE_MIC_REC #ifdef HAVE_MIC_REC
if(global_settings.rec_source == AUDIO_SRC_MIC) case AUDIO_SRC_MIC:
{
/* Draw MIC recording gain */ /* Draw MIC recording gain */
snprintf(buffer, buffer_len, "%s: %s", str(LANG_GAIN), snprintf(buffer, buffer_len, "%s: %s", str(LANG_GAIN),
fmt_gain(SOUND_MIC_GAIN, fmt_gain(SOUND_MIC_GAIN,
global_settings.rec_mic_gain, global_settings.rec_mic_gain,
buf2, sizeof(buf2))); buf2, sizeof(buf2)));
} break;
else
#endif /* MIC */ #endif /* MIC */
{ #if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
HAVE_LINE_REC_(case AUDIO_SRC_LINEIN:)
HAVE_FMRADIO_REC_(case AUDIO_SRC_FMRADIO:) {
int avg_gain = (global_settings.rec_left_gain + int avg_gain = (global_settings.rec_left_gain +
global_settings.rec_right_gain) / 2; global_settings.rec_right_gain) / 2;
snprintf(buffer, buffer_len, "%s: %s", str(LANG_GAIN), snprintf(buffer, buffer_len, "%s: %s", str(LANG_GAIN),
fmt_gain(SOUND_LEFT_GAIN, fmt_gain(SOUND_LEFT_GAIN,
avg_gain, avg_gain,
buf2, sizeof(buf2))); buf2, sizeof(buf2)));
} break;
#endif
} }
break; break;
#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
case ITEM_GAIN_L: case ITEM_GAIN_L:
snprintf(buffer, buffer_len, "%s: %s", snprintf(buffer, buffer_len, "%s: %s",
str(LANG_GAIN_LEFT), str(LANG_GAIN_LEFT),
@ -823,39 +837,43 @@ static const char* reclist_get_name(int selected_item, void * data,
global_settings.rec_right_gain, global_settings.rec_right_gain,
buf2, sizeof(buf2))); buf2, sizeof(buf2)));
break; break;
#endif
#ifdef HAVE_AGC #ifdef HAVE_AGC
case ITEM_AGC_MODE: case ITEM_AGC_MODE:
snprintf(buffer, buffer_len, "%s: %s", snprintf(buffer, buffer_len, "%s: %s",
str(LANG_RECORDING_AGC_PRESET), str(LANG_RECORDING_AGC_PRESET),
agc_preset_str[agc_preset]); agc_preset_str[agc_preset]);
break; break;
case ITEM_AGC_MAXDB: case ITEM_AGC_MAXDB: {
if (agc_preset == 0) int bias, which;
switch(global_settings.rec_source) {
default:
#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
HAVE_LINE_IN_(case AUDIO_SRC_LINEIN:)
HAVE_FMRADIO_IN_(case AUDIO_SRC_FMRADIO:)
which = SOUND_LEFT_GAIN;
bias = (global_settings.rec_left_gain + global_settings.rec_right_gain) / 2;
break;
#endif
#if defined(HAVE_MIC_REC)
case AUDIO_SRC_MIC:
which = SOUND_MIC_GAIN;
bias = global_settings.rec_mic_gain;
break;
#endif /* MIC*/
}
if(agc_preset == 0) {
snprintf(buffer, buffer_len, "%s: %s", snprintf(buffer, buffer_len, "%s: %s",
str(LANG_RECORDING_AGC_MAXGAIN), str(LANG_RECORDING_AGC_MAXGAIN),
fmt_gain(SOUND_LEFT_GAIN, fmt_gain(which, agc_maxgain, buf2, sizeof(buf2)));
agc_maxgain, buf2, sizeof(buf2))); } else {
#ifdef HAVE_MIC_REC
else if (global_settings.rec_source == AUDIO_SRC_MIC)
snprintf(buffer, buffer_len, "%s: %s (%s)", snprintf(buffer, buffer_len, "%s: %s (%s)",
str(LANG_RECORDING_AGC_MAXGAIN), str(LANG_RECORDING_AGC_MAXGAIN),
fmt_gain(SOUND_MIC_GAIN, fmt_gain(which, agc_maxgain, buf2, sizeof(buf2)),
agc_maxgain, buf2, sizeof(buf2)), fmt_gain(which, agc_maxgain - bias, buf3, sizeof(buf3)));
fmt_gain(SOUND_MIC_GAIN, }
agc_maxgain - global_settings.rec_mic_gain, } break;
buf3, sizeof(buf3)));
else
#endif /* MIC */
snprintf(buffer, buffer_len, "%s: %s (%s)",
str(LANG_RECORDING_AGC_MAXGAIN),
fmt_gain(SOUND_LEFT_GAIN,
agc_maxgain, buf2, sizeof(buf2)),
fmt_gain(SOUND_LEFT_GAIN,
agc_maxgain -
(global_settings.rec_left_gain +
global_settings.rec_right_gain)/2,
buf3, sizeof(buf3)));
break;
#endif #endif
#ifdef HAVE_SPDIF_REC #ifdef HAVE_SPDIF_REC
case ITEM_SAMPLERATE_D: case ITEM_SAMPLERATE_D:
@ -902,12 +920,14 @@ static void recording_step_levels(int setting_id, int steps)
global_settings.volume += steps; global_settings.volume += steps;
setvol(); setvol();
break; break;
#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
case SOUND_LEFT_GAIN: case SOUND_LEFT_GAIN:
global_settings.rec_left_gain += steps; global_settings.rec_left_gain += steps;
break; break;
case SOUND_RIGHT_GAIN: case SOUND_RIGHT_GAIN:
global_settings.rec_right_gain += steps; global_settings.rec_right_gain += steps;
break; break;
#endif
#ifdef HAVE_MIC_REC #ifdef HAVE_MIC_REC
case SOUND_MIC_GAIN: case SOUND_MIC_GAIN:
global_settings.rec_mic_gain += steps; global_settings.rec_mic_gain += steps;
@ -1279,22 +1299,29 @@ bool recording_screen(bool no_source)
recording_step_levels(SOUND_VOLUME, 1); recording_step_levels(SOUND_VOLUME, 1);
break; break;
case ITEM_GAIN: case ITEM_GAIN:
switch(global_settings.rec_source) {
#ifdef HAVE_MIC_REC #ifdef HAVE_MIC_REC
if(global_settings.rec_source == AUDIO_SRC_MIC) case AUDIO_SRC_MIC:
recording_step_levels(SOUND_MIC_GAIN, 1); recording_step_levels(SOUND_MIC_GAIN, 1);
else break;
#endif /* MIC */ #endif /* MIC */
{ #if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
HAVE_LINE_REC_(case AUDIO_SRC_LINEIN:)
HAVE_FMRADIO_REC_(case AUDIO_SRC_FMRADIO:)
recording_step_levels(SOUND_LEFT_GAIN, 1); recording_step_levels(SOUND_LEFT_GAIN, 1);
recording_step_levels(SOUND_RIGHT_GAIN, 1); recording_step_levels(SOUND_RIGHT_GAIN, 1);
break;
#endif
} }
break; break;
#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
case ITEM_GAIN_L: case ITEM_GAIN_L:
recording_step_levels(SOUND_LEFT_GAIN, 1); recording_step_levels(SOUND_LEFT_GAIN, 1);
break; break;
case ITEM_GAIN_R: case ITEM_GAIN_R:
recording_step_levels(SOUND_RIGHT_GAIN, 1); recording_step_levels(SOUND_RIGHT_GAIN, 1);
break; break;
#endif
#ifdef HAVE_AGC #ifdef HAVE_AGC
case ITEM_AGC_MODE: case ITEM_AGC_MODE:
agc_preset = MIN(agc_preset + 1, AGC_MODE_SIZE); agc_preset = MIN(agc_preset + 1, AGC_MODE_SIZE);
@ -1311,19 +1338,22 @@ bool recording_screen(bool no_source)
} }
break; break;
case ITEM_AGC_MAXDB: case ITEM_AGC_MAXDB:
#ifdef HAVE_MIC_REC switch(global_settings.rec_source) {
if (global_settings.rec_source == AUDIO_SRC_MIC) #if defined(HAVE_LINE_IN) || defined(HAVE_FMRADIO_IN)
{ HAVE_LINE_IN_(case AUDIO_SRC_LINEIN:)
agc_maxgain = MIN(agc_maxgain + 1, HAVE_FMRADIO_IN_(case AUDIO_SRC_FMRADIO:)
sound_max(SOUND_MIC_GAIN));
global_settings.rec_agc_maxgain_mic = agc_maxgain;
}
else
#endif /* MIC */
{
agc_maxgain = MIN(agc_maxgain + 1, agc_maxgain = MIN(agc_maxgain + 1,
sound_max(SOUND_LEFT_GAIN)); sound_max(SOUND_LEFT_GAIN));
global_settings.rec_agc_maxgain_line = agc_maxgain; global_settings.rec_agc_maxgain_line = agc_maxgain;
break;
#endif
#ifdef HAVE_MIC_REC
case AUDIO_SRC_MIC:
agc_maxgain = MIN(agc_maxgain + 1,
sound_max(SOUND_MIC_GAIN));
global_settings.rec_agc_maxgain_mic = agc_maxgain;
break;
#endif /* MIC */
} }
break; break;
#endif /* HAVE_AGC */ #endif /* HAVE_AGC */
@ -1339,22 +1369,29 @@ bool recording_screen(bool no_source)
recording_step_levels(SOUND_VOLUME, -1); recording_step_levels(SOUND_VOLUME, -1);
break; break;
case ITEM_GAIN: case ITEM_GAIN:
switch(global_settings.rec_source) {
#ifdef HAVE_MIC_REC #ifdef HAVE_MIC_REC
if(global_settings.rec_source == AUDIO_SRC_MIC) case AUDIO_SRC_MIC:
recording_step_levels(SOUND_MIC_GAIN, -1); recording_step_levels(SOUND_MIC_GAIN, -1);
else break;
#endif /* MIC */ #endif /* MIC */
{ #if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
HAVE_LINE_REC_(case AUDIO_SRC_LINEIN:)
HAVE_FMRADIO_REC_(case AUDIO_SRC_FMRADIO:)
recording_step_levels(SOUND_LEFT_GAIN, -1); recording_step_levels(SOUND_LEFT_GAIN, -1);
recording_step_levels(SOUND_RIGHT_GAIN, -1); recording_step_levels(SOUND_RIGHT_GAIN, -1);
break;
#endif
} }
break; break;
#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
case ITEM_GAIN_L: case ITEM_GAIN_L:
recording_step_levels(SOUND_LEFT_GAIN, -1); recording_step_levels(SOUND_LEFT_GAIN, -1);
break; break;
case ITEM_GAIN_R: case ITEM_GAIN_R:
recording_step_levels(SOUND_RIGHT_GAIN, -1); recording_step_levels(SOUND_RIGHT_GAIN, -1);
break; break;
#endif
#ifdef HAVE_AGC #ifdef HAVE_AGC
case ITEM_AGC_MODE: case ITEM_AGC_MODE:
agc_preset = MAX(agc_preset - 1, 0); agc_preset = MAX(agc_preset - 1, 0);
@ -1371,18 +1408,22 @@ bool recording_screen(bool no_source)
} }
break; break;
case ITEM_AGC_MAXDB: case ITEM_AGC_MAXDB:
#ifdef HAVE_MIC_REC switch(global_settings.rec_source) {
if (global_settings.rec_source == AUDIO_SRC_MIC) #if defined(HAVE_LINE_IN) || defined(HAVE_FMRADIO_IN)
{ HAVE_LINE_IN_(case AUDIO_SRC_LINEIN:)
agc_maxgain = MAX(agc_maxgain - 1, HAVE_FMRADIO_IN_(case AUDIO_SRC_FMRADIO:)
sound_min(SOUND_MIC_GAIN));
global_settings.rec_agc_maxgain_mic = agc_maxgain;
} else
#endif /* MIC */
{
agc_maxgain = MAX(agc_maxgain - 1, agc_maxgain = MAX(agc_maxgain - 1,
sound_min(SOUND_LEFT_GAIN)); sound_min(SOUND_LEFT_GAIN));
global_settings.rec_agc_maxgain_line = agc_maxgain; global_settings.rec_agc_maxgain_line = agc_maxgain;
break;
#endif
#ifdef HAVE_MIC_REC
case AUDIO_SRC_MIC:
agc_maxgain = MAX(agc_maxgain - 1,
sound_min(SOUND_MIC_GAIN));
global_settings.rec_agc_maxgain_mic = agc_maxgain;
break;
#endif /* MIC */
} }
break; break;
#endif /* HAVE_AGC */ #endif /* HAVE_AGC */