mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-09 05:05:20 -05:00
Added fast forward and rewind (without sound). Patch by Hardeep Sidhu.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1741 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
b42ac1dc4d
commit
0570497e3a
8 changed files with 341 additions and 90 deletions
|
|
@ -357,6 +357,7 @@ void settings_reset(void) {
|
|||
global_settings.discharge = 0;
|
||||
global_settings.total_uptime = 0;
|
||||
global_settings.scroll_speed = 8;
|
||||
global_settings.ff_rewind = DEFAULT_FF_REWIND_SETTING;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -69,6 +69,9 @@ struct user_settings
|
|||
|
||||
/* geeky persistent statistics */
|
||||
unsigned int total_uptime; /* total uptime since rockbox was first booted */
|
||||
|
||||
/* FF/Rewind step size (in seconds) */
|
||||
int ff_rewind;
|
||||
};
|
||||
|
||||
/* prototypes */
|
||||
|
|
@ -112,5 +115,6 @@ extern struct user_settings global_settings;
|
|||
#define DEFAULT_POWEROFF_SETTING 0
|
||||
#define DEFAULT_BACKLIGHT_SETTING 5
|
||||
#define DEFAULT_WPS_DISPLAY 0
|
||||
#define DEFAULT_FF_REWIND_SETTING 2
|
||||
|
||||
#endif /* __SETTINGS_H__ */
|
||||
|
|
|
|||
|
|
@ -132,6 +132,12 @@ static void timedate_set(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
static void ff_rewind(void)
|
||||
{
|
||||
set_int("[FF/Rewind Step Size]", "s", &global_settings.ff_rewind,
|
||||
NULL, 1, 1, 999 );
|
||||
}
|
||||
|
||||
void settings_menu(void)
|
||||
{
|
||||
int m;
|
||||
|
|
@ -152,6 +158,7 @@ void settings_menu(void)
|
|||
#ifdef HAVE_RTC
|
||||
{ "Time/Date", timedate_set },
|
||||
#endif
|
||||
{ "FF/Rewind", ff_rewind },
|
||||
};
|
||||
bool old_shuffle = global_settings.playlist_shuffle;
|
||||
|
||||
|
|
|
|||
188
apps/wps.c
188
apps/wps.c
|
|
@ -54,12 +54,13 @@
|
|||
#define PLAY_DISPLAY_TRACK_TITLE 2
|
||||
|
||||
#ifdef HAVE_RECORDER_KEYPAD
|
||||
#define RELEASE_MASK (BUTTON_F1 | BUTTON_DOWN)
|
||||
#define RELEASE_MASK (BUTTON_F1 | BUTTON_DOWN | BUTTON_LEFT | BUTTON_RIGHT)
|
||||
#else
|
||||
#define RELEASE_MASK (BUTTON_MENU | BUTTON_STOP)
|
||||
#define RELEASE_MASK (BUTTON_MENU | BUTTON_STOP | BUTTON_LEFT | BUTTON_RIGHT)
|
||||
#endif
|
||||
|
||||
bool keys_locked = false;
|
||||
static bool ff_rewind = false;
|
||||
|
||||
static void draw_screen(struct mp3entry* id3)
|
||||
{
|
||||
|
|
@ -291,6 +292,39 @@ int player_id3_show(void)
|
|||
return(0);
|
||||
}
|
||||
|
||||
static void display_file_time(unsigned int elapsed, unsigned int length)
|
||||
{
|
||||
char buffer[32];
|
||||
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
snprintf(buffer,sizeof(buffer),
|
||||
"Time:%3d:%02d/%d:%02d",
|
||||
elapsed / 60000,
|
||||
elapsed % 60000 / 1000,
|
||||
length / 60000,
|
||||
length % 60000 / 1000 );
|
||||
|
||||
lcd_puts(0, 6, buffer);
|
||||
slidebar(0, LCD_HEIGHT-6, LCD_WIDTH, 6, elapsed*100/length, Grow_Right);
|
||||
lcd_update();
|
||||
#else
|
||||
/* Display time with the filename scroll only because
|
||||
the screen has room. */
|
||||
if ((global_settings.wps_display == PLAY_DISPLAY_FILENAME_SCROLL) ||
|
||||
ff_rewind )
|
||||
{
|
||||
snprintf(buffer,sizeof(buffer), "%d:%02d/%d:%02d ",
|
||||
elapsed / 60000,
|
||||
elapsed % 60000 / 1000,
|
||||
length / 60000,
|
||||
length % 60000 / 1000 );
|
||||
|
||||
lcd_puts(0, 1, buffer);
|
||||
lcd_update();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void display_keylock_text(bool locked)
|
||||
{
|
||||
lcd_stop_scroll();
|
||||
|
|
@ -354,7 +388,7 @@ int wps_show(void)
|
|||
bool pending_keylock = true; /* Keylock will go ON next time */
|
||||
int old_release_mask;
|
||||
int button;
|
||||
char buffer[32];
|
||||
int ff_rewind_count = 0;
|
||||
|
||||
old_release_mask = button_set_release(RELEASE_MASK);
|
||||
|
||||
|
|
@ -461,26 +495,112 @@ int wps_show(void)
|
|||
status_draw();
|
||||
break;
|
||||
|
||||
case BUTTON_LEFT:
|
||||
if (keys_locked)
|
||||
case BUTTON_LEFT | BUTTON_REPEAT:
|
||||
if (!keys_locked)
|
||||
{
|
||||
display_keylock_text(keys_locked);
|
||||
draw_screen(id3);
|
||||
break;
|
||||
if (ff_rewind)
|
||||
{
|
||||
ff_rewind_count -= global_settings.ff_rewind*1000;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( mpeg_is_playing() && id3 && id3->length )
|
||||
{
|
||||
mpeg_pause();
|
||||
status_set_playmode(STATUS_FASTBACKWARD);
|
||||
status_draw();
|
||||
ff_rewind = true;
|
||||
ff_rewind_count = -global_settings.ff_rewind*1000;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
if ((int)(id3->elapsed + ff_rewind_count) < 0)
|
||||
ff_rewind_count = -id3->elapsed;
|
||||
|
||||
display_file_time(id3->elapsed + ff_rewind_count,
|
||||
id3->length);
|
||||
}
|
||||
mpeg_prev();
|
||||
status_set_playmode(STATUS_PLAY);
|
||||
break;
|
||||
|
||||
case BUTTON_RIGHT:
|
||||
if (keys_locked)
|
||||
case BUTTON_RIGHT | BUTTON_REPEAT:
|
||||
if (!keys_locked)
|
||||
{
|
||||
display_keylock_text(keys_locked);
|
||||
draw_screen(id3);
|
||||
break;
|
||||
if (ff_rewind)
|
||||
{
|
||||
ff_rewind_count += global_settings.ff_rewind*1000;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( mpeg_is_playing() && id3 && id3->length )
|
||||
{
|
||||
mpeg_pause();
|
||||
status_set_playmode(STATUS_FASTFORWARD);
|
||||
status_draw();
|
||||
ff_rewind = true;
|
||||
ff_rewind_count = global_settings.ff_rewind*1000;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
if ((id3->elapsed + ff_rewind_count) > id3->length)
|
||||
ff_rewind_count = id3->length - id3->elapsed;
|
||||
|
||||
display_file_time(id3->elapsed + ff_rewind_count,
|
||||
id3->length);
|
||||
}
|
||||
break;
|
||||
|
||||
case BUTTON_LEFT | BUTTON_REL:
|
||||
if (ff_rewind)
|
||||
{
|
||||
/* rewind */
|
||||
mpeg_ff_rewind(ff_rewind_count);
|
||||
ff_rewind_count = 0;
|
||||
ff_rewind = false;
|
||||
status_set_playmode(STATUS_PLAY);
|
||||
#ifdef HAVE_LCD_CHARCELLS
|
||||
draw_screen(id3);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
if (keys_locked)
|
||||
{
|
||||
display_keylock_text(keys_locked);
|
||||
draw_screen(id3);
|
||||
break;
|
||||
}
|
||||
mpeg_prev();
|
||||
status_set_playmode(STATUS_PLAY);
|
||||
}
|
||||
break;
|
||||
|
||||
case BUTTON_RIGHT | BUTTON_REL:
|
||||
if (ff_rewind)
|
||||
{
|
||||
/* fast forward */
|
||||
mpeg_ff_rewind(ff_rewind_count);
|
||||
ff_rewind_count = 0;
|
||||
ff_rewind = false;
|
||||
status_set_playmode(STATUS_PLAY);
|
||||
#ifdef HAVE_LCD_CHARCELLS
|
||||
draw_screen(id3);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
if (keys_locked)
|
||||
{
|
||||
display_keylock_text(keys_locked);
|
||||
draw_screen(id3);
|
||||
break;
|
||||
}
|
||||
mpeg_next();
|
||||
status_set_playmode(STATUS_PLAY);
|
||||
}
|
||||
mpeg_next();
|
||||
status_set_playmode(STATUS_PLAY);
|
||||
break;
|
||||
|
||||
#ifdef HAVE_PLAYER_KEYPAD
|
||||
|
|
@ -683,39 +803,7 @@ int wps_show(void)
|
|||
#endif
|
||||
case BUTTON_NONE: /* Timeout */
|
||||
if (mpeg_is_playing() && id3)
|
||||
{
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
snprintf(buffer,sizeof(buffer),
|
||||
"Time:%3d:%02d/%d:%02d",
|
||||
id3->elapsed / 60000,
|
||||
id3->elapsed % 60000 / 1000,
|
||||
id3->length / 60000,
|
||||
id3->length % 60000 / 1000 );
|
||||
|
||||
lcd_puts(0, 6, buffer);
|
||||
|
||||
slidebar(0, LCD_HEIGHT-6, LCD_WIDTH, 6,
|
||||
id3->elapsed*100/id3->length,
|
||||
Grow_Right);
|
||||
|
||||
lcd_update();
|
||||
#else
|
||||
/* Display time with the filename scroll only because
|
||||
the screen has room. */
|
||||
if (global_settings.wps_display ==
|
||||
PLAY_DISPLAY_FILENAME_SCROLL)
|
||||
{
|
||||
snprintf(buffer,sizeof(buffer), "%d:%02d/%d:%02d ",
|
||||
id3->elapsed / 60000,
|
||||
id3->elapsed % 60000 / 1000,
|
||||
id3->length / 60000,
|
||||
id3->length % 60000 / 1000 );
|
||||
|
||||
lcd_puts(0, 1, buffer);
|
||||
lcd_update();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
display_file_time(id3->elapsed, id3->length);
|
||||
|
||||
status_draw();
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue