summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugin.c4
-rw-r--r--apps/plugin.h4
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.c15
-rw-r--r--firmware/export/config-mrobe500.h2
-rw-r--r--firmware/export/lcd.h7
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c31
6 files changed, 58 insertions, 5 deletions
diff --git a/apps/plugin.c b/apps/plugin.c
index b909a55f46..2126641572 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -633,6 +633,10 @@ static const struct plugin_api rockbox_api = {
633 appsversion, 633 appsversion,
634 /* new stuff at the end, sort into place next time 634 /* new stuff at the end, sort into place next time
635 the API gets incompatible */ 635 the API gets incompatible */
636
637#if defined(HAVE_LCD_MODES)
638 lcd_set_mode,
639#endif
636}; 640};
637 641
638int plugin_load(const char* plugin, const void* parameter) 642int plugin_load(const char* plugin, const void* parameter)
diff --git a/apps/plugin.h b/apps/plugin.h
index 06d8abaaee..8954373d23 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -791,6 +791,10 @@ struct plugin_api {
791 const char *appsversion; 791 const char *appsversion;
792 /* new stuff at the end, sort into place next time 792 /* new stuff at the end, sort into place next time
793 the API gets incompatible */ 793 the API gets incompatible */
794
795#if defined(HAVE_LCD_MODES)
796 void (*lcd_set_mode)(int mode);
797#endif
794}; 798};
795 799
796/* plugin header */ 800/* plugin header */
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c
index 82ebfb1111..055c1b2b84 100644
--- a/apps/plugins/mpegplayer/mpegplayer.c
+++ b/apps/plugins/mpegplayer/mpegplayer.c
@@ -1459,6 +1459,10 @@ static void button_loop(void)
1459 rb->lcd_clear_display(); 1459 rb->lcd_clear_display();
1460 rb->lcd_update(); 1460 rb->lcd_update();
1461 1461
1462#if (HAVE_LCD_MODES & LCD_MODE_YUV)
1463 rb->lcd_set_mode(LCD_MODE_YUV);
1464#endif
1465
1462 wvs_init(); 1466 wvs_init();
1463 1467
1464 /* Start playback at the specified starting time */ 1468 /* Start playback at the specified starting time */
@@ -1537,6 +1541,10 @@ static void button_loop(void)
1537 stream_show_vo(false); 1541 stream_show_vo(false);
1538 wvs_backlight_brightness_video_mode(false); 1542 wvs_backlight_brightness_video_mode(false);
1539 1543
1544#if (HAVE_LCD_MODES & LCD_MODE_YUV)
1545 rb->lcd_set_mode(LCD_MODE_RGB565);
1546#endif
1547
1540 result = mpeg_menu(0); 1548 result = mpeg_menu(0);
1541 1549
1542 /* The menu can change the font, so restore */ 1550 /* The menu can change the font, so restore */
@@ -1549,6 +1557,9 @@ static void button_loop(void)
1549 break; 1557 break;
1550 1558
1551 default: 1559 default:
1560#if (HAVE_LCD_MODES & LCD_MODE_YUV)
1561 rb->lcd_set_mode(LCD_MODE_YUV);
1562#endif
1552 /* If not stopped, show video again */ 1563 /* If not stopped, show video again */
1553 if (state != STREAM_STOPPED) { 1564 if (state != STREAM_STOPPED) {
1554 wvs_show(WVS_SHOW); 1565 wvs_show(WVS_SHOW);
@@ -1707,6 +1718,10 @@ enum plugin_status plugin_start(const void* parameter)
1707 rb->splashf(HZ*2, errstring, err); 1718 rb->splashf(HZ*2, errstring, err);
1708 } 1719 }
1709 } 1720 }
1721
1722#if (HAVE_LCD_MODES & LCD_MODE_YUV)
1723 rb->lcd_set_mode(LCD_MODE_RGB565);
1724#endif
1710 1725
1711 stream_exit(); 1726 stream_exit();
1712 1727
diff --git a/firmware/export/config-mrobe500.h b/firmware/export/config-mrobe500.h
index 25699bd005..08f8ba07e8 100644
--- a/firmware/export/config-mrobe500.h
+++ b/firmware/export/config-mrobe500.h
@@ -44,6 +44,8 @@
44/* define this if you want album art for this target */ 44/* define this if you want album art for this target */
45//#define HAVE_ALBUMART 45//#define HAVE_ALBUMART
46 46
47#define HAVE_LCD_MODES LCD_MODE_RGB565 | LCD_MODE_YUV | LCD_MODE_PAL256
48
47/* define this if you have access to the quickscreen */ 49/* define this if you have access to the quickscreen */
48#define HAVE_QUICKSCREEN 50#define HAVE_QUICKSCREEN
49 51
diff --git a/firmware/export/lcd.h b/firmware/export/lcd.h
index e34fac5d31..4f35927353 100644
--- a/firmware/export/lcd.h
+++ b/firmware/export/lcd.h
@@ -92,6 +92,13 @@ typedef unsigned long fb_data;
92typedef unsigned char fb_data; 92typedef unsigned char fb_data;
93#endif 93#endif
94 94
95#if defined(HAVE_LCD_MODES)
96void lcd_set_mode(int mode);
97#define LCD_MODE_RGB565 0x00000001
98#define LCD_MODE_YUV 0x00000002
99#define LCD_MODE_PAL256 0x00000004
100#endif
101
95/* common functions */ 102/* common functions */
96extern void lcd_write_command(int byte); 103extern void lcd_write_command(int byte);
97extern void lcd_write_command_e(int cmd, int data); 104extern void lcd_write_command_e(int cmd, int data);
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
index 0357b469d9..3fa8a7e6c1 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
@@ -256,6 +256,7 @@ void lcd_update(void)
256{ 256{
257 if (!lcd_on) 257 if (!lcd_on)
258 return; 258 return;
259
259#if CONFIG_ORIENTATION == SCREEN_PORTRAIT 260#if CONFIG_ORIENTATION == SCREEN_PORTRAIT
260 lcd_copy_buffer_rect((fb_data *)FRAME, &lcd_framebuffer[0][0], 261 lcd_copy_buffer_rect((fb_data *)FRAME, &lcd_framebuffer[0][0],
261 LCD_WIDTH*LCD_HEIGHT, 1); 262 LCD_WIDTH*LCD_HEIGHT, 1);
@@ -264,6 +265,30 @@ void lcd_update(void)
264#endif 265#endif
265} 266}
266 267
268#if defined(HAVE_LCD_MODES)
269void lcd_set_mode(int mode)
270{
271 if(mode==LCD_MODE_YUV)
272 {
273 /* Turn off the RGB buffer and enable the YUV buffer */
274 IO_OSD_OSDWINMD0&=~(0x01);
275 IO_OSD_VIDWINMD|=0x01;
276 memset16(FRAME, 0x0080, LCD_WIDTH*LCD_HEIGHT);
277 }
278 else if(mode==LCD_MODE_RGB565)
279 {
280 /* Turn on the RGB window and the YUV window off (This should probably be
281 * made into a function).
282 */
283 IO_OSD_OSDWINMD0|=0x01;
284 IO_OSD_VIDWINMD&=~(0x01);
285 }
286 else if(mode==LCD_MODE_PAL256)
287 {
288 }
289}
290#endif
291
267void lcd_blit_yuv(unsigned char * const src[3], 292void lcd_blit_yuv(unsigned char * const src[3],
268 int src_x, int src_y, int stride, 293 int src_x, int src_y, int stride,
269 int x, int y, int width, 294 int x, int y, int width,
@@ -280,13 +305,9 @@ void lcd_blit_yuv(unsigned char * const src[3],
280 unsigned char const * yuv_src[3]; 305 unsigned char const * yuv_src[3];
281 off_t z; 306 off_t z;
282 307
283 /* Turn off the RGB buffer and enable the YUV buffer */
284 IO_OSD_OSDWINMD0&=~(0x01);
285 IO_OSD_VIDWINMD|=0x01;
286
287 if (!lcd_on) 308 if (!lcd_on)
288 return; 309 return;
289 310
290 /* y has to be at multiple of 2 or else it will mess up the HW (interleaving) */ 311 /* y has to be at multiple of 2 or else it will mess up the HW (interleaving) */
291 y &= ~1; 312 y &= ~1;
292 313