diff --git a/libisoburn/trunk/xorriso/xorriso_timestamp.h b/libisoburn/trunk/xorriso/xorriso_timestamp.h index 3289b050..b8c26369 100644 --- a/libisoburn/trunk/xorriso/xorriso_timestamp.h +++ b/libisoburn/trunk/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2008.11.29.214208" +#define Xorriso_timestamP "2008.11.30.095007" diff --git a/libisoburn/trunk/xorriso/xorrisoburn.c b/libisoburn/trunk/xorriso/xorrisoburn.c index 8d74788c..ad441c27 100644 --- a/libisoburn/trunk/xorriso/xorrisoburn.c +++ b/libisoburn/trunk/xorriso/xorrisoburn.c @@ -1033,7 +1033,7 @@ int Xorriso_auto_format(struct XorrisO *xorriso, int flag) */ int Xorriso_write_session(struct XorrisO *xorriso, int flag) { - int ret, relax= 0, i; + int ret, relax= 0, i, pacifier_speed= 0; int major, minor, micro; char xorriso_id[256], *img_id, sfe[5*SfileadrL], *cpt; struct isoburn_imgen_opts *sopts= NULL; @@ -1050,11 +1050,12 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag) IsoNode *node; ElToritoBootImage *bootimg; enum eltorito_boot_media_type emul_type= ELTORITO_NO_EMUL; + int profile_number; + char profile_name[80]; #ifdef NIX int profile, status, num_formats; - char profile_name[80]; off_t size; unsigned dummy; @@ -1124,6 +1125,12 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag) {ret= 0; goto ex;} } } + ret= Xorriso_get_profile(xorriso, &profile_number, profile_name, 2); + if(ret == 2) + pacifier_speed= 1; + else if(ret == 1 && (profile_number == 0x41 || profile_number == 0x42 || + profile_number == 0x43)) + pacifier_speed= 2; ret= isoburn_igopt_new(&sopts, 0); if(ret<=0) { @@ -1394,7 +1401,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag) isoburn_disc_write(burn_options, disc); burn_write_opts_free(burn_options); - ret= Xorriso_pacifier_loop(xorriso, drive, 0); + ret= Xorriso_pacifier_loop(xorriso, drive, pacifier_speed << 4); if(ret<=0) goto ex; if(!isoburn_drive_wrote_well(drive)) { @@ -1502,6 +1509,7 @@ int Xorriso_check_burn_abort(struct XorrisO *xorriso, int flag) 1= mkisofs 2= cdrecord bit4= report speed in CD units + bit5= report speed in BD units */ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive, int flag) @@ -1526,6 +1534,8 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive, emul= xorriso->pacifier_style; if(flag&16) speed_factor= 150.0*1024; + else if(flag & 32) + speed_factor= 4495625; progress.sector= 0; current_time= Sfile_microtime(0); while(1) { @@ -7101,7 +7111,7 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address, char *track_source, off_t tsize, int flag) { int ret, fd, unpredicted_size, profile_number, is_cd= 0, dummy, nwa= -1; - int isosize= -1, do_isosize; + int isosize= -1, do_isosize, is_bd= 0; struct burn_drive_info *dinfo; struct burn_drive *drive; @@ -7238,6 +7248,8 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address, ret= Xorriso_get_profile(xorriso, &profile_number, profile_name, 2); is_cd= (ret==2); + is_bd= (profile_number == 0x41 || profile_number == 0x42 || + profile_number == 0x43); if(isoburn_needs_emulation(drive)) { if(flag&1) { @@ -7282,7 +7294,7 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address, xorriso->run_state= 1; /* Indicate that burning has started */ burn_disc_write(burn_options, disc); - ret= Xorriso_pacifier_loop(xorriso, drive, 2|(is_cd<<4)); + ret= Xorriso_pacifier_loop(xorriso, drive, 2 | (is_cd << 4) | (is_bd << 5)); if(ret<=0) goto ex; if(!burn_drive_wrote_well(drive)) {