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

@ -160,7 +160,7 @@ void lcd_init_device(void)
/* Used for 565 RGB */ /* Used for 565 RGB */
IO_OSD_OSDWINMD0 = 0x30C0; 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_OSDWINADH = addr >> 16;
IO_OSD_OSDWIN0ADL = addr & 0xFFFF; IO_OSD_OSDWIN0ADL = addr & 0xFFFF;
@ -189,17 +189,19 @@ void lcd_init_device(void)
IO_OSD_OSDWIN1XL = LCD_NATIVE_WIDTH; IO_OSD_OSDWIN1XL = LCD_NATIVE_WIDTH;
IO_OSD_OSDWIN1YL = LCD_NATIVE_HEIGHT; 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 /* This is a bit messy, the LCD transfers appear to happen in chunks of 32
* pixels. (based on OF) * pixels. (based on OF)
*/ */
#if LCD_NATIVE_WIDTH%32!=0 #if LCD_NATIVE_WIDTH%32!=0
IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH / 32+1; IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH * 2 / 32+1;
#else #else
IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH / 32; IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH * 2 / 32;
#endif #endif
IO_OSD_VIDWINADH = addr >> 16; IO_OSD_VIDWINADH = addr >> 16;
@ -229,24 +231,22 @@ void lcd_init_device(void)
#if defined(HAVE_LCD_MODES) #if defined(HAVE_LCD_MODES)
void lcd_set_mode(int mode) void lcd_set_mode(int mode)
{ {
if(mode==LCD_MODE_YUV) if(mode==LCD_MODE_YUV) {
{ /* Turn off the RGB buffer and enable the YUV buffer with zoom */
/* Turn off the RGB buffer and enable the YUV buffer */
IO_OSD_OSDWINMD0 |= 0x04; IO_OSD_OSDWINMD0 |= 0x04;
IO_OSD_VIDWINMD |= 0x01; 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)); memset16(FRAME2, 0x0080, LCD_NATIVE_HEIGHT*(LCD_NATIVE_WIDTH+LCD_FUDGE));
} } else if(mode==LCD_MODE_RGB565) {
else if(mode==LCD_MODE_RGB565)
{
/* Turn on the RGB window, set it to 16 bit and turn YUV window off */ /* Turn on the RGB window, set it to 16 bit and turn YUV window off */
IO_OSD_VIDWINMD &= ~(0x01); IO_OSD_VIDWINMD &= ~(0x01);
IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 16; IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 16;
IO_OSD_OSDWINMD0 |= (1<<13); IO_OSD_OSDWINMD0 |= (1<<13);
IO_OSD_OSDWINMD0 &= ~0x04; IO_OSD_OSDWINMD0 &= ~0x04;
lcd_clear_display(); lcd_clear_display();
} } else if(mode==LCD_MODE_PAL256) {
else if(mode==LCD_MODE_PAL256)
{
#if LCD_NATIVE_WIDTH%32!=0 #if LCD_NATIVE_WIDTH%32!=0
IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 32+1; IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 32+1;
#else #else
@ -416,10 +416,8 @@ void lcd_blit_yuv(unsigned char * const src[3],
if (!lcd_on) if (!lcd_on)
return; return;
/* y has to be at multiple of 2 or else it will mess up the HW /* y has to be on a 16 pixel boundary */
* (interleaving) y &= ~0xF;
*/
y &= ~1;
if( ((y | x | height | width ) < 0) if( ((y | x | height | width ) < 0)
|| y>LCD_NATIVE_HEIGHT || x>LCD_NATIVE_WIDTH ) || y>LCD_NATIVE_HEIGHT || x>LCD_NATIVE_WIDTH )