forked from len0rd/rockbox
Move FPS display out of video_out_rockbox.c and into mpegplayer.c. Also add frame-rate limiting and frame-skipping (skipping display only, not decoding) to try and achieve real-time playback. Frame-rate limiting and frame skipping (and FPS display) are enabled via options in a new menu and are currently all off by default.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10669 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
18cfe431d7
commit
c8e69dfb71
5 changed files with 279 additions and 32 deletions
118
apps/plugins/mpegplayer/mpeg_settings.c
Normal file
118
apps/plugins/mpegplayer/mpeg_settings.c
Normal file
|
@ -0,0 +1,118 @@
|
|||
#include "plugin.h"
|
||||
#include "lib/configfile.h"
|
||||
|
||||
#include "mpeg_settings.h"
|
||||
|
||||
extern struct plugin_api* rb;
|
||||
|
||||
struct mpeg_settings settings;
|
||||
static struct mpeg_settings old_settings;
|
||||
|
||||
#define SETTINGS_VERSION 1
|
||||
#define SETTINGS_MIN_VERSION 1
|
||||
#define SETTINGS_FILENAME "mpegplayer.cfg"
|
||||
|
||||
static char* showfps_options[] = {"No", "Yes"};
|
||||
static char* limitfps_options[] = {"No", "Yes"};
|
||||
static char* skipframes_options[] = {"No", "Yes"};
|
||||
|
||||
static struct configdata config[] =
|
||||
{
|
||||
{TYPE_ENUM, 0, 2, &settings.showfps, "Show FPS", showfps_options, NULL},
|
||||
{TYPE_ENUM, 0, 2, &settings.limitfps, "Limit FPS", limitfps_options, NULL},
|
||||
{TYPE_ENUM, 0, 2, &settings.skipframes, "Skip frames", skipframes_options, NULL},
|
||||
};
|
||||
|
||||
bool mpeg_menu(void)
|
||||
{
|
||||
int m;
|
||||
int result;
|
||||
int menu_quit=0;
|
||||
|
||||
static const struct opt_items noyes[2] = {
|
||||
{ "No", -1 },
|
||||
{ "Yes", -1 },
|
||||
};
|
||||
|
||||
static const struct menu_item items[] = {
|
||||
{ "Display FPS", NULL },
|
||||
{ "Limit FPS", NULL },
|
||||
{ "Skip frames", NULL },
|
||||
{ "Quit mpegplayer", NULL },
|
||||
};
|
||||
|
||||
m = rb->menu_init(items, sizeof(items) / sizeof(*items),
|
||||
NULL, NULL, NULL, NULL);
|
||||
|
||||
rb->button_clear_queue();
|
||||
|
||||
while (!menu_quit) {
|
||||
result=rb->menu_show(m);
|
||||
|
||||
switch(result)
|
||||
{
|
||||
case 0: /* Show FPS */
|
||||
rb->set_option("Display FPS",&settings.showfps,INT,
|
||||
noyes, 2, NULL);
|
||||
break;
|
||||
case 1: /* Limit FPS */
|
||||
rb->set_option("Limit FPS",&settings.limitfps,INT,
|
||||
noyes, 2, NULL);
|
||||
break;
|
||||
case 2: /* Skip frames */
|
||||
rb->set_option("Skip frames",&settings.skipframes,INT,
|
||||
noyes, 2, NULL);
|
||||
break;
|
||||
default:
|
||||
menu_quit=1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
rb->menu_exit(m);
|
||||
|
||||
rb->lcd_clear_display();
|
||||
rb->lcd_update();
|
||||
|
||||
return (result==3);
|
||||
}
|
||||
|
||||
|
||||
void init_settings(void)
|
||||
{
|
||||
/* Set the default settings */
|
||||
settings.showfps = 0; /* Do not show FPS */
|
||||
settings.limitfps = 0; /* Do not limit FPS */
|
||||
settings.skipframes = 0; /* Do not skip frames */
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue