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.c331
1 files changed, 4 insertions, 327 deletions
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c
index f6ce9bc872..cdbc170b03 100644
--- a/apps/recorder/recording.c
+++ b/apps/recorder/recording.c
@@ -155,22 +155,12 @@ static void set_gain(void)
155 { 155 {
156 audio_set_recording_gain(global_settings.rec_mic_gain, 156 audio_set_recording_gain(global_settings.rec_mic_gain,
157 0, AUDIO_GAIN_MIC); 157 0, AUDIO_GAIN_MIC);
158#ifdef HAVE_UDA1380
159 audio_set_recording_gain(global_settings.rec_mic_decimator_left_gain,
160 global_settings.rec_mic_decimator_right_gain,
161 AUDIO_GAIN_DECIMATOR);
162#endif
163 } 158 }
164 else 159 else
165 { 160 {
166 audio_set_recording_gain(global_settings.rec_left_gain, 161 audio_set_recording_gain(global_settings.rec_left_gain,
167 global_settings.rec_right_gain, 162 global_settings.rec_right_gain,
168 AUDIO_GAIN_LINEIN); 163 AUDIO_GAIN_LINEIN);
169#ifdef HAVE_UDA1380
170 audio_set_recording_gain(global_settings.rec_linein_decimator_left_gain,
171 global_settings.rec_linein_decimator_right_gain,
172 AUDIO_GAIN_DECIMATOR);
173#endif
174 } 164 }
175} 165}
176 166
@@ -185,13 +175,13 @@ char *fmt_gain(int snd, int val, char *str, int len)
185{ 175{
186 int i, d, numdec; 176 int i, d, numdec;
187 const char *unit; 177 const char *unit;
178 char sign = ' ';
188 179
189 val = sound_val2phys(snd, val); 180 val = sound_val2phys(snd, val);
190 char sign = ' ';
191 if(val < 0) 181 if(val < 0)
192 { 182 {
193 sign = '-'; 183 sign = '-';
194 val = abs(val); 184 val = -val;
195 } 185 }
196 numdec = sound_numdecimals(snd); 186 numdec = sound_numdecimals(snd);
197 unit = sound_unit(snd); 187 unit = sound_unit(snd);
@@ -208,34 +198,6 @@ char *fmt_gain(int snd, int val, char *str, int len)
208 return str; 198 return str;
209} 199}
210 200
211char *fmt_gain2(int snd1, int val1, int snd2, int val2, char *str, int len)
212{
213 /* same as above but for combined (added) values (recording gain) */
214 int i, d, numdec;
215 const char *unit;
216
217 int val = sound_val2phys(snd1, val1) + sound_val2phys(snd2, val2);
218 char sign = ' ';
219 if(val < 0)
220 {
221 sign = '-';
222 val = abs(val);
223 }
224 numdec = MAX(sound_numdecimals(snd1), sound_numdecimals(snd2));
225 unit = sound_unit(snd1); /* should be same! */
226
227 if(numdec)
228 {
229 i = val / (10*numdec);
230 d = val % (10*numdec);
231 snprintf(str, len, fmtstr[numdec], sign, i, d, unit);
232 }
233 else
234 snprintf(str, len, fmtstr[numdec], sign, val, unit);
235
236 return str;
237}
238
239static int cursor; 201static int cursor;
240 202
241void adjust_cursor(void) 203void adjust_cursor(void)
@@ -351,158 +313,6 @@ static void trigger_listener(int trigger_status)
351 } 313 }
352} 314}
353 315
354#ifdef HAVE_UDA1380
355/* Handles combined recording gain changes.
356 GAIN RANGE = negative digital / analog / positive digital
357 */
358void change_recording_gain(bool increment, bool left, bool right,
359 int ana_mic_size, int ana_line_size)
360{
361 if (increment)
362 {
363 if(global_settings.rec_source == SOURCE_MIC)
364 {
365 /* always changed as stereo */
366 if(global_settings.rec_mic_decimator_left_gain <
367 sound_max(SOUND_DECIMATOR_LEFT_GAIN))
368 {
369 /* increase digital gain by 1 if below max */
370 global_settings.rec_mic_decimator_left_gain++;
371 global_settings.rec_mic_decimator_right_gain =
372 global_settings.rec_mic_decimator_left_gain;
373 }
374
375 /* mono increase */
376 if((global_settings.rec_mic_decimator_left_gain >= ana_mic_size) &&
377 (global_settings.rec_mic_gain < sound_max(SOUND_MIC_GAIN)))
378 {
379 /* in analogue range, cycle digital gain for each analogue */
380 global_settings.rec_mic_decimator_left_gain = 0;
381 global_settings.rec_mic_decimator_right_gain =
382 global_settings.rec_mic_decimator_left_gain;
383 global_settings.rec_mic_gain++;
384 }
385 }
386 else
387 {
388 if(((left) && (right)) &&
389 (global_settings.rec_linein_decimator_left_gain <
390 sound_max(SOUND_DECIMATOR_LEFT_GAIN)) &&
391 (global_settings.rec_linein_decimator_right_gain <
392 sound_max(SOUND_DECIMATOR_RIGHT_GAIN)) )
393 {
394 /* increase digital gain by 1 if below max*/
395 global_settings.rec_linein_decimator_left_gain++;
396 global_settings.rec_linein_decimator_right_gain++;
397 }
398 else if((right) && (!left) &&
399 (global_settings.rec_linein_decimator_right_gain <
400 sound_max(SOUND_DECIMATOR_RIGHT_GAIN)))
401 {
402 global_settings.rec_linein_decimator_right_gain++;
403 }
404 else if((left) && (!right) &&
405 (global_settings.rec_linein_decimator_left_gain <
406 sound_max(SOUND_DECIMATOR_LEFT_GAIN)))
407 {
408 global_settings.rec_linein_decimator_left_gain++;
409 }
410
411 /* Stereo increase */
412 if((left) &&
413 (global_settings.rec_linein_decimator_left_gain >=
414 ana_line_size) &&
415 (global_settings.rec_left_gain < sound_max(SOUND_LEFT_GAIN)))
416 {
417 /* if analogue range cycle left digital gain for each */
418 global_settings.rec_linein_decimator_left_gain = 0;
419 global_settings.rec_left_gain++;
420 }
421 if((right) &&
422 (global_settings.rec_linein_decimator_right_gain >=
423 ana_line_size) &&
424 (global_settings.rec_right_gain < sound_max(SOUND_RIGHT_GAIN)))
425 {
426 /* if analogue range cycle right digital for each */
427 global_settings.rec_linein_decimator_right_gain = 0;
428 global_settings.rec_right_gain++;
429 }
430 }
431 }
432 else
433 {
434 if(global_settings.rec_source == SOURCE_MIC)
435 {
436 /* always changed as stereo */
437 if(global_settings.rec_mic_decimator_left_gain >
438 sound_min(SOUND_DECIMATOR_LEFT_GAIN))
439 {
440 /* decrease digital gain by 1 if above minimum */
441 global_settings.rec_mic_decimator_left_gain--;
442 global_settings.rec_mic_decimator_right_gain =
443 global_settings.rec_mic_decimator_left_gain;
444 }
445
446 /* mono decrease */
447 if((global_settings.rec_mic_decimator_left_gain < 0) &&
448 (global_settings.rec_mic_gain > sound_min(SOUND_MIC_GAIN)))
449 {
450 /* if analogue in range, cycle digital gain for each */
451 global_settings.rec_mic_decimator_left_gain = ana_mic_size - 1;
452 global_settings.rec_mic_decimator_right_gain =
453 global_settings.rec_mic_decimator_left_gain;
454 global_settings.rec_mic_gain--;
455 }
456 }
457 else
458 {
459 if( ((left) && (right)) &&
460 (global_settings.rec_linein_decimator_left_gain >
461 sound_min(SOUND_DECIMATOR_LEFT_GAIN)) &&
462 (global_settings.rec_linein_decimator_right_gain >
463 sound_min(SOUND_DECIMATOR_RIGHT_GAIN)) )
464 {
465 /* decrease digital gain by 1 if above minimum */
466 global_settings.rec_linein_decimator_left_gain--;
467 global_settings.rec_linein_decimator_right_gain--;
468 }
469 else if((right) && (!left) &&
470 (global_settings.rec_linein_decimator_right_gain >
471 sound_min(SOUND_DECIMATOR_RIGHT_GAIN)))
472 {
473 global_settings.rec_linein_decimator_right_gain--;
474 }
475 else if((left) && (!right) &&
476 (global_settings.rec_linein_decimator_left_gain >
477 sound_min(SOUND_DECIMATOR_LEFT_GAIN)))
478 {
479 global_settings.rec_linein_decimator_left_gain--;
480 }
481
482 /* Stereo decrease */
483 if((left) &&
484 (global_settings.rec_linein_decimator_left_gain < 0) &&
485 (global_settings.rec_left_gain > sound_min(SOUND_LEFT_GAIN)))
486 {
487 /* if in analogue range cycle left digital gain for each */
488 global_settings.rec_left_gain--;
489 global_settings.rec_linein_decimator_left_gain =
490 ana_line_size - 1;
491 }
492 if((right) &&
493 (global_settings.rec_linein_decimator_right_gain < 0) &&
494 (global_settings.rec_right_gain > sound_min(SOUND_RIGHT_GAIN)))
495 {
496 /* if in analogue range cycle right digital gain for each */
497 global_settings.rec_right_gain--;
498 global_settings.rec_linein_decimator_right_gain =
499 ana_line_size - 1;
500 }
501 }
502 }
503}
504#endif /* UDA1380 */
505
506bool recording_screen(void) 316bool recording_screen(void)
507{ 317{
508 long button; 318 long button;
@@ -525,22 +335,6 @@ bool recording_screen(void)
525#endif 335#endif
526 int i; 336 int i;
527 337
528#ifdef HAVE_UDA1380
529/*calculate no. of digital steps to each analogue step. Assuming
530 left dig step = right dig step, and there is an integer no. of digital steps
531 in each analogue*/
532 int ana_mic_size = sound_val2phys(SOUND_MIC_GAIN, 1) /
533 sound_val2phys(SOUND_DECIMATOR_LEFT_GAIN, 1);
534 int ana_line_size = sound_val2phys(SOUND_LEFT_GAIN, 1) /
535 sound_val2phys(SOUND_DECIMATOR_LEFT_GAIN, 1);
536
537 if(global_settings.rec_source == SOURCE_MIC)
538 {
539 global_settings.rec_mic_decimator_left_gain =
540 global_settings.rec_mic_decimator_right_gain;
541 }
542#endif
543
544 const unsigned char *byte_units[] = { 338 const unsigned char *byte_units[] = {
545 ID2P(LANG_BYTE), 339 ID2P(LANG_BYTE),
546 ID2P(LANG_KILOBYTE), 340 ID2P(LANG_KILOBYTE),
@@ -789,20 +583,6 @@ bool recording_screen(void)
789 global_settings.volume++; 583 global_settings.volume++;
790 sound_set_volume(global_settings.volume); 584 sound_set_volume(global_settings.volume);
791 break; 585 break;
792#ifdef HAVE_UDA1380
793 case 1:
794 change_recording_gain(true, true, true,
795 ana_mic_size, ana_line_size);
796 break;
797 case 2:
798 change_recording_gain(true, true, false,
799 ana_mic_size, ana_line_size);
800 break;
801 case 3:
802 change_recording_gain(true, false, true,
803 ana_mic_size, ana_line_size);
804 break;
805#else
806 case 1: 586 case 1:
807 if(global_settings.rec_source == SOURCE_MIC) 587 if(global_settings.rec_source == SOURCE_MIC)
808 { 588 {
@@ -830,7 +610,6 @@ bool recording_screen(void)
830 sound_max(SOUND_RIGHT_GAIN)) 610 sound_max(SOUND_RIGHT_GAIN))
831 global_settings.rec_right_gain++; 611 global_settings.rec_right_gain++;
832 break; 612 break;
833#endif
834 } 613 }
835 set_gain(); 614 set_gain();
836 update_countdown = 1; /* Update immediately */ 615 update_countdown = 1; /* Update immediately */
@@ -850,23 +629,6 @@ bool recording_screen(void)
850 global_settings.volume--; 629 global_settings.volume--;
851 sound_set_volume(global_settings.volume); 630 sound_set_volume(global_settings.volume);
852 break; 631 break;
853#ifdef HAVE_UDA1380
854 case 1:
855 /* both channels */
856 change_recording_gain(false, true, true,
857 ana_mic_size, ana_line_size);
858 break;
859 case 2:
860 /* only left */
861 change_recording_gain(false, true, false,
862 ana_mic_size, ana_line_size);
863 break;
864 case 3:
865 /* only right */
866 change_recording_gain(false, false, true,
867 ana_mic_size, ana_line_size);
868 break;
869#else
870 case 1: 632 case 1:
871 if(global_settings.rec_source == SOURCE_MIC) 633 if(global_settings.rec_source == SOURCE_MIC)
872 { 634 {
@@ -894,7 +656,6 @@ bool recording_screen(void)
894 sound_min(SOUND_RIGHT_GAIN)) 656 sound_min(SOUND_RIGHT_GAIN))
895 global_settings.rec_right_gain--; 657 global_settings.rec_right_gain--;
896 break; 658 break;
897#endif
898 } 659 }
899 set_gain(); 660 set_gain();
900 update_countdown = 1; /* Update immediately */ 661 update_countdown = 1; /* Update immediately */
@@ -1097,40 +858,10 @@ bool recording_screen(void)
1097 858
1098 if(global_settings.rec_source == SOURCE_MIC) 859 if(global_settings.rec_source == SOURCE_MIC)
1099 { 860 {
1100#ifdef HAVE_UDA1380
1101
1102 /*****************test info code***********************
1103 snprintf(buf, 32, "Aa:(2x) %d DigL:(0.5x) %d ",
1104 global_settings.rec_mic_gain,
1105 global_settings.rec_mic_decimator_left_gain);
1106 lcd_puts(0, 10, buf);
1107 snprintf(buf, 32, "DigR:(0.5x) %d",
1108 global_settings.rec_mic_decimator_right_gain);
1109 lcd_puts(9, 12, buf);
1110 *****************test info code***********************/
1111
1112 snprintf(buf, 32, "%s:%s (%s)",
1113 str(LANG_RECORDING_GAIN),
1114 fmt_gain2(SOUND_MIC_GAIN,
1115 global_settings.rec_mic_gain,
1116 SOUND_DECIMATOR_LEFT_GAIN,
1117 global_settings.rec_mic_decimator_left_gain,
1118 buf2, sizeof(buf2)),
1119 (((global_settings.rec_mic_gain ==
1120 sound_max(SOUND_MIC_GAIN)) &&
1121 (global_settings.rec_mic_decimator_left_gain > 0))||
1122 ((global_settings.rec_mic_gain ==
1123 sound_min(SOUND_MIC_GAIN)) &&
1124 (global_settings.rec_mic_decimator_left_gain < 0)))?
1125 str(LANG_RECORDING_GAIN_DIGITAL) :
1126 str(LANG_RECORDING_GAIN_ANALOG)
1127 );
1128#else /* HAVE_UDA1380 */
1129 snprintf(buf, 32, "%s:%s", str(LANG_RECORDING_GAIN), 861 snprintf(buf, 32, "%s:%s", str(LANG_RECORDING_GAIN),
1130 fmt_gain(SOUND_MIC_GAIN, 862 fmt_gain(SOUND_MIC_GAIN,
1131 global_settings.rec_mic_gain, 863 global_settings.rec_mic_gain,
1132 buf2, sizeof(buf2))); 864 buf2, sizeof(buf2)));
1133#endif
1134 if(global_settings.invert_cursor && ((1==cursor)||(2==cursor))) 865 if(global_settings.invert_cursor && ((1==cursor)||(2==cursor)))
1135 { 866 {
1136 FOR_NB_SCREENS(i) 867 FOR_NB_SCREENS(i)
@@ -1145,44 +876,11 @@ bool recording_screen(void)
1145 } 876 }
1146 else if(global_settings.rec_source == SOURCE_LINE) 877 else if(global_settings.rec_source == SOURCE_LINE)
1147 { 878 {
1148#ifdef HAVE_UDA1380
1149
1150 /*****************test info code***********************
1151 snprintf(buf, 32, "AL:(3x) %d DigL:(0.5x) %d",
1152 global_settings.rec_left_gain,
1153 global_settings.rec_linein_decimator_left_gain);
1154 lcd_puts(0, 10, buf);
1155 snprintf(buf, 32, "AR:(3x) %d DigR:(0.5x) %d",
1156 global_settings.rec_right_gain,
1157 global_settings.rec_linein_decimator_right_gain);
1158 lcd_puts(0, 12, buf);
1159 *****************test info code***********************/
1160
1161 snprintf(buf, 32, "%s:%s (%s)",
1162 str(LANG_RECORDING_LEFT),
1163 fmt_gain2(SOUND_LEFT_GAIN,
1164 global_settings.rec_left_gain,
1165 SOUND_DECIMATOR_LEFT_GAIN,
1166 global_settings.rec_linein_decimator_left_gain,
1167 buf2, sizeof(buf2)),
1168 (((global_settings.rec_left_gain ==
1169 sound_max(SOUND_LEFT_GAIN)) &&
1170 (global_settings.rec_linein_decimator_left_gain
1171 > 0)) ||
1172 ((global_settings.rec_left_gain ==
1173 sound_min(SOUND_LEFT_GAIN)) &&
1174 (global_settings.rec_linein_decimator_left_gain
1175 < 0))) ?
1176 str(LANG_RECORDING_GAIN_DIGITAL) :
1177 str(LANG_RECORDING_GAIN_ANALOG)
1178 );
1179#else /* HAVE_UDA1380 */
1180 snprintf(buf, 32, "%s:%s", 879 snprintf(buf, 32, "%s:%s",
1181 str(LANG_RECORDING_LEFT), 880 str(LANG_RECORDING_LEFT),
1182 fmt_gain(SOUND_LEFT_GAIN, 881 fmt_gain(SOUND_LEFT_GAIN,
1183 global_settings.rec_left_gain, 882 global_settings.rec_left_gain,
1184 buf2, sizeof(buf2))); 883 buf2, sizeof(buf2)));
1185#endif /* HAVE_UDA1380 */
1186 if(global_settings.invert_cursor && ((1==cursor)||(2==cursor))) 884 if(global_settings.invert_cursor && ((1==cursor)||(2==cursor)))
1187 { 885 {
1188 FOR_NB_SCREENS(i) 886 FOR_NB_SCREENS(i)
@@ -1195,32 +893,11 @@ bool recording_screen(void)
1195 screens[i].puts(0, 3+PM_HEIGHT, buf); 893 screens[i].puts(0, 3+PM_HEIGHT, buf);
1196 } 894 }
1197 895
1198#ifdef HAVE_UDA1380
1199 snprintf(buf, 32, "%s:%s (%s)",
1200 str(LANG_RECORDING_RIGHT),
1201 fmt_gain2(SOUND_RIGHT_GAIN,
1202 global_settings.rec_right_gain,
1203 SOUND_DECIMATOR_RIGHT_GAIN,
1204 global_settings.rec_linein_decimator_right_gain,
1205 buf2, sizeof(buf2)),
1206 (((global_settings.rec_right_gain ==
1207 sound_max(SOUND_RIGHT_GAIN)) &&
1208 (global_settings.rec_linein_decimator_right_gain
1209 > 0)) ||
1210 ((global_settings.rec_right_gain ==
1211 sound_min(SOUND_RIGHT_GAIN)) &&
1212 (global_settings.rec_linein_decimator_right_gain
1213 < 0))) ?
1214 str(LANG_RECORDING_GAIN_DIGITAL) :
1215 str(LANG_RECORDING_GAIN_ANALOG)
1216 );
1217#else /* HAVE_UDA1380 */
1218 snprintf(buf, 32, "%s:%s", 896 snprintf(buf, 32, "%s:%s",
1219 str(LANG_RECORDING_RIGHT), 897 str(LANG_RECORDING_RIGHT),
1220 fmt_gain(SOUND_RIGHT_GAIN, 898 fmt_gain(SOUND_RIGHT_GAIN,
1221 global_settings.rec_right_gain, 899 global_settings.rec_right_gain,
1222 buf2, sizeof(buf2))); 900 buf2, sizeof(buf2)));
1223#endif /* HAVE_UDA1380 */
1224 if(global_settings.invert_cursor && ((1==cursor)||(3==cursor))) 901 if(global_settings.invert_cursor && ((1==cursor)||(3==cursor)))
1225 { 902 {
1226 FOR_NB_SCREENS(i) 903 FOR_NB_SCREENS(i)
@@ -1266,14 +943,14 @@ bool recording_screen(void)
1266 } 943 }
1267 } 944 }
1268/* Can't measure S/PDIF sample rate on Archos yet */ 945/* Can't measure S/PDIF sample rate on Archos yet */
1269#if CONFIG_CODEC != MAS3587F && defined(HAVE_SPDIF_IN) && !defined(SIMULATOR) 946#if (CONFIG_CODEC != MAS3587F) && defined(HAVE_SPDIF_IN) && !defined(SIMULATOR)
1270 if (global_settings.rec_source == SOURCE_SPDIF) 947 if (global_settings.rec_source == SOURCE_SPDIF)
1271 snprintf(spdif_sfreq, 8, "%dHz", audio_get_spdif_sample_rate()); 948 snprintf(spdif_sfreq, 8, "%dHz", audio_get_spdif_sample_rate());
1272#else 949#else
1273 (void)spdif_sfreq; 950 (void)spdif_sfreq;
1274#endif 951#endif
1275 snprintf(buf, 32, "%s %s", 952 snprintf(buf, 32, "%s %s",
1276#if CONFIG_CODEC != MAS3587F && defined(HAVE_SPDIF_IN) && !defined(SIMULATOR) 953#if (CONFIG_CODEC != MAS3587F) && defined(HAVE_SPDIF_IN) && !defined(SIMULATOR)
1277 global_settings.rec_source == SOURCE_SPDIF ? 954 global_settings.rec_source == SOURCE_SPDIF ?
1278 spdif_sfreq : 955 spdif_sfreq :
1279#endif 956#endif