summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/video.c46
1 files changed, 8 insertions, 38 deletions
diff --git a/apps/plugins/video.c b/apps/plugins/video.c
index c2117adab3..c7e893fccd 100644
--- a/apps/plugins/video.c
+++ b/apps/plugins/video.c
@@ -34,8 +34,6 @@
34 34
35/****************** constants ******************/ 35/****************** constants ******************/
36 36
37#define IMIA4 (*((volatile unsigned long*)0x09000180)) // timer 4
38
39#define INT_MAX ((int)(~(unsigned)0 >> 1)) 37#define INT_MAX ((int)(~(unsigned)0 >> 1))
40#define INT_MIN (-INT_MAX-1) 38#define INT_MIN (-INT_MAX-1)
41 39
@@ -51,8 +49,7 @@
51 49
52 50
53/****************** prototypes ******************/ 51/****************** prototypes ******************/
54void timer_set(unsigned period); // setup ISR and timer registers 52void timer4_isr(void); // IMIA4 ISR
55void timer4_isr(void) __attribute__((interrupt_handler)); // IMIA4 ISR
56int check_button(void); // determine next relative frame 53int check_button(void); // determine next relative frame
57 54
58 55
@@ -63,7 +60,6 @@ int check_button(void); // determine next relative frame
63#define HEADER_MAGIC 0x52564668 // "RVFh" at file start 60#define HEADER_MAGIC 0x52564668 // "RVFh" at file start
64#define AUDIO_MAGIC 0x41756446 // "AudF" for each audio block 61#define AUDIO_MAGIC 0x41756446 // "AudF" for each audio block
65#define FILEVERSION 100 // 1.00 62#define FILEVERSION 100 // 1.00
66#define CLOCK 11059200 // SH CPU clock
67 63
68// format type definitions 64// format type definitions
69#define VIDEOFORMAT_NO_VIDEO 0 65#define VIDEOFORMAT_NO_VIDEO 0
@@ -298,35 +294,8 @@ void SyncVideo(void)
298} 294}
299 295
300 296
301// setup ISR and timer registers
302void timer_set(unsigned period)
303{
304 if (period)
305 {
306 and_b(~0x10, &TSTR); // Stop the timer 4
307 and_b(~0x10, &TSNC); // No synchronization
308 and_b(~0x10, &TMDR); // Operate normally
309
310 IMIA4 = (unsigned long)timer4_isr; // install ISR
311
312 TSR4 &= ~0x01;
313 TIER4 = 0xF9; // Enable GRA match interrupt
314
315 GRA4 = (unsigned short)(period/4 - 1);
316 TCR4 = 0x22; // clear at GRA match, sysclock/4
317 IPRD = (IPRD & 0xFF0F) | 0x0010; // interrupt priority 1 (lowest)
318 or_b(0x10, &TSTR); // start timer 4
319 }
320 else
321 {
322 and_b(~0x10, &TSTR); // stop the timer 4
323 IPRD = (IPRD & 0xFF0F); // disable interrupt
324 }
325}
326
327
328// timer interrupt handler to display a frame 297// timer interrupt handler to display a frame
329void timer4_isr(void) // IMIA4 298void timer4_isr(void)
330{ 299{
331 int available; 300 int available;
332 tAudioFrameHeader* pAudioBuf; 301 tAudioFrameHeader* pAudioBuf;
@@ -379,7 +348,7 @@ void timer4_isr(void) // IMIA4
379 else 348 else
380 { 349 {
381 gPlay.bVideoUnderrun = true; 350 gPlay.bVideoUnderrun = true;
382 timer_set(0); // disable ourselves 351 rb->plugin_unregister_timer(); // disable ourselves
383 return; // no data available 352 return; // no data available
384 } 353 }
385 } 354 }
@@ -480,7 +449,7 @@ int SeekTo(int fd, int nPos)
480 if (gPlay.bHasAudio) 449 if (gPlay.bHasAudio)
481 rb->mp3_play_stop(); // stop audio ISR 450 rb->mp3_play_stop(); // stop audio ISR
482 if (gPlay.bHasVideo) 451 if (gPlay.bHasVideo)
483 timer_set(0); // stop the timer 4 452 rb->plugin_unregister_timer(); // stop the timer
484 453
485 rb->lseek(fd, nPos, SEEK_SET); 454 rb->lseek(fd, nPos, SEEK_SET);
486 455
@@ -526,7 +495,8 @@ int SeekTo(int fd, int nPos)
526 if (gPlay.bHasVideo) 495 if (gPlay.bHasVideo)
527 { 496 {
528 gPlay.bVideoUnderrun = false; 497 gPlay.bVideoUnderrun = false;
529 timer_set(gFileHdr.video_frametime); // start display interrupt 498 // start display interrupt
499 rb->plugin_register_timer(gFileHdr.video_frametime, 1, timer4_isr);
530 } 500 }
531 501
532 return 0; 502 return 0;
@@ -805,7 +775,7 @@ int main(char* filename)
805 gFileHdr.video_format = VIDEOFORMAT_RAW; 775 gFileHdr.video_format = VIDEOFORMAT_RAW;
806 gFileHdr.video_width = LCD_WIDTH; 776 gFileHdr.video_width = LCD_WIDTH;
807 gFileHdr.video_height = LCD_HEIGHT; 777 gFileHdr.video_height = LCD_HEIGHT;
808 gFileHdr.video_frametime = CLOCK / FPS; 778 gFileHdr.video_frametime = FREQ / FPS;
809 gFileHdr.bps_peak = gFileHdr.bps_average = LCD_WIDTH * LCD_HEIGHT * FPS; 779 gFileHdr.bps_peak = gFileHdr.bps_average = LCD_WIDTH * LCD_HEIGHT * FPS;
810 } 780 }
811 781
@@ -855,7 +825,7 @@ int main(char* filename)
855 rb->close(fd); // close the file 825 rb->close(fd); // close the file
856 826
857 if (gPlay.bHasVideo) 827 if (gPlay.bHasVideo)
858 timer_set(0); // stop video ISR, now I can use the display again 828 rb->plugin_unregister_timer(); // stop video ISR, now I can use the display again
859 829
860 if (gPlay.bHasAudio) 830 if (gPlay.bHasAudio)
861 rb->mp3_play_stop(); // stop audio ISR 831 rb->mp3_play_stop(); // stop audio ISR