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.zip
rockbox-d703389780f5c7a627bff3f6daf6d72e4547a9db.tar.gz
rockbox-d703389780f5c7a627bff3f6daf6d72e4547a9db.tar.bz2
rockbox-d703389780f5c7a627bff3f6daf6d72e4547a9db.tar.xz
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 3226e25..dfd2785 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -473,6 +473,7 @@ static int lowest_watermark_level; /* Debug value to observe the buffer
bool recording; /* We are recording */
static bool is_recording; /* We are (attempting to) record */
bool stop_pending;
+unsigned long record_start_frame; /* Frame number where recording started */
#endif
static int mpeg_file;
@@ -646,7 +647,7 @@ static void dma_tick(void)
{
int i;
int num_bytes = 0;
- if(recording && (PBDR & 0x4000))
+ if(is_recording && (PBDR & 0x4000))
{
#ifdef DEBUG
timing_info[timing_info_index++] = current_tick;
@@ -1589,8 +1590,6 @@ static void mpeg_thread(void)
}
else
{
- int i;
-
yield();
if(!queue_empty(&mpeg_queue))
{
@@ -1625,13 +1624,19 @@ static void mpeg_thread(void)
if(mpeg_file >= 0)
close(mpeg_file);
- for(i = 0;i < 512;i++)
+#if 0
{
- DEBUGF("%d - %d us (%d bytes)\n", timing_info[i*2],
- (timing_info[i*2+1] & 0xffff) *
- 10000 / 13824,
- timing_info[i*2+1] >> 16);
+ int i;
+ for(i = 0;i < 512;i++)
+ {
+ DEBUGF("%d - %d us (%d bytes)\n",
+ timing_info[i*2],
+ (timing_info[i*2+1] & 0xffff) *
+ 10000 / 13824,
+ timing_info[i*2+1] >> 16);
+ }
}
+#endif
break;
case MPEG_SAVE_DATA:
@@ -1862,6 +1867,9 @@ static void init_playback(void)
void mpeg_record(char *filename)
{
+ /* Read the current frame */
+ mas_readmem(MAS_BANK_D0, 0xfd0, &record_start_frame, 1);
+
is_recording = true;
queue_post(&mpeg_queue, MPEG_RECORD, (void*)filename);
}
@@ -1872,6 +1880,22 @@ static void start_recording(void)
stop_pending = false;
}
+unsigned long mpeg_num_recorded_frames(void)
+{
+ unsigned long val;
+
+ if(is_recording)
+ {
+ /* Read the current frame */
+ mas_readmem(MAS_BANK_D0, 0xfd0, &val, 1);
+
+ return val - record_start_frame;
+ }
+ else
+ {
+ return 0;
+ }
+}
#endif
void mpeg_play(int offset)