From adb6a00c59371e202edba06d19f950f422b688ee Mon Sep 17 00:00:00 2001 From: Rob Purchase Date: Tue, 15 Jul 2008 17:54:58 +0000 Subject: Update lcd-as-memframe.S to only rotate YUV data for portrait LCDs (and remove the D2's temporary C implementation). Enable MpegPlayer dithering option for D2. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18055 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/lcd-as-memframe.S | 46 +++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 7 deletions(-) (limited to 'firmware/target/arm/lcd-as-memframe.S') diff --git a/firmware/target/arm/lcd-as-memframe.S b/firmware/target/arm/lcd-as-memframe.S index 1cd27bdf28..519a8a1615 100644 --- a/firmware/target/arm/lcd-as-memframe.S +++ b/firmware/target/arm/lcd-as-memframe.S @@ -189,7 +189,10 @@ lcd_write_yuv420_lines: @ orr r1, r1, r7, lsl #5 @ r4 |= (g << 5) orr r1, r1, r11, lsl #11 @ r4 = b | (r << 11) -#if LCD_WIDTH < 256 + +#if LCD_WIDTH >= LCD_HEIGHT + strh r1, [r0] @ +#elif LCD_WIDTH < 256 strh r1, [r0], #LCD_WIDTH @ store pixel #else strh r1, [r0] @ @@ -222,7 +225,12 @@ lcd_write_yuv420_lines: @ orr r1, r1, r11, lsl #11 @ r1 = b | (r << 11) orr r1, r1, r7, lsl #5 @ r1 |= (g << 5) -#if LCD_WIDTH < 256 + +#if LCD_WIDTH >= LCD_HEIGHT + add r0, r0, #2*LCD_WIDTH @ + strh r1, [r0] @ store pixel + sub r0, r0, #2*LCD_WIDTH @ +#elif LCD_WIDTH < 256 strh r1, [r0, #-LCD_WIDTH-2] @ store pixel #else strh r1, [r0, #-2] @ @@ -256,7 +264,10 @@ lcd_write_yuv420_lines: @ orr r1, r1, r7, lsl #5 @ r1 = b | (g << 5) orr r1, r1, r11, lsl #11 @ r1 |= (r << 11) -#if LCD_WIDTH < 256 + +#if LCD_WIDTH >= LCD_HEIGHT + strh r1, [r0, #2] +#elif LCD_WIDTH < 256 strh r1, [r0, #LCD_WIDTH]! @ store pixel #else strh r1, [r0] @ @@ -287,11 +298,18 @@ lcd_write_yuv420_lines: @ orr r12, r1, r11, lsl #11 @ r12 = b | (r << 11) orr r12, r12, r7, lsl #5 @ r12 |= (g << 5) + +#if LCD_WIDTH >= LCD_HEIGHT + add r0, r0, #2*LCD_WIDTH + strh r12, [r0, #2] + sub r0, r0, #(2*LCD_WIDTH)-4 +#else strh r12, [r0, #-2] @ store pixel #if LCD_WIDTH < 256 add r0, r0, #2*LCD_WIDTH @ #else add r0, r0, #LCD_WIDTH @ +#endif #endif @ subs r2, r2, #2 @ subtract block from width @@ -423,7 +441,9 @@ lcd_write_yuv420_lines_odither: orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | orr r1, r11, r1, lsr #10 @ (b >> 10) @ -#if LCD_WIDTH < 256 +#if LCD_WIDTH >= LCD_HEIGHT + strh r1, [r0] @ +#elif LCD_WIDTH < 256 strh r1, [r0], #LCD_WIDTH @ store pixel #else strh r1, [r0] @ @@ -473,7 +493,11 @@ lcd_write_yuv420_lines_odither: orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | orr r1, r11, r1, lsr #10 @ (b >> 10) @ -#if LCD_WIDTH < 256 +#if LCD_WIDTH >= LCD_HEIGHT + add r0, r0, #2*LCD_WIDTH @ + strh r1, [r0] @ store pixel + sub r0, r0, #2*LCD_WIDTH @ +#elif LCD_WIDTH < 256 strh r1, [r0, #-LCD_WIDTH-2] @ store pixel #else strh r1, [r0, #-2] @ store pixel @@ -526,12 +550,14 @@ lcd_write_yuv420_lines_odither: orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | orr r1, r11, r1, lsr #10 @ (b >> 10) @ -#if LCD_WIDTH < 256 +#if LCD_WIDTH >= LCD_HEIGHT + strh r1, [r0, #2] +#elif LCD_WIDTH < 256 strh r1, [r0, #LCD_WIDTH]! @ store pixel #else strh r1, [r0] @ #endif - @ + sub r7, r12, #16 @ r7 = Y = (Y' - 16)*149 add r12, r7, r7, asl #2 @ add r12, r12, r12, asl #4 @ @@ -574,11 +600,17 @@ lcd_write_yuv420_lines_odither: orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) | orr r1, r11, r1, lsr #10 @ (b >> 10) @ +#if LCD_WIDTH >= LCD_HEIGHT + add r0, r0, #2*LCD_WIDTH + strh r1, [r0, #2] @ store pixel + sub r0, r0, #(2*LCD_WIDTH-4) +#else strh r1, [r0, #-2] @ store pixel #if LCD_WIDTH < 256 add r0, r0, #2*LCD_WIDTH @ #else add r0, r0, #LCD_WIDTH @ +#endif #endif @ subs r2, r2, #2 @ subtract block from width -- cgit v1.2.3