summaryrefslogtreecommitdiff
path: root/apps/plugins/mpegplayer/mpeg_settings.c
diff options
context:
space:
mode:
authorDave Chapman <dave@dchapman.com>2006-08-20 23:12:56 +0000
committerDave Chapman <dave@dchapman.com>2006-08-20 23:12:56 +0000
commitc8e69dfb71d936b4bc5e18f6246ac126c629f772 (patch)
treed43563a0c30011d3ec7af1e13e1892bdfff60a46 /apps/plugins/mpegplayer/mpeg_settings.c
parent18cfe431d7556f8cd7047018febe191073c26a1f (diff)
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
Diffstat (limited to 'apps/plugins/mpegplayer/mpeg_settings.c')
-rw-r--r--apps/plugins/mpegplayer/mpeg_settings.c118
1 files changed, 118 insertions, 0 deletions
diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c
new file mode 100644
index 0000000000..dc63626c10
--- /dev/null
+++ b/apps/plugins/mpegplayer/mpeg_settings.c
@@ -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;
+ }
+}