summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2008-05-28 10:17:16 +0000
committerMichael Sevakis <jethead71@rockbox.org>2008-05-28 10:17:16 +0000
commitadf2e4c9a012fda200431c92cb2c1707dbe2f0a3 (patch)
tree3a2755b05f9e2092d5bff458929b825c955c66f1 /apps
parentb57b779fbced4a3fc1ecd0799a7666c2f1645f17 (diff)
downloadrockbox-adf2e4c9a012fda200431c92cb2c1707dbe2f0a3.tar.gz
rockbox-adf2e4c9a012fda200431c92cb2c1707dbe2f0a3.tar.bz2
rockbox-adf2e4c9a012fda200431c92cb2c1707dbe2f0a3.zip
Targets with HAVE_LCD_ENABLE: Provide a means to receive notifications when the lcd is enabled and the image is refreshed so overlayed drawing can also be refreshed. Chiefly mpegplayer needs this so it can redraw the YUV data after the backlight is turned on while paused or when using 'Set Start Time'.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17640 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/plugin.c4
-rw-r--r--apps/plugin.h6
-rw-r--r--apps/plugins/mpegplayer/mpeg_settings.c22
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.c23
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.h3
5 files changed, 57 insertions, 1 deletions
diff --git a/apps/plugin.c b/apps/plugin.c
index e7b66a1cb2..9a435b24bc 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -601,6 +601,10 @@ static const struct plugin_api rockbox_api = {
simplelist_info_init,
simplelist_show_list,
+#ifdef HAVE_LCD_ENABLE
+ lcd_set_enable_hook,
+ &button_queue,
+#endif
};
int plugin_load(const char* plugin, const void* parameter)
diff --git a/apps/plugin.h b/apps/plugin.h
index c23e6457cf..edd54989da 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -124,7 +124,7 @@ void* plugin_get_buffer(size_t *buffer_size);
#define PLUGIN_MAGIC 0x526F634B /* RocK */
/* increase this every time the api struct changes */
-#define PLUGIN_API_VERSION 115
+#define PLUGIN_API_VERSION 116
/* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any
@@ -752,6 +752,10 @@ struct plugin_api {
int count, void* data);
bool (*simplelist_show_list)(struct simplelist_info *info);
+#ifdef HAVE_LCD_ENABLE
+ void (*lcd_set_enable_hook)(void (*enable_hook)(void));
+ struct event_queue *button_queue;
+#endif
};
/* plugin header */
diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c
index 70b41a00e2..17a1cbbb69 100644
--- a/apps/plugins/mpegplayer/mpeg_settings.c
+++ b/apps/plugins/mpegplayer/mpeg_settings.c
@@ -543,6 +543,13 @@ static uint32_t increment_time(uint32_t val, int32_t amount, uint32_t range)
return val;
}
+#ifdef HAVE_LCD_ENABLE
+static void get_start_time_lcd_enable_hook(void)
+{
+ rb->queue_post(rb->button_queue, LCD_ENABLE_EVENT_0, 0);
+}
+#endif /* HAVE_LCD_ENABLE */
+
static int get_start_time(uint32_t duration)
{
int button = 0;
@@ -556,6 +563,10 @@ static int get_start_time(uint32_t duration)
lcd_(clear_display)();
lcd_(update)();
+#ifdef HAVE_LCD_ENABLE
+ rb->lcd_set_enable_hook(get_start_time_lcd_enable_hook);
+#endif
+
draw_slider(0, 100, &rc_bound);
rc_bound.b = rc_bound.t - SLIDER_TMARGIN;
rc_bound.t = SCREEN_MARGIN;
@@ -707,6 +718,13 @@ static int get_start_time(uint32_t duration)
slider_state = state9;
break;
+#ifdef HAVE_LCD_ENABLE
+ case LCD_ENABLE_EVENT_0:
+ if (slider_state == state2)
+ display_thumb_image(&rc_vid);
+ continue;
+#endif
+
default:
rb->default_event_handler(button);
rb->yield();
@@ -736,6 +754,10 @@ static int get_start_time(uint32_t duration)
rb->yield();
}
+#ifdef HAVE_LCD_ENABLE
+ rb->lcd_set_enable_hook(NULL);
+#endif
+
#ifndef HAVE_LCD_COLOR
stream_gray_show(false);
grey_clear_display();
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c
index 5b92ccced1..42e0ddd5ad 100644
--- a/apps/plugins/mpegplayer/mpegplayer.c
+++ b/apps/plugins/mpegplayer/mpegplayer.c
@@ -587,13 +587,27 @@ static void draw_putsxy_oriented(int x, int y, const char *str)
}
#endif /* LCD_PORTRAIT */
+#ifdef HAVE_LCD_ENABLE
+/* So we can refresh the overlay */
+static void wvs_lcd_enable_hook(void)
+{
+ rb->queue_post(rb->button_queue, LCD_ENABLE_EVENT_1, 0);
+}
+#endif
+
static void wvs_backlight_on_video_mode(bool video_on)
{
if (video_on) {
/* Turn off backlight timeout */
/* backlight control in lib/helper.c */
backlight_force_on(rb);
+#ifdef HAVE_LCD_ENABLE
+ rb->lcd_set_enable_hook(NULL);
+#endif
} else {
+#ifdef HAVE_LCD_ENABLE
+ rb->lcd_set_enable_hook(wvs_lcd_enable_hook);
+#endif
/* Revert to user's backlight settings */
backlight_use_settings(rb);
}
@@ -1441,6 +1455,15 @@ static void button_loop(void)
continue;
} /* BUTTON_NONE: */
+#ifdef HAVE_LCD_ENABLE
+ case LCD_ENABLE_EVENT_1:
+ {
+ /* Draw the current frame if prepared already */
+ stream_draw_frame(true);
+ break;
+ } /* LCD_ENABLE_EVENT_1: */
+#endif
+
case MPEG_VOLUP:
case MPEG_VOLUP|BUTTON_REPEAT:
#ifdef MPEG_VOLUP2
diff --git a/apps/plugins/mpegplayer/mpegplayer.h b/apps/plugins/mpegplayer/mpegplayer.h
index fa13a1e378..571c28883d 100644
--- a/apps/plugins/mpegplayer/mpegplayer.h
+++ b/apps/plugins/mpegplayer/mpegplayer.h
@@ -104,4 +104,7 @@ enum mpeg_malloc_reason_t
#include "disk_buf.h"
#include "stream_mgr.h"
+#define LCD_ENABLE_EVENT_0 MAKE_SYS_EVENT(SYS_EVENT_CLS_PRIVATE, 0)
+#define LCD_ENABLE_EVENT_1 MAKE_SYS_EVENT(SYS_EVENT_CLS_PRIVATE, 1)
+
#endif /* MPEGPLAYER_H */