diff options
author | Karl Kurbjun <kkurbjun@gmail.com> | 2009-08-10 02:57:13 +0000 |
---|---|---|
committer | Karl Kurbjun <kkurbjun@gmail.com> | 2009-08-10 02:57:13 +0000 |
commit | e1a83b9e99b19da665a3e93b279f02f52c0f8b98 (patch) | |
tree | 0593cade63d40e51032b82268fa8fc54866eedf4 /firmware/target/arm/tms320dm320/mrobe-500 | |
parent | 9e0663c6fe3c4cf76325747fbaaa7ffc0e708657 (diff) | |
download | rockbox-e1a83b9e99b19da665a3e93b279f02f52c0f8b98.tar.gz rockbox-e1a83b9e99b19da665a3e93b279f02f52c0f8b98.zip |
M:Robe 500: Get MPEGPlayer running at 320x240. Screen is zoomed so larger videos than 320x240 will only show center.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22233 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/tms320dm320/mrobe-500')
-rw-r--r-- | firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c | 58 |
1 files changed, 28 insertions, 30 deletions
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c index a44a482324..1e4bb85de6 100644 --- a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c +++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c | |||
@@ -97,7 +97,7 @@ void lcd_awake(void) | |||
97 | /* Note this is expecting a screen size of 480x640 or 240x320, other screen | 97 | /* Note this is expecting a screen size of 480x640 or 240x320, other screen |
98 | * sizes need to be considered for fudge factors | 98 | * sizes need to be considered for fudge factors |
99 | */ | 99 | */ |
100 | #define LCD_FUDGE LCD_NATIVE_WIDTH%32 | 100 | #define LCD_FUDGE LCD_NATIVE_WIDTH%32 |
101 | 101 | ||
102 | /* LCD init - based on code from ingenient-bsp/bootloader/board/dm320/splash.c | 102 | /* LCD init - based on code from ingenient-bsp/bootloader/board/dm320/splash.c |
103 | * and code by Catalin Patulea from the M:Robe 500i linux port | 103 | * and code by Catalin Patulea from the M:Robe 500i linux port |
@@ -160,7 +160,7 @@ void lcd_init_device(void) | |||
160 | /* Used for 565 RGB */ | 160 | /* Used for 565 RGB */ |
161 | IO_OSD_OSDWINMD0 = 0x30C0; | 161 | IO_OSD_OSDWINMD0 = 0x30C0; |
162 | 162 | ||
163 | IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 16; | 163 | IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH *2 / 32; |
164 | 164 | ||
165 | IO_OSD_OSDWINADH = addr >> 16; | 165 | IO_OSD_OSDWINADH = addr >> 16; |
166 | IO_OSD_OSDWIN0ADL = addr & 0xFFFF; | 166 | IO_OSD_OSDWIN0ADL = addr & 0xFFFF; |
@@ -189,17 +189,19 @@ void lcd_init_device(void) | |||
189 | IO_OSD_OSDWIN1XL = LCD_NATIVE_WIDTH; | 189 | IO_OSD_OSDWIN1XL = LCD_NATIVE_WIDTH; |
190 | IO_OSD_OSDWIN1YL = LCD_NATIVE_HEIGHT; | 190 | IO_OSD_OSDWIN1YL = LCD_NATIVE_HEIGHT; |
191 | 191 | ||
192 | IO_OSD_VIDWINMD = 0x0002; | 192 | IO_OSD_VIDWINMD = 0x0000; |
193 | 193 | ||
194 | addr = ((int)FRAME2-CONFIG_SDRAM_START) / 32; | 194 | addr = ((int)FRAME2-CONFIG_SDRAM_START + |
195 | 2*(LCD_NATIVE_WIDTH*(LCD_NATIVE_HEIGHT-320)/2+ | ||
196 | (LCD_NATIVE_WIDTH-240)/2))/ 32; | ||
195 | 197 | ||
196 | /* This is a bit messy, the LCD transfers appear to happen in chunks of 32 | 198 | /* This is a bit messy, the LCD transfers appear to happen in chunks of 32 |
197 | * pixels. (based on OF) | 199 | * pixels. (based on OF) |
198 | */ | 200 | */ |
199 | #if LCD_NATIVE_WIDTH%32!=0 | 201 | #if LCD_NATIVE_WIDTH%32!=0 |
200 | IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH / 32+1; | 202 | IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH * 2 / 32+1; |
201 | #else | 203 | #else |
202 | IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH / 32; | 204 | IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH * 2 / 32; |
203 | #endif | 205 | #endif |
204 | 206 | ||
205 | IO_OSD_VIDWINADH = addr >> 16; | 207 | IO_OSD_VIDWINADH = addr >> 16; |
@@ -229,24 +231,22 @@ void lcd_init_device(void) | |||
229 | #if defined(HAVE_LCD_MODES) | 231 | #if defined(HAVE_LCD_MODES) |
230 | void lcd_set_mode(int mode) | 232 | void lcd_set_mode(int mode) |
231 | { | 233 | { |
232 | if(mode==LCD_MODE_YUV) | 234 | if(mode==LCD_MODE_YUV) { |
233 | { | 235 | /* Turn off the RGB buffer and enable the YUV buffer with zoom */ |
234 | /* Turn off the RGB buffer and enable the YUV buffer */ | 236 | IO_OSD_OSDWINMD0 |= 0x04; |
235 | IO_OSD_OSDWINMD0 |= 0x04; | 237 | IO_OSD_VIDWINMD |= 0x01; |
236 | IO_OSD_VIDWINMD |= 0x01; | 238 | #if LCD_NATIVE_WIDTH > 240 |
237 | memset16(FRAME2, 0x0080, LCD_NATIVE_HEIGHT*(LCD_NATIVE_WIDTH+LCD_FUDGE)); | 239 | IO_OSD_VIDWINMD |= (0x05<<2); /* This does a 2x zoom */ |
238 | } | 240 | #endif |
239 | else if(mode==LCD_MODE_RGB565) | 241 | memset16(FRAME2, 0x0080, LCD_NATIVE_HEIGHT*(LCD_NATIVE_WIDTH+LCD_FUDGE)); |
240 | { | 242 | } else if(mode==LCD_MODE_RGB565) { |
241 | /* Turn on the RGB window, set it to 16 bit and turn YUV window off */ | 243 | /* Turn on the RGB window, set it to 16 bit and turn YUV window off */ |
242 | IO_OSD_VIDWINMD &= ~(0x01); | 244 | IO_OSD_VIDWINMD &= ~(0x01); |
243 | IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 16; | 245 | IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 16; |
244 | IO_OSD_OSDWINMD0 |= (1<<13); | 246 | IO_OSD_OSDWINMD0 |= (1<<13); |
245 | IO_OSD_OSDWINMD0 &= ~0x04; | 247 | IO_OSD_OSDWINMD0 &= ~0x04; |
246 | lcd_clear_display(); | 248 | lcd_clear_display(); |
247 | } | 249 | } else if(mode==LCD_MODE_PAL256) { |
248 | else if(mode==LCD_MODE_PAL256) | ||
249 | { | ||
250 | #if LCD_NATIVE_WIDTH%32!=0 | 250 | #if LCD_NATIVE_WIDTH%32!=0 |
251 | IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 32+1; | 251 | IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 32+1; |
252 | #else | 252 | #else |
@@ -255,8 +255,8 @@ void lcd_set_mode(int mode) | |||
255 | 255 | ||
256 | IO_OSD_VIDWINMD &= ~(0x01); | 256 | IO_OSD_VIDWINMD &= ~(0x01); |
257 | IO_OSD_OSDWINMD0 &= ~(1<<13); | 257 | IO_OSD_OSDWINMD0 &= ~(1<<13); |
258 | IO_OSD_OSDWINMD0 |= 0x01; | 258 | IO_OSD_OSDWINMD0 |= 0x01; |
259 | } | 259 | } |
260 | } | 260 | } |
261 | #endif | 261 | #endif |
262 | 262 | ||
@@ -416,10 +416,8 @@ void lcd_blit_yuv(unsigned char * const src[3], | |||
416 | if (!lcd_on) | 416 | if (!lcd_on) |
417 | return; | 417 | return; |
418 | 418 | ||
419 | /* y has to be at multiple of 2 or else it will mess up the HW | 419 | /* y has to be on a 16 pixel boundary */ |
420 | * (interleaving) | 420 | y &= ~0xF; |
421 | */ | ||
422 | y &= ~1; | ||
423 | 421 | ||
424 | if( ((y | x | height | width ) < 0) | 422 | if( ((y | x | height | width ) < 0) |
425 | || y>LCD_NATIVE_HEIGHT || x>LCD_NATIVE_WIDTH ) | 423 | || y>LCD_NATIVE_HEIGHT || x>LCD_NATIVE_WIDTH ) |