diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2008-01-09 22:19:25 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2008-01-09 22:19:25 +0000 |
commit | 75380fd27d175bab1818ef35a9100e74fc6a461b (patch) | |
tree | 7553e7d74d26dde32ca3c3c01b9846af884939f3 /apps/plugins | |
parent | 81cf8b4d3bc4579b90a6fc4a97e61cc3acfc8c95 (diff) | |
download | rockbox-75380fd27d175bab1818ef35a9100e74fc6a461b.tar.gz rockbox-75380fd27d175bab1818ef35a9100e74fc6a461b.zip |
mpegplayer on grayscale targets: use greylib to display all text and graphics with the video images.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16042 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins')
-rw-r--r-- | apps/plugins/mpegplayer/mpeg_parser.c | 23 | ||||
-rw-r--r-- | apps/plugins/mpegplayer/mpeg_settings.c | 145 | ||||
-rw-r--r-- | apps/plugins/mpegplayer/mpegplayer.c | 195 | ||||
-rw-r--r-- | apps/plugins/mpegplayer/mpegplayer.h | 15 | ||||
-rw-r--r-- | apps/plugins/mpegplayer/stream_mgr.c | 111 | ||||
-rw-r--r-- | apps/plugins/mpegplayer/stream_mgr.h | 9 | ||||
-rw-r--r-- | apps/plugins/mpegplayer/video_out.h | 2 | ||||
-rw-r--r-- | apps/plugins/mpegplayer/video_out_rockbox.c | 9 | ||||
-rw-r--r-- | apps/plugins/mpegplayer/video_thread.c | 10 |
9 files changed, 261 insertions, 258 deletions
diff --git a/apps/plugins/mpegplayer/mpeg_parser.c b/apps/plugins/mpegplayer/mpeg_parser.c index 167f07da5c..0259bc9865 100644 --- a/apps/plugins/mpegplayer/mpeg_parser.c +++ b/apps/plugins/mpegplayer/mpeg_parser.c | |||
@@ -1032,7 +1032,28 @@ intptr_t parser_send_video_msg(long id, intptr_t data) | |||
1032 | break; | 1032 | break; |
1033 | } | 1033 | } |
1034 | 1034 | ||
1035 | retval = str_send_msg(&video_str, id, data); | 1035 | switch (id) |
1036 | { | ||
1037 | #ifdef GRAY_CACHE_MAINT | ||
1038 | /* This must be done internally here or refresh may be delayed far | ||
1039 | * too long */ | ||
1040 | case VIDEO_DISPLAY_SHOW: | ||
1041 | case VIDEO_PRINT_FRAME: | ||
1042 | case VIDEO_PRINT_THUMBNAIL: | ||
1043 | stream_gray_pause(true); | ||
1044 | |||
1045 | GRAY_INVALIDATE_ICACHE(); | ||
1046 | |||
1047 | retval = str_send_msg(&video_str, id, data); | ||
1048 | |||
1049 | GRAY_VIDEO_FLUSH_ICACHE(); | ||
1050 | |||
1051 | stream_gray_pause(false); | ||
1052 | break; | ||
1053 | #endif | ||
1054 | default: | ||
1055 | retval = str_send_msg(&video_str, id, data); | ||
1056 | } | ||
1036 | } | 1057 | } |
1037 | 1058 | ||
1038 | return retval; | 1059 | return retval; |
diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c index e99823ed5c..720101706c 100644 --- a/apps/plugins/mpegplayer/mpeg_settings.c +++ b/apps/plugins/mpegplayer/mpeg_settings.c | |||
@@ -178,17 +178,56 @@ static void display_options(void) | |||
178 | menu_exit(menu_id); | 178 | menu_exit(menu_id); |
179 | } | 179 | } |
180 | 180 | ||
181 | #ifndef HAVE_LCD_COLOR | ||
182 | /* Cheapo splash implementation for the grey surface */ | ||
183 | static void grey_splash(int ticks, const unsigned char *fmt, ...) | ||
184 | { | ||
185 | unsigned char buffer[256]; | ||
186 | int x, y, w, h; | ||
187 | int oldfg, oldmode; | ||
188 | |||
189 | va_list ap; | ||
190 | va_start(ap, fmt); | ||
191 | |||
192 | rb->vsnprintf(buffer, sizeof (buffer), fmt, ap); | ||
193 | |||
194 | va_end(ap); | ||
195 | |||
196 | grey_getstringsize(buffer, &w, &h); | ||
197 | |||
198 | oldfg = grey_get_foreground(); | ||
199 | oldmode = grey_get_drawmode(); | ||
200 | |||
201 | grey_set_drawmode(DRMODE_FG); | ||
202 | grey_set_foreground(GREY_LIGHTGRAY); | ||
203 | |||
204 | x = (LCD_WIDTH - w) / 2; | ||
205 | y = (LCD_HEIGHT - h) / 2; | ||
206 | |||
207 | grey_fillrect(x - 1, y - 1, w + 2, h + 2); | ||
208 | |||
209 | grey_set_foreground(GREY_BLACK); | ||
210 | |||
211 | grey_putsxy(x, y, buffer); | ||
212 | grey_drawrect(x - 2, y - 2, w + 4, h + 4); | ||
213 | |||
214 | grey_set_foreground(oldfg); | ||
215 | grey_set_drawmode(oldmode); | ||
216 | |||
217 | grey_update(); | ||
218 | |||
219 | if (ticks > 0) | ||
220 | rb->sleep(ticks); | ||
221 | } | ||
222 | #endif /* !HAVE_LCD_COLOR */ | ||
223 | |||
181 | static void show_loading(struct vo_rect *rc) | 224 | static void show_loading(struct vo_rect *rc) |
182 | { | 225 | { |
183 | int oldmode; | 226 | int oldmode = lcd_(get_drawmode)(); |
184 | #ifndef HAVE_LCD_COLOR | 227 | lcd_(set_drawmode)(DRMODE_SOLID | DRMODE_INVERSEVID); |
185 | stream_gray_show(false); | 228 | lcd_(fillrect)(rc->l-1, rc->t-1, rc->r - rc->l + 2, rc->b - rc->t + 2); |
186 | #endif | 229 | lcd_(set_drawmode)(oldmode); |
187 | oldmode = rb->lcd_get_drawmode(); | 230 | lcd_(splash)(0, "Loading..."); |
188 | rb->lcd_set_drawmode(DRMODE_BG | DRMODE_INVERSEVID); | ||
189 | rb->lcd_fillrect(rc->l-1, rc->t-1, rc->r - rc->l + 2, rc->b - rc->t + 2); | ||
190 | rb->lcd_set_drawmode(oldmode); | ||
191 | rb->splash(0, "Loading..."); | ||
192 | } | 231 | } |
193 | 232 | ||
194 | void draw_slider(uint32_t range, uint32_t pos, struct vo_rect *rc) | 233 | void draw_slider(uint32_t range, uint32_t pos, struct vo_rect *rc) |
@@ -211,36 +250,36 @@ void draw_slider(uint32_t range, uint32_t pos, struct vo_rect *rc) | |||
211 | /* Put positition on left */ | 250 | /* Put positition on left */ |
212 | ts_to_hms(pos, &hms); | 251 | ts_to_hms(pos, &hms); |
213 | hms_format(str, sizeof(str), &hms); | 252 | hms_format(str, sizeof(str), &hms); |
214 | rb->lcd_getstringsize(str, NULL, &text_h); | 253 | lcd_(getstringsize)(str, NULL, &text_h); |
215 | text_y = SLIDER_Y - SLIDER_TEXTMARGIN - text_h; | 254 | text_y = SLIDER_Y - SLIDER_TEXTMARGIN - text_h; |
216 | 255 | ||
217 | if (rc == NULL) | 256 | if (rc == NULL) |
218 | { | 257 | { |
219 | int oldmode = rb->lcd_get_drawmode(); | 258 | int oldmode = lcd_(get_drawmode)(); |
220 | rb->lcd_set_drawmode(DRMODE_BG | DRMODE_INVERSEVID); | 259 | lcd_(set_drawmode)(DRMODE_BG | DRMODE_INVERSEVID); |
221 | rb->lcd_fillrect(SLIDER_X, text_y, SLIDER_WIDTH, | 260 | lcd_(fillrect)(SLIDER_X, text_y, SLIDER_WIDTH, |
222 | LCD_HEIGHT - SLIDER_BMARGIN - text_y | 261 | LCD_HEIGHT - SLIDER_BMARGIN - text_y |
223 | - SLIDER_TMARGIN); | 262 | - SLIDER_TMARGIN); |
224 | rb->lcd_set_drawmode(oldmode); | 263 | lcd_(set_drawmode)(oldmode); |
225 | 264 | ||
226 | rb->lcd_putsxy(SLIDER_X, text_y, str); | 265 | lcd_(putsxy)(SLIDER_X, text_y, str); |
227 | 266 | ||
228 | /* Put duration on right */ | 267 | /* Put duration on right */ |
229 | ts_to_hms(range, &hms); | 268 | ts_to_hms(range, &hms); |
230 | hms_format(str, sizeof(str), &hms); | 269 | hms_format(str, sizeof(str), &hms); |
231 | rb->lcd_getstringsize(str, &text_w, NULL); | 270 | lcd_(getstringsize)(str, &text_w, NULL); |
232 | 271 | ||
233 | rb->lcd_putsxy(SLIDER_X + SLIDER_WIDTH - text_w, text_y, str); | 272 | lcd_(putsxy)(SLIDER_X + SLIDER_WIDTH - text_w, text_y, str); |
234 | 273 | ||
235 | /* Draw slider */ | 274 | /* Draw slider */ |
236 | rb->lcd_drawrect(SLIDER_X, SLIDER_Y, SLIDER_WIDTH, SLIDER_HEIGHT); | 275 | lcd_(drawrect)(SLIDER_X, SLIDER_Y, SLIDER_WIDTH, SLIDER_HEIGHT); |
237 | rb->lcd_fillrect(SLIDER_X, SLIDER_Y, | 276 | lcd_(fillrect)(SLIDER_X, SLIDER_Y, |
238 | muldiv_uint32(pos, SLIDER_WIDTH, range), | 277 | muldiv_uint32(pos, SLIDER_WIDTH, range), |
239 | SLIDER_HEIGHT); | 278 | SLIDER_HEIGHT); |
240 | 279 | ||
241 | /* Update screen */ | 280 | /* Update screen */ |
242 | rb->lcd_update_rect(SLIDER_X, text_y - SLIDER_TMARGIN, SLIDER_WIDTH, | 281 | lcd_(update_rect)(SLIDER_X, text_y - SLIDER_TMARGIN, SLIDER_WIDTH, |
243 | LCD_HEIGHT - SLIDER_BMARGIN - text_y + SLIDER_TEXTMARGIN); | 282 | LCD_HEIGHT - SLIDER_BMARGIN - text_y + SLIDER_TEXTMARGIN); |
244 | } | 283 | } |
245 | else | 284 | else |
246 | { | 285 | { |
@@ -256,33 +295,28 @@ bool display_thumb_image(const struct vo_rect *rc) | |||
256 | { | 295 | { |
257 | if (!stream_display_thumb(rc)) | 296 | if (!stream_display_thumb(rc)) |
258 | { | 297 | { |
259 | rb->splash(0, "Frame not available"); | 298 | lcd_(splash)(0, "Frame not available"); |
260 | return false; | 299 | return false; |
261 | } | 300 | } |
262 | 301 | ||
263 | #ifdef HAVE_LCD_COLOR | ||
264 | /* Draw a raised border around the frame */ | 302 | /* Draw a raised border around the frame */ |
265 | int oldcolor = rb->lcd_get_foreground(); | 303 | int oldcolor = lcd_(get_foreground)(); |
266 | rb->lcd_set_foreground(LCD_LIGHTGRAY); | 304 | lcd_(set_foreground)(DRAW_LIGHTGRAY); |
267 | 305 | ||
268 | rb->lcd_hline(rc->l-1, rc->r-1, rc->t-1); | 306 | lcd_(hline)(rc->l-1, rc->r-1, rc->t-1); |
269 | rb->lcd_vline(rc->l-1, rc->t, rc->b-1); | 307 | lcd_(vline)(rc->l-1, rc->t, rc->b-1); |
270 | 308 | ||
271 | rb->lcd_set_foreground(LCD_DARKGRAY); | 309 | lcd_(set_foreground)(DRAW_DARKGRAY); |
272 | 310 | ||
273 | rb->lcd_hline(rc->l-1, rc->r, rc->b); | 311 | lcd_(hline)(rc->l-1, rc->r, rc->b); |
274 | rb->lcd_vline(rc->r, rc->t-1, rc->b); | 312 | lcd_(vline)(rc->r, rc->t-1, rc->b); |
275 | 313 | ||
276 | rb->lcd_set_foreground(oldcolor); | 314 | lcd_(set_foreground)(oldcolor); |
277 | 315 | ||
278 | rb->lcd_update_rect(rc->l-1, rc->t-1, rc->r - rc->l + 2, 1); | 316 | lcd_(update_rect)(rc->l-1, rc->t-1, rc->r - rc->l + 2, 1); |
279 | rb->lcd_update_rect(rc->l-1, rc->t, 1, rc->b - rc->t); | 317 | lcd_(update_rect)(rc->l-1, rc->t, 1, rc->b - rc->t); |
280 | rb->lcd_update_rect(rc->l-1, rc->b, rc->r - rc->l + 2, 1); | 318 | lcd_(update_rect)(rc->l-1, rc->b, rc->r - rc->l + 2, 1); |
281 | rb->lcd_update_rect(rc->r, rc->t, 1, rc->b - rc->t); | 319 | lcd_(update_rect)(rc->r, rc->t, 1, rc->b - rc->t); |
282 | #else | ||
283 | /* Just show the thumbnail */ | ||
284 | stream_gray_show(true); | ||
285 | #endif | ||
286 | 320 | ||
287 | return true; | 321 | return true; |
288 | } | 322 | } |
@@ -320,18 +354,12 @@ int get_start_time(uint32_t duration) | |||
320 | 354 | ||
321 | enum state_enum slider_state = state0; | 355 | enum state_enum slider_state = state0; |
322 | 356 | ||
323 | rb->lcd_clear_display(); | 357 | lcd_(clear_display)(); |
324 | rb->lcd_update(); | 358 | lcd_(update)(); |
325 | 359 | ||
326 | draw_slider(0, 100, &rc_bound); | 360 | draw_slider(0, 100, &rc_bound); |
327 | rc_bound.b = rc_bound.t - SLIDER_TMARGIN; | 361 | rc_bound.b = rc_bound.t - SLIDER_TMARGIN; |
328 | #ifdef HAVE_LCD_COLOR | ||
329 | rc_bound.t = SCREEN_MARGIN; | 362 | rc_bound.t = SCREEN_MARGIN; |
330 | #else | ||
331 | rc_bound.t = 0; | ||
332 | rc_bound.l = 0; | ||
333 | rc_bound.r = LCD_WIDTH; | ||
334 | #endif | ||
335 | 363 | ||
336 | DEBUGF("rc_bound: %d, %d, %d, %d\n", rc_bound.l, rc_bound.t, | 364 | DEBUGF("rc_bound: %d, %d, %d, %d\n", rc_bound.l, rc_bound.t, |
337 | rc_bound.r, rc_bound.b); | 365 | rc_bound.r, rc_bound.b); |
@@ -344,12 +372,6 @@ int get_start_time(uint32_t duration) | |||
344 | rc_vid.b = rc_bound.b - rc_bound.t; | 372 | rc_vid.b = rc_bound.b - rc_bound.t; |
345 | } | 373 | } |
346 | 374 | ||
347 | #if !defined (HAVE_LCD_COLOR) | ||
348 | #if LCD_PIXELFORMAT == VERTICAL_PACKING | ||
349 | rc_bound.b &= ~7; /* Align bottom edge */ | ||
350 | #endif | ||
351 | #endif | ||
352 | |||
353 | /* Get aspect ratio of bounding rectangle and video in u16.16 */ | 375 | /* Get aspect ratio of bounding rectangle and video in u16.16 */ |
354 | aspect_bound = ((rc_bound.r - rc_bound.l) << 16) / | 376 | aspect_bound = ((rc_bound.r - rc_bound.l) << 16) / |
355 | (rc_bound.b - rc_bound.t); | 377 | (rc_bound.b - rc_bound.t); |
@@ -398,8 +420,8 @@ int get_start_time(uint32_t duration) | |||
398 | rc_vid.r, rc_vid.b); | 420 | rc_vid.r, rc_vid.b); |
399 | 421 | ||
400 | #ifndef HAVE_LCD_COLOR | 422 | #ifndef HAVE_LCD_COLOR |
401 | /* Set gray overlay to the bounding rectangle */ | 423 | /* Restore gray overlay dimensions */ |
402 | stream_set_gray_rect(&rc_bound); | 424 | stream_gray_show(true); |
403 | #endif | 425 | #endif |
404 | 426 | ||
405 | while(slider_state < state9) | 427 | while(slider_state < state9) |
@@ -487,10 +509,9 @@ int get_start_time(uint32_t duration) | |||
487 | } | 509 | } |
488 | 510 | ||
489 | #ifndef HAVE_LCD_COLOR | 511 | #ifndef HAVE_LCD_COLOR |
490 | /* Restore gray overlay dimensions */ | ||
491 | stream_gray_show(false); | 512 | stream_gray_show(false); |
492 | rc_bound.b = LCD_HEIGHT; | 513 | grey_clear_display(); |
493 | stream_set_gray_rect(&rc_bound); | 514 | grey_update(); |
494 | #endif | 515 | #endif |
495 | 516 | ||
496 | cancel_cpu_boost(); | 517 | cancel_cpu_boost(); |
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c index b547d36f6a..a41d3b498a 100644 --- a/apps/plugins/mpegplayer/mpegplayer.c +++ b/apps/plugins/mpegplayer/mpegplayer.c | |||
@@ -257,10 +257,8 @@ struct wvs | |||
257 | int height; | 257 | int height; |
258 | unsigned fgcolor; | 258 | unsigned fgcolor; |
259 | unsigned bgcolor; | 259 | unsigned bgcolor; |
260 | #ifdef HAVE_LCD_COLOR | ||
261 | unsigned prog_fillcolor; | 260 | unsigned prog_fillcolor; |
262 | struct vo_rect update_rect; | 261 | struct vo_rect update_rect; |
263 | #endif | ||
264 | struct vo_rect prog_rect; | 262 | struct vo_rect prog_rect; |
265 | struct vo_rect time_rect; | 263 | struct vo_rect time_rect; |
266 | struct vo_rect dur_rect; | 264 | struct vo_rect dur_rect; |
@@ -310,16 +308,21 @@ static unsigned draw_blendcolor(unsigned c1, unsigned c2, unsigned char amount) | |||
310 | /* Drawing functions that operate rotated on LCD_PORTRAIT displays - | 308 | /* Drawing functions that operate rotated on LCD_PORTRAIT displays - |
311 | * most are just wrappers of lcd_* functions with transforms applied. | 309 | * most are just wrappers of lcd_* functions with transforms applied. |
312 | * The origin is the upper-left corner of the WVS area */ | 310 | * The origin is the upper-left corner of the WVS area */ |
313 | #ifdef HAVE_LCD_COLOR | ||
314 | static void draw_update_rect(int x, int y, int width, int height) | 311 | static void draw_update_rect(int x, int y, int width, int height) |
315 | { | 312 | { |
316 | rb->lcd_update_rect(_X, _Y, _W, _H); | 313 | lcd_(update_rect)(_X, _Y, _W, _H); |
317 | } | 314 | } |
318 | #endif | ||
319 | 315 | ||
320 | static void draw_clear_area(int x, int y, int width, int height) | 316 | static void draw_clear_area(int x, int y, int width, int height) |
321 | { | 317 | { |
318 | #ifdef HAVE_LCD_COLOR | ||
322 | rb->screen_clear_area(rb->screens[SCREEN_MAIN], _X, _Y, _W, _H); | 319 | rb->screen_clear_area(rb->screens[SCREEN_MAIN], _X, _Y, _W, _H); |
320 | #else | ||
321 | int oldmode = grey_get_drawmode(); | ||
322 | grey_set_drawmode(DRMODE_SOLID | DRMODE_INVERSEVID); | ||
323 | grey_fillrect(_X, _Y, _W, _H); | ||
324 | grey_set_drawmode(oldmode); | ||
325 | #endif | ||
323 | } | 326 | } |
324 | 327 | ||
325 | static void draw_clear_area_rect(const struct vo_rect *rc) | 328 | static void draw_clear_area_rect(const struct vo_rect *rc) |
@@ -328,48 +331,69 @@ static void draw_clear_area_rect(const struct vo_rect *rc) | |||
328 | int y = rc->t; | 331 | int y = rc->t; |
329 | int width = rc->r - rc->l; | 332 | int width = rc->r - rc->l; |
330 | int height = rc->b - rc->t; | 333 | int height = rc->b - rc->t; |
334 | #ifdef HAVE_LCD_COLOR | ||
331 | rb->screen_clear_area(rb->screens[SCREEN_MAIN], _X, _Y, _W, _H); | 335 | rb->screen_clear_area(rb->screens[SCREEN_MAIN], _X, _Y, _W, _H); |
336 | #else | ||
337 | int oldmode = grey_get_drawmode(); | ||
338 | grey_set_drawmode(DRMODE_SOLID | DRMODE_INVERSEVID); | ||
339 | grey_fillrect(_X, _Y, _W, _H); | ||
340 | grey_set_drawmode(oldmode); | ||
341 | #endif | ||
332 | } | 342 | } |
333 | 343 | ||
334 | static void draw_scrollbar_draw(int x, int y, int width, int height, | 344 | static void draw_fillrect(int x, int y, int width, int height) |
335 | int items, int min_shown, int max_shown) | ||
336 | { | 345 | { |
337 | #ifdef HAVE_LCD_COLOR | 346 | lcd_(fillrect)(_X, _Y, _W, _H); |
338 | int oldbg = rb->lcd_get_background(); | 347 | } |
339 | rb->lcd_set_background(wvs.prog_fillcolor); | ||
340 | #endif | ||
341 | 348 | ||
342 | rb->gui_scrollbar_draw(rb->screens[SCREEN_MAIN], _X, _Y, | 349 | static void draw_hline(int x1, int x2, int y) |
343 | _W, _H, items, min_shown, max_shown, | 350 | { |
344 | 0 | ||
345 | #ifdef LCD_LANDSCAPE | 351 | #ifdef LCD_LANDSCAPE |
346 | | HORIZONTAL | 352 | lcd_(hline)(x1 + wvs.x, x2 + wvs.x, y + wvs.y); |
347 | #endif | 353 | #else |
348 | #ifdef HAVE_LCD_COLOR | 354 | y = LCD_WIDTH - (y + wvs.y) - 1; |
349 | | INNER_BGFILL | FOREGROUND | 355 | lcd_(vline)(y, x1 + wvs.x, x2 + wvs.x); |
350 | #endif | 356 | #endif |
351 | ); | 357 | } |
352 | 358 | ||
353 | #ifdef HAVE_LCD_COLOR | 359 | static void draw_vline(int x, int y1, int y2) |
354 | rb->lcd_set_background(oldbg); | 360 | { |
361 | #ifdef LCD_LANDSCAPE | ||
362 | lcd_(vline)(x + wvs.x, y1 + wvs.y, y2 + wvs.y); | ||
363 | #else | ||
364 | y1 = LCD_WIDTH - (y1 + wvs.y) - 1; | ||
365 | y2 = LCD_WIDTH - (y2 + wvs.y) - 1; | ||
366 | lcd_(hline)(y1, y2, x + wvs.x); | ||
355 | #endif | 367 | #endif |
356 | } | 368 | } |
357 | 369 | ||
358 | static void draw_scrollbar_draw_rect(const struct vo_rect *rc, int items, | 370 | static void draw_scrollbar_draw(int x, int y, int width, int height, |
359 | int min_shown, int max_shown) | 371 | uint32_t min, uint32_t max, uint32_t val) |
360 | { | 372 | { |
361 | draw_scrollbar_draw(rc->l, rc->t, rc->r - rc->l, rc->b - rc->t, | 373 | unsigned oldfg = lcd_(get_foreground)(); |
362 | items, min_shown, max_shown); | 374 | |
375 | draw_hline(x + 1, x + width - 2, y); | ||
376 | draw_hline(x + 1, x + width - 2, y + height - 1); | ||
377 | draw_vline(x, y + 1, y + height - 2); | ||
378 | draw_vline(x + width - 1, y + 1, y + height - 2); | ||
379 | |||
380 | val = muldiv_uint32(width - 2, val, max - min); | ||
381 | val = MIN(val, (uint32_t)(width - 2)); | ||
382 | |||
383 | draw_fillrect(x + 1, y + 1, val, height - 2); | ||
384 | |||
385 | lcd_(set_foreground)(wvs.prog_fillcolor); | ||
386 | |||
387 | draw_fillrect(x + 1 + val, y + 1, width - 2 - val, height - 2); | ||
388 | |||
389 | lcd_(set_foreground)(oldfg); | ||
363 | } | 390 | } |
364 | 391 | ||
365 | static void draw_hline(int x1, int x2, int y) | 392 | static void draw_scrollbar_draw_rect(const struct vo_rect *rc, int min, |
393 | int max, int val) | ||
366 | { | 394 | { |
367 | #ifdef LCD_LANDSCAPE | 395 | draw_scrollbar_draw(rc->l, rc->t, rc->r - rc->l, rc->b - rc->t, |
368 | rb->lcd_hline(x1 + wvs.x, x2 + wvs.x, y + wvs.y); | 396 | min, max, val); |
369 | #else | ||
370 | y = LCD_WIDTH - (y + wvs.y) - 1; | ||
371 | rb->lcd_vline(y, x1 + wvs.x, x2 + wvs.x); | ||
372 | #endif | ||
373 | } | 397 | } |
374 | 398 | ||
375 | #ifdef LCD_PORTRAIT | 399 | #ifdef LCD_PORTRAIT |
@@ -480,18 +504,18 @@ static void draw_oriented_mono_bitmap_part(const unsigned char *src, | |||
480 | int stride, int x, int y, | 504 | int stride, int x, int y, |
481 | int width, int height) | 505 | int width, int height) |
482 | { | 506 | { |
483 | int mode = rb->lcd_get_drawmode(); | 507 | int mode = lcd_(get_drawmode)(); |
484 | rb->lcd_set_drawmode(DRMODE_FG); | 508 | lcd_(set_drawmode)(DRMODE_FG); |
485 | rb->lcd_mono_bitmap_part(src, src_x, src_y, stride, x, y, width, height); | 509 | lcd_(mono_bitmap_part)(src, src_x, src_y, stride, x, y, width, height); |
486 | rb->lcd_set_drawmode(mode); | 510 | lcd_(set_drawmode)(mode); |
487 | } | 511 | } |
488 | 512 | ||
489 | static void draw_putsxy_oriented(int x, int y, const char *str) | 513 | static void draw_putsxy_oriented(int x, int y, const char *str) |
490 | { | 514 | { |
491 | int mode = rb->lcd_get_drawmode(); | 515 | int mode = lcd_(get_drawmode)(); |
492 | rb->lcd_set_drawmode(DRMODE_FG); | 516 | lcd_(set_drawmode)(DRMODE_FG); |
493 | rb->lcd_putsxy(x + wvs.x, y + wvs.y, str); | 517 | lcd_(putsxy)(x + wvs.x, y + wvs.y, str); |
494 | rb->lcd_set_drawmode(mode); | 518 | lcd_(set_drawmode)(mode); |
495 | } | 519 | } |
496 | #endif /* LCD_PORTRAIT */ | 520 | #endif /* LCD_PORTRAIT */ |
497 | 521 | ||
@@ -503,7 +527,7 @@ static void wvs_text_init(void) | |||
503 | int phys; | 527 | int phys; |
504 | int spc_width; | 528 | int spc_width; |
505 | 529 | ||
506 | rb->lcd_setfont(FONT_UI); | 530 | lcd_(setfont)(FONT_UI); |
507 | 531 | ||
508 | wvs.x = 0; | 532 | wvs.x = 0; |
509 | wvs.width = SCREEN_WIDTH; | 533 | wvs.width = SCREEN_WIDTH; |
@@ -515,8 +539,7 @@ static void wvs_text_init(void) | |||
515 | 539 | ||
516 | ts_to_hms(stream_get_duration(), &hms); | 540 | ts_to_hms(stream_get_duration(), &hms); |
517 | hms_format(buf, sizeof (buf), &hms); | 541 | hms_format(buf, sizeof (buf), &hms); |
518 | rb->lcd_getstringsize(buf, &wvs.time_rect.r, | 542 | lcd_(getstringsize)(buf, &wvs.time_rect.r, &wvs.time_rect.b); |
519 | &wvs.time_rect.b); | ||
520 | 543 | ||
521 | /* Choose well-sized bitmap images relative to font height */ | 544 | /* Choose well-sized bitmap images relative to font height */ |
522 | if (wvs.time_rect.b < 12) { | 545 | if (wvs.time_rect.b < 12) { |
@@ -546,8 +569,8 @@ static void wvs_text_init(void) | |||
546 | rb->snprintf(buf, sizeof(buf), "%d%s", phys, | 569 | rb->snprintf(buf, sizeof(buf), "%d%s", phys, |
547 | rb->sound_unit(SOUND_VOLUME)); | 570 | rb->sound_unit(SOUND_VOLUME)); |
548 | 571 | ||
549 | rb->lcd_getstringsize(" ", &spc_width, NULL); | 572 | lcd_(getstringsize)(" ", &spc_width, NULL); |
550 | rb->lcd_getstringsize(buf, &wvs.vol_rect.r, &wvs.vol_rect.b); | 573 | lcd_(getstringsize)(buf, &wvs.vol_rect.r, &wvs.vol_rect.b); |
551 | 574 | ||
552 | wvs.prog_rect.r = SCREEN_WIDTH - WVS_BDR_L - spc_width - | 575 | wvs.prog_rect.r = SCREEN_WIDTH - WVS_BDR_L - spc_width - |
553 | wvs.vol_rect.r - WVS_BDR_R; | 576 | wvs.vol_rect.r - WVS_BDR_R; |
@@ -568,14 +591,12 @@ static void wvs_text_init(void) | |||
568 | wvs.height = WVS_BDR_T + MAX(wvs.prog_rect.b, wvs.vol_rect.b) - | 591 | wvs.height = WVS_BDR_T + MAX(wvs.prog_rect.b, wvs.vol_rect.b) - |
569 | MIN(wvs.time_rect.t, wvs.stat_rect.t) + WVS_BDR_B; | 592 | MIN(wvs.time_rect.t, wvs.stat_rect.t) + WVS_BDR_B; |
570 | 593 | ||
571 | #if LCD_PIXELFORMAT == VERTICAL_PACKING | 594 | #ifdef HAVE_LCD_COLOR |
572 | wvs.height = ALIGN_UP(wvs.height, 8); | ||
573 | #else | ||
574 | wvs.height = ALIGN_UP(wvs.height, 2); | 595 | wvs.height = ALIGN_UP(wvs.height, 2); |
575 | #endif | 596 | #endif |
576 | wvs.y = SCREEN_HEIGHT - wvs.height; | 597 | wvs.y = SCREEN_HEIGHT - wvs.height; |
577 | 598 | ||
578 | rb->lcd_setfont(FONT_SYSFIXED); | 599 | lcd_(setfont)(FONT_SYSFIXED); |
579 | } | 600 | } |
580 | 601 | ||
581 | static void wvs_init(void) | 602 | static void wvs_init(void) |
@@ -589,8 +610,9 @@ static void wvs_init(void) | |||
589 | wvs.fgcolor = LCD_WHITE; | 610 | wvs.fgcolor = LCD_WHITE; |
590 | wvs.prog_fillcolor = LCD_BLACK; | 611 | wvs.prog_fillcolor = LCD_BLACK; |
591 | #else | 612 | #else |
592 | wvs.bgcolor = LCD_LIGHTGRAY; | 613 | wvs.bgcolor = GREY_LIGHTGRAY; |
593 | wvs.fgcolor = LCD_BLACK; | 614 | wvs.fgcolor = GREY_BLACK; |
615 | wvs.prog_fillcolor = GREY_WHITE; | ||
594 | #endif | 616 | #endif |
595 | wvs.curr_time = 0; | 617 | wvs.curr_time = 0; |
596 | wvs.status = WVS_STATUS_STOPPED; | 618 | wvs.status = WVS_STATUS_STOPPED; |
@@ -623,37 +645,39 @@ static void wvs_refresh_background(void) | |||
623 | char buf[32]; | 645 | char buf[32]; |
624 | struct hms hms; | 646 | struct hms hms; |
625 | 647 | ||
626 | int bg = rb->lcd_get_background(); | 648 | unsigned bg = lcd_(get_background)(); |
627 | rb->lcd_set_drawmode(DRMODE_SOLID | DRMODE_INVERSEVID); | 649 | lcd_(set_drawmode)(DRMODE_SOLID | DRMODE_INVERSEVID); |
628 | 650 | ||
629 | #ifdef HAVE_LCD_COLOR | 651 | #ifdef HAVE_LCD_COLOR |
630 | /* Draw a "raised" area for our graphics */ | 652 | /* Draw a "raised" area for our graphics */ |
631 | rb->lcd_set_background(draw_blendcolor(bg, LCD_WHITE, 192)); | 653 | lcd_(set_background)(draw_blendcolor(bg, DRAW_WHITE, 192)); |
632 | draw_hline(0, wvs.width, 0); | 654 | draw_hline(0, wvs.width, 0); |
633 | 655 | ||
634 | rb->lcd_set_background(draw_blendcolor(bg, LCD_WHITE, 80)); | 656 | lcd_(set_background)(draw_blendcolor(bg, DRAW_WHITE, 80)); |
635 | draw_hline(0, wvs.width, 1); | 657 | draw_hline(0, wvs.width, 1); |
636 | 658 | ||
637 | rb->lcd_set_background(draw_blendcolor(bg, LCD_BLACK, 48)); | 659 | lcd_(set_background)(draw_blendcolor(bg, DRAW_BLACK, 48)); |
638 | draw_hline(0, wvs.width, wvs.height-2); | 660 | draw_hline(0, wvs.width, wvs.height-2); |
639 | 661 | ||
640 | rb->lcd_set_background(draw_blendcolor(bg, LCD_BLACK, 128)); | 662 | lcd_(set_background)(draw_blendcolor(bg, DRAW_BLACK, 128)); |
641 | draw_hline(0, wvs.width, wvs.height-1); | 663 | draw_hline(0, wvs.width, wvs.height-1); |
642 | 664 | ||
643 | rb->lcd_set_background(bg); | 665 | lcd_(set_background)(bg); |
644 | draw_clear_area(0, 2, wvs.width, wvs.height - 4); | 666 | draw_clear_area(0, 2, wvs.width, wvs.height - 4); |
645 | |||
646 | vo_rect_set_ext(&wvs.update_rect, 0, 0, wvs.width, wvs.height); | ||
647 | #else | 667 | #else |
648 | /* Give contrast with the main background */ | 668 | /* Give contrast with the main background */ |
649 | rb->lcd_set_background(LCD_DARKGRAY); | 669 | lcd_(set_background)(GREY_WHITE); |
650 | draw_hline(0, wvs.width, 0); | 670 | draw_hline(0, wvs.width, 0); |
651 | 671 | ||
652 | rb->lcd_set_background(bg); | 672 | lcd_(set_background)(GREY_DARKGRAY); |
653 | draw_clear_area(0, 1, wvs.width, wvs.height - 1); | 673 | draw_hline(0, wvs.width, wvs.height-1); |
674 | |||
675 | lcd_(set_background)(bg); | ||
676 | draw_clear_area(0, 1, wvs.width, wvs.height - 2); | ||
654 | #endif | 677 | #endif |
655 | 678 | ||
656 | rb->lcd_set_drawmode(DRMODE_SOLID); | 679 | vo_rect_set_ext(&wvs.update_rect, 0, 0, wvs.width, wvs.height); |
680 | lcd_(set_drawmode)(DRMODE_SOLID); | ||
657 | 681 | ||
658 | if (stream_get_duration() != INVALID_TIMESTAMP) { | 682 | if (stream_get_duration() != INVALID_TIMESTAMP) { |
659 | /* Draw the movie duration */ | 683 | /* Draw the movie duration */ |
@@ -672,7 +696,7 @@ static void wvs_refresh_time(void) | |||
672 | 696 | ||
673 | uint32_t duration = stream_get_duration(); | 697 | uint32_t duration = stream_get_duration(); |
674 | 698 | ||
675 | draw_scrollbar_draw_rect(&wvs.prog_rect, duration, 0, | 699 | draw_scrollbar_draw_rect(&wvs.prog_rect, 0, duration, |
676 | wvs.curr_time); | 700 | wvs.curr_time); |
677 | 701 | ||
678 | ts_to_hms(wvs.curr_time, &hms); | 702 | ts_to_hms(wvs.curr_time, &hms); |
@@ -681,12 +705,10 @@ static void wvs_refresh_time(void) | |||
681 | draw_clear_area_rect(&wvs.time_rect); | 705 | draw_clear_area_rect(&wvs.time_rect); |
682 | draw_putsxy_oriented(wvs.time_rect.l, wvs.time_rect.t, buf); | 706 | draw_putsxy_oriented(wvs.time_rect.l, wvs.time_rect.t, buf); |
683 | 707 | ||
684 | #ifdef HAVE_LCD_COLOR | ||
685 | vo_rect_union(&wvs.update_rect, &wvs.update_rect, | 708 | vo_rect_union(&wvs.update_rect, &wvs.update_rect, |
686 | &wvs.prog_rect); | 709 | &wvs.prog_rect); |
687 | vo_rect_union(&wvs.update_rect, &wvs.update_rect, | 710 | vo_rect_union(&wvs.update_rect, &wvs.update_rect, |
688 | &wvs.time_rect); | 711 | &wvs.time_rect); |
689 | #endif | ||
690 | } | 712 | } |
691 | 713 | ||
692 | /* Refresh the volume display area */ | 714 | /* Refresh the volume display area */ |
@@ -699,15 +721,13 @@ static void wvs_refresh_volume(void) | |||
699 | rb->snprintf(buf, sizeof (buf), "%d%s", | 721 | rb->snprintf(buf, sizeof (buf), "%d%s", |
700 | rb->sound_val2phys(SOUND_VOLUME, volume), | 722 | rb->sound_val2phys(SOUND_VOLUME, volume), |
701 | rb->sound_unit(SOUND_VOLUME)); | 723 | rb->sound_unit(SOUND_VOLUME)); |
702 | rb->lcd_getstringsize(buf, &width, NULL); | 724 | lcd_(getstringsize)(buf, &width, NULL); |
703 | 725 | ||
704 | /* Right-justified */ | 726 | /* Right-justified */ |
705 | draw_clear_area_rect(&wvs.vol_rect); | 727 | draw_clear_area_rect(&wvs.vol_rect); |
706 | draw_putsxy_oriented(wvs.vol_rect.r - width, wvs.vol_rect.t, buf); | 728 | draw_putsxy_oriented(wvs.vol_rect.r - width, wvs.vol_rect.t, buf); |
707 | 729 | ||
708 | #ifdef HAVE_LCD_COLOR | ||
709 | vo_rect_union(&wvs.update_rect, &wvs.update_rect, &wvs.vol_rect); | 730 | vo_rect_union(&wvs.update_rect, &wvs.update_rect, &wvs.vol_rect); |
710 | #endif | ||
711 | } | 731 | } |
712 | 732 | ||
713 | /* Refresh the status icon */ | 733 | /* Refresh the status icon */ |
@@ -719,11 +739,11 @@ static void wvs_refresh_status(void) | |||
719 | 739 | ||
720 | #ifdef HAVE_LCD_COLOR | 740 | #ifdef HAVE_LCD_COLOR |
721 | /* Draw status icon with a drop shadow */ | 741 | /* Draw status icon with a drop shadow */ |
722 | unsigned oldfg = rb->lcd_get_foreground(); | 742 | unsigned oldfg = lcd_(get_foreground)(); |
723 | int i = 1; | 743 | int i = 1; |
724 | 744 | ||
725 | rb->lcd_set_foreground(draw_blendcolor(rb->lcd_get_background(), | 745 | lcd_(set_foreground)(draw_blendcolor(lcd_(get_background)(), |
726 | LCD_BLACK, 96)); | 746 | DRAW_BLACK, 96)); |
727 | 747 | ||
728 | while (1) | 748 | while (1) |
729 | { | 749 | { |
@@ -738,7 +758,7 @@ static void wvs_refresh_status(void) | |||
738 | if (--i < 0) | 758 | if (--i < 0) |
739 | break; | 759 | break; |
740 | 760 | ||
741 | rb->lcd_set_foreground(oldfg); | 761 | lcd_(set_foreground)(oldfg); |
742 | } | 762 | } |
743 | 763 | ||
744 | vo_rect_union(&wvs.update_rect, &wvs.update_rect, &wvs.stat_rect); | 764 | vo_rect_union(&wvs.update_rect, &wvs.update_rect, &wvs.stat_rect); |
@@ -750,6 +770,7 @@ static void wvs_refresh_status(void) | |||
750 | wvs.stat_rect.l + wvs.x, | 770 | wvs.stat_rect.l + wvs.x, |
751 | wvs.stat_rect.t + wvs.y, | 771 | wvs.stat_rect.t + wvs.y, |
752 | icon_size, icon_size); | 772 | icon_size, icon_size); |
773 | vo_rect_union(&wvs.update_rect, &wvs.update_rect, &wvs.stat_rect); | ||
753 | #endif | 774 | #endif |
754 | } | 775 | } |
755 | 776 | ||
@@ -859,16 +880,14 @@ static void wvs_refresh(int hint) | |||
859 | 880 | ||
860 | /* Set basic drawing params that are used. Elements that perform variations | 881 | /* Set basic drawing params that are used. Elements that perform variations |
861 | * will restore them. */ | 882 | * will restore them. */ |
862 | oldfg = rb->lcd_get_foreground(); | 883 | oldfg = lcd_(get_foreground)(); |
863 | oldbg = rb->lcd_get_background(); | 884 | oldbg = lcd_(get_background)(); |
864 | 885 | ||
865 | rb->lcd_setfont(FONT_UI); | 886 | lcd_(setfont)(FONT_UI); |
866 | rb->lcd_set_foreground(wvs.fgcolor); | 887 | lcd_(set_foreground)(wvs.fgcolor); |
867 | rb->lcd_set_background(wvs.bgcolor); | 888 | lcd_(set_background)(wvs.bgcolor); |
868 | 889 | ||
869 | #ifdef HAVE_LCD_COLOR | ||
870 | vo_rect_clear(&wvs.update_rect); | 890 | vo_rect_clear(&wvs.update_rect); |
871 | #endif | ||
872 | 891 | ||
873 | if (hint & WVS_REFRESH_BACKGROUND) { | 892 | if (hint & WVS_REFRESH_BACKGROUND) { |
874 | wvs_refresh_background(); | 893 | wvs_refresh_background(); |
@@ -888,11 +907,10 @@ static void wvs_refresh(int hint) | |||
888 | } | 907 | } |
889 | 908 | ||
890 | /* Go back to defaults */ | 909 | /* Go back to defaults */ |
891 | rb->lcd_setfont(FONT_SYSFIXED); | 910 | lcd_(setfont)(FONT_SYSFIXED); |
892 | rb->lcd_set_foreground(oldfg); | 911 | lcd_(set_foreground)(oldfg); |
893 | rb->lcd_set_background(oldbg); | 912 | lcd_(set_background)(oldbg); |
894 | 913 | ||
895 | #ifdef HAVE_LCD_COLOR | ||
896 | /* Update the dirty rectangle */ | 914 | /* Update the dirty rectangle */ |
897 | vo_lock(); | 915 | vo_lock(); |
898 | 916 | ||
@@ -902,10 +920,6 @@ static void wvs_refresh(int hint) | |||
902 | wvs.update_rect.b - wvs.update_rect.t); | 920 | wvs.update_rect.b - wvs.update_rect.t); |
903 | 921 | ||
904 | vo_unlock(); | 922 | vo_unlock(); |
905 | #else | ||
906 | /* Defer update to greylib */ | ||
907 | grey_deferred_lcd_update(); | ||
908 | #endif | ||
909 | } | 923 | } |
910 | 924 | ||
911 | /* Show/Hide the WVS */ | 925 | /* Show/Hide the WVS */ |
@@ -930,7 +944,9 @@ static void wvs_show(unsigned show) | |||
930 | 944 | ||
931 | stream_vo_set_clip(NULL); | 945 | stream_vo_set_clip(NULL); |
932 | 946 | ||
947 | #ifdef HAVE_LCD_COLOR | ||
933 | draw_clear_area(0, 0, wvs.width, wvs.height); | 948 | draw_clear_area(0, 0, wvs.width, wvs.height); |
949 | #endif | ||
934 | 950 | ||
935 | if (!(show & WVS_NODRAW)) { | 951 | if (!(show & WVS_NODRAW)) { |
936 | #ifdef HAVE_LCD_COLOR | 952 | #ifdef HAVE_LCD_COLOR |
@@ -1393,7 +1409,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
1393 | DEBUGF("Could not initialize streams\n"); | 1409 | DEBUGF("Could not initialize streams\n"); |
1394 | } else { | 1410 | } else { |
1395 | rb->splash(0, "Loading..."); | 1411 | rb->splash(0, "Loading..."); |
1396 | |||
1397 | init_settings((char*)parameter); | 1412 | init_settings((char*)parameter); |
1398 | 1413 | ||
1399 | err = stream_open((char *)parameter); | 1414 | err = stream_open((char *)parameter); |
diff --git a/apps/plugins/mpegplayer/mpegplayer.h b/apps/plugins/mpegplayer/mpegplayer.h index 4ebf321fce..01ab9bdad6 100644 --- a/apps/plugins/mpegplayer/mpegplayer.h +++ b/apps/plugins/mpegplayer/mpegplayer.h | |||
@@ -80,11 +80,8 @@ enum mpeg_malloc_reason_t | |||
80 | #define lcd_(fn) rb->lcd_##fn | 80 | #define lcd_(fn) rb->lcd_##fn |
81 | #define lcd_splash splash | 81 | #define lcd_splash splash |
82 | 82 | ||
83 | #define GRAY_FLUSH_ICACHE() | ||
84 | #define GRAY_INVALIDATE_ICACHE() | ||
85 | #define GRAY_VIDEO_FLUSH_ICACHE() | ||
86 | #define GRAY_VIDEO_INVALIDATE_ICACHE() | ||
87 | #else | 83 | #else |
84 | |||
88 | #include "grey.h" | 85 | #include "grey.h" |
89 | #define DRAW_BLACK GREY_BLACK | 86 | #define DRAW_BLACK GREY_BLACK |
90 | #define DRAW_DARKGRAY GREY_DARKGRAY | 87 | #define DRAW_DARKGRAY GREY_DARKGRAY |
@@ -92,6 +89,7 @@ enum mpeg_malloc_reason_t | |||
92 | #define DRAW_WHITE GREY_WHITE | 89 | #define DRAW_WHITE GREY_WHITE |
93 | #define lcd_(fn) grey_##fn | 90 | #define lcd_(fn) grey_##fn |
94 | 91 | ||
92 | #if defined(CPU_PP) && NUM_CORES > 1 | ||
95 | #define GRAY_FLUSH_ICACHE() \ | 93 | #define GRAY_FLUSH_ICACHE() \ |
96 | IF_COP(flush_icache()) | 94 | IF_COP(flush_icache()) |
97 | #define GRAY_INVALIDATE_ICACHE() \ | 95 | #define GRAY_INVALIDATE_ICACHE() \ |
@@ -100,11 +98,18 @@ enum mpeg_malloc_reason_t | |||
100 | IF_COP(parser_send_video_msg(VIDEO_GRAY_CACHEOP, 0)) | 98 | IF_COP(parser_send_video_msg(VIDEO_GRAY_CACHEOP, 0)) |
101 | #define GRAY_VIDEO_INVALIDATE_ICACHE() \ | 99 | #define GRAY_VIDEO_INVALIDATE_ICACHE() \ |
102 | IF_COP(parser_send_video_msg(VIDEO_GRAY_CACHEOP, 1)) | 100 | IF_COP(parser_send_video_msg(VIDEO_GRAY_CACHEOP, 1)) |
103 | #if NUM_CORES > 1 | 101 | |
104 | #define GRAY_CACHE_MAINT | 102 | #define GRAY_CACHE_MAINT |
105 | #endif | 103 | #endif |
106 | #endif | 104 | #endif |
107 | 105 | ||
106 | #ifndef GRAY_CACHE_MAINT | ||
107 | #define GRAY_FLUSH_ICACHE() | ||
108 | #define GRAY_INVALIDATE_ICACHE() | ||
109 | #define GRAY_VIDEO_FLUSH_ICACHE() | ||
110 | #define GRAY_VIDEO_INVALIDATE_ICACHE() | ||
111 | #endif | ||
112 | |||
108 | #include "mpeg2.h" | 113 | #include "mpeg2.h" |
109 | #include "video_out.h" | 114 | #include "video_out.h" |
110 | #include "mpeg_stream.h" | 115 | #include "mpeg_stream.h" |
diff --git a/apps/plugins/mpegplayer/stream_mgr.c b/apps/plugins/mpegplayer/stream_mgr.c index dbc8ce9427..096ac4b0f9 100644 --- a/apps/plugins/mpegplayer/stream_mgr.c +++ b/apps/plugins/mpegplayer/stream_mgr.c | |||
@@ -710,75 +710,13 @@ void stream_vo_set_clip(const struct vo_rect *rc) | |||
710 | stream_mgr.parms.rc = *rc; | 710 | stream_mgr.parms.rc = *rc; |
711 | rc = &stream_mgr.parms.rc; | 711 | rc = &stream_mgr.parms.rc; |
712 | } | 712 | } |
713 | #ifndef HAVE_LCD_COLOR | ||
714 | else | ||
715 | { | ||
716 | vo_rect_set_ext(&stream_mgr.parms.rc, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); | ||
717 | rc = &stream_mgr.parms.rc; | ||
718 | } | ||
719 | #endif | ||
720 | 713 | ||
721 | parser_send_video_msg(VIDEO_SET_CLIP_RECT, (intptr_t)rc); | 714 | parser_send_video_msg(VIDEO_SET_CLIP_RECT, (intptr_t)rc); |
722 | 715 | ||
723 | #ifndef HAVE_LCD_COLOR | ||
724 | stream_set_gray_rect(rc); | ||
725 | #endif | ||
726 | |||
727 | stream_mgr_unlock(); | 716 | stream_mgr_unlock(); |
728 | } | 717 | } |
729 | 718 | ||
730 | #ifndef HAVE_LCD_COLOR | 719 | #ifndef HAVE_LCD_COLOR |
731 | /* Set the rectangle for the gray video overlay - clipped to screen */ | ||
732 | bool stream_set_gray_rect(const struct vo_rect *rc) | ||
733 | { | ||
734 | bool retval = false; | ||
735 | struct vo_rect rc_gray; | ||
736 | |||
737 | stream_mgr_lock(); | ||
738 | |||
739 | vo_rect_set_ext(&rc_gray, 0, 0, LCD_WIDTH, LCD_HEIGHT); | ||
740 | |||
741 | if (vo_rect_intersect(&rc_gray, &rc_gray, rc)) | ||
742 | { | ||
743 | bool vis = parser_send_video_msg(VIDEO_DISPLAY_SHOW, false); | ||
744 | |||
745 | /* The impudence! Keeps the image from disappearing anyway. */ | ||
746 | #ifdef SIMULATOR | ||
747 | rb->sim_lcd_ex_init(0, NULL); | ||
748 | #else | ||
749 | rb->timer_unregister(); | ||
750 | #endif | ||
751 | GRAY_VIDEO_INVALIDATE_ICACHE(); | ||
752 | GRAY_INVALIDATE_ICACHE(); | ||
753 | |||
754 | vo_lock(); | ||
755 | |||
756 | grey_init(rb, stream_mgr.graymem, stream_mgr.graysize, false, | ||
757 | rc_gray.r - rc_gray.l, rc_gray.b - rc_gray.t, NULL); | ||
758 | |||
759 | grey_set_position(rc_gray.l, rc_gray.t); | ||
760 | |||
761 | vo_unlock(); | ||
762 | |||
763 | GRAY_INVALIDATE_ICACHE(); | ||
764 | |||
765 | if (stream_mgr.status != STREAM_PLAYING) | ||
766 | parser_send_video_msg(VIDEO_PRINT_FRAME, true); | ||
767 | |||
768 | GRAY_VIDEO_FLUSH_ICACHE(); | ||
769 | |||
770 | if (vis) | ||
771 | { | ||
772 | grey_show(true); | ||
773 | parser_send_video_msg(VIDEO_DISPLAY_SHOW, true); | ||
774 | } | ||
775 | } | ||
776 | |||
777 | stream_mgr_unlock(); | ||
778 | |||
779 | return retval; | ||
780 | } | ||
781 | |||
782 | /* Show/hide the gray video overlay (independently of vo visibility). */ | 720 | /* Show/hide the gray video overlay (independently of vo visibility). */ |
783 | void stream_gray_show(bool show) | 721 | void stream_gray_show(bool show) |
784 | { | 722 | { |
@@ -793,6 +731,29 @@ void stream_gray_show(bool show) | |||
793 | 731 | ||
794 | stream_mgr_unlock(); | 732 | stream_mgr_unlock(); |
795 | } | 733 | } |
734 | |||
735 | #ifdef GRAY_CACHE_MAINT | ||
736 | void stream_gray_pause(bool pause) | ||
737 | { | ||
738 | static bool gray_paused = false; | ||
739 | |||
740 | if (pause && !gray_paused) | ||
741 | { | ||
742 | if (_grey_info.flags & _GREY_RUNNING) | ||
743 | { | ||
744 | rb->timer_unregister(); | ||
745 | _grey_info.flags &= ~_GREY_RUNNING; | ||
746 | gray_paused = true; | ||
747 | } | ||
748 | } | ||
749 | else if (!pause && gray_paused) | ||
750 | { | ||
751 | gray_paused = false; | ||
752 | grey_show(true); | ||
753 | } | ||
754 | } | ||
755 | #endif | ||
756 | |||
796 | #endif | 757 | #endif |
797 | 758 | ||
798 | /* Display a thumbnail at the last seek point */ | 759 | /* Display a thumbnail at the last seek point */ |
@@ -805,14 +766,10 @@ bool stream_display_thumb(const struct vo_rect *rc) | |||
805 | 766 | ||
806 | stream_mgr_lock(); | 767 | stream_mgr_lock(); |
807 | 768 | ||
808 | GRAY_INVALIDATE_ICACHE(); | ||
809 | |||
810 | stream_mgr.parms.rc = *rc; | 769 | stream_mgr.parms.rc = *rc; |
811 | retval = parser_send_video_msg(VIDEO_PRINT_THUMBNAIL, | 770 | retval = parser_send_video_msg(VIDEO_PRINT_THUMBNAIL, |
812 | (intptr_t)&stream_mgr.parms.rc); | 771 | (intptr_t)&stream_mgr.parms.rc); |
813 | 772 | ||
814 | GRAY_VIDEO_FLUSH_ICACHE(); | ||
815 | |||
816 | stream_mgr_unlock(); | 773 | stream_mgr_unlock(); |
817 | 774 | ||
818 | return retval; | 775 | return retval; |
@@ -823,12 +780,8 @@ bool stream_draw_frame(bool no_prepare) | |||
823 | bool retval; | 780 | bool retval; |
824 | stream_mgr_lock(); | 781 | stream_mgr_lock(); |
825 | 782 | ||
826 | GRAY_INVALIDATE_ICACHE(); | ||
827 | |||
828 | retval = parser_send_video_msg(VIDEO_PRINT_FRAME, no_prepare); | 783 | retval = parser_send_video_msg(VIDEO_PRINT_FRAME, no_prepare); |
829 | 784 | ||
830 | GRAY_VIDEO_FLUSH_ICACHE(); | ||
831 | |||
832 | stream_mgr_unlock(); | 785 | stream_mgr_unlock(); |
833 | 786 | ||
834 | return retval; | 787 | return retval; |
@@ -1055,26 +1008,27 @@ int stream_init(void) | |||
1055 | /* Initialize non-allocator blocks first */ | 1008 | /* Initialize non-allocator blocks first */ |
1056 | #ifndef HAVE_LCD_COLOR | 1009 | #ifndef HAVE_LCD_COLOR |
1057 | bool success; | 1010 | bool success; |
1011 | long graysize; | ||
1058 | 1012 | ||
1059 | /* This can run on another processor - align data */ | 1013 | /* This can run on another processor - align data */ |
1060 | memsize = CACHEALIGN_BUFFER(&mem, memsize); | 1014 | memsize = CACHEALIGN_BUFFER(&mem, memsize); |
1061 | stream_mgr.graymem = mem; | ||
1062 | 1015 | ||
1063 | success = grey_init(rb, mem, memsize, false, LCD_WIDTH, | 1016 | success = grey_init(rb, mem, memsize, true, LCD_WIDTH, |
1064 | LCD_HEIGHT, &stream_mgr.graysize); | 1017 | LCD_HEIGHT, &graysize); |
1065 | 1018 | ||
1066 | /* This can run on another processor - align size */ | 1019 | /* This can run on another processor - align size */ |
1067 | stream_mgr.graysize = CACHEALIGN_UP(stream_mgr.graysize); | 1020 | graysize = CACHEALIGN_UP(graysize); |
1068 | 1021 | ||
1069 | mem += stream_mgr.graysize; | 1022 | mem += graysize; |
1070 | memsize -= stream_mgr.graysize; | 1023 | memsize -= graysize; |
1071 | 1024 | ||
1072 | if (!success || (ssize_t)memsize <= 0) | 1025 | if (!success || (ssize_t)memsize <= 0) |
1073 | { | 1026 | { |
1074 | rb->splash(HZ, "greylib init failed!"); | 1027 | rb->splash(HZ, "greylib init failed!"); |
1075 | stream_mgr.graymem = NULL; | ||
1076 | return STREAM_ERROR; | 1028 | return STREAM_ERROR; |
1077 | } | 1029 | } |
1030 | |||
1031 | grey_clear_display(); | ||
1078 | #endif /* !HAVE_LCD_COLOR */ | 1032 | #endif /* !HAVE_LCD_COLOR */ |
1079 | 1033 | ||
1080 | stream_mgr.thread = rb->create_thread(stream_mgr_thread, | 1034 | stream_mgr.thread = rb->create_thread(stream_mgr_thread, |
@@ -1144,7 +1098,6 @@ void stream_exit(void) | |||
1144 | } | 1098 | } |
1145 | 1099 | ||
1146 | #ifndef HAVE_LCD_COLOR | 1100 | #ifndef HAVE_LCD_COLOR |
1147 | if (stream_mgr.graymem != NULL) | 1101 | grey_release(); |
1148 | grey_release(); | ||
1149 | #endif | 1102 | #endif |
1150 | } | 1103 | } |
diff --git a/apps/plugins/mpegplayer/stream_mgr.h b/apps/plugins/mpegplayer/stream_mgr.h index dd5d8cabec..b2aa90967e 100644 --- a/apps/plugins/mpegplayer/stream_mgr.h +++ b/apps/plugins/mpegplayer/stream_mgr.h | |||
@@ -37,10 +37,6 @@ struct stream_mgr | |||
37 | struct list_item actl; /* List of active streams */ | 37 | struct list_item actl; /* List of active streams */ |
38 | struct mutex str_mtx; /* Main stream manager mutex */ | 38 | struct mutex str_mtx; /* Main stream manager mutex */ |
39 | struct mutex actl_mtx; /* Lock for current-streams list */ | 39 | struct mutex actl_mtx; /* Lock for current-streams list */ |
40 | #ifndef HAVE_LCD_COLOR | ||
41 | void *graymem; | ||
42 | size_t graysize; | ||
43 | #endif | ||
44 | union /* A place for reusable non-cacheable parameters */ | 40 | union /* A place for reusable non-cacheable parameters */ |
45 | { | 41 | { |
46 | struct vo_rect rc; | 42 | struct vo_rect rc; |
@@ -109,9 +105,10 @@ bool stream_show_vo(bool show); | |||
109 | void stream_vo_set_clip(const struct vo_rect *rc); | 105 | void stream_vo_set_clip(const struct vo_rect *rc); |
110 | 106 | ||
111 | #ifndef HAVE_LCD_COLOR | 107 | #ifndef HAVE_LCD_COLOR |
112 | /* Set the gray overlay rectangle */ | ||
113 | bool stream_set_gray_rect(const struct vo_rect *rc); | ||
114 | void stream_gray_show(bool show); | 108 | void stream_gray_show(bool show); |
109 | #ifdef GRAY_CACHE_MAINT | ||
110 | void stream_gray_pause(bool pause); | ||
111 | #endif | ||
115 | #endif | 112 | #endif |
116 | 113 | ||
117 | /* Display thumbnail of the current seekpoint */ | 114 | /* Display thumbnail of the current seekpoint */ |
diff --git a/apps/plugins/mpegplayer/video_out.h b/apps/plugins/mpegplayer/video_out.h index ed8c4c5907..0b521b40b3 100644 --- a/apps/plugins/mpegplayer/video_out.h +++ b/apps/plugins/mpegplayer/video_out.h | |||
@@ -57,7 +57,7 @@ void vo_set_clip_rect(const struct vo_rect *rc); | |||
57 | void vo_dimensions(struct vo_ext *sz); | 57 | void vo_dimensions(struct vo_ext *sz); |
58 | void vo_cleanup (void); | 58 | void vo_cleanup (void); |
59 | 59 | ||
60 | #if NUM_CORES > 1 || !defined (HAVE_LCD_COLOR) | 60 | #if NUM_CORES > 1 |
61 | void vo_lock(void); | 61 | void vo_lock(void); |
62 | void vo_unlock(void); | 62 | void vo_unlock(void); |
63 | #else | 63 | #else |
diff --git a/apps/plugins/mpegplayer/video_out_rockbox.c b/apps/plugins/mpegplayer/video_out_rockbox.c index 12431bef4a..5a479858f1 100644 --- a/apps/plugins/mpegplayer/video_out_rockbox.c +++ b/apps/plugins/mpegplayer/video_out_rockbox.c | |||
@@ -503,21 +503,14 @@ void vo_set_clip_rect(const struct vo_rect *rc) | |||
503 | vo.output_height = rc_out.b - rc_out.t; | 503 | vo.output_height = rc_out.b - rc_out.t; |
504 | } | 504 | } |
505 | 505 | ||
506 | #if NUM_CORES > 1 || !defined (HAVE_LCD_COLOR) | 506 | #if NUM_CORES > 1 |
507 | void vo_lock(void) | 507 | void vo_lock(void) |
508 | { | 508 | { |
509 | /* TODO: evaluate synchronization with graylib in the sim */ | ||
510 | #if !defined(HAVE_LCD_COLOR) && !defined(SIMULATOR) | ||
511 | set_irq_level(HIGHEST_IRQ_LEVEL); | ||
512 | #endif | ||
513 | video_lock(); | 509 | video_lock(); |
514 | } | 510 | } |
515 | 511 | ||
516 | void vo_unlock(void) | 512 | void vo_unlock(void) |
517 | { | 513 | { |
518 | video_unlock(); | 514 | video_unlock(); |
519 | #if !defined(HAVE_LCD_COLOR) && !defined(SIMULATOR) | ||
520 | set_irq_level(0); | ||
521 | #endif | ||
522 | } | 515 | } |
523 | #endif | 516 | #endif |
diff --git a/apps/plugins/mpegplayer/video_thread.c b/apps/plugins/mpegplayer/video_thread.c index 6a54706942..4fc428d522 100644 --- a/apps/plugins/mpegplayer/video_thread.c +++ b/apps/plugins/mpegplayer/video_thread.c | |||
@@ -72,10 +72,10 @@ static void draw_fps(struct video_thread_data *td) | |||
72 | rb->snprintf(str, sizeof(str), "%d.%02d %d %d ", | 72 | rb->snprintf(str, sizeof(str), "%d.%02d %d %d ", |
73 | fps / 100, fps % 100, td->num_skipped, | 73 | fps / 100, fps % 100, td->num_skipped, |
74 | td->info->display_picture->temporal_reference); | 74 | td->info->display_picture->temporal_reference); |
75 | rb->lcd_putsxy(0, 0, str); | 75 | lcd_(putsxy)(0, 0, str); |
76 | 76 | ||
77 | vo_lock(); | 77 | vo_lock(); |
78 | rb->lcd_update_rect(0, 0, LCD_WIDTH, 8); | 78 | lcd_(update_rect)(0, 0, LCD_WIDTH, 8); |
79 | vo_unlock(); | 79 | vo_unlock(); |
80 | 80 | ||
81 | td->last_showfps = *rb->current_tick; | 81 | td->last_showfps = *rb->current_tick; |
@@ -489,7 +489,7 @@ static void video_thread_msg(struct video_thread_data *td) | |||
489 | 489 | ||
490 | case STREAM_STOP: | 490 | case STREAM_STOP: |
491 | if (td->state == TSTATE_DATA) | 491 | if (td->state == TSTATE_DATA) |
492 | stream_clear_notify(&audio_str, DISK_BUF_DATA_NOTIFY); | 492 | stream_clear_notify(&video_str, DISK_BUF_DATA_NOTIFY); |
493 | 493 | ||
494 | td->status = STREAM_STOPPED; | 494 | td->status = STREAM_STOPPED; |
495 | td->state = TSTATE_EOS; | 495 | td->state = TSTATE_EOS; |
@@ -522,14 +522,12 @@ static void video_thread_msg(struct video_thread_data *td) | |||
522 | rb->lcd_update(); | 522 | rb->lcd_update(); |
523 | vo_unlock(); | 523 | vo_unlock(); |
524 | } | 524 | } |
525 | #else | ||
526 | GRAY_FLUSH_ICACHE(); | ||
527 | #endif | 525 | #endif |
528 | break; | 526 | break; |
529 | 527 | ||
530 | case STREAM_RESET: | 528 | case STREAM_RESET: |
531 | if (td->state == TSTATE_DATA) | 529 | if (td->state == TSTATE_DATA) |
532 | stream_clear_notify(&audio_str, DISK_BUF_DATA_NOTIFY); | 530 | stream_clear_notify(&video_str, DISK_BUF_DATA_NOTIFY); |
533 | 531 | ||
534 | td->state = TSTATE_INIT; | 532 | td->state = TSTATE_INIT; |
535 | td->status = STREAM_STOPPED; | 533 | td->status = STREAM_STOPPED; |