summaryrefslogtreecommitdiff
path: root/firmware/target/arm/ipod/video/lcd-video.c
diff options
context:
space:
mode:
authorThom Johansen <thomj@rockbox.org>2007-10-16 19:47:15 +0000
committerThom Johansen <thomj@rockbox.org>2007-10-16 19:47:15 +0000
commitb5f779b2efbefae67c876727b297575e03d5c8a2 (patch)
tree5473f8d869c11812af6d2d24b3ac56909ca99bb1 /firmware/target/arm/ipod/video/lcd-video.c
parent3688e94083cb4b94728faa9cc242492a354d8394 (diff)
downloadrockbox-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.c54
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 */
237void lcd_yuv_blit(unsigned char * const src[3], 239void 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;
242void 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 */