summaryrefslogtreecommitdiff
path: root/firmware/mpeg.c
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2002-07-25 15:55:22 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2002-07-25 15:55:22 +0000
commitd731cdd0db2e5e0ba2272f89df47f44348943500 (patch)
treecbb5f68f6808c8e86d508c599375370d24a32f6d /firmware/mpeg.c
parente4b9dbb9c5ccc69a09f6a696b269c6a52aad1def (diff)
downloadrockbox-d731cdd0db2e5e0ba2272f89df47f44348943500.tar.gz
rockbox-d731cdd0db2e5e0ba2272f89df47f44348943500.zip
Automatic Volume Control for Recorder by Heikki Hannikainen
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1447 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r--firmware/mpeg.c39
1 files changed, 36 insertions, 3 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index 82e30ca0ba..50a9789501 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -484,6 +484,7 @@ void IMIA1(void)
484static int new_file(bool next_track) 484static int new_file(bool next_track)
485{ 485{
486 char *trackname; 486 char *trackname;
487 int i;
487 488
488 do { 489 do {
489 trackname = peek_next_track( next_track ? 1 : -1 ); 490 trackname = peek_next_track( next_track ? 1 : -1 );
@@ -503,6 +504,10 @@ static int new_file(bool next_track)
503 mp3info(&(id3tags[last_tag].id3), trackname); 504 mp3info(&(id3tags[last_tag].id3), trackname);
504 id3tags[last_tag].mempos = mp3buf_write; 505 id3tags[last_tag].mempos = mp3buf_write;
505 last_tag++; 506 last_tag++;
507 for(i = 0;i < last_tag;i++)
508 {
509 DEBUGF("nf: %d, %x\n", i, id3tags[i].mempos);
510 }
506 } 511 }
507 } 512 }
508 } while ( mpeg_file < 0 ); 513 } while ( mpeg_file < 0 );
@@ -800,10 +805,15 @@ static void mpeg_thread(void)
800 case MPEG_TRACK_CHANGE: 805 case MPEG_TRACK_CHANGE:
801 DEBUGF("Track change\n"); 806 DEBUGF("Track change\n");
802 807
808#ifdef ARCHOS_RECORDER
809 /* Reset the AVC */
810 mpeg_sound_set(SOUND_AVC, -1);
811#endif
803 /* shift array so index 0 is current track */ 812 /* shift array so index 0 is current track */
804 for (i=0; i<last_tag-1; i++) 813 for (i=0; i<last_tag-1; i++)
805 { 814 {
806 id3tags[i] = id3tags[i+1]; 815 id3tags[i] = id3tags[i+1];
816 DEBUGF("tc: %d, %x\n", i, id3tags[i].mempos);
807 } 817 }
808 last_tag--; 818 last_tag--;
809 break; 819 break;
@@ -1038,6 +1048,28 @@ void mpeg_sound_set(int setting, int value)
1038 tmp = MAX(MIN(value * 4, 0x44), 0); 1048 tmp = MAX(MIN(value * 4, 0x44), 0);
1039 mas_codec_writereg(MAS_REG_KLOUDNESS, (tmp & 0xff) << 8); 1049 mas_codec_writereg(MAS_REG_KLOUDNESS, (tmp & 0xff) << 8);
1040 break; 1050 break;
1051
1052 case SOUND_AVC:
1053 switch (value) {
1054 case 1: /* 2s */
1055 tmp = (0x2 << 8) | (0x8 << 12);
1056 break;
1057 case 2: /* 4s */
1058 tmp = (0x4 << 8) | (0x8 << 12);
1059 break;
1060 case 3: /* 8s */
1061 tmp = (0x8 << 8) | (0x8 << 12);
1062 break;
1063 case -1: /* turn off and then turn on again to decay quickly */
1064 tmp = mas_codec_readreg(MAS_REG_KAVC);
1065 mas_codec_writereg(MAS_REG_KAVC, 0);
1066 break;
1067 default: /* off */
1068 tmp = 0;
1069 break;
1070 }
1071 mas_codec_writereg(MAS_REG_KAVC, tmp);
1072 break;
1041#endif 1073#endif
1042 } 1074 }
1043#endif /* SIMULATOR */ 1075#endif /* SIMULATOR */
@@ -1082,16 +1114,16 @@ int mpeg_val2phys(int setting, int value)
1082 return result; 1114 return result;
1083} 1115}
1084 1116
1085void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost) 1117void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost, int avc)
1086{ 1118{
1087#ifdef SIMULATOR 1119#ifdef SIMULATOR
1088 volume = bass = treble = loudness = bass_boost; 1120 volume = bass = treble = loudness = bass_boost = avc;
1089#else 1121#else
1090#ifdef ARCHOS_RECORDER 1122#ifdef ARCHOS_RECORDER
1091 int rc; 1123 int rc;
1092 unsigned long val; 1124 unsigned long val;
1093#else 1125#else
1094 loudness = bass_boost; 1126 loudness = bass_boost = avc;
1095#endif 1127#endif
1096 1128
1097 setup_sci0(); 1129 setup_sci0();
@@ -1158,6 +1190,7 @@ void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost)
1158#ifdef ARCHOS_RECORDER 1190#ifdef ARCHOS_RECORDER
1159 mpeg_sound_set(SOUND_LOUDNESS, loudness); 1191 mpeg_sound_set(SOUND_LOUDNESS, loudness);
1160 mpeg_sound_set(SOUND_SUPERBASS, bass_boost); 1192 mpeg_sound_set(SOUND_SUPERBASS, bass_boost);
1193 mpeg_sound_set(SOUND_AVC, avc);
1161#endif 1194#endif
1162#endif /* SIMULATOR */ 1195#endif /* SIMULATOR */
1163} 1196}