1
0
Fork 0
forked from len0rd/rockbox

On-the-fly filesplitting when recording for I-Rivers. Record button starts new file, Play/Pause button pauses/resumes recording. Also, Filename information for all screens > 80 pixels high.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10270 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Martin Scarratt 2006-07-20 22:44:10 +00:00
parent f28c35effc
commit 76b729c47b
4 changed files with 95 additions and 34 deletions

View file

@ -1169,7 +1169,7 @@ void peak_meter_draw_trig(int xpos, int ypos)
} }
#endif #endif
int peak_meter_draw_get_btn(int x, int y, int height) int peak_meter_draw_get_btn(int x, int y[], int height)
{ {
int button = BUTTON_NONE; int button = BUTTON_NONE;
long next_refresh = current_tick; long next_refresh = current_tick;
@ -1197,8 +1197,8 @@ int peak_meter_draw_get_btn(int x, int y, int height)
if (TIME_AFTER(current_tick, next_refresh)) { if (TIME_AFTER(current_tick, next_refresh)) {
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
{ {
peak_meter_screen(&screens[i], x, y, height); peak_meter_screen(&screens[i], x, y[i], height);
screens[i].update_rect(x, y, screens[i].width, height); screens[i].update_rect(x, y[i], screens[i].width, height);
} }
next_refresh += HZ / PEAK_METER_FPS; next_refresh += HZ / PEAK_METER_FPS;
dopeek = true; dopeek = true;

View file

@ -29,7 +29,7 @@ extern bool peak_meter_histogram(void);
extern bool peak_meter_enabled; extern bool peak_meter_enabled;
extern void peak_meter_playback(bool playback); extern void peak_meter_playback(bool playback);
extern int peak_meter_draw_get_btn(int x, int y, int height); extern int peak_meter_draw_get_btn(int x, int y[], int height);
extern void peak_meter_set_clip_hold(int time); extern void peak_meter_set_clip_hold(int time);
extern void peak_meter_peek(void); extern void peak_meter_peek(void);
extern void peak_meter_init_range( bool dbfs, int range_min, int range_max); extern void peak_meter_init_range( bool dbfs, int range_min, int range_max);

View file

@ -91,7 +91,8 @@
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
#define REC_SHUTDOWN (BUTTON_OFF | BUTTON_REPEAT) #define REC_SHUTDOWN (BUTTON_OFF | BUTTON_REPEAT)
#define REC_STOPEXIT BUTTON_OFF #define REC_STOPEXIT BUTTON_OFF
#define REC_RECPAUSE BUTTON_REC #define REC_RECPAUSE BUTTON_ON
#define REC_NEWFILE BUTTON_REC
#define REC_INC BUTTON_RIGHT #define REC_INC BUTTON_RIGHT
#define REC_DEC BUTTON_LEFT #define REC_DEC BUTTON_LEFT
#define REC_NEXT BUTTON_DOWN #define REC_NEXT BUTTON_DOWN
@ -101,6 +102,7 @@
#define REC_RC_SHUTDOWN (BUTTON_RC_STOP | BUTTON_REPEAT) #define REC_RC_SHUTDOWN (BUTTON_RC_STOP | BUTTON_REPEAT)
#define REC_RC_STOPEXIT BUTTON_RC_STOP #define REC_RC_STOPEXIT BUTTON_RC_STOP
#define REC_RC_RECPAUSE BUTTON_RC_ON #define REC_RC_RECPAUSE BUTTON_RC_ON
#define REC_RC_NEWFILE BUTTON_RC_REC
#define REC_RC_INC BUTTON_RC_BITRATE #define REC_RC_INC BUTTON_RC_BITRATE
#define REC_RC_DEC BUTTON_RC_SOURCE #define REC_RC_DEC BUTTON_RC_SOURCE
#define REC_RC_NEXT BUTTON_RC_FF #define REC_RC_NEXT BUTTON_RC_FF
@ -324,6 +326,7 @@ bool recording_screen(void)
unsigned int seconds; unsigned int seconds;
int hours, minutes; int hours, minutes;
char path_buffer[MAX_PATH]; char path_buffer[MAX_PATH];
char filename[13];
bool been_in_usb_mode = false; bool been_in_usb_mode = false;
int last_audio_stat = -1; int last_audio_stat = -1;
int audio_stat; int audio_stat;
@ -332,6 +335,8 @@ bool recording_screen(void)
int led_countdown = 2; int led_countdown = 2;
#endif #endif
int i; int i;
int filename_offset[NB_SCREENS];
int pm_y[NB_SCREENS];
const unsigned char *byte_units[] = { const unsigned char *byte_units[] = {
ID2P(LANG_BYTE), ID2P(LANG_BYTE),
@ -395,6 +400,8 @@ bool recording_screen(void)
screens[i].setfont(FONT_SYSFIXED); screens[i].setfont(FONT_SYSFIXED);
screens[i].getstringsize("M", &w, &h); screens[i].getstringsize("M", &w, &h);
screens[i].setmargins(global_settings.invert_cursor ? 0 : w, 8); screens[i].setmargins(global_settings.invert_cursor ? 0 : w, 8);
filename_offset[i] = ((screens[i].height >= 80) ? 1 : 0);
pm_y[i] = 8 + h * (2 + filename_offset[i]);
} }
if(rec_create_directory() > 0) if(rec_create_directory() > 0)
@ -456,7 +463,7 @@ bool recording_screen(void)
#endif /* CONFIG_LED */ #endif /* CONFIG_LED */
/* Wait for a button a while (HZ/10) drawing the peak meter */ /* Wait for a button a while (HZ/10) drawing the peak meter */
button = peak_meter_draw_get_btn(0, 8 + h*2, h * PM_HEIGHT); button = peak_meter_draw_get_btn(0, pm_y, h * PM_HEIGHT);
if (last_audio_stat != audio_stat) if (last_audio_stat != audio_stat)
{ {
@ -500,6 +507,12 @@ bool recording_screen(void)
#ifdef REC_RC_RECPAUSE #ifdef REC_RC_RECPAUSE
case REC_RC_RECPAUSE: case REC_RC_RECPAUSE:
#endif #endif
#ifdef REC_NEWFILE
case REC_NEWFILE:
#endif
#ifdef REC_RC_NEWFILE
case REC_RC_NEWFILE:
#endif
#ifdef REC_RECPAUSE_PRE #ifdef REC_RECPAUSE_PRE
if (lastbutton != REC_RECPAUSE_PRE) if (lastbutton != REC_RECPAUSE_PRE)
break; break;
@ -534,6 +547,21 @@ bool recording_screen(void)
} }
else else
{ {
#ifdef REC_NEWFILE
/*if new file button pressed, start new file */
if ((button == REC_NEWFILE)
#ifdef REC_RC_NEWFILE
|| (button == REC_RC_NEWFILE)
#endif
)
{
audio_new_file(rec_create_filename(path_buffer));
last_seconds = 0;
}
else
#endif
/* if pause button pressed, pause or resume */
{
if(audio_stat & AUDIO_STATUS_PAUSE) if(audio_stat & AUDIO_STATUS_PAUSE)
{ {
audio_resume_recording(); audio_resume_recording();
@ -547,6 +575,7 @@ bool recording_screen(void)
audio_pause_recording(); audio_pause_recording();
} }
} }
}
update_countdown = 1; /* Update immediately */ update_countdown = 1; /* Update immediately */
break; break;
@ -830,6 +859,24 @@ bool recording_screen(void)
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screens[i].puts(0, 1, buf); screens[i].puts(0, 1, buf);
FOR_NB_SCREENS(i)
{
if (filename_offset[i] > 0)
{
if (audio_stat & AUDIO_STATUS_RECORD)
{
strncpy(filename, path_buffer +
strlen(path_buffer) - 12, 13);
filename[12]='\0';
}
else
strcpy(filename, "");
snprintf(buf, 32, "Filename: %s", filename);
screens[i].puts(0, 2, buf);
}
}
/* We will do file splitting regardless, either at the end of /* We will do file splitting regardless, either at the end of
a split interval, or when the filesize approaches the 2GB a split interval, or when the filesize approaches the 2GB
FAT file size (compatibility) limit. */ FAT file size (compatibility) limit. */
@ -850,13 +897,13 @@ bool recording_screen(void)
if (global_settings.invert_cursor && (pos++ == cursor)) if (global_settings.invert_cursor && (pos++ == cursor))
{ {
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screens[i].puts_style_offset(0, 2+PM_HEIGHT, buf, screens[i].puts_style_offset(0, filename_offset[i] +
STYLE_INVERT,0); PM_HEIGHT + 2, buf, STYLE_INVERT,0);
} }
else else
{ {
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screens[i].puts(0, 2+PM_HEIGHT, buf); screens[i].puts(0, filename_offset[i] + PM_HEIGHT + 2, buf);
} }
if(global_settings.rec_source == SOURCE_MIC) if(global_settings.rec_source == SOURCE_MIC)
@ -868,13 +915,14 @@ bool recording_screen(void)
if(global_settings.invert_cursor && ((1==cursor)||(2==cursor))) if(global_settings.invert_cursor && ((1==cursor)||(2==cursor)))
{ {
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screens[i].puts_style_offset(0, 3+PM_HEIGHT, buf, screens[i].puts_style_offset(0, filename_offset[i] +
STYLE_INVERT,0); PM_HEIGHT + 3, buf, STYLE_INVERT,0);
} }
else else
{ {
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screens[i].puts(0, 3+PM_HEIGHT, buf); screens[i].puts(0, filename_offset[i] +
PM_HEIGHT + 3, buf);
} }
} }
else if(global_settings.rec_source == SOURCE_LINE) else if(global_settings.rec_source == SOURCE_LINE)
@ -887,13 +935,14 @@ bool recording_screen(void)
if(global_settings.invert_cursor && ((1==cursor)||(2==cursor))) if(global_settings.invert_cursor && ((1==cursor)||(2==cursor)))
{ {
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screens[i].puts_style_offset(0, 3+PM_HEIGHT, buf, screens[i].puts_style_offset(0, filename_offset[i] +
STYLE_INVERT,0); PM_HEIGHT + 3, buf, STYLE_INVERT,0);
} }
else else
{ {
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screens[i].puts(0, 3+PM_HEIGHT, buf); screens[i].puts(0, filename_offset[i] +
PM_HEIGHT + 3, buf);
} }
snprintf(buf, 32, "%s:%s", snprintf(buf, 32, "%s:%s",
@ -904,14 +953,16 @@ bool recording_screen(void)
if(global_settings.invert_cursor && ((1==cursor)||(3==cursor))) if(global_settings.invert_cursor && ((1==cursor)||(3==cursor)))
{ {
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screens[i].puts_style_offset(0, 4+PM_HEIGHT, buf, screens[i].puts_style_offset(0, filename_offset[i] +
STYLE_INVERT,0); PM_HEIGHT + 4, buf, STYLE_INVERT,0);
} }
else else
{ {
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screens[i].puts(0, 4+PM_HEIGHT, buf); screens[i].puts(0, filename_offset[i] +
PM_HEIGHT + 4, buf);
} }
} }
if(!global_settings.invert_cursor){ if(!global_settings.invert_cursor){
@ -920,29 +971,34 @@ bool recording_screen(void)
case 1: case 1:
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screen_put_cursorxy(&screens[i], 0, screen_put_cursorxy(&screens[i], 0,
3+PM_HEIGHT, true); filename_offset[i] +
PM_HEIGHT + 3, true);
if(global_settings.rec_source != SOURCE_MIC) if(global_settings.rec_source != SOURCE_MIC)
{ {
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screen_put_cursorxy(&screens[i], 0, screen_put_cursorxy(&screens[i], 0,
4+PM_HEIGHT, true); filename_offset[i] +
PM_HEIGHT + 4, true);
} }
break; break;
case 2: case 2:
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screen_put_cursorxy(&screens[i], 0, screen_put_cursorxy(&screens[i], 0,
3+PM_HEIGHT, true); filename_offset[i] +
PM_HEIGHT + 3, true);
break; break;
case 3: case 3:
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screen_put_cursorxy(&screens[i], 0, screen_put_cursorxy(&screens[i], 0,
4+PM_HEIGHT, true); filename_offset[i] +
PM_HEIGHT + 4, true);
break; break;
default: default:
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screen_put_cursorxy(&screens[i], 0, screen_put_cursorxy(&screens[i], 0,
2+PM_HEIGHT, true); filename_offset[i] +
PM_HEIGHT + 2, true);
} }
} }
/* Can't measure S/PDIF sample rate on Archos yet */ /* Can't measure S/PDIF sample rate on Archos yet */
@ -961,13 +1017,13 @@ bool recording_screen(void)
global_settings.rec_channels ? global_settings.rec_channels ?
str(LANG_CHANNEL_MONO) : str(LANG_CHANNEL_STEREO)); str(LANG_CHANNEL_MONO) : str(LANG_CHANNEL_STEREO));
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screens[i].puts(0, 5+PM_HEIGHT, buf); screens[i].puts(0, filename_offset[i] + PM_HEIGHT + 5, buf);
gui_syncstatusbar_draw(&statusbars, true); gui_syncstatusbar_draw(&statusbars, true);
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
{ {
peak_meter_screen(&screens[i], 0, 8 + h*2, h*PM_HEIGHT); peak_meter_screen(&screens[i], 0, pm_y[i], h*PM_HEIGHT);
screens[i].update(); screens[i].update();
} }

View file

@ -635,6 +635,9 @@ bool rectrigger(void)
int offset = 0; int offset = 0;
int option_lines; int option_lines;
int w, h; int w, h;
/* array for y ordinate of peak_meter_draw_get_button
function in peakmeter.c*/
int pm_y[NB_SCREENS];
/* restart trigger with new values */ /* restart trigger with new values */
settings_apply_trigger(); settings_apply_trigger();
@ -747,7 +750,9 @@ bool rectrigger(void)
peak_meter_draw_trig(0, LCD_HEIGHT - 8 - TRIG_HEIGHT); peak_meter_draw_trig(0, LCD_HEIGHT - 8 - TRIG_HEIGHT);
button = peak_meter_draw_get_btn(0, LCD_HEIGHT - 8, 8); FOR_NB_SCREENS(i)
pm_y[i] = screens[i].height - 8;
button = peak_meter_draw_get_btn(0, pm_y, 8);
lcd_update(); lcd_update();