1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Karl Kurbjun 2009-08-10 02:57:13 +00:00
parent 9e0663c6fe
commit e1a83b9e99

View file

@ -97,7 +97,7 @@ void lcd_awake(void)
/* Note this is expecting a screen size of 480x640 or 240x320, other screen
* sizes need to be considered for fudge factors
*/
#define LCD_FUDGE LCD_NATIVE_WIDTH%32
#define LCD_FUDGE LCD_NATIVE_WIDTH%32
/* LCD init - based on code from ingenient-bsp/bootloader/board/dm320/splash.c
* and code by Catalin Patulea from the M:Robe 500i linux port
@ -160,7 +160,7 @@ void lcd_init_device(void)
/* Used for 565 RGB */
IO_OSD_OSDWINMD0 = 0x30C0;
IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 16;
IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH *2 / 32;
IO_OSD_OSDWINADH = addr >> 16;
IO_OSD_OSDWIN0ADL = addr & 0xFFFF;
@ -189,17 +189,19 @@ void lcd_init_device(void)
IO_OSD_OSDWIN1XL = LCD_NATIVE_WIDTH;
IO_OSD_OSDWIN1YL = LCD_NATIVE_HEIGHT;
IO_OSD_VIDWINMD = 0x0002;
IO_OSD_VIDWINMD = 0x0000;
addr = ((int)FRAME2-CONFIG_SDRAM_START) / 32;
addr = ((int)FRAME2-CONFIG_SDRAM_START +
2*(LCD_NATIVE_WIDTH*(LCD_NATIVE_HEIGHT-320)/2+
(LCD_NATIVE_WIDTH-240)/2))/ 32;
/* This is a bit messy, the LCD transfers appear to happen in chunks of 32
* pixels. (based on OF)
*/
#if LCD_NATIVE_WIDTH%32!=0
IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH / 32+1;
IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH * 2 / 32+1;
#else
IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH / 32;
IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH * 2 / 32;
#endif
IO_OSD_VIDWINADH = addr >> 16;
@ -229,24 +231,22 @@ void lcd_init_device(void)
#if defined(HAVE_LCD_MODES)
void lcd_set_mode(int mode)
{
if(mode==LCD_MODE_YUV)
{
/* Turn off the RGB buffer and enable the YUV buffer */
IO_OSD_OSDWINMD0 |= 0x04;
IO_OSD_VIDWINMD |= 0x01;
memset16(FRAME2, 0x0080, LCD_NATIVE_HEIGHT*(LCD_NATIVE_WIDTH+LCD_FUDGE));
}
else if(mode==LCD_MODE_RGB565)
{
/* Turn on the RGB window, set it to 16 bit and turn YUV window off */
IO_OSD_VIDWINMD &= ~(0x01);
IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 16;
IO_OSD_OSDWINMD0 |= (1<<13);
IO_OSD_OSDWINMD0 &= ~0x04;
lcd_clear_display();
}
else if(mode==LCD_MODE_PAL256)
{
if(mode==LCD_MODE_YUV) {
/* Turn off the RGB buffer and enable the YUV buffer with zoom */
IO_OSD_OSDWINMD0 |= 0x04;
IO_OSD_VIDWINMD |= 0x01;
#if LCD_NATIVE_WIDTH > 240
IO_OSD_VIDWINMD |= (0x05<<2); /* This does a 2x zoom */
#endif
memset16(FRAME2, 0x0080, LCD_NATIVE_HEIGHT*(LCD_NATIVE_WIDTH+LCD_FUDGE));
} else if(mode==LCD_MODE_RGB565) {
/* Turn on the RGB window, set it to 16 bit and turn YUV window off */
IO_OSD_VIDWINMD &= ~(0x01);
IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 16;
IO_OSD_OSDWINMD0 |= (1<<13);
IO_OSD_OSDWINMD0 &= ~0x04;
lcd_clear_display();
} else if(mode==LCD_MODE_PAL256) {
#if LCD_NATIVE_WIDTH%32!=0
IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 32+1;
#else
@ -255,8 +255,8 @@ void lcd_set_mode(int mode)
IO_OSD_VIDWINMD &= ~(0x01);
IO_OSD_OSDWINMD0 &= ~(1<<13);
IO_OSD_OSDWINMD0 |= 0x01;
}
IO_OSD_OSDWINMD0 |= 0x01;
}
}
#endif
@ -416,10 +416,8 @@ void lcd_blit_yuv(unsigned char * const src[3],
if (!lcd_on)
return;
/* y has to be at multiple of 2 or else it will mess up the HW
* (interleaving)
*/
y &= ~1;
/* y has to be on a 16 pixel boundary */
y &= ~0xF;
if( ((y | x | height | width ) < 0)
|| y>LCD_NATIVE_HEIGHT || x>LCD_NATIVE_WIDTH )