diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 370cf28e..c07c140c 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2008.07.26.075027" +#define Xorriso_timestamP "2008.08.01.101355" diff --git a/xorriso/xorrisoburn.c b/xorriso/xorrisoburn.c index 9eb9b292..de09065a 100644 --- a/xorriso/xorrisoburn.c +++ b/xorriso/xorrisoburn.c @@ -1108,7 +1108,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive, struct burn_progress progress; char *status_text, date_text[80]; enum burn_drive_status drive_status; - double start_time, current_time, last_time; + double start_time, current_time, last_time, base_time= 0, base_count; double measured_speed, speed_factor= 1385000, quot; time_t time_prediction; @@ -1170,9 +1170,20 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive, quot= ((double) progress.sector) / ((double) progress.sectors); sprintf(xorriso->info_text, " %2.2f%% done", quot*100.0); - if(current_time - start_time >= 2 && quot >= 0.02) { - time_prediction= current_time + - (1.0 - quot) / quot * (current_time-start_time) + 1; + if(current_time - start_time >= 2 && quot > 0.0 && + (quot >= 0.02 || progress.sector >= 5*1024)) { + if(base_time == 0.0) { + base_time= current_time; + base_count= progress.sector; + } + if(current_time - base_time > 0.001 && progress.sectors > base_count){ + quot= ((double) progress.sector - base_count ) + / ((double) progress.sectors - base_count); + time_prediction= (1.0 - quot) / quot * (current_time - base_time) + + current_time + 1; + } else + time_prediction= (1.0 - quot) / quot * (current_time - start_time) + + current_time + 1; Ftimetxt(time_prediction, date_text, 4); sprintf(xorriso->info_text+strlen(xorriso->info_text), ", estimate finish %s", date_text);