diff options
author | Jens Arnold <amiconn@rockbox.org> | 2007-10-16 22:55:40 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2007-10-16 22:55:40 +0000 |
commit | fc43b9df823af80dd1c9cf7dc1b5de6703944043 (patch) | |
tree | bb17b985d00d13bc6fce61823acbe50ed1e003b0 /apps/plugins/mpegplayer/decode.c | |
parent | 84f5c5c3e3590cb993f4cf2a7eba5979e3bc825b (diff) | |
download | rockbox-fc43b9df823af80dd1c9cf7dc1b5de6703944043.tar.gz rockbox-fc43b9df823af80dd1c9cf7dc1b5de6703944043.zip |
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
Diffstat (limited to 'apps/plugins/mpegplayer/decode.c')
-rw-r--r-- | apps/plugins/mpegplayer/decode.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/apps/plugins/mpegplayer/decode.c b/apps/plugins/mpegplayer/decode.c index 299abc9663..ca3d29a952 100644 --- a/apps/plugins/mpegplayer/decode.c +++ b/apps/plugins/mpegplayer/decode.c | |||
@@ -401,6 +401,12 @@ void mpeg2_reset (mpeg2dec_t * mpeg2dec, int full_reset) | |||
401 | 401 | ||
402 | } | 402 | } |
403 | 403 | ||
404 | #ifdef CPU_COLDFIRE | ||
405 | /* twice as large as on other targets because coldfire uses | ||
406 | * a secondary, transposed buffer for optimisation */ | ||
407 | static int16_t static_dct_block[128] IBSS_ATTR ATTR_ALIGN(16); | ||
408 | #endif | ||
409 | |||
404 | mpeg2dec_t * mpeg2_init (void) | 410 | mpeg2dec_t * mpeg2_init (void) |
405 | { | 411 | { |
406 | mpeg2dec_t * mpeg2dec; | 412 | mpeg2dec_t * mpeg2dec; |
@@ -410,7 +416,11 @@ mpeg2dec_t * mpeg2_init (void) | |||
410 | mpeg2dec = (mpeg2dec_t *) mpeg2_malloc (sizeof (mpeg2dec_t), | 416 | mpeg2dec = (mpeg2dec_t *) mpeg2_malloc (sizeof (mpeg2dec_t), |
411 | MPEG2_ALLOC_MPEG2DEC); | 417 | MPEG2_ALLOC_MPEG2DEC); |
412 | if (mpeg2dec == NULL) | 418 | if (mpeg2dec == NULL) |
413 | return NULL; | 419 | return NULL; |
420 | |||
421 | #ifdef CPU_COLDFIRE | ||
422 | mpeg2dec->decoder.DCTblock = static_dct_block; | ||
423 | #endif | ||
414 | 424 | ||
415 | rb->memset (mpeg2dec->decoder.DCTblock, 0, 64 * sizeof (int16_t)); | 425 | rb->memset (mpeg2dec->decoder.DCTblock, 0, 64 * sizeof (int16_t)); |
416 | rb->memset (mpeg2dec->quantizer_matrix, 0, 4 * 64 * sizeof (uint8_t)); | 426 | rb->memset (mpeg2dec->quantizer_matrix, 0, 4 * 64 * sizeof (uint8_t)); |