diff options
author | Thom Johansen <thomj@rockbox.org> | 2007-10-16 19:47:15 +0000 |
---|---|---|
committer | Thom Johansen <thomj@rockbox.org> | 2007-10-16 19:47:15 +0000 |
commit | b5f779b2efbefae67c876727b297575e03d5c8a2 (patch) | |
tree | 5473f8d869c11812af6d2d24b3ac56909ca99bb1 /firmware/target/arm/ipod/video/lcd-video.c | |
parent | 3688e94083cb4b94728faa9cc242492a354d8394 (diff) | |
download | rockbox-b5f779b2efbefae67c876727b297575e03d5c8a2.tar.gz rockbox-b5f779b2efbefae67c876727b297575e03d5c8a2.zip |
Parts of FS #7951 by Andree Buschmann. Faster YUV BLIT (means faster mpegplayer) for Ipods Nano and Video while we're waiting for the assembler ones.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15147 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/ipod/video/lcd-video.c')
-rw-r--r-- | firmware/target/arm/ipod/video/lcd-video.c | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/firmware/target/arm/ipod/video/lcd-video.c b/firmware/target/arm/ipod/video/lcd-video.c index 27f31c3511..7ec453760e 100644 --- a/firmware/target/arm/ipod/video/lcd-video.c +++ b/firmware/target/arm/ipod/video/lcd-video.c | |||
@@ -135,14 +135,16 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
135 | } | 135 | } |
136 | } | 136 | } |
137 | 137 | ||
138 | if (finishup_needed) { | 138 | if (finishup_needed) |
139 | unsigned int data; | 139 | { |
140 | /* Bottom-half of original lcd_bcm_finishup() function */ | 140 | /* Bottom-half of original lcd_bcm_finishup() function */ |
141 | do { | 141 | unsigned int data = lcd_bcm_read32(0x1F8); |
142 | /* This function takes about 14ms to execute - so we yield() */ | 142 | while (data == 0xFFFA0005 || data == 0xFFFF) |
143 | { | ||
144 | /* This loop can wait for up to 14ms - so we yield() */ | ||
143 | yield(); | 145 | yield(); |
144 | data = lcd_bcm_read32(0x1F8); | 146 | data = lcd_bcm_read32(0x1F8); |
145 | } while (data == 0xFFFA0005 || data == 0xFFFF); | 147 | } |
146 | } | 148 | } |
147 | 149 | ||
148 | lcd_bcm_read32(0x1FC); | 150 | lcd_bcm_read32(0x1FC); |
@@ -236,15 +238,19 @@ void lcd_update(void) | |||
236 | /* Performance function to blit a YUV bitmap directly to the LCD */ | 238 | /* Performance function to blit a YUV bitmap directly to the LCD */ |
237 | void lcd_yuv_blit(unsigned char * const src[3], | 239 | void lcd_yuv_blit(unsigned char * const src[3], |
238 | int src_x, int src_y, int stride, | 240 | int src_x, int src_y, int stride, |
241 | int x, int y, int width, int height) ICODE_ATTR; | ||
242 | void lcd_yuv_blit(unsigned char * const src[3], | ||
243 | int src_x, int src_y, int stride, | ||
239 | int x, int y, int width, int height) | 244 | int x, int y, int width, int height) |
240 | { | 245 | { |
241 | width = (width + 1) & ~1; | 246 | width = (width + 1) & ~1; |
242 | 247 | ||
243 | if (finishup_needed) { | 248 | if (finishup_needed) |
244 | unsigned int data; | 249 | { |
245 | /* Bottom-half of original lcd_bcm_finishup() function */ | 250 | /* Bottom-half of original lcd_bcm_finishup() function */ |
246 | data = lcd_bcm_read32(0x1F8); | 251 | unsigned int data = lcd_bcm_read32(0x1F8); |
247 | while (data == 0xFFFA0005 || data == 0xFFFF) { | 252 | while (data == 0xFFFA0005 || data == 0xFFFF) |
253 | { | ||
248 | /* This loop can wait for up to 14ms - so we yield() */ | 254 | /* This loop can wait for up to 14ms - so we yield() */ |
249 | yield(); | 255 | yield(); |
250 | data = lcd_bcm_read32(0x1F8); | 256 | data = lcd_bcm_read32(0x1F8); |
@@ -321,28 +327,22 @@ void lcd_yuv_blit(unsigned char * const src[3], | |||
321 | We first check for red and blue components (5bit range). */ | 327 | We first check for red and blue components (5bit range). */ |
322 | if ((red1 | blue1 | red2 | blue2) & ~MAX_5BIT) | 328 | if ((red1 | blue1 | red2 | blue2) & ~MAX_5BIT) |
323 | { | 329 | { |
324 | if ((red1 | blue1) & ~MAX_5BIT) | 330 | if (red1 & ~MAX_5BIT) |
325 | { | 331 | red1 = (red1 >> 31) ? 0 : MAX_5BIT; |
326 | if (red1 & ~MAX_5BIT) | 332 | if (blue1 & ~MAX_5BIT) |
327 | red1 = (red1 >> 31) ? 0 : MAX_5BIT; | 333 | blue1 = (blue1 >> 31) ? 0 : MAX_5BIT; |
328 | if (blue1 & ~MAX_5BIT) | 334 | if (red2 & ~MAX_5BIT) |
329 | blue1 = (blue1 >> 31) ? 0 : MAX_5BIT; | 335 | red2 = (red2 >> 31) ? 0 : MAX_5BIT; |
330 | } | 336 | if (blue2 & ~MAX_5BIT) |
331 | if ((red2 | blue2) & ~MAX_5BIT) | 337 | blue2 = (blue2 >> 31) ? 0 : MAX_5BIT; |
332 | { | ||
333 | if (red2 & ~MAX_5BIT) | ||
334 | red2 = (red2 >> 31) ? 0 : MAX_5BIT; | ||
335 | if (blue2 & ~MAX_5BIT) | ||
336 | blue2 = (blue2 >> 31) ? 0 : MAX_5BIT; | ||
337 | } | ||
338 | } | 338 | } |
339 | /* We second check for green component (6bit range) */ | 339 | /* We second check for green component (6bit range) */ |
340 | if ((green1 | green2) & ~MAX_6BIT) | 340 | if ((green1 | green2) & ~MAX_6BIT) |
341 | { | 341 | { |
342 | if (green1 & ~MAX_6BIT) | 342 | if (green1 & ~MAX_6BIT) |
343 | green1 = (green1 >> 31) ? 0 : MAX_6BIT; | 343 | green1 = (green1 >> 31) ? 0 : MAX_6BIT; |
344 | if (green2 & ~MAX_6BIT) | 344 | if (green2 & ~MAX_6BIT) |
345 | green2 = (green2 >> 31) ? 0 : MAX_6BIT; | 345 | green2 = (green2 >> 31) ? 0 : MAX_6BIT; |
346 | } | 346 | } |
347 | 347 | ||
348 | /* pixel1 */ | 348 | /* pixel1 */ |