forked from len0rd/rockbox
MPEGPlayer quickie: add an option to set the backlight brightness to a plugin-specified value when playing video or interacting. Nice when one likes a dim backlight normally but that isn't sufficient when viewing video for instance. Suggested in FS#8417 in addition to my own desire for this.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17563 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
18f13b149a
commit
1f2df74079
5 changed files with 172 additions and 16 deletions
|
@ -91,3 +91,20 @@ void buttonlight_use_settings(const struct plugin_api* rb)
|
||||||
rb->buttonlight_set_timeout(rb->global_settings->buttonlight_timeout);
|
rb->buttonlight_set_timeout(rb->global_settings->buttonlight_timeout);
|
||||||
}
|
}
|
||||||
#endif /* HAVE_BUTTON_LIGHT */
|
#endif /* HAVE_BUTTON_LIGHT */
|
||||||
|
|
||||||
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
void backlight_brightness_set(const struct plugin_api *rb,
|
||||||
|
int brightness)
|
||||||
|
{
|
||||||
|
if (!rb)
|
||||||
|
return;
|
||||||
|
rb->backlight_set_brightness(brightness);
|
||||||
|
}
|
||||||
|
|
||||||
|
void backlight_brightness_use_setting(const struct plugin_api *rb)
|
||||||
|
{
|
||||||
|
if (!rb)
|
||||||
|
return;
|
||||||
|
rb->backlight_set_brightness(rb->global_settings->brightness);
|
||||||
|
}
|
||||||
|
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
|
||||||
|
|
|
@ -34,4 +34,15 @@ void remote_backlight_use_settings(const struct plugin_api* rb);
|
||||||
void buttonlight_force_on(const struct plugin_api* rb);
|
void buttonlight_force_on(const struct plugin_api* rb);
|
||||||
void buttonlight_use_settings(const struct plugin_api* rb);
|
void buttonlight_use_settings(const struct plugin_api* rb);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Backlight brightness adjustment settings
|
||||||
|
*/
|
||||||
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
void backlight_brightness_set(const struct plugin_api *rb,
|
||||||
|
int brightness);
|
||||||
|
void backlight_brightness_use_setting(const struct plugin_api *rb);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _LIB_HELPER_H_ */
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "plugin.h"
|
#include "plugin.h"
|
||||||
|
#include "helper.h"
|
||||||
#include "lib/configfile.h"
|
#include "lib/configfile.h"
|
||||||
#include "lib/oldmenuapi.h"
|
#include "lib/oldmenuapi.h"
|
||||||
|
|
||||||
|
@ -172,6 +173,10 @@ static struct configdata config[] =
|
||||||
{TYPE_INT, 0, 2, &settings.crossfeed, "Crossfeed", NULL, NULL},
|
{TYPE_INT, 0, 2, &settings.crossfeed, "Crossfeed", NULL, NULL},
|
||||||
{TYPE_INT, 0, 2, &settings.equalizer, "Equalizer", NULL, NULL},
|
{TYPE_INT, 0, 2, &settings.equalizer, "Equalizer", NULL, NULL},
|
||||||
{TYPE_INT, 0, 2, &settings.dithering, "Dithering", NULL, NULL},
|
{TYPE_INT, 0, 2, &settings.dithering, "Dithering", NULL, NULL},
|
||||||
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
{TYPE_INT, -1, INT_MAX, &settings.backlight_brightness,
|
||||||
|
"Backlight brightness", NULL, NULL},
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct opt_items noyes[2] = {
|
static const struct opt_items noyes[2] = {
|
||||||
|
@ -189,6 +194,10 @@ static const struct opt_items globaloff[2] = {
|
||||||
{ "Use sound setting", -1 },
|
{ "Use sound setting", -1 },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
#define BACKLIGHT_OPTION_DEFAULT "Use setting"
|
||||||
|
#endif
|
||||||
|
|
||||||
static long mpeg_menu_sysevent_id;
|
static long mpeg_menu_sysevent_id;
|
||||||
|
|
||||||
void mpeg_menu_sysevent_clear(void)
|
void mpeg_menu_sysevent_clear(void)
|
||||||
|
@ -252,6 +261,55 @@ static bool mpeg_set_option(const char* string,
|
||||||
return usb;
|
return usb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool mpeg_set_int(const char *string, const char *unit,
|
||||||
|
int voice_unit, const int *variable,
|
||||||
|
void (*function)(int), int step,
|
||||||
|
int min,
|
||||||
|
int max,
|
||||||
|
void (*formatter)(char*, size_t, int, const char*))
|
||||||
|
{
|
||||||
|
mpeg_menu_sysevent_clear();
|
||||||
|
|
||||||
|
bool usb = rb->set_int(string, unit, voice_unit, variable, function,
|
||||||
|
step, min, max, formatter);
|
||||||
|
|
||||||
|
if (usb)
|
||||||
|
mpeg_menu_sysevent_id = ACTION_STD_CANCEL;
|
||||||
|
|
||||||
|
return usb;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
void mpeg_backlight_update_brightness(int value)
|
||||||
|
{
|
||||||
|
if (value >= 0)
|
||||||
|
{
|
||||||
|
value += MIN_BRIGHTNESS_SETTING;
|
||||||
|
backlight_brightness_set(rb, value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
backlight_brightness_use_setting(rb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void backlight_brightness_function(int value)
|
||||||
|
{
|
||||||
|
mpeg_backlight_update_brightness(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void backlight_brightness_formatter(char *buf, size_t length,
|
||||||
|
int value, const char *input)
|
||||||
|
{
|
||||||
|
if (value < 0)
|
||||||
|
rb->strncpy(buf, BACKLIGHT_OPTION_DEFAULT, length);
|
||||||
|
else
|
||||||
|
rb->snprintf(buf, length, "%d", value + MIN_BRIGHTNESS_SETTING);
|
||||||
|
|
||||||
|
(void)input;
|
||||||
|
}
|
||||||
|
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
|
||||||
|
|
||||||
/* Sync a particular audio setting to global or mpegplayer forced off */
|
/* Sync a particular audio setting to global or mpegplayer forced off */
|
||||||
static void sync_audio_setting(int setting, bool global)
|
static void sync_audio_setting(int setting, bool global)
|
||||||
{
|
{
|
||||||
|
@ -816,6 +874,10 @@ static void display_options(void)
|
||||||
{ "Limit FPS", NULL },
|
{ "Limit FPS", NULL },
|
||||||
[MPEG_OPTION_SKIP_FRAMES] =
|
[MPEG_OPTION_SKIP_FRAMES] =
|
||||||
{ "Skip frames", NULL },
|
{ "Skip frames", NULL },
|
||||||
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
[MPEG_OPTION_BACKLIGHT_BRIGHTNESS] =
|
||||||
|
{ "Backlight brightness", NULL },
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
menu_id = menu_init(rb, items, ARRAYLEN(items),
|
menu_id = menu_init(rb, items, ARRAYLEN(items),
|
||||||
|
@ -856,6 +918,19 @@ static void display_options(void)
|
||||||
noyes, 2, NULL);
|
noyes, 2, NULL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
case MPEG_OPTION_BACKLIGHT_BRIGHTNESS:
|
||||||
|
result = settings.backlight_brightness;
|
||||||
|
mpeg_backlight_update_brightness(result);
|
||||||
|
mpeg_set_int("Backlight brightness", NULL, -1, &result,
|
||||||
|
backlight_brightness_function, 1, -1,
|
||||||
|
MAX_BRIGHTNESS_SETTING - MIN_BRIGHTNESS_SETTING,
|
||||||
|
backlight_brightness_formatter);
|
||||||
|
settings.backlight_brightness = result;
|
||||||
|
mpeg_backlight_update_brightness(-1);
|
||||||
|
break;
|
||||||
|
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
|
||||||
|
|
||||||
default:
|
default:
|
||||||
menu_quit = true;
|
menu_quit = true;
|
||||||
break;
|
break;
|
||||||
|
@ -1057,6 +1132,9 @@ void init_settings(const char* filename)
|
||||||
settings.skipframes = 1; /* Skip frames */
|
settings.skipframes = 1; /* Skip frames */
|
||||||
settings.resume_options = MPEG_RESUME_MENU_ALWAYS; /* Enable start menu */
|
settings.resume_options = MPEG_RESUME_MENU_ALWAYS; /* Enable start menu */
|
||||||
settings.resume_count = -1;
|
settings.resume_count = -1;
|
||||||
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
settings.backlight_brightness = -1; /* Use default setting */
|
||||||
|
#endif
|
||||||
#if MPEG_OPTION_DITHERING_ENABLED
|
#if MPEG_OPTION_DITHERING_ENABLED
|
||||||
settings.displayoptions = 0; /* No visual effects */
|
settings.displayoptions = 0; /* No visual effects */
|
||||||
#endif
|
#endif
|
||||||
|
@ -1126,6 +1204,11 @@ void save_settings(void)
|
||||||
++settings.resume_count);
|
++settings.resume_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
configfile_update_entry(SETTINGS_FILENAME, "Backlight brightness",
|
||||||
|
settings.backlight_brightness);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if MPEG_OPTION_DITHERING_ENABLED
|
#if MPEG_OPTION_DITHERING_ENABLED
|
||||||
configfile_update_entry(SETTINGS_FILENAME, "Display options",
|
configfile_update_entry(SETTINGS_FILENAME, "Display options",
|
||||||
settings.displayoptions);
|
settings.displayoptions);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
#include "plugin.h"
|
#include "plugin.h"
|
||||||
|
|
||||||
#define SETTINGS_VERSION 4
|
#define SETTINGS_VERSION 5
|
||||||
#define SETTINGS_MIN_VERSION 1
|
#define SETTINGS_MIN_VERSION 1
|
||||||
#define SETTINGS_FILENAME "mpegplayer.cfg"
|
#define SETTINGS_FILENAME "mpegplayer.cfg"
|
||||||
|
|
||||||
|
@ -22,6 +22,9 @@ enum mpeg_option_id
|
||||||
MPEG_OPTION_DISPLAY_FPS,
|
MPEG_OPTION_DISPLAY_FPS,
|
||||||
MPEG_OPTION_LIMIT_FPS,
|
MPEG_OPTION_LIMIT_FPS,
|
||||||
MPEG_OPTION_SKIP_FRAMES,
|
MPEG_OPTION_SKIP_FRAMES,
|
||||||
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
MPEG_OPTION_BACKLIGHT_BRIGHTNESS,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
enum mpeg_audio_option_id
|
enum mpeg_audio_option_id
|
||||||
|
@ -78,6 +81,10 @@ struct mpeg_settings {
|
||||||
int crossfeed;
|
int crossfeed;
|
||||||
int equalizer;
|
int equalizer;
|
||||||
int dithering;
|
int dithering;
|
||||||
|
/* Backlight options */
|
||||||
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
int backlight_brightness;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct mpeg_settings settings;
|
extern struct mpeg_settings settings;
|
||||||
|
@ -97,3 +104,7 @@ void mpeg_menu_sysevent_handle(void);
|
||||||
|
|
||||||
void init_settings(const char* filename);
|
void init_settings(const char* filename);
|
||||||
void save_settings(void);
|
void save_settings(void);
|
||||||
|
|
||||||
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
void mpeg_backlight_update_brightness(int value);
|
||||||
|
#endif
|
||||||
|
|
|
@ -587,6 +587,30 @@ static void draw_putsxy_oriented(int x, int y, const char *str)
|
||||||
}
|
}
|
||||||
#endif /* LCD_PORTRAIT */
|
#endif /* LCD_PORTRAIT */
|
||||||
|
|
||||||
|
static void wvs_backlight_on_video_mode(bool video_on)
|
||||||
|
{
|
||||||
|
if (video_on) {
|
||||||
|
/* Turn off backlight timeout */
|
||||||
|
/* backlight control in lib/helper.c */
|
||||||
|
backlight_force_on(rb);
|
||||||
|
} else {
|
||||||
|
/* Revert to user's backlight settings */
|
||||||
|
backlight_use_settings(rb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
|
||||||
|
static void wvs_backlight_brightness_video_mode(bool video_on)
|
||||||
|
{
|
||||||
|
if (settings.backlight_brightness < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mpeg_backlight_update_brightness(
|
||||||
|
video_on ? settings.backlight_brightness : -1);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define wvs_backlight_brightness_video_mode(video_on)
|
||||||
|
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
|
||||||
|
|
||||||
static void wvs_text_init(void)
|
static void wvs_text_init(void)
|
||||||
{
|
{
|
||||||
|
@ -1012,6 +1036,11 @@ static void wvs_show(unsigned show)
|
||||||
|
|
||||||
wvs.flags |= WVS_SHOW;
|
wvs.flags |= WVS_SHOW;
|
||||||
|
|
||||||
|
if (wvs.status != WVS_STATUS_PLAYING) {
|
||||||
|
/* Not playing - set brightness to mpegplayer setting */
|
||||||
|
wvs_backlight_brightness_video_mode(true);
|
||||||
|
}
|
||||||
|
|
||||||
stream_vo_set_clip(&rc);
|
stream_vo_set_clip(&rc);
|
||||||
|
|
||||||
if (!(show & WVS_NODRAW))
|
if (!(show & WVS_NODRAW))
|
||||||
|
@ -1032,6 +1061,11 @@ static void wvs_show(unsigned show)
|
||||||
} else {
|
} else {
|
||||||
stream_vo_set_clip(NULL);
|
stream_vo_set_clip(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wvs.status != WVS_STATUS_PLAYING) {
|
||||||
|
/* Not playing - restore backlight brightness */
|
||||||
|
wvs_backlight_brightness_video_mode(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1227,6 +1261,8 @@ static int wvs_play(uint32_t time)
|
||||||
retval = stream_seek(time, SEEK_SET);
|
retval = stream_seek(time, SEEK_SET);
|
||||||
|
|
||||||
if (retval >= STREAM_OK) {
|
if (retval >= STREAM_OK) {
|
||||||
|
wvs_backlight_on_video_mode(true);
|
||||||
|
wvs_backlight_brightness_video_mode(true);
|
||||||
stream_show_vo(true);
|
stream_show_vo(true);
|
||||||
retval = stream_play();
|
retval = stream_play();
|
||||||
|
|
||||||
|
@ -1251,6 +1287,8 @@ static int wvs_halt(void)
|
||||||
/* Cancel some auto refreshes - caller will restart them if desired */
|
/* Cancel some auto refreshes - caller will restart them if desired */
|
||||||
wvs_cancel_refresh(WVS_REFRESH_VIDEO | WVS_REFRESH_RESUME);
|
wvs_cancel_refresh(WVS_REFRESH_VIDEO | WVS_REFRESH_RESUME);
|
||||||
|
|
||||||
|
/* No backlight fiddling here - callers does the right thing */
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1267,14 +1305,19 @@ static int wvs_pause(void)
|
||||||
|
|
||||||
wvs_set_status(WVS_STATUS_PAUSED);
|
wvs_set_status(WVS_STATUS_PAUSED);
|
||||||
|
|
||||||
|
wvs_backlight_on_video_mode(false);
|
||||||
|
/* Leave brightness alone and restore it when WVS is hidden */
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Resume playback if halted or paused */
|
/* Resume playback if halted or paused */
|
||||||
static void wvs_resume(void)
|
static void wvs_resume(void)
|
||||||
{
|
{
|
||||||
/* Cancel video and resume auto refresh - the resyc when starting playback
|
/* Cancel video and resume auto refresh - the resyc when starting
|
||||||
* will perform those tasks */
|
* playback will perform those tasks */
|
||||||
|
wvs_backlight_on_video_mode(true);
|
||||||
|
wvs_backlight_brightness_video_mode(true);
|
||||||
wvs_cancel_refresh(WVS_REFRESH_VIDEO | WVS_REFRESH_RESUME);
|
wvs_cancel_refresh(WVS_REFRESH_VIDEO | WVS_REFRESH_RESUME);
|
||||||
wvs_set_status(WVS_STATUS_PLAYING);
|
wvs_set_status(WVS_STATUS_PLAYING);
|
||||||
stream_resume();
|
stream_resume();
|
||||||
|
@ -1295,6 +1338,9 @@ static void wvs_stop(void)
|
||||||
|
|
||||||
if (resume_time != INVALID_TIMESTAMP)
|
if (resume_time != INVALID_TIMESTAMP)
|
||||||
settings.resume_time = resume_time;
|
settings.resume_time = resume_time;
|
||||||
|
|
||||||
|
wvs_backlight_on_video_mode(false);
|
||||||
|
wvs_backlight_brightness_video_mode(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Perform a seek if seeking is possible for this stream - if playing, a delay
|
/* Perform a seek if seeking is possible for this stream - if playing, a delay
|
||||||
|
@ -1343,14 +1389,12 @@ static void wvs_handle_phone_plug(bool inserted)
|
||||||
if (inserted) {
|
if (inserted) {
|
||||||
if (rb->global_settings->unplug_mode > 1) {
|
if (rb->global_settings->unplug_mode > 1) {
|
||||||
if (status == STREAM_PAUSED) {
|
if (status == STREAM_PAUSED) {
|
||||||
backlight_force_on(rb);
|
|
||||||
wvs_resume();
|
wvs_resume();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (status == STREAM_PLAYING) {
|
if (status == STREAM_PLAYING) {
|
||||||
wvs_pause();
|
wvs_pause();
|
||||||
backlight_use_settings(rb);
|
|
||||||
|
|
||||||
if (stream_can_seek() && rb->global_settings->unplug_rw) {
|
if (stream_can_seek() && rb->global_settings->unplug_rw) {
|
||||||
stream_seek(-rb->global_settings->unplug_rw*TS_SECOND,
|
stream_seek(-rb->global_settings->unplug_rw*TS_SECOND,
|
||||||
|
@ -1371,10 +1415,6 @@ static void button_loop(void)
|
||||||
rb->lcd_clear_display();
|
rb->lcd_clear_display();
|
||||||
rb->lcd_update();
|
rb->lcd_update();
|
||||||
|
|
||||||
/* Turn off backlight timeout */
|
|
||||||
/* backlight control in lib/helper.c */
|
|
||||||
backlight_force_on(rb);
|
|
||||||
|
|
||||||
wvs_init();
|
wvs_init();
|
||||||
|
|
||||||
/* Start playback at the specified starting time */
|
/* Start playback at the specified starting time */
|
||||||
|
@ -1442,7 +1482,7 @@ static void button_loop(void)
|
||||||
/* Hide video output */
|
/* Hide video output */
|
||||||
wvs_show(WVS_HIDE | WVS_NODRAW);
|
wvs_show(WVS_HIDE | WVS_NODRAW);
|
||||||
stream_show_vo(false);
|
stream_show_vo(false);
|
||||||
backlight_use_settings(rb);
|
wvs_backlight_brightness_video_mode(false);
|
||||||
|
|
||||||
result = mpeg_menu(0);
|
result = mpeg_menu(0);
|
||||||
|
|
||||||
|
@ -1464,7 +1504,6 @@ static void button_loop(void)
|
||||||
|
|
||||||
/* If stream was playing, restart it */
|
/* If stream was playing, restart it */
|
||||||
if (state == STREAM_PLAYING) {
|
if (state == STREAM_PLAYING) {
|
||||||
backlight_force_on(rb);
|
|
||||||
wvs_resume();
|
wvs_resume();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1495,11 +1534,9 @@ static void button_loop(void)
|
||||||
if (status == STREAM_PLAYING) {
|
if (status == STREAM_PLAYING) {
|
||||||
/* Playing => Paused */
|
/* Playing => Paused */
|
||||||
wvs_pause();
|
wvs_pause();
|
||||||
backlight_use_settings(rb);
|
|
||||||
}
|
}
|
||||||
else if (status == STREAM_PAUSED) {
|
else if (status == STREAM_PAUSED) {
|
||||||
/* Paused => Playing */
|
/* Paused => Playing */
|
||||||
backlight_force_on(rb);
|
|
||||||
wvs_resume();
|
wvs_resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1539,9 +1576,6 @@ static void button_loop(void)
|
||||||
wvs_stop();
|
wvs_stop();
|
||||||
|
|
||||||
rb->lcd_setfont(FONT_UI);
|
rb->lcd_setfont(FONT_UI);
|
||||||
|
|
||||||
/* Turn on backlight timeout (revert to settings) */
|
|
||||||
backlight_use_settings(rb);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter)
|
enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue