New -check_media sub options bad_limit=, slow_limit=, chunk_size=

This commit is contained in:
2009-09-30 09:25:34 +00:00
parent 9f26cadda4
commit 7a5d8ca174
5 changed files with 161 additions and 52 deletions

View File

@ -9612,10 +9612,8 @@ abort_check:;
goto ex;
} else {
quality= Xorriso_read_quality_gooD;
/* >>> find better threshold than 1.0 */
if(time_diff > 1.0 && i > 0)
if(time_diff > job->slow_threshold_seq && job->slow_threshold_seq > 0 &&
i > 0)
quality= Xorriso_read_quality_sloW;
}
@ -9827,6 +9825,7 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
int media_blocks= 0, read_chunk= 16, ret, mode, start_lba= 0;
int blocks, os_errno, i, j, last_track_end= -1, track_blocks, track_lba;
int num_sessions, num_tracks, declare_untested= 0, md5_start;
int read_capacity= -1, end_lba, hret, count, quality;
char *toc_info= NULL;
struct burn_drive *drive;
struct burn_drive_info *dinfo;
@ -9849,6 +9848,8 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
32 kB for CD (with 2kB retry) and DVD, 64 kB for BD
eventually adjust read_chunk
*/;
if(job->min_block_size != 0)
read_chunk= job->min_block_size;
ret= Spotlist_new(spotlist, 0);
if(ret <= 0)
@ -9881,6 +9882,10 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist,
if(ret <= 0)
goto ex;
}
ret= burn_get_read_capacity(drive, &read_capacity, 0);
if(ret <= 0)
read_capacity= -1;
if(job->max_lba >= 0) {
blocks= job->max_lba + 1 - start_lba;
xorriso->pacifier_total= blocks;
@ -9984,13 +9989,29 @@ ex:;
if(job->data_to_fd != -1)
close(job->data_to_fd);
job->data_to_fd= -1;
if(read_capacity >= 0) {
count= Spotlist_count(*spotlist, 0);
end_lba= 0;
for(i= 0; i < count; i++) {
Spotlist_get_item(*spotlist, i, &start_lba, &blocks, &quality, 0);
if(start_lba + blocks > end_lba)
end_lba= start_lba + blocks;
}
if(read_capacity > end_lba) {
hret= Spotlist_add_item(*spotlist, end_lba, read_capacity - end_lba,
Xorriso_read_quality_untesteD, 0);
if(hret < ret)
ret= hret;
}
}
if(ret > 0)
ret= Xorriso_update_in_sector_map(xorriso, *spotlist, read_chunk, job, 0);
if(ret > 0) {
ret= Xorriso_spotlist_to_sectormap(xorriso, *spotlist, read_chunk,
&(job->sector_map), 0);
&(job->sector_map), !!job->untested_valid);
if(ret > 0 && job->sector_map_path[0]) {
ret= Sectorbitmap_to_file(job->sector_map, job->sector_map_path, toc_info,
xorriso->info_text, &os_errno, 0);