summaryrefslogtreecommitdiff
path: root/apps/mpeg.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/mpeg.c')
-rw-r--r--apps/mpeg.c162
1 files changed, 81 insertions, 81 deletions
diff --git a/apps/mpeg.c b/apps/mpeg.c
index 0ecf68fc53..5c206c79f1 100644
--- a/apps/mpeg.c
+++ b/apps/mpeg.c
@@ -382,7 +382,7 @@ static void set_elapsed(struct mp3entry* id3)
382 break; 382 break;
383 } 383 }
384 } 384 }
385 385
386 i--; 386 i--;
387 if (i < 0) 387 if (i < 0)
388 i = 0; 388 i = 0;
@@ -395,7 +395,7 @@ static void set_elapsed(struct mp3entry* id3)
395 } 395 }
396 else 396 else
397 { 397 {
398 nextpos = 256; 398 nextpos = 256;
399 } 399 }
400 400
401 remainder = id3->offset - (relpos * (id3->filesize / 256)); 401 remainder = id3->offset - (relpos * (id3->filesize / 256));
@@ -425,7 +425,7 @@ int audio_get_file_pos(void)
425{ 425{
426 int pos = -1; 426 int pos = -1;
427 struct mp3entry *id3 = audio_current_track(); 427 struct mp3entry *id3 = audio_current_track();
428 428
429 if (id3->vbr) 429 if (id3->vbr)
430 { 430 {
431 if (id3->has_toc) 431 if (id3->has_toc)
@@ -433,20 +433,20 @@ int audio_get_file_pos(void)
433 /* Use the TOC to find the new position */ 433 /* Use the TOC to find the new position */
434 unsigned int percent, remainder; 434 unsigned int percent, remainder;
435 int curtoc, nexttoc, plen; 435 int curtoc, nexttoc, plen;
436 436
437 percent = (id3->elapsed*100)/id3->length; 437 percent = (id3->elapsed*100)/id3->length;
438 if (percent > 99) 438 if (percent > 99)
439 percent = 99; 439 percent = 99;
440 440
441 curtoc = id3->toc[percent]; 441 curtoc = id3->toc[percent];
442 442
443 if (percent < 99) 443 if (percent < 99)
444 nexttoc = id3->toc[percent+1]; 444 nexttoc = id3->toc[percent+1];
445 else 445 else
446 nexttoc = 256; 446 nexttoc = 256;
447 447
448 pos = (id3->filesize/256)*curtoc; 448 pos = (id3->filesize/256)*curtoc;
449 449
450 /* Use the remainder to get a more accurate position */ 450 /* Use the remainder to get a more accurate position */
451 remainder = (id3->elapsed*100)%id3->length; 451 remainder = (id3->elapsed*100)%id3->length;
452 remainder = (remainder*100)/id3->length; 452 remainder = (remainder*100)/id3->length;
@@ -478,7 +478,7 @@ int audio_get_file_pos(void)
478 /* skip past id3v2 tag and other leading garbage */ 478 /* skip past id3v2 tag and other leading garbage */
479 pos = id3->first_frame_offset; 479 pos = id3->first_frame_offset;
480 } 480 }
481 return pos; 481 return pos;
482} 482}
483 483
484unsigned long mpeg_get_last_header(void) 484unsigned long mpeg_get_last_header(void)
@@ -637,9 +637,9 @@ static void recalculate_watermark(int bitrate)
637 and set a high threshold */ 637 and set a high threshold */
638 if(bitrate == 0) 638 if(bitrate == 0)
639 bitrate = 320; 639 bitrate = 320;
640 640
641 bytes_per_sec = bitrate * 1000 / 8; 641 bytes_per_sec = bitrate * 1000 / 8;
642 642
643 if(time) 643 if(time)
644 { 644 {
645 /* No drive spins up faster than 3.5s */ 645 /* No drive spins up faster than 3.5s */
@@ -693,7 +693,7 @@ void audio_get_debugdata(struct audio_debug *dbgdata)
693static void dbg_timer_start(void) 693static void dbg_timer_start(void)
694{ 694{
695 /* We are using timer 2 */ 695 /* We are using timer 2 */
696 696
697 TSTR &= ~0x04; /* Stop the timer */ 697 TSTR &= ~0x04; /* Stop the timer */
698 TSNC &= ~0x04; /* No synchronization */ 698 TSNC &= ~0x04; /* No synchronization */
699 TMDR &= ~0x44; /* Operate normally */ 699 TMDR &= ~0x44; /* Operate normally */
@@ -813,7 +813,7 @@ void rec_tick(void)
813 } 813 }
814 814
815 data = *(unsigned char *)0x04000000; /* read data byte */ 815 data = *(unsigned char *)0x04000000; /* read data byte */
816 816
817 xor_b(0x08, &PADRH); /* Set PR inactive */ 817 xor_b(0x08, &PADRH); /* Set PR inactive */
818 818
819 mpeg_audiobuf[audiobuf_write++] = data; 819 mpeg_audiobuf[audiobuf_write++] = data;
@@ -888,7 +888,7 @@ static void transfer_end(const void** ppbuf, size_t* psize)
888 audiobuf_read += last_dma_chunk_size; 888 audiobuf_read += last_dma_chunk_size;
889 if(audiobuf_read >= audiobuflen) 889 if(audiobuf_read >= audiobuflen)
890 audiobuf_read = 0; 890 audiobuf_read = 0;
891 891
892 /* First, check if we are on a track boundary */ 892 /* First, check if we are on a track boundary */
893 if (num_tracks_in_memory() > 1) 893 if (num_tracks_in_memory() > 1)
894 { 894 {
@@ -901,17 +901,17 @@ static void transfer_end(const void** ppbuf, size_t* psize)
901 } 901 }
902 } 902 }
903 } 903 }
904 904
905 unplayed_space_left = get_unplayed_space(); 905 unplayed_space_left = get_unplayed_space();
906 906
907 space_until_end_of_buffer = audiobuflen - audiobuf_read; 907 space_until_end_of_buffer = audiobuflen - audiobuf_read;
908 908
909 if(!filling && unplayed_space_left < low_watermark) 909 if(!filling && unplayed_space_left < low_watermark)
910 { 910 {
911 filling = true; 911 filling = true;
912 queue_post(&mpeg_queue, MPEG_NEED_DATA, GENERATE_UNBUFFER_EVENTS); 912 queue_post(&mpeg_queue, MPEG_NEED_DATA, GENERATE_UNBUFFER_EVENTS);
913 } 913 }
914 914
915 if(unplayed_space_left) 915 if(unplayed_space_left)
916 { 916 {
917 last_dma_chunk_size = MIN(0x2000, unplayed_space_left); 917 last_dma_chunk_size = MIN(0x2000, unplayed_space_left);
@@ -953,7 +953,7 @@ static void transfer_end(const void** ppbuf, size_t* psize)
953 /* Update the watermark debug level */ 953 /* Update the watermark debug level */
954 if(unplayed_space_left < lowest_watermark_level) 954 if(unplayed_space_left < lowest_watermark_level)
955 lowest_watermark_level = unplayed_space_left; 955 lowest_watermark_level = unplayed_space_left;
956 956
957 DEBUGF("DMA underrun.\n"); 957 DEBUGF("DMA underrun.\n");
958 dma_underrun = true; 958 dma_underrun = true;
959 } 959 }
@@ -975,7 +975,7 @@ static struct trackdata *add_track_to_tag_list(const char *filename)
975{ 975{
976 struct trackdata *track; 976 struct trackdata *track;
977 bool send_nid3_event; 977 bool send_nid3_event;
978 978
979 if(num_tracks_in_memory() >= MAX_TRACK_ENTRIES) 979 if(num_tracks_in_memory() >= MAX_TRACK_ENTRIES)
980 { 980 {
981 DEBUGF("Tag memory is full\n"); 981 DEBUGF("Tag memory is full\n");
@@ -983,7 +983,7 @@ static struct trackdata *add_track_to_tag_list(const char *filename)
983 } 983 }
984 984
985 track = &trackdata[track_write_idx]; 985 track = &trackdata[track_write_idx];
986 986
987 /* grab id3 tag of new file and 987 /* grab id3 tag of new file and
988 remember where in memory it starts */ 988 remember where in memory it starts */
989 if(mp3info(&track->id3, filename)) 989 if(mp3info(&track->id3, filename))
@@ -1032,14 +1032,14 @@ static int new_file(int steps)
1032 start += track->load_ahead_index; 1032 start += track->load_ahead_index;
1033 } 1033 }
1034 } 1034 }
1035 1035
1036 do { 1036 do {
1037 trackname = playlist_peek(start + steps, name_buf, sizeof(name_buf)); 1037 trackname = playlist_peek(start + steps, name_buf, sizeof(name_buf));
1038 if ( !trackname ) 1038 if ( !trackname )
1039 return -1; 1039 return -1;
1040 1040
1041 DEBUGF("Loading %s\n", trackname); 1041 DEBUGF("Loading %s\n", trackname);
1042 1042
1043 mpeg_file = open(trackname, O_RDONLY); 1043 mpeg_file = open(trackname, O_RDONLY);
1044 if(mpeg_file < 0) { 1044 if(mpeg_file < 0) {
1045 DEBUGF("Couldn't open file: %s\n",trackname); 1045 DEBUGF("Couldn't open file: %s\n",trackname);
@@ -1065,7 +1065,7 @@ static int new_file(int steps)
1065 else 1065 else
1066 { 1066 {
1067 /* skip past id3v2 tag */ 1067 /* skip past id3v2 tag */
1068 lseek(mpeg_file, 1068 lseek(mpeg_file,
1069 track->id3.first_frame_offset, 1069 track->id3.first_frame_offset,
1070 SEEK_SET); 1070 SEEK_SET);
1071 track->id3.index = steps; 1071 track->id3.index = steps;
@@ -1079,7 +1079,7 @@ static int new_file(int steps)
1079 else 1079 else
1080 recalculate_watermark( 1080 recalculate_watermark(
1081 track->id3.bitrate); 1081 track->id3.bitrate);
1082 1082
1083 } 1083 }
1084 } 1084 }
1085 1085
@@ -1212,7 +1212,7 @@ static void start_playback_if_ready(void)
1212 playable_space = audiobuf_swapwrite - audiobuf_read; 1212 playable_space = audiobuf_swapwrite - audiobuf_read;
1213 if(playable_space < 0) 1213 if(playable_space < 0)
1214 playable_space += audiobuflen; 1214 playable_space += audiobuflen;
1215 1215
1216 /* See if we have started playing yet. If not, do it. */ 1216 /* See if we have started playing yet. If not, do it. */
1217 if(play_pending || dma_underrun) 1217 if(play_pending || dma_underrun)
1218 { 1218 {
@@ -1273,7 +1273,7 @@ static bool swap_one_chunk(void)
1273 else 1273 else
1274 amount_to_swap = MIN(MPEG_SWAP_CHUNKSIZE, free_space_left); 1274 amount_to_swap = MIN(MPEG_SWAP_CHUNKSIZE, free_space_left);
1275 } 1275 }
1276 1276
1277 if(audiobuf_write < audiobuf_swapwrite) 1277 if(audiobuf_write < audiobuf_swapwrite)
1278 amount_to_swap = MIN(audiobuflen - audiobuf_swapwrite, 1278 amount_to_swap = MIN(audiobuflen - audiobuf_swapwrite,
1279 amount_to_swap); 1279 amount_to_swap);
@@ -1342,7 +1342,7 @@ static void mpeg_thread(void)
1342 } 1342 }
1343 1343
1344 start_playback_if_ready(); 1344 start_playback_if_ready();
1345 1345
1346 switch(ev.id) 1346 switch(ev.id)
1347 { 1347 {
1348 case MPEG_PLAY: 1348 case MPEG_PLAY:
@@ -1376,8 +1376,8 @@ static void mpeg_thread(void)
1376 } 1376 }
1377 else { 1377 else {
1378 /* skip past id3v2 tag */ 1378 /* skip past id3v2 tag */
1379 lseek(mpeg_file, 1379 lseek(mpeg_file,
1380 get_trackdata(0)->id3.first_frame_offset, 1380 get_trackdata(0)->id3.first_frame_offset,
1381 SEEK_SET); 1381 SEEK_SET);
1382 1382
1383 } 1383 }
@@ -1421,7 +1421,7 @@ static void mpeg_thread(void)
1421 if ( current_track_counter == pause_track ) 1421 if ( current_track_counter == pause_track )
1422 last_dma_tick += current_tick - pause_tick; 1422 last_dma_tick += current_tick - pause_tick;
1423 else 1423 else
1424 last_dma_tick = current_tick; 1424 last_dma_tick = current_tick;
1425 pause_tick = 0; 1425 pause_tick = 0;
1426 mp3_play_pause(true); 1426 mp3_play_pause(true);
1427 } 1427 }
@@ -1481,7 +1481,7 @@ static void mpeg_thread(void)
1481 /* Make it read more data */ 1481 /* Make it read more data */
1482 filling = true; 1482 filling = true;
1483 queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); 1483 queue_post(&mpeg_queue, MPEG_NEED_DATA, 0);
1484 1484
1485 /* Tell the file loading code that we want 1485 /* Tell the file loading code that we want
1486 to start playing as soon as we have some data */ 1486 to start playing as soon as we have some data */
1487 play_pending = true; 1487 play_pending = true;
@@ -1498,7 +1498,7 @@ static void mpeg_thread(void)
1498 1498
1499 if (!playlist_check(-1)) 1499 if (!playlist_check(-1))
1500 break; 1500 break;
1501 1501
1502 /* stop the current stream */ 1502 /* stop the current stream */
1503 end_current_track(); 1503 end_current_track();
1504 1504
@@ -1540,7 +1540,7 @@ static void mpeg_thread(void)
1540 id3->elapsed = oldtime; 1540 id3->elapsed = oldtime;
1541 break; 1541 break;
1542 } 1542 }
1543 1543
1544 if (mpeg_file >= 0) 1544 if (mpeg_file >= 0)
1545 curpos = lseek(mpeg_file, 0, SEEK_CUR); 1545 curpos = lseek(mpeg_file, 0, SEEK_CUR);
1546 else 1546 else
@@ -1581,7 +1581,7 @@ static void mpeg_thread(void)
1581 hasn't yet advanced up to the new location of the read 1581 hasn't yet advanced up to the new location of the read
1582 pointer. We just move it, there is no need to swap 1582 pointer. We just move it, there is no need to swap
1583 data that won't be played anyway. */ 1583 data that won't be played anyway. */
1584 1584
1585 if (unswapped_space_left > unplayed_space_left) 1585 if (unswapped_space_left > unplayed_space_left)
1586 { 1586 {
1587 DEBUGF("Moved swapwrite\n"); 1587 DEBUGF("Moved swapwrite\n");
@@ -1599,9 +1599,9 @@ static void mpeg_thread(void)
1599 else 1599 else
1600 { 1600 {
1601 /* resume will start at new position */ 1601 /* resume will start at new position */
1602 last_dma_chunk_size = 1602 last_dma_chunk_size =
1603 MIN(0x2000, get_unplayed_space_current_song()); 1603 MIN(0x2000, get_unplayed_space_current_song());
1604 mp3_play_data(mpeg_audiobuf + audiobuf_read, 1604 mp3_play_data(mpeg_audiobuf + audiobuf_read,
1605 last_dma_chunk_size, transfer_end); 1605 last_dma_chunk_size, transfer_end);
1606 dma_underrun = false; 1606 dma_underrun = false;
1607 } 1607 }
@@ -1696,7 +1696,7 @@ static void mpeg_thread(void)
1696 1696
1697 /* Make sure that we don't fill the entire buffer */ 1697 /* Make sure that we don't fill the entire buffer */
1698 free_space_left -= MPEG_HIGH_WATER; 1698 free_space_left -= MPEG_HIGH_WATER;
1699 1699
1700 if (ev.data == GENERATE_UNBUFFER_EVENTS) 1700 if (ev.data == GENERATE_UNBUFFER_EVENTS)
1701 generate_unbuffer_events(); 1701 generate_unbuffer_events();
1702 1702
@@ -1748,12 +1748,12 @@ static void mpeg_thread(void)
1748 static const unsigned char tag[] = "TAG"; 1748 static const unsigned char tag[] = "TAG";
1749 int taglen = 128; 1749 int taglen = 128;
1750 int tagptr = audiobuf_write + len - 128; 1750 int tagptr = audiobuf_write + len - 128;
1751 1751
1752 /* Really rare case: entire potential tag wasn't 1752 /* Really rare case: entire potential tag wasn't
1753 read in this call AND audiobuf_write < 128 */ 1753 read in this call AND audiobuf_write < 128 */
1754 if (tagptr < 0) 1754 if (tagptr < 0)
1755 tagptr += audiobuflen; 1755 tagptr += audiobuflen;
1756 1756
1757 for(i = 0;i < 3;i++) 1757 for(i = 0;i < 3;i++)
1758 { 1758 {
1759 if(tagptr >= audiobuflen) 1759 if(tagptr >= audiobuflen)
@@ -1801,10 +1801,10 @@ static void mpeg_thread(void)
1801 { 1801 {
1802 DEBUGF("MPEG read error\n"); 1802 DEBUGF("MPEG read error\n");
1803 } 1803 }
1804 1804
1805 close(mpeg_file); 1805 close(mpeg_file);
1806 mpeg_file = -1; 1806 mpeg_file = -1;
1807 1807
1808 if(new_file(1) < 0) 1808 if(new_file(1) < 0)
1809 { 1809 {
1810 /* No more data to play */ 1810 /* No more data to play */
@@ -1819,7 +1819,7 @@ static void mpeg_thread(void)
1819 } 1819 }
1820 } 1820 }
1821 break; 1821 break;
1822 1822
1823 case MPEG_TRACK_CHANGE: 1823 case MPEG_TRACK_CHANGE:
1824 track_change(); 1824 track_change();
1825 break; 1825 break;
@@ -1838,7 +1838,7 @@ static void mpeg_thread(void)
1838 usb_wait_for_disconnect(&mpeg_queue); 1838 usb_wait_for_disconnect(&mpeg_queue);
1839 break; 1839 break;
1840#endif /* !USB_NONE */ 1840#endif /* !USB_NONE */
1841 1841
1842#if CONFIG_CODEC == MAS3587F 1842#if CONFIG_CODEC == MAS3587F
1843 case MPEG_INIT_RECORDING: 1843 case MPEG_INIT_RECORDING:
1844 init_recording(); 1844 init_recording();
@@ -1876,7 +1876,7 @@ static void mpeg_thread(void)
1876 mpeg_audiobuf+startpos, startpos); 1876 mpeg_audiobuf+startpos, startpos);
1877 1877
1878 saved_header = mpeg_get_last_header(); 1878 saved_header = mpeg_get_last_header();
1879 1879
1880 mem_find_next_frame(startpos, &offset, 1800, 1880 mem_find_next_frame(startpos, &offset, 1800,
1881 saved_header, mpeg_audiobuf, 1881 saved_header, mpeg_audiobuf,
1882 audiobuflen); 1882 audiobuflen);
@@ -1912,10 +1912,10 @@ static void mpeg_thread(void)
1912 1912
1913 /* delayed until buffer is saved, don't open yet */ 1913 /* delayed until buffer is saved, don't open yet */
1914 strcpy(delayed_filename, recording_filename); 1914 strcpy(delayed_filename, recording_filename);
1915 mpeg_file = -1; 1915 mpeg_file = -1;
1916 1916
1917 break; 1917 break;
1918 1918
1919 case MPEG_STOP: 1919 case MPEG_STOP:
1920 DEBUGF("MPEG_STOP\n"); 1920 DEBUGF("MPEG_STOP\n");
1921 1921
@@ -1974,7 +1974,7 @@ static void mpeg_thread(void)
1974 1974
1975 mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_FRAME_COUNT, 1975 mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_FRAME_COUNT,
1976 &frame_count_end, 1); 1976 &frame_count_end, 1);
1977 1977
1978 last_rec_time = current_tick - record_start_time; 1978 last_rec_time = current_tick - record_start_time;
1979 record_start_time = current_tick; 1979 record_start_time = current_tick;
1980 if (paused) 1980 if (paused)
@@ -2014,7 +2014,7 @@ static void mpeg_thread(void)
2014 queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); 2014 queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0);
2015 break; 2015 break;
2016 2016
2017 case MPEG_SAVE_DATA: 2017 case MPEG_SAVE_DATA:
2018 if (saving_status == BUFFER_FULL) 2018 if (saving_status == BUFFER_FULL)
2019 save_endpos = audiobuf_write; 2019 save_endpos = audiobuf_write;
2020 2020
@@ -2098,7 +2098,7 @@ static void mpeg_thread(void)
2098 queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); 2098 queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0);
2099 2099
2100 break; 2100 break;
2101 2101
2102 case MPEG_PRERECORDING_TICK: 2102 case MPEG_PRERECORDING_TICK:
2103 if(!is_prerecording) 2103 if(!is_prerecording)
2104 break; 2104 break;
@@ -2118,21 +2118,21 @@ static void mpeg_thread(void)
2118 break; 2118 break;
2119 2119
2120 case MPEG_INIT_PLAYBACK: 2120 case MPEG_INIT_PLAYBACK:
2121 /* Stop the prerecording */ 2121 /* Stop the prerecording */
2122 stop_recording(); 2122 stop_recording();
2123 reset_mp3_buffer(); 2123 reset_mp3_buffer();
2124 mp3_play_init(); 2124 mp3_play_init();
2125 init_playback_done = true; 2125 init_playback_done = true;
2126 break; 2126 break;
2127 2127
2128 case MPEG_PAUSE_RECORDING: 2128 case MPEG_PAUSE_RECORDING:
2129 pause_recording(); 2129 pause_recording();
2130 break; 2130 break;
2131 2131
2132 case MPEG_RESUME_RECORDING: 2132 case MPEG_RESUME_RECORDING:
2133 resume_recording(); 2133 resume_recording();
2134 break; 2134 break;
2135 2135
2136 case SYS_USB_CONNECTED: 2136 case SYS_USB_CONNECTED:
2137 /* We can safely go to USB mode if no recording 2137 /* We can safely go to USB mode if no recording
2138 is taking place */ 2138 is taking place */
@@ -2142,11 +2142,11 @@ static void mpeg_thread(void)
2142 function, to put the MAS in monitoring mode, 2142 function, to put the MAS in monitoring mode,
2143 to save power. */ 2143 to save power. */
2144 stop_recording(); 2144 stop_recording();
2145 2145
2146 /* Tell the USB thread that we are safe */ 2146 /* Tell the USB thread that we are safe */
2147 DEBUGF("mpeg_thread got SYS_USB_CONNECTED\n"); 2147 DEBUGF("mpeg_thread got SYS_USB_CONNECTED\n");
2148 usb_acknowledge(SYS_USB_CONNECTED_ACK); 2148 usb_acknowledge(SYS_USB_CONNECTED_ACK);
2149 2149
2150 /* Wait until the USB cable is extracted again */ 2150 /* Wait until the USB cable is extracted again */
2151 usb_wait_for_disconnect(&mpeg_queue); 2151 usb_wait_for_disconnect(&mpeg_queue);
2152 } 2152 }
@@ -2166,7 +2166,7 @@ struct mp3entry* audio_current_track(void)
2166 if(num_tracks_in_memory()) 2166 if(num_tracks_in_memory())
2167 { 2167 {
2168 struct mp3entry *id3 = &get_trackdata(0)->id3; 2168 struct mp3entry *id3 = &get_trackdata(0)->id3;
2169#endif 2169#endif
2170 if (!checked_for_cuesheet && curr_cuesheet && id3->cuesheet == NULL) 2170 if (!checked_for_cuesheet && curr_cuesheet && id3->cuesheet == NULL)
2171 { 2171 {
2172 checked_for_cuesheet = true; /* only check once per track */ 2172 checked_for_cuesheet = true; /* only check once per track */
@@ -2239,9 +2239,9 @@ static void init_recording(void)
2239 is_prerecording = false; 2239 is_prerecording = false;
2240 2240
2241 mpeg_stop_done = true; 2241 mpeg_stop_done = true;
2242 2242
2243 mas_reset(); 2243 mas_reset();
2244 2244
2245 /* Enable the audio CODEC and the DSP core, max analog voltage range */ 2245 /* Enable the audio CODEC and the DSP core, max analog voltage range */
2246 rc = mas_direct_config_write(MAS_CONTROL, 0x8c00); 2246 rc = mas_direct_config_write(MAS_CONTROL, 0x8c00);
2247 if(rc < 0) 2247 if(rc < 0)
@@ -2257,7 +2257,7 @@ static void init_recording(void)
2257 2257
2258 /* Perform black magic as described by the data sheet */ 2258 /* Perform black magic as described by the data sheet */
2259 if((mas_version_code & 0x0fff) == 0x0102) 2259 if((mas_version_code & 0x0fff) == 0x0102)
2260 { 2260 {
2261 DEBUGF("Performing MAS black magic for B2 version\n"); 2261 DEBUGF("Performing MAS black magic for B2 version\n");
2262 mas_writereg(0xa3, 0x98); 2262 mas_writereg(0xa3, 0x98);
2263 mas_writereg(0x94, 0xfffff); 2263 mas_writereg(0x94, 0xfffff);
@@ -2272,7 +2272,7 @@ static void init_recording(void)
2272 2272
2273 /* Copy left channel to right (mono mode) */ 2273 /* Copy left channel to right (mono mode) */
2274 mas_codec_writereg(8, 0x8000); 2274 mas_codec_writereg(8, 0x8000);
2275 2275
2276 /* ADC scale 0%, DSP scale 100% 2276 /* ADC scale 0%, DSP scale 100%
2277 We use the DSP output for monitoring, because it works with all 2277 We use the DSP output for monitoring, because it works with all
2278 sources including S/PDIF */ 2278 sources including S/PDIF */
@@ -2282,7 +2282,7 @@ static void init_recording(void)
2282 /* No mute */ 2282 /* No mute */
2283 shadow_soft_mute = 0; 2283 shadow_soft_mute = 0;
2284 mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); 2284 mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1);
2285 2285
2286#ifdef HAVE_SPDIF_OUT 2286#ifdef HAVE_SPDIF_OUT
2287 val = 0x09; /* Disable SDO and SDI, low impedance S/PDIF outputs */ 2287 val = 0x09; /* Disable SDO and SDI, low impedance S/PDIF outputs */
2288#else 2288#else
@@ -2308,7 +2308,7 @@ static void init_recording(void)
2308 DMA transfer has taken place. 2308 DMA transfer has taken place.
2309 Now let's wait for some data to be encoded. */ 2309 Now let's wait for some data to be encoded. */
2310 sleep(HZ/5); 2310 sleep(HZ/5);
2311 2311
2312 /* Now set it to Monitoring mode as default, saves power */ 2312 /* Now set it to Monitoring mode as default, saves power */
2313 shadow_io_control_main = 0x525; 2313 shadow_io_control_main = 0x525;
2314 mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); 2314 mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1);
@@ -2331,7 +2331,7 @@ static void init_recording(void)
2331void audio_record(const char *filename) 2331void audio_record(const char *filename)
2332{ 2332{
2333 mpeg_errno = 0; 2333 mpeg_errno = 0;
2334 2334
2335 strlcpy(recording_filename, filename, MAX_PATH); 2335 strlcpy(recording_filename, filename, MAX_PATH);
2336 2336
2337 queue_post(&mpeg_queue, MPEG_RECORD, 0); 2337 queue_post(&mpeg_queue, MPEG_RECORD, 0);
@@ -2412,13 +2412,13 @@ static void start_prerecording(void)
2412 unsigned long val; 2412 unsigned long val;
2413 2413
2414 DEBUGF("Starting prerecording\n"); 2414 DEBUGF("Starting prerecording\n");
2415 2415
2416 prerecord_index = 0; 2416 prerecord_index = 0;
2417 prerecord_count = 0; 2417 prerecord_count = 0;
2418 prerecord_timeout = current_tick + HZ; 2418 prerecord_timeout = current_tick + HZ;
2419 memset(prerecord_buffer, 0, sizeof(prerecord_buffer)); 2419 memset(prerecord_buffer, 0, sizeof(prerecord_buffer));
2420 reset_mp3_buffer(); 2420 reset_mp3_buffer();
2421 2421
2422 is_prerecording = true; 2422 is_prerecording = true;
2423 2423
2424 /* Stop monitoring and start the encoder */ 2424 /* Stop monitoring and start the encoder */
@@ -2431,7 +2431,7 @@ static void start_prerecording(void)
2431 { 2431 {
2432 mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); 2432 mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1);
2433 } while(val & 1); 2433 } while(val & 1);
2434 2434
2435 is_recording = true; 2435 is_recording = true;
2436 saving_status = NOT_SAVING; 2436 saving_status = NOT_SAVING;
2437 2437
@@ -2463,7 +2463,7 @@ static void start_recording(void)
2463 mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); 2463 mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1);
2464 } while(val & 1); 2464 } while(val & 1);
2465 } 2465 }
2466 2466
2467 is_recording = true; 2467 is_recording = true;
2468 saving_status = NOT_SAVING; 2468 saving_status = NOT_SAVING;
2469 paused = false; 2469 paused = false;
@@ -2493,7 +2493,7 @@ static void pause_recording(void)
2493static void resume_recording(void) 2493static void resume_recording(void)
2494{ 2494{
2495 paused = false; 2495 paused = false;
2496 2496
2497 /* Clear the pause bit */ 2497 /* Clear the pause bit */
2498 shadow_soft_mute &= ~2; 2498 shadow_soft_mute &= ~2;
2499 mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); 2499 mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1);
@@ -2515,7 +2515,7 @@ static void stop_recording(void)
2515 if(!paused) 2515 if(!paused)
2516 pause_recording(); 2516 pause_recording();
2517 sleep(HZ/5); 2517 sleep(HZ/5);
2518 2518
2519 demand_irq_enable(false); 2519 demand_irq_enable(false);
2520 2520
2521 is_recording = false; 2521 is_recording = false;
@@ -2529,7 +2529,7 @@ static void stop_recording(void)
2529 shadow_io_control_main |= (1 << 10); 2529 shadow_io_control_main |= (1 << 10);
2530 mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); 2530 mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1);
2531 DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); 2531 DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main);
2532 2532
2533 /* Wait until the DSP has accepted the settings */ 2533 /* Wait until the DSP has accepted the settings */
2534 do 2534 do
2535 { 2535 {
@@ -2565,7 +2565,7 @@ void audio_set_recording_options(struct audio_recording_options *options)
2565 mas_store_pllfreq(24576000); 2565 mas_store_pllfreq(24576000);
2566 else 2566 else
2567 mas_store_pllfreq(22579000); 2567 mas_store_pllfreq(22579000);
2568#endif 2568#endif
2569 2569
2570 shadow_soft_mute = options->rec_editable?4:0; 2570 shadow_soft_mute = options->rec_editable?4:0;
2571 mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute,1); 2571 mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute,1);
@@ -2647,7 +2647,7 @@ unsigned long audio_recorded_time(void)
2647{ 2647{
2648 if(is_prerecording) 2648 if(is_prerecording)
2649 return prerecord_count * HZ; 2649 return prerecord_count * HZ;
2650 2650
2651 if(is_recording) 2651 if(is_recording)
2652 { 2652 {
2653 if(paused) 2653 if(paused)
@@ -2663,7 +2663,7 @@ unsigned long audio_num_recorded_bytes(void)
2663{ 2663{
2664 int num_bytes; 2664 int num_bytes;
2665 int index; 2665 int index;
2666 2666
2667 if(is_recording) 2667 if(is_recording)
2668 { 2668 {
2669 if(is_prerecording) 2669 if(is_prerecording)
@@ -2671,11 +2671,11 @@ unsigned long audio_num_recorded_bytes(void)
2671 index = prerecord_index - prerecord_count; 2671 index = prerecord_index - prerecord_count;
2672 if(index < 0) 2672 if(index < 0)
2673 index += prerecording_max_seconds; 2673 index += prerecording_max_seconds;
2674 2674
2675 num_bytes = audiobuf_write - prerecord_buffer[index].mempos; 2675 num_bytes = audiobuf_write - prerecord_buffer[index].mempos;
2676 if(num_bytes < 0) 2676 if(num_bytes < 0)
2677 num_bytes += audiobuflen; 2677 num_bytes += audiobuflen;
2678 2678
2679 return num_bytes; 2679 return num_bytes;
2680 } 2680 }
2681 else 2681 else
@@ -2796,7 +2796,7 @@ void audio_play(long offset)
2796 int steps=0; 2796 int steps=0;
2797 2797
2798 is_playing = true; 2798 is_playing = true;
2799 2799
2800 do { 2800 do {
2801 trackname = playlist_peek(steps, name_buf, sizeof(name_buf)); 2801 trackname = playlist_peek(steps, name_buf, sizeof(name_buf));
2802 if (!trackname) 2802 if (!trackname)
@@ -2849,7 +2849,7 @@ void audio_stop(void)
2849/* dummy */ 2849/* dummy */
2850void audio_stop_recording(void) 2850void audio_stop_recording(void)
2851{ 2851{
2852 audio_stop(); 2852 audio_stop();
2853} 2853}
2854 2854
2855void audio_hard_stop(void) 2855void audio_hard_stop(void)
@@ -2966,7 +2966,7 @@ int audio_status(void)
2966 2966
2967 if(paused) 2967 if(paused)
2968 ret |= AUDIO_STATUS_PAUSE; 2968 ret |= AUDIO_STATUS_PAUSE;
2969 2969
2970#if (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR) 2970#if (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR)
2971 if(is_recording && !is_prerecording) 2971 if(is_recording && !is_prerecording)
2972 ret |= AUDIO_STATUS_RECORD; 2972 ret |= AUDIO_STATUS_RECORD;
@@ -2977,7 +2977,7 @@ int audio_status(void)
2977 2977
2978 if(mpeg_errno) 2978 if(mpeg_errno)
2979 ret |= AUDIO_STATUS_ERROR; 2979 ret |= AUDIO_STATUS_ERROR;
2980 2980
2981 return ret; 2981 return ret;
2982} 2982}
2983 2983