@PhyrePhox
Funny, i had gone to bed, couldn't fall asleep and dreamed up something very similar
to your code, abstractly. Then saw your code and reworked it a bit:
// since this gets called in gui_osd_draw(), the main loop (?) in gui_osd.c,
// it should follow the appropiate naming convention, looks better ;)
// Note: Also needs an 'extern void gui_osd_draw_movie_time_left();' in gui_osd.h
void gui_osd_draw_movie_time_left() {
static int card_used, init_space, elapsed, avg_use, time_left;
static long init_time;
static int movie_running = 0;
static int init = 0;
static unsigned int skipcalls = 15;
int o=(mode_get() & MODE_MASK), m=(mode_get() & MODE_SHOOTING_MASK);
unsigned int hour=0, min=0, sec=0;
// allow it to be turned on/off
// if (!conf.show_movie_time_left) return;
if ( (o != MODE_REC) || (m != MODE_VIDEO_STD) ) return;
if (kbd_is_key_pressed(KEY_SHOOT_FULL) == 1) movie_running = !movie_running ;
if (!movie_running) {
// it's off, reset init
init = 0;
return;
}
else {
//movie recording engaged
if( !init ) {
// initialize
init_space = GetFreeCardSpaceKb();
init_time = get_tick_count();
init = 1;
}
else {
// already running
if (--skipcalls ==0) {
// only calc at every 15 th interrupt (should equal every 1 sec for about 15 interupt calls/sec)
card_used = init_space - GetFreeCardSpaceKb();
// Note: there's 1000 ticks to a second
elapsed = (int) ( get_tick_count() - init_time ) / 1000;
// End Note
if (elapsed < 10) return; // initially give it a minimum of say 10 secs to settle ...
avg_use = card_used / elapsed; // running average Kb/sec
time_left = (GetFreeCardSpaceKb() / avg_use);
hour = time_left / 3600;
min = (time_left % 3600) / 60;
sec = (time_left % 3600) % 60;
skipcalls = 15;
}
// called at every interrupt
sprintf(osd_buf, "Avg. %d KB/s ; %2d:%2d:%2d left", avg_use, hour, min, sec);
// use this if we decide to make it configurable ....
// draw_string(conf.mode_movie_time_left.x, conf.mode_movie_time_left.y, osd_buf, conf.osd_color);
// for testing ...
draw_string( 50, 50, osd_buf, conf.osd_color);
}
}
}
unchecked of course ...
talk to you later and now zzzzzzzzzzzzzz
wim
edit: code improved, we're getting there ...
edit2: gone off to test it now
edit3: compiles OK, but doesn't seem to function ...