287d6223d3
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14851 a1c6a512-1295-4272-9138-f99709370657
179 lines
5 KiB
C
179 lines
5 KiB
C
#include "plugin.h"
|
|
#include "lib/configfile.h"
|
|
#include "lib/oldmenuapi.h"
|
|
|
|
#include "mpeg_settings.h"
|
|
|
|
extern struct plugin_api* rb;
|
|
|
|
struct mpeg_settings settings;
|
|
static struct mpeg_settings old_settings;
|
|
|
|
#define SETTINGS_VERSION 2
|
|
#define SETTINGS_MIN_VERSION 1
|
|
#define SETTINGS_FILENAME "mpegplayer.cfg"
|
|
|
|
static struct configdata config[] =
|
|
{
|
|
{TYPE_ENUM, 0, 2, &settings.showfps, "Show FPS",
|
|
(char *[]){ "No", "Yes" }, NULL},
|
|
{TYPE_ENUM, 0, 2, &settings.limitfps, "Limit FPS",
|
|
(char *[]){ "No", "Yes" }, NULL},
|
|
{TYPE_ENUM, 0, 2, &settings.skipframes, "Skip frames",
|
|
(char *[]){ "No", "Yes" }, NULL},
|
|
#if defined(TOSHIBA_GIGABEAT_F) || defined(SANSA_E200)
|
|
{TYPE_INT, 0, INT_MAX, &settings.displayoptions, "Display options",
|
|
NULL, NULL},
|
|
#endif
|
|
};
|
|
|
|
enum mpeg_menu_ids
|
|
{
|
|
__MPEG_OPTION_START = -1,
|
|
#if defined(TOSHIBA_GIGABEAT_F) || defined(SANSA_E200)
|
|
MPEG_OPTION_DISPLAY_SETTINGS,
|
|
#endif
|
|
MPEG_OPTION_DISPLAY_FPS,
|
|
MPEG_OPTION_LIMIT_FPS,
|
|
MPEG_OPTION_SKIP_FRAMES,
|
|
MPEG_OPTION_QUIT,
|
|
};
|
|
|
|
static const struct opt_items noyes[2] = {
|
|
{ "No", -1 },
|
|
{ "Yes", -1 },
|
|
};
|
|
|
|
#if defined(TOSHIBA_GIGABEAT_F) || defined(SANSA_E200)
|
|
static bool set_option_dithering(void)
|
|
{
|
|
int val = (settings.displayoptions & LCD_YUV_DITHER) ? 1 : 0;
|
|
rb->set_option("Dithering", &val, INT, noyes, 2, NULL);
|
|
settings.displayoptions = (settings.displayoptions & ~LCD_YUV_DITHER)
|
|
| ((val != 0) ? LCD_YUV_DITHER : 0);
|
|
rb->lcd_yuv_set_options(settings.displayoptions);
|
|
return false;
|
|
}
|
|
|
|
static void display_options(void)
|
|
{
|
|
static const struct menu_item items[] = {
|
|
{ "Dithering", set_option_dithering },
|
|
};
|
|
|
|
int m = menu_init(rb, items, ARRAYLEN(items),
|
|
NULL, NULL, NULL, NULL);
|
|
menu_run(m);
|
|
menu_exit(m);
|
|
}
|
|
#endif /* #ifdef TOSHIBA_GIGABEAT_F */
|
|
|
|
bool mpeg_menu(void)
|
|
{
|
|
int m;
|
|
int result;
|
|
int menu_quit=0;
|
|
|
|
static const struct menu_item items[] = {
|
|
#if defined(TOSHIBA_GIGABEAT_F) || defined(SANSA_E200)
|
|
[MPEG_OPTION_DISPLAY_SETTINGS] =
|
|
{ "Display Options", NULL },
|
|
#endif
|
|
[MPEG_OPTION_DISPLAY_FPS] =
|
|
{ "Display FPS", NULL },
|
|
[MPEG_OPTION_LIMIT_FPS] =
|
|
{ "Limit FPS", NULL },
|
|
[MPEG_OPTION_SKIP_FRAMES] =
|
|
{ "Skip frames", NULL },
|
|
[MPEG_OPTION_QUIT] =
|
|
{ "Quit mpegplayer", NULL },
|
|
};
|
|
|
|
m = menu_init(rb, items, ARRAYLEN(items), NULL, NULL, NULL, NULL);
|
|
|
|
rb->button_clear_queue();
|
|
|
|
while (!menu_quit) {
|
|
result=menu_show(m);
|
|
|
|
switch(result)
|
|
{
|
|
#if defined(TOSHIBA_GIGABEAT_F) || defined(SANSA_E200)
|
|
case MPEG_OPTION_DISPLAY_SETTINGS:
|
|
display_options();
|
|
break;
|
|
#endif
|
|
case MPEG_OPTION_DISPLAY_FPS:
|
|
rb->set_option("Display FPS",&settings.showfps,INT,
|
|
noyes, 2, NULL);
|
|
break;
|
|
case MPEG_OPTION_LIMIT_FPS:
|
|
rb->set_option("Limit FPS",&settings.limitfps,INT,
|
|
noyes, 2, NULL);
|
|
break;
|
|
case MPEG_OPTION_SKIP_FRAMES:
|
|
rb->set_option("Skip frames",&settings.skipframes,INT,
|
|
noyes, 2, NULL);
|
|
break;
|
|
case MPEG_OPTION_QUIT:
|
|
default:
|
|
menu_quit=1;
|
|
if (result == MENU_ATTACHED_USB)
|
|
result = MPEG_OPTION_QUIT;
|
|
break;
|
|
}
|
|
}
|
|
|
|
menu_exit(m);
|
|
|
|
rb->lcd_clear_display();
|
|
rb->lcd_update();
|
|
|
|
return (result==MPEG_OPTION_QUIT);
|
|
}
|
|
|
|
|
|
void init_settings(void)
|
|
{
|
|
/* Set the default settings */
|
|
settings.showfps = 0; /* Do not show FPS */
|
|
settings.limitfps = 1; /* Limit FPS */
|
|
settings.skipframes = 1; /* Skip frames */
|
|
#if defined(TOSHIBA_GIGABEAT_F) || defined(SANSA_E200)
|
|
settings.displayoptions = 0; /* No visual effects */
|
|
#endif
|
|
|
|
configfile_init(rb);
|
|
|
|
if (configfile_load(SETTINGS_FILENAME, config,
|
|
sizeof(config)/sizeof(*config),
|
|
SETTINGS_MIN_VERSION
|
|
) < 0)
|
|
{
|
|
/* If the loading failed, save a new config file (as the disk is
|
|
already spinning) */
|
|
configfile_save(SETTINGS_FILENAME, config,
|
|
sizeof(config)/sizeof(*config),
|
|
SETTINGS_VERSION);
|
|
}
|
|
|
|
/* Keep a copy of the saved version of the settings - so we can check if
|
|
the settings have changed when we quit */
|
|
old_settings = settings;
|
|
#if defined(TOSHIBA_GIGABEAT_F) || defined(SANSA_E200)
|
|
rb->lcd_yuv_set_options(settings.displayoptions);
|
|
#endif
|
|
}
|
|
|
|
void save_settings(void)
|
|
{
|
|
/* Save the user settings if they have changed */
|
|
if (rb->memcmp(&settings,&old_settings,sizeof(settings))!=0) {
|
|
configfile_save(SETTINGS_FILENAME, config,
|
|
sizeof(config)/sizeof(*config),
|
|
SETTINGS_VERSION);
|
|
|
|
/* Store the settings in old_settings - to check for future changes */
|
|
old_settings = settings;
|
|
}
|
|
}
|