forked from len0rd/rockbox
Patch #4936 from Jonathan Gordon with a small change by me. slideshow support for JPEG viewer
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9340 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
6ce466ea2c
commit
47bf642002
1 changed files with 186 additions and 83 deletions
|
@ -11,7 +11,7 @@
|
|||
* (This is a real mess if it has to be coded in one single C file)
|
||||
*
|
||||
* File scrolling addition (C) 2005 Alexander Spyridakis
|
||||
* Copyright (C) 2004 Jörg Hohensohn aka [IDC]Dragon
|
||||
* Copyright (C) 2004 J<EFBFBD>g Hohensohn aka [IDC]Dragon
|
||||
* Grayscale framework (C) 2004 Jens Arnold
|
||||
* Heavily borrowed from the IJG implementation (C) Thomas G. Lane
|
||||
* Small & fast downscaling IDCT (C) 2002 by Guido Vollbeding JPEGclub.org
|
||||
|
@ -25,6 +25,7 @@
|
|||
****************************************************************************/
|
||||
|
||||
#include "plugin.h"
|
||||
#include "playback_control.h"
|
||||
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
#include "gray.h"
|
||||
|
@ -40,9 +41,9 @@ PLUGIN_HEADER
|
|||
#define JPEG_DOWN BUTTON_DOWN
|
||||
#define JPEG_LEFT BUTTON_LEFT
|
||||
#define JPEG_RIGHT BUTTON_RIGHT
|
||||
#define JPEG_QUIT BUTTON_OFF
|
||||
#define JPEG_NEXT BUTTON_F3
|
||||
#define JPEG_PREVIOUS BUTTON_F2
|
||||
#define JPEG_MENU BUTTON_OFF
|
||||
|
||||
|
||||
#elif CONFIG_KEYPAD == ONDIO_PAD
|
||||
|
@ -53,9 +54,9 @@ PLUGIN_HEADER
|
|||
#define JPEG_DOWN BUTTON_DOWN
|
||||
#define JPEG_LEFT BUTTON_LEFT
|
||||
#define JPEG_RIGHT BUTTON_RIGHT
|
||||
#define JPEG_QUIT BUTTON_OFF
|
||||
#define JPEG_NEXT (BUTTON_MENU | BUTTON_RIGHT)
|
||||
#define JPEG_PREVIOUS (BUTTON_MENU | BUTTON_LEFT)
|
||||
#define JPEG_MENU BUTTON_OFF
|
||||
|
||||
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
|
||||
(CONFIG_KEYPAD == IRIVER_H300_PAD)
|
||||
|
@ -65,7 +66,6 @@ PLUGIN_HEADER
|
|||
#define JPEG_DOWN BUTTON_DOWN
|
||||
#define JPEG_LEFT BUTTON_LEFT
|
||||
#define JPEG_RIGHT BUTTON_RIGHT
|
||||
#define JPEG_QUIT BUTTON_OFF
|
||||
#if (CONFIG_KEYPAD == IRIVER_H100_PAD)
|
||||
#define JPEG_NEXT BUTTON_ON
|
||||
#define JPEG_PREVIOUS BUTTON_REC
|
||||
|
@ -73,6 +73,7 @@ PLUGIN_HEADER
|
|||
#define JPEG_NEXT BUTTON_REC
|
||||
#define JPEG_PREVIOUS BUTTON_ON
|
||||
#endif
|
||||
#define JPEG_MENU BUTTON_OFF
|
||||
|
||||
#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
|
||||
#define JPEG_ZOOM_IN BUTTON_SCROLL_FWD
|
||||
|
@ -81,8 +82,10 @@ PLUGIN_HEADER
|
|||
#define JPEG_DOWN BUTTON_PLAY
|
||||
#define JPEG_LEFT BUTTON_LEFT
|
||||
#define JPEG_RIGHT BUTTON_RIGHT
|
||||
#define JPEG_QUIT (BUTTON_SELECT | BUTTON_MENU)
|
||||
#define JPEG_NEXT (BUTTON_SELECT | BUTTON_RIGHT)
|
||||
#define JPEG_MENU (BUTTON_SELECT | BUTTON_MENU)
|
||||
#define JPEG_NEXT_PRE (BUTTON_SELECT | BUTTON_RIGHT)
|
||||
#define JPEG_NEXT (BUTTON_SELECT | BUTTON_RIGHT | BUTTON_REL)
|
||||
#define JPEG_TOGGLE_SLIDESHOW (BUTTON_SELECT | BUTTON_RIGHT | BUTTON_REPEAT)
|
||||
#define JPEG_PREVIOUS (BUTTON_SELECT |BUTTON_LEFT)
|
||||
|
||||
#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
|
||||
|
@ -93,8 +96,10 @@ PLUGIN_HEADER
|
|||
#define JPEG_DOWN BUTTON_DOWN
|
||||
#define JPEG_LEFT BUTTON_LEFT
|
||||
#define JPEG_RIGHT BUTTON_RIGHT
|
||||
#define JPEG_QUIT BUTTON_POWER
|
||||
#define JPEG_NEXT BUTTON_PLAY
|
||||
#define JPEG_MENU BUTTON_POWER
|
||||
#define JPEG_NEXT_PRE BUTTON_PLAY
|
||||
#define JPEG_NEXT (BUTTON_PLAY|BUTTON_REL)
|
||||
#define JPEG_TOGGLE_SLIDESHOW (BUTTON_PLAY|BUTTON_REPEAT)
|
||||
#define JPEG_PREVIOUS BUTTON_REC
|
||||
|
||||
#elif CONFIG_KEYPAD == GIGABEAT_PAD
|
||||
|
@ -105,7 +110,7 @@ PLUGIN_HEADER
|
|||
#define JPEG_DOWN BUTTON_DOWN
|
||||
#define JPEG_LEFT BUTTON_LEFT
|
||||
#define JPEG_RIGHT BUTTON_RIGHT
|
||||
#define JPEG_QUIT BUTTON_A
|
||||
#define JPEG_MENU BUTTON_A
|
||||
#define JPEG_NEXT (BUTTON_POWER | BUTTON_RIGHT)
|
||||
#define JPEG_PREVIOUS (BUTTON_POWER | BUTTON_LEFT)
|
||||
|
||||
|
@ -151,7 +156,8 @@ static struct plugin_api* rb;
|
|||
#define INLINE static inline
|
||||
#define ENDIAN_SWAP16(n) n /* only for poor little endian machines */
|
||||
|
||||
|
||||
static int slideshow_enabled = false;
|
||||
static int button_timeout = HZ*5;
|
||||
|
||||
/**************** begin JPEG code ********************/
|
||||
|
||||
|
@ -2069,6 +2075,76 @@ void cleanup(void *parameter)
|
|||
#define ZOOM_IN 100 /* return codes for below function */
|
||||
#define ZOOM_OUT 101
|
||||
|
||||
int show_menu() /* return 1 to quit */
|
||||
{
|
||||
int m;
|
||||
int result;
|
||||
static const struct menu_item items[] = {
|
||||
{ "Quit", NULL },
|
||||
{ "Toggle Slideshow Mode", NULL },
|
||||
{ "Change Slideshow Timeout", NULL },
|
||||
{ "Show Playback Menu", NULL },
|
||||
{ "Return", NULL },
|
||||
};
|
||||
static const struct opt_items slideshow[2] = {
|
||||
{"Disable",NULL},
|
||||
{"Enable",NULL},
|
||||
};
|
||||
static const struct opt_items timeout[12] = {
|
||||
{ "1 second", NULL },
|
||||
{ "2 seconds", NULL },
|
||||
{ "3 seconds", NULL },
|
||||
{ "4 seconds", NULL },
|
||||
{ "5 seconds", NULL },
|
||||
{ "6 seconds", NULL },
|
||||
{ "7 seconds", NULL },
|
||||
{ "8 seconds", NULL },
|
||||
{ "9 seconds", NULL },
|
||||
{ "10 seconds", NULL },
|
||||
{ "15 seconds", NULL },
|
||||
{ "20 seconds", NULL },
|
||||
};
|
||||
m = rb->menu_init(items, sizeof(items) / sizeof(*items),
|
||||
NULL, NULL, NULL, NULL);
|
||||
result=rb->menu_show(m);
|
||||
switch (result)
|
||||
{
|
||||
case 0:
|
||||
rb->menu_exit(m);
|
||||
return 1;
|
||||
break;
|
||||
case 1: //toggle slideshow
|
||||
rb->set_option("Toggle Slideshow", &slideshow_enabled, INT,
|
||||
slideshow , 2, NULL);
|
||||
break;
|
||||
case 2:
|
||||
switch (button_timeout/HZ)
|
||||
{
|
||||
case 10: result = 9; break;
|
||||
case 15: result = 10; break;
|
||||
case 20: result = 11; break;
|
||||
default: result = (button_timeout/HZ)-1; break;
|
||||
}
|
||||
rb->set_option("Slideshow Timeout", &result, INT,
|
||||
timeout , 12, NULL);
|
||||
switch (result)
|
||||
{
|
||||
case 9: button_timeout = 10*HZ; break;
|
||||
case 10: button_timeout = 15*HZ; break;
|
||||
case 11: button_timeout = 20*HZ; break;
|
||||
default: button_timeout = (result+1)*HZ; break;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
playback_control(rb);
|
||||
break;
|
||||
case 4:
|
||||
MYLCD(clear_display)();
|
||||
break;
|
||||
}
|
||||
rb->menu_exit(m);
|
||||
return 0;
|
||||
}
|
||||
/* interactively scroll around the image */
|
||||
int scroll_bmp(struct t_disp* pdisp)
|
||||
{
|
||||
|
@ -2079,7 +2155,9 @@ int scroll_bmp(struct t_disp* pdisp)
|
|||
int button;
|
||||
int move;
|
||||
|
||||
button = rb->button_get(true);
|
||||
if (slideshow_enabled)
|
||||
button = rb->button_get_w_tmo(button_timeout);
|
||||
else button = rb->button_get(true);
|
||||
|
||||
switch(button)
|
||||
{
|
||||
|
@ -2180,8 +2258,17 @@ int scroll_bmp(struct t_disp* pdisp)
|
|||
MYLCD_UPDATE();
|
||||
}
|
||||
break;
|
||||
|
||||
case BUTTON_NONE:
|
||||
if (!slideshow_enabled)
|
||||
break;
|
||||
if (entries > 0)
|
||||
return change_filename(DIR_NEXT);
|
||||
break;
|
||||
case JPEG_NEXT:
|
||||
#ifdef JPEG_NEXT_PRE
|
||||
if (lastbutton != JPEG_NEXT_PRE)
|
||||
break;
|
||||
#endif
|
||||
if (entries > 0)
|
||||
return change_filename(DIR_NEXT);
|
||||
break;
|
||||
|
@ -2207,9 +2294,25 @@ int scroll_bmp(struct t_disp* pdisp)
|
|||
return ZOOM_OUT;
|
||||
break;
|
||||
|
||||
case JPEG_QUIT:
|
||||
return PLUGIN_OK;
|
||||
|
||||
case JPEG_MENU:
|
||||
#ifdef USEGSLIB
|
||||
gray_show(false); /* switch off grayscale overlay */
|
||||
#endif
|
||||
if (show_menu() == 1)
|
||||
return PLUGIN_OK;
|
||||
#ifdef USEGSLIB
|
||||
gray_show(true); /* switch on grayscale overlay */
|
||||
#else
|
||||
yuv_bitmap_part(
|
||||
pdisp->bitmap, pdisp->csub_x, pdisp->csub_y,
|
||||
pdisp->x, pdisp->y, pdisp->stride,
|
||||
MAX(0, (LCD_WIDTH - pdisp->width) / 2),
|
||||
MAX(0, (LCD_HEIGHT - pdisp->height) / 2),
|
||||
MIN(LCD_WIDTH, pdisp->width),
|
||||
MIN(LCD_HEIGHT, pdisp->height));
|
||||
MYLCD_UPDATE();
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
if (rb->default_event_handler_ex(button, cleanup, NULL)
|
||||
== SYS_USB_CONNECTED)
|
||||
|
@ -2463,7 +2566,7 @@ int load_and_show(char* filename)
|
|||
/*try again this file, now using the audio buffer */
|
||||
return PLUGIN_OTHER;
|
||||
|
||||
case JPEG_QUIT:
|
||||
case JPEG_MENU:
|
||||
return PLUGIN_OK;
|
||||
|
||||
case JPEG_LEFT:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue