1
0
Fork 0
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:
Michael Sevakis 2008-05-18 00:14:34 +00:00
parent 18f13b149a
commit 1f2df74079
5 changed files with 172 additions and 16 deletions

View file

@ -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 */

View file

@ -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_ */

View file

@ -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);

View file

@ -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

View file

@ -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)