summaryrefslogtreecommitdiff
path: root/firmware/mpeg.c
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2002-11-19 21:07:44 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2002-11-19 21:07:44 +0000
commitd703389780f5c7a627bff3f6daf6d72e4547a9db (patch)
treefc7920b35b0219827c01d341eeea8d58244e0962 /firmware/mpeg.c
parent11055c04712a83000064888b253681e0d928b701 (diff)
downloadrockbox-d703389780f5c7a627bff3f6daf6d72e4547a9db.tar.gz
rockbox-d703389780f5c7a627bff3f6daf6d72e4547a9db.zip
More recording stability, plus some feedback
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2860 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r--firmware/mpeg.c40
1 files changed, 32 insertions, 8 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index 3226e250ac..dfd2785356 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -473,6 +473,7 @@ static int lowest_watermark_level; /* Debug value to observe the buffer
473bool recording; /* We are recording */ 473bool recording; /* We are recording */
474static bool is_recording; /* We are (attempting to) record */ 474static bool is_recording; /* We are (attempting to) record */
475bool stop_pending; 475bool stop_pending;
476unsigned long record_start_frame; /* Frame number where recording started */
476#endif 477#endif
477 478
478static int mpeg_file; 479static int mpeg_file;
@@ -646,7 +647,7 @@ static void dma_tick(void)
646 { 647 {
647 int i; 648 int i;
648 int num_bytes = 0; 649 int num_bytes = 0;
649 if(recording && (PBDR & 0x4000)) 650 if(is_recording && (PBDR & 0x4000))
650 { 651 {
651#ifdef DEBUG 652#ifdef DEBUG
652 timing_info[timing_info_index++] = current_tick; 653 timing_info[timing_info_index++] = current_tick;
@@ -1589,8 +1590,6 @@ static void mpeg_thread(void)
1589 } 1590 }
1590 else 1591 else
1591 { 1592 {
1592 int i;
1593
1594 yield(); 1593 yield();
1595 if(!queue_empty(&mpeg_queue)) 1594 if(!queue_empty(&mpeg_queue))
1596 { 1595 {
@@ -1625,13 +1624,19 @@ static void mpeg_thread(void)
1625 if(mpeg_file >= 0) 1624 if(mpeg_file >= 0)
1626 close(mpeg_file); 1625 close(mpeg_file);
1627 1626
1628 for(i = 0;i < 512;i++) 1627#if 0
1629 { 1628 {
1630 DEBUGF("%d - %d us (%d bytes)\n", timing_info[i*2], 1629 int i;
1631 (timing_info[i*2+1] & 0xffff) * 1630 for(i = 0;i < 512;i++)
1632 10000 / 13824, 1631 {
1633 timing_info[i*2+1] >> 16); 1632 DEBUGF("%d - %d us (%d bytes)\n",
1633 timing_info[i*2],
1634 (timing_info[i*2+1] & 0xffff) *
1635 10000 / 13824,
1636 timing_info[i*2+1] >> 16);
1637 }
1634 } 1638 }
1639#endif
1635 break; 1640 break;
1636 1641
1637 case MPEG_SAVE_DATA: 1642 case MPEG_SAVE_DATA:
@@ -1862,6 +1867,9 @@ static void init_playback(void)
1862 1867
1863void mpeg_record(char *filename) 1868void mpeg_record(char *filename)
1864{ 1869{
1870 /* Read the current frame */
1871 mas_readmem(MAS_BANK_D0, 0xfd0, &record_start_frame, 1);
1872
1865 is_recording = true; 1873 is_recording = true;
1866 queue_post(&mpeg_queue, MPEG_RECORD, (void*)filename); 1874 queue_post(&mpeg_queue, MPEG_RECORD, (void*)filename);
1867} 1875}
@@ -1872,6 +1880,22 @@ static void start_recording(void)
1872 stop_pending = false; 1880 stop_pending = false;
1873} 1881}
1874 1882
1883unsigned long mpeg_num_recorded_frames(void)
1884{
1885 unsigned long val;
1886
1887 if(is_recording)
1888 {
1889 /* Read the current frame */
1890 mas_readmem(MAS_BANK_D0, 0xfd0, &val, 1);
1891
1892 return val - record_start_frame;
1893 }
1894 else
1895 {
1896 return 0;
1897 }
1898}
1875#endif 1899#endif
1876 1900
1877void mpeg_play(int offset) 1901void mpeg_play(int offset)