summaryrefslogtreecommitdiff
path: root/apps/recorder/recording.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/recorder/recording.c')
-rw-r--r--apps/recorder/recording.c153
1 files changed, 97 insertions, 56 deletions
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c
index bf69e8f781..d4320122f6 100644
--- a/apps/recorder/recording.c
+++ b/apps/recorder/recording.c
@@ -68,7 +68,9 @@
68#include "splash.h" 68#include "splash.h"
69#include "screen_access.h" 69#include "screen_access.h"
70#include "action.h" 70#include "action.h"
71#include "radio.h" 71#ifdef HAVE_FMRADIO_REC
72# include "radio.h"
73#endif
72#include "viewport.h" 74#include "viewport.h"
73#include "list.h" 75#include "list.h"
74#include "general.h" 76#include "general.h"
@@ -233,9 +235,9 @@ static long hist_time = 0;
233 235
234static void set_gain(void) 236static void set_gain(void)
235{ 237{
238 switch(global_settings.rec_source) {
236#ifdef HAVE_MIC_REC 239#ifdef HAVE_MIC_REC
237 if(global_settings.rec_source == AUDIO_SRC_MIC) 240 case AUDIO_SRC_MIC:
238 {
239 if (global_settings.rec_mic_gain > sound_max(SOUND_MIC_GAIN)) 241 if (global_settings.rec_mic_gain > sound_max(SOUND_MIC_GAIN))
240 global_settings.rec_mic_gain = sound_max(SOUND_MIC_GAIN); 242 global_settings.rec_mic_gain = sound_max(SOUND_MIC_GAIN);
241 243
@@ -244,10 +246,11 @@ static void set_gain(void)
244 246
245 audio_set_recording_gain(global_settings.rec_mic_gain, 247 audio_set_recording_gain(global_settings.rec_mic_gain,
246 0, AUDIO_GAIN_MIC); 248 0, AUDIO_GAIN_MIC);
247 } 249 break;
248 else
249#endif /* MIC */ 250#endif /* MIC */
250 { 251#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
252 HAVE_LINE_REC_(case AUDIO_SRC_LINEIN:)
253 HAVE_FMRADIO_REC_(case AUDIO_SRC_FMRADIO:)
251 if (global_settings.rec_left_gain > sound_max(SOUND_LEFT_GAIN)) 254 if (global_settings.rec_left_gain > sound_max(SOUND_LEFT_GAIN))
252 global_settings.rec_left_gain = sound_max(SOUND_LEFT_GAIN); 255 global_settings.rec_left_gain = sound_max(SOUND_LEFT_GAIN);
253 256
@@ -260,11 +263,13 @@ static void set_gain(void)
260 if (global_settings.rec_right_gain < sound_min(SOUND_RIGHT_GAIN)) 263 if (global_settings.rec_right_gain < sound_min(SOUND_RIGHT_GAIN))
261 global_settings.rec_right_gain = sound_min(SOUND_RIGHT_GAIN); 264 global_settings.rec_right_gain = sound_min(SOUND_RIGHT_GAIN);
262 265
263 /* AUDIO_SRC_LINEIN, AUDIO_SRC_FMRADIO, AUDIO_SRC_SPDIF */
264 audio_set_recording_gain(global_settings.rec_left_gain, 266 audio_set_recording_gain(global_settings.rec_left_gain,
265 global_settings.rec_right_gain, 267 global_settings.rec_right_gain,
266 AUDIO_GAIN_LINEIN); 268 AUDIO_GAIN_LINEIN);
269 break;
270#endif
267 } 271 }
272
268 /* reset the clipping indicators */ 273 /* reset the clipping indicators */
269 peak_meter_set_clip_hold(global_settings.peak_meter_clip_hold); 274 peak_meter_set_clip_hold(global_settings.peak_meter_clip_hold);
270 update_list = true; 275 update_list = true;
@@ -332,6 +337,11 @@ static bool agc_gain_is_max(bool left, bool right)
332 337
333static void change_recording_gain(bool increment, bool left, bool right) 338static void change_recording_gain(bool increment, bool left, bool right)
334{ 339{
340#if !defined(HAVE_LINE_REC) || !defined(HAVE_FMRADIO_REC)
341 (void)left;
342 (void)right;
343#endif
344
335 int factor = (increment ? 1 : -1); 345 int factor = (increment ? 1 : -1);
336 346
337 switch (global_settings.rec_source) 347 switch (global_settings.rec_source)
@@ -789,26 +799,30 @@ static const char* reclist_get_name(int selected_item, void * data,
789 buf2, sizeof(buf2))); 799 buf2, sizeof(buf2)));
790 break; 800 break;
791 case ITEM_GAIN: 801 case ITEM_GAIN:
802 switch(global_settings.rec_source) {
792#ifdef HAVE_MIC_REC 803#ifdef HAVE_MIC_REC
793 if(global_settings.rec_source == AUDIO_SRC_MIC) 804 case AUDIO_SRC_MIC:
794 {
795 /* Draw MIC recording gain */ 805 /* Draw MIC recording gain */
796 snprintf(buffer, buffer_len, "%s: %s", str(LANG_GAIN), 806 snprintf(buffer, buffer_len, "%s: %s", str(LANG_GAIN),
797 fmt_gain(SOUND_MIC_GAIN, 807 fmt_gain(SOUND_MIC_GAIN,
798 global_settings.rec_mic_gain, 808 global_settings.rec_mic_gain,
799 buf2, sizeof(buf2))); 809 buf2, sizeof(buf2)));
800 } 810 break;
801 else
802#endif /* MIC */ 811#endif /* MIC */
803 { 812#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
813 HAVE_LINE_REC_(case AUDIO_SRC_LINEIN:)
814 HAVE_FMRADIO_REC_(case AUDIO_SRC_FMRADIO:) {
804 int avg_gain = (global_settings.rec_left_gain + 815 int avg_gain = (global_settings.rec_left_gain +
805 global_settings.rec_right_gain) / 2; 816 global_settings.rec_right_gain) / 2;
806 snprintf(buffer, buffer_len, "%s: %s", str(LANG_GAIN), 817 snprintf(buffer, buffer_len, "%s: %s", str(LANG_GAIN),
807 fmt_gain(SOUND_LEFT_GAIN, 818 fmt_gain(SOUND_LEFT_GAIN,
808 avg_gain, 819 avg_gain,
809 buf2, sizeof(buf2))); 820 buf2, sizeof(buf2)));
821 } break;
822#endif
810 } 823 }
811 break; 824 break;
825#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
812 case ITEM_GAIN_L: 826 case ITEM_GAIN_L:
813 snprintf(buffer, buffer_len, "%s: %s", 827 snprintf(buffer, buffer_len, "%s: %s",
814 str(LANG_GAIN_LEFT), 828 str(LANG_GAIN_LEFT),
@@ -823,39 +837,43 @@ static const char* reclist_get_name(int selected_item, void * data,
823 global_settings.rec_right_gain, 837 global_settings.rec_right_gain,
824 buf2, sizeof(buf2))); 838 buf2, sizeof(buf2)));
825 break; 839 break;
840#endif
826#ifdef HAVE_AGC 841#ifdef HAVE_AGC
827 case ITEM_AGC_MODE: 842 case ITEM_AGC_MODE:
828 snprintf(buffer, buffer_len, "%s: %s", 843 snprintf(buffer, buffer_len, "%s: %s",
829 str(LANG_RECORDING_AGC_PRESET), 844 str(LANG_RECORDING_AGC_PRESET),
830 agc_preset_str[agc_preset]); 845 agc_preset_str[agc_preset]);
831 break; 846 break;
832 case ITEM_AGC_MAXDB: 847 case ITEM_AGC_MAXDB: {
833 if (agc_preset == 0) 848 int bias, which;
849 switch(global_settings.rec_source) {
850 default:
851#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
852 HAVE_LINE_IN_(case AUDIO_SRC_LINEIN:)
853 HAVE_FMRADIO_IN_(case AUDIO_SRC_FMRADIO:)
854 which = SOUND_LEFT_GAIN;
855 bias = (global_settings.rec_left_gain + global_settings.rec_right_gain) / 2;
856 break;
857#endif
858#if defined(HAVE_MIC_REC)
859 case AUDIO_SRC_MIC:
860 which = SOUND_MIC_GAIN;
861 bias = global_settings.rec_mic_gain;
862 break;
863#endif /* MIC*/
864 }
865
866 if(agc_preset == 0) {
834 snprintf(buffer, buffer_len, "%s: %s", 867 snprintf(buffer, buffer_len, "%s: %s",
835 str(LANG_RECORDING_AGC_MAXGAIN), 868 str(LANG_RECORDING_AGC_MAXGAIN),
836 fmt_gain(SOUND_LEFT_GAIN, 869 fmt_gain(which, agc_maxgain, buf2, sizeof(buf2)));
837 agc_maxgain, buf2, sizeof(buf2))); 870 } else {
838#ifdef HAVE_MIC_REC
839 else if (global_settings.rec_source == AUDIO_SRC_MIC)
840 snprintf(buffer, buffer_len, "%s: %s (%s)",
841 str(LANG_RECORDING_AGC_MAXGAIN),
842 fmt_gain(SOUND_MIC_GAIN,
843 agc_maxgain, buf2, sizeof(buf2)),
844 fmt_gain(SOUND_MIC_GAIN,
845 agc_maxgain - global_settings.rec_mic_gain,
846 buf3, sizeof(buf3)));
847 else
848#endif /* MIC */
849 snprintf(buffer, buffer_len, "%s: %s (%s)", 871 snprintf(buffer, buffer_len, "%s: %s (%s)",
850 str(LANG_RECORDING_AGC_MAXGAIN), 872 str(LANG_RECORDING_AGC_MAXGAIN),
851 fmt_gain(SOUND_LEFT_GAIN, 873 fmt_gain(which, agc_maxgain, buf2, sizeof(buf2)),
852 agc_maxgain, buf2, sizeof(buf2)), 874 fmt_gain(which, agc_maxgain - bias, buf3, sizeof(buf3)));
853 fmt_gain(SOUND_LEFT_GAIN, 875 }
854 agc_maxgain - 876 } break;
855 (global_settings.rec_left_gain +
856 global_settings.rec_right_gain)/2,
857 buf3, sizeof(buf3)));
858 break;
859#endif 877#endif
860#ifdef HAVE_SPDIF_REC 878#ifdef HAVE_SPDIF_REC
861 case ITEM_SAMPLERATE_D: 879 case ITEM_SAMPLERATE_D:
@@ -902,12 +920,14 @@ static void recording_step_levels(int setting_id, int steps)
902 global_settings.volume += steps; 920 global_settings.volume += steps;
903 setvol(); 921 setvol();
904 break; 922 break;
923#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
905 case SOUND_LEFT_GAIN: 924 case SOUND_LEFT_GAIN:
906 global_settings.rec_left_gain += steps; 925 global_settings.rec_left_gain += steps;
907 break; 926 break;
908 case SOUND_RIGHT_GAIN: 927 case SOUND_RIGHT_GAIN:
909 global_settings.rec_right_gain += steps; 928 global_settings.rec_right_gain += steps;
910 break; 929 break;
930#endif
911#ifdef HAVE_MIC_REC 931#ifdef HAVE_MIC_REC
912 case SOUND_MIC_GAIN: 932 case SOUND_MIC_GAIN:
913 global_settings.rec_mic_gain += steps; 933 global_settings.rec_mic_gain += steps;
@@ -1279,22 +1299,29 @@ bool recording_screen(bool no_source)
1279 recording_step_levels(SOUND_VOLUME, 1); 1299 recording_step_levels(SOUND_VOLUME, 1);
1280 break; 1300 break;
1281 case ITEM_GAIN: 1301 case ITEM_GAIN:
1302 switch(global_settings.rec_source) {
1282#ifdef HAVE_MIC_REC 1303#ifdef HAVE_MIC_REC
1283 if(global_settings.rec_source == AUDIO_SRC_MIC) 1304 case AUDIO_SRC_MIC:
1284 recording_step_levels(SOUND_MIC_GAIN, 1); 1305 recording_step_levels(SOUND_MIC_GAIN, 1);
1285 else 1306 break;
1286#endif /* MIC */ 1307#endif /* MIC */
1287 { 1308#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
1309 HAVE_LINE_REC_(case AUDIO_SRC_LINEIN:)
1310 HAVE_FMRADIO_REC_(case AUDIO_SRC_FMRADIO:)
1288 recording_step_levels(SOUND_LEFT_GAIN, 1); 1311 recording_step_levels(SOUND_LEFT_GAIN, 1);
1289 recording_step_levels(SOUND_RIGHT_GAIN, 1); 1312 recording_step_levels(SOUND_RIGHT_GAIN, 1);
1313 break;
1314#endif
1290 } 1315 }
1291 break; 1316 break;
1317#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
1292 case ITEM_GAIN_L: 1318 case ITEM_GAIN_L:
1293 recording_step_levels(SOUND_LEFT_GAIN, 1); 1319 recording_step_levels(SOUND_LEFT_GAIN, 1);
1294 break; 1320 break;
1295 case ITEM_GAIN_R: 1321 case ITEM_GAIN_R:
1296 recording_step_levels(SOUND_RIGHT_GAIN, 1); 1322 recording_step_levels(SOUND_RIGHT_GAIN, 1);
1297 break; 1323 break;
1324#endif
1298#ifdef HAVE_AGC 1325#ifdef HAVE_AGC
1299 case ITEM_AGC_MODE: 1326 case ITEM_AGC_MODE:
1300 agc_preset = MIN(agc_preset + 1, AGC_MODE_SIZE); 1327 agc_preset = MIN(agc_preset + 1, AGC_MODE_SIZE);
@@ -1311,19 +1338,22 @@ bool recording_screen(bool no_source)
1311 } 1338 }
1312 break; 1339 break;
1313 case ITEM_AGC_MAXDB: 1340 case ITEM_AGC_MAXDB:
1341 switch(global_settings.rec_source) {
1342#if defined(HAVE_LINE_IN) || defined(HAVE_FMRADIO_IN)
1343 HAVE_LINE_IN_(case AUDIO_SRC_LINEIN:)
1344 HAVE_FMRADIO_IN_(case AUDIO_SRC_FMRADIO:)
1345 agc_maxgain = MIN(agc_maxgain + 1,
1346 sound_max(SOUND_LEFT_GAIN));
1347 global_settings.rec_agc_maxgain_line = agc_maxgain;
1348 break;
1349#endif
1314#ifdef HAVE_MIC_REC 1350#ifdef HAVE_MIC_REC
1315 if (global_settings.rec_source == AUDIO_SRC_MIC) 1351 case AUDIO_SRC_MIC:
1316 {
1317 agc_maxgain = MIN(agc_maxgain + 1, 1352 agc_maxgain = MIN(agc_maxgain + 1,
1318 sound_max(SOUND_MIC_GAIN)); 1353 sound_max(SOUND_MIC_GAIN));
1319 global_settings.rec_agc_maxgain_mic = agc_maxgain; 1354 global_settings.rec_agc_maxgain_mic = agc_maxgain;
1320 } 1355 break;
1321 else
1322#endif /* MIC */ 1356#endif /* MIC */
1323 {
1324 agc_maxgain = MIN(agc_maxgain + 1,
1325 sound_max(SOUND_LEFT_GAIN));
1326 global_settings.rec_agc_maxgain_line = agc_maxgain;
1327 } 1357 }
1328 break; 1358 break;
1329#endif /* HAVE_AGC */ 1359#endif /* HAVE_AGC */
@@ -1339,22 +1369,29 @@ bool recording_screen(bool no_source)
1339 recording_step_levels(SOUND_VOLUME, -1); 1369 recording_step_levels(SOUND_VOLUME, -1);
1340 break; 1370 break;
1341 case ITEM_GAIN: 1371 case ITEM_GAIN:
1372 switch(global_settings.rec_source) {
1342#ifdef HAVE_MIC_REC 1373#ifdef HAVE_MIC_REC
1343 if(global_settings.rec_source == AUDIO_SRC_MIC) 1374 case AUDIO_SRC_MIC:
1344 recording_step_levels(SOUND_MIC_GAIN, -1); 1375 recording_step_levels(SOUND_MIC_GAIN, -1);
1345 else 1376 break;
1346#endif /* MIC */ 1377#endif /* MIC */
1347 { 1378#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
1379 HAVE_LINE_REC_(case AUDIO_SRC_LINEIN:)
1380 HAVE_FMRADIO_REC_(case AUDIO_SRC_FMRADIO:)
1348 recording_step_levels(SOUND_LEFT_GAIN, -1); 1381 recording_step_levels(SOUND_LEFT_GAIN, -1);
1349 recording_step_levels(SOUND_RIGHT_GAIN, -1); 1382 recording_step_levels(SOUND_RIGHT_GAIN, -1);
1383 break;
1384#endif
1350 } 1385 }
1351 break; 1386 break;
1387#if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC)
1352 case ITEM_GAIN_L: 1388 case ITEM_GAIN_L:
1353 recording_step_levels(SOUND_LEFT_GAIN, -1); 1389 recording_step_levels(SOUND_LEFT_GAIN, -1);
1354 break; 1390 break;
1355 case ITEM_GAIN_R: 1391 case ITEM_GAIN_R:
1356 recording_step_levels(SOUND_RIGHT_GAIN, -1); 1392 recording_step_levels(SOUND_RIGHT_GAIN, -1);
1357 break; 1393 break;
1394#endif
1358#ifdef HAVE_AGC 1395#ifdef HAVE_AGC
1359 case ITEM_AGC_MODE: 1396 case ITEM_AGC_MODE:
1360 agc_preset = MAX(agc_preset - 1, 0); 1397 agc_preset = MAX(agc_preset - 1, 0);
@@ -1371,18 +1408,22 @@ bool recording_screen(bool no_source)
1371 } 1408 }
1372 break; 1409 break;
1373 case ITEM_AGC_MAXDB: 1410 case ITEM_AGC_MAXDB:
1411 switch(global_settings.rec_source) {
1412#if defined(HAVE_LINE_IN) || defined(HAVE_FMRADIO_IN)
1413 HAVE_LINE_IN_(case AUDIO_SRC_LINEIN:)
1414 HAVE_FMRADIO_IN_(case AUDIO_SRC_FMRADIO:)
1415 agc_maxgain = MAX(agc_maxgain - 1,
1416 sound_min(SOUND_LEFT_GAIN));
1417 global_settings.rec_agc_maxgain_line = agc_maxgain;
1418 break;
1419#endif
1374#ifdef HAVE_MIC_REC 1420#ifdef HAVE_MIC_REC
1375 if (global_settings.rec_source == AUDIO_SRC_MIC) 1421 case AUDIO_SRC_MIC:
1376 {
1377 agc_maxgain = MAX(agc_maxgain - 1, 1422 agc_maxgain = MAX(agc_maxgain - 1,
1378 sound_min(SOUND_MIC_GAIN)); 1423 sound_min(SOUND_MIC_GAIN));
1379 global_settings.rec_agc_maxgain_mic = agc_maxgain; 1424 global_settings.rec_agc_maxgain_mic = agc_maxgain;
1380 } else 1425 break;
1381#endif /* MIC */ 1426#endif /* MIC */
1382 {
1383 agc_maxgain = MAX(agc_maxgain - 1,
1384 sound_min(SOUND_LEFT_GAIN));
1385 global_settings.rec_agc_maxgain_line = agc_maxgain;
1386 } 1427 }
1387 break; 1428 break;
1388#endif /* HAVE_AGC */ 1429#endif /* HAVE_AGC */