summaryrefslogtreecommitdiff
path: root/firmware/target/hosted
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2012-02-22 21:18:05 +1100
committerJonathan Gordon <rockbox@jdgordon.info>2012-02-28 11:44:59 +1100
commitb37e6bc8c119289aca8740dd5e3b60d72f9d6b40 (patch)
tree7ee9d491811c950943f0fc068d2e2b460ff05c6d /firmware/target/hosted
parent15c69b8bafc3e89e1a825b5bbefef4a97f0001b1 (diff)
downloadrockbox-b37e6bc8c119289aca8740dd5e3b60d72f9d6b40.tar.gz
rockbox-b37e6bc8c119289aca8740dd5e3b60d72f9d6b40.zip
lcd drivers: Convert lcd_[remote_]framebuffer to a pointer
Change all lcd drivers to using a pointer to the static framebuffer instead of directly accessing the static array. This will let us later do fun things like dynamic framebuffer sizes (RaaA) or ability to use different buffers for different layers (dynamic skin backdrops!) Change-Id: I0a4d58a9d7b55e6c932131b929e5d4c9f9414b06
Diffstat (limited to 'firmware/target/hosted')
-rw-r--r--firmware/target/hosted/android/lcd-android.c6
-rw-r--r--firmware/target/hosted/sdl/lcd-bitmap.c18
-rw-r--r--firmware/target/hosted/sdl/lcd-remote-bitmap.c4
-rw-r--r--firmware/target/hosted/ypr0/lcd-ypr0.c4
4 files changed, 14 insertions, 18 deletions
diff --git a/firmware/target/hosted/android/lcd-android.c b/firmware/target/hosted/android/lcd-android.c
index abde72155d..c9a3fd6edf 100644
--- a/firmware/target/hosted/android/lcd-android.c
+++ b/firmware/target/hosted/android/lcd-android.c
@@ -75,7 +75,7 @@ void connect_with_java(JNIEnv* env, jobject fb_instance)
75 75
76 /* Create native_buffer */ 76 /* Create native_buffer */
77 jobject buffer = (*env)->NewDirectByteBuffer(env, lcd_framebuffer, 77 jobject buffer = (*env)->NewDirectByteBuffer(env, lcd_framebuffer,
78 (jlong) sizeof(lcd_framebuffer)); 78 (jlong) FRAMEBUFFER_SIZE);
79 79
80 /* we need to setup parts for the java object every time */ 80 /* we need to setup parts for the java object every time */
81 (*env)->CallVoidMethod(env, fb_instance, java_lcd_init, 81 (*env)->CallVoidMethod(env, fb_instance, java_lcd_init,
@@ -206,10 +206,10 @@ void lcd_blit_yuv(unsigned char * const src[3],
206 linecounter = height >> 1; 206 linecounter = height >> 1;
207 207
208#if LCD_WIDTH >= LCD_HEIGHT 208#if LCD_WIDTH >= LCD_HEIGHT
209 dst = &lcd_framebuffer[y][x]; 209 dst = FBADDR(x,y);
210 row_end = dst + width; 210 row_end = dst + width;
211#else 211#else
212 dst = &lcd_framebuffer[x][LCD_WIDTH - y - 1]; 212 dst = FBADDR(LCD_WIDTH - y - 1,x);
213 row_end = dst + LCD_WIDTH * width; 213 row_end = dst + LCD_WIDTH * width;
214#endif 214#endif
215 215
diff --git a/firmware/target/hosted/sdl/lcd-bitmap.c b/firmware/target/hosted/sdl/lcd-bitmap.c
index 4ee0bbef5c..7e9bc297ef 100644
--- a/firmware/target/hosted/sdl/lcd-bitmap.c
+++ b/firmware/target/hosted/sdl/lcd-bitmap.c
@@ -92,29 +92,25 @@ static unsigned long get_lcd_pixel(int x, int y)
92{ 92{
93#if LCD_DEPTH == 1 93#if LCD_DEPTH == 1
94#ifdef HAVE_NEGATIVE_LCD 94#ifdef HAVE_NEGATIVE_LCD
95 return (lcd_framebuffer[y/8][x] & (1 << (y & 7))) ? (NUM_SHADES-1) : 0; 95 return (*FBADDR(x, y/8) & (1 << (y & 7))) ? (NUM_SHADES-1) : 0;
96#else 96#else
97 return (lcd_framebuffer[y/8][x] & (1 << (y & 7))) ? 0 : (NUM_SHADES-1); 97 return (*FBADDR(x, y/8) & (1 << (y & 7))) ? 0 : (NUM_SHADES-1);
98#endif 98#endif
99#elif LCD_DEPTH == 2 99#elif LCD_DEPTH == 2
100#if LCD_PIXELFORMAT == HORIZONTAL_PACKING 100#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
101 return colorindex[(lcd_framebuffer[y][x/4] >> (2 * (~x & 3))) & 3]; 101 return colorindex[(*FBADDR(x/4, y) >> (2 * (~x & 3))) & 3];
102#elif LCD_PIXELFORMAT == VERTICAL_PACKING 102#elif LCD_PIXELFORMAT == VERTICAL_PACKING
103 return colorindex[(lcd_framebuffer[y/4][x] >> (2 * (y & 3))) & 3]; 103 return colorindex[(*FBADDR(x, y/4) >> (2 * (y & 3))) & 3];
104#elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED 104#elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED
105 unsigned bits = (lcd_framebuffer[y/8][x] >> (y & 7)) & 0x0101; 105 unsigned bits = (*FBADDR(x, y/8) >> (y & 7)) & 0x0101;
106 return colorindex[(bits | (bits >> 7)) & 3]; 106 return colorindex[(bits | (bits >> 7)) & 3];
107#endif 107#endif
108#elif LCD_DEPTH == 16 108#elif LCD_DEPTH == 16
109#if LCD_PIXELFORMAT == RGB565SWAPPED 109#if LCD_PIXELFORMAT == RGB565SWAPPED
110 unsigned bits = lcd_framebuffer[y][x]; 110 unsigned bits = *FBADDR(x, y);
111 return (bits >> 8) | (bits << 8); 111 return (bits >> 8) | (bits << 8);
112#else 112#else
113#if defined(LCD_STRIDEFORMAT) && LCD_STRIDEFORMAT == VERTICAL_STRIDE 113 return *FBADDR(x, y);
114 return *(&lcd_framebuffer[0][0]+LCD_HEIGHT*x+y);
115#else
116 return lcd_framebuffer[y][x];
117#endif
118#endif 114#endif
119#endif 115#endif
120} 116}
diff --git a/firmware/target/hosted/sdl/lcd-remote-bitmap.c b/firmware/target/hosted/sdl/lcd-remote-bitmap.c
index 86d45ef446..5f08b4440b 100644
--- a/firmware/target/hosted/sdl/lcd-remote-bitmap.c
+++ b/firmware/target/hosted/sdl/lcd-remote-bitmap.c
@@ -50,10 +50,10 @@ static const unsigned char colorindex[4] = {128, 85, 43, 0};
50static unsigned long get_lcd_remote_pixel(int x, int y) 50static unsigned long get_lcd_remote_pixel(int x, int y)
51{ 51{
52#if LCD_REMOTE_DEPTH == 1 52#if LCD_REMOTE_DEPTH == 1
53 return lcd_remote_framebuffer[y/8][x] & (1 << (y & 7)) ? 0 : (NUM_SHADES-1); 53 return *FBREMOTEADDR(x, y/8) & (1 << (y & 7)) ? 0 : (NUM_SHADES-1);
54#elif LCD_REMOTE_DEPTH == 2 54#elif LCD_REMOTE_DEPTH == 2
55#if LCD_REMOTE_PIXELFORMAT == VERTICAL_INTERLEAVED 55#if LCD_REMOTE_PIXELFORMAT == VERTICAL_INTERLEAVED
56 unsigned bits = (lcd_remote_framebuffer[y/8][x] >> (y & 7)) & 0x0101; 56 unsigned bits = (*FBREMOTEADDR(x, y/8) >> (y & 7)) & 0x0101;
57 return colorindex[(bits | (bits >> 7)) & 3]; 57 return colorindex[(bits | (bits >> 7)) & 3];
58#endif 58#endif
59#endif 59#endif
diff --git a/firmware/target/hosted/ypr0/lcd-ypr0.c b/firmware/target/hosted/ypr0/lcd-ypr0.c
index 083a9fbe28..40528c298a 100644
--- a/firmware/target/hosted/ypr0/lcd-ypr0.c
+++ b/firmware/target/hosted/ypr0/lcd-ypr0.c
@@ -39,7 +39,7 @@ fb_data *dev_fb = 0;
39void lcd_shutdown(void) 39void lcd_shutdown(void)
40{ 40{
41 printf("FB closed."); 41 printf("FB closed.");
42 munmap(dev_fb, sizeof(lcd_framebuffer)); 42 munmap(dev_fb, FRAMEBUFFER_SIZE);
43 close(dev_fd); 43 close(dev_fd);
44} 44}
45 45
@@ -80,7 +80,7 @@ void lcd_init_device(void)
80 80
81 /* Figure out the size of the screen in bytes */ 81 /* Figure out the size of the screen in bytes */
82 screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; 82 screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
83 if (screensize != sizeof(lcd_framebuffer)) 83 if (screensize != FRAMEBUFFER_SIZE)
84 { 84 {
85 exit(4); 85 exit(4);
86 perror("Display and framebuffer mismatch!\n"); 86 perror("Display and framebuffer mismatch!\n");