From fc43b9df823af80dd1c9cf7dc1b5de6703944043 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Tue, 16 Oct 2007 22:55:40 +0000 Subject: Mpegplayer: Assembler optimised IDCT for coldfire, based on FS #5995 by Karim Boucher. Put the IDCT block buffer in IRAM for better performance. The whole libmpeg2 decoder struct doesn't fit without throwing some libmad buffers out of IRAM, but then doesn't change performance significantly. Mpegplayer is quite usable now on X5; H300 is sort-of usable for widescreen. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15156 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/mpegplayer/idct.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'apps/plugins/mpegplayer/idct.c') diff --git a/apps/plugins/mpegplayer/idct.c b/apps/plugins/mpegplayer/idct.c index bf705c6a2f..bf7097401e 100644 --- a/apps/plugins/mpegplayer/idct.c +++ b/apps/plugins/mpegplayer/idct.c @@ -76,6 +76,14 @@ uint8_t mpeg2_clip[3840 * 2 + 256] IBSS_ATTR; #define CLIP(i) ((mpeg2_clip + 3840)[i]) #endif +#ifdef CPU_COLDFIRE +/* assembler functions */ +extern void mpeg2_idct_copy_coldfire(int16_t * block, uint8_t * dest, + const int stride); +extern void mpeg2_idct_add_coldfire(const int last, int16_t * block, + uint8_t * dest, const int stride); +#else /* !CPU_COLDFIE */ + #if 0 #define BUTTERFLY(t0,t1,W0,W1,d0,d1) \ do { \ @@ -258,6 +266,8 @@ static void mpeg2_idct_add_c (const int last, int16_t * block, } } +#endif /* !CPU_COLDFIRE */ + void mpeg2_idct_init (void) { extern uint8_t default_mpeg2_scan_norm[64]; @@ -266,8 +276,13 @@ void mpeg2_idct_init (void) extern uint8_t mpeg2_scan_alt[64]; int i, j; +#ifdef CPU_COLDFIRE + mpeg2_idct_copy = mpeg2_idct_copy_coldfire; + mpeg2_idct_add = mpeg2_idct_add_coldfire; +#else mpeg2_idct_copy = mpeg2_idct_copy_c; - mpeg2_idct_add = mpeg2_idct_add_c; + mpeg2_idct_add = mpeg2_idct_add_c; +#endif #if !defined(CPU_COLDFIRE) && !defined(CPU_ARM) for (i = -3840; i < 3840 + 256; i++) -- cgit v1.2.3