New option --prodvd_cli_compatible

This commit is contained in:
2007-02-08 21:09:10 +00:00
parent 8dccb584b4
commit cad7531058
3 changed files with 64 additions and 26 deletions

View File

@ -2012,6 +2012,8 @@ set_dev:;
" --no_rc as first argument: do not read startup files\n");
printf(" --old_pseudo_scsi_adr use and report literal Bus,Target,Lun\n");
printf(" rather than real SCSI and pseudo ATA.\n");
printf(" --prodvd_cli_compatible react on some DVD types more like\n");
printf(" cdrecord-ProDVD with blank= and -multi\n");
printf(
" --single_track accept only last argument as source_address\n");
@ -2349,6 +2351,7 @@ struct CdrskiN {
int dummy_mode;
int force_is_set;
int single_track;
int prodvd_cli_compatible;
int do_devices;
@ -2488,6 +2491,7 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag)
o->dummy_mode= 0;
o->force_is_set= 0;
o->single_track= 0;
o->prodvd_cli_compatible= 0;
o->do_devices= 0;
o->do_scanbus= 0;
o->do_checkdrive= 0;
@ -4027,7 +4031,8 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
/* Classical blanking of erasable media */
if(s!=BURN_DISC_FULL &&
(s!=BURN_DISC_APPENDABLE || skin->no_blank_appendable)) {
(s!=BURN_DISC_APPENDABLE || skin->no_blank_appendable) &&
!(profile_number == 0x13 && skin->prodvd_cli_compatible)) {
Cdrskin_release_drive(skin,0);
if(s==BURN_DISC_BLANK) {
fprintf(stderr,
@ -4049,7 +4054,8 @@ int Cdrskin_blank(struct CdrskiN *skin, int flag)
fprintf(stderr,"cdrskin: FATAL : blank=... : media is not erasable\n");
return(0);
}
if(profile_number == 0x14 || profile_number == 0x13)
if((profile_number == 0x14 || profile_number == 0x13) &&
!skin->prodvd_cli_compatible)
skin->blank_fast= 0; /* only with deformat_sequential_quickest */
} else {
@ -4449,7 +4455,7 @@ int Cdrskin_activate_write_mode(struct CdrskiN *skin, enum burn_disc_status s,
int profile_number= -1, track_type_1, mixed_mode= 0, unpredicted_size= 0, ret;
struct burn_drive_info *drive_info = NULL;
char profile_name[80];
int might_do_tao= 0, might_do_sao= 1;
int might_do_tao= 0, might_do_sao= 1, allows_multi= 1;
double fixed_size= 0.0, tao_to_sao_tsize= 0.0, dummy;
#ifdef Cdrskin_libburn_has_get_multi_capS
struct burn_multi_caps *caps = NULL;
@ -4473,10 +4479,12 @@ int Cdrskin_activate_write_mode(struct CdrskiN *skin, enum burn_disc_status s,
} else if(ret==0) {
fprintf(stderr,
"cdrskin: SORRY : Cannot find any suitable write mode for this media\n");
burn_disc_free_multi_caps(&caps);
return(0);
}
might_do_tao= caps->might_do_tao;
might_do_sao= caps->might_do_sao;
burn_disc_free_multi_caps(&caps);
#endif
for(i=0;i<skin->track_counter;i++) {
@ -4610,6 +4618,25 @@ check_with_drive:;
return(0);
}
}
#ifdef Cdrskin_libburn_has_get_multi_capS
ret = burn_disc_get_multi_caps(skin->grabbed_drive,skin->write_type,&caps,0);
if (ret>0)
allows_multi= caps->multi_session;
burn_disc_free_multi_caps(&caps);
#endif
if(skin->multi && !allows_multi) {
if(skin->prodvd_cli_compatible) {
skin->multi= 0;
if(skin->verbosity>=Cdrskin_verbose_progresS)
fprintf(stderr, "cdrskin: NOTE : Ignored option -multi.\n");
} else {
fprintf(stderr,
"cdrskin: SORRY : Cannot keep this media appendable after write by -multi\n");
return(0);
}
}
it_is_done:;
if(skin->write_type==BURN_WRITE_SAO && unpredicted_size==1)
for(i= 0; i<skin->track_counter; i++) {
@ -4656,6 +4683,16 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag)
s= burn_disc_get_status(drive);
if(skin->verbosity>=Cdrskin_verbose_progresS)
Cdrskin_report_disc_status(skin,s,0);
#ifdef Cdrskin_allow_libburn_taO
if (s!=BURN_DISC_APPENDABLE && s!=BURN_DISC_BLANK) {
#else
if (s!=BURN_DISC_BLANK) {
#endif
Cdrskin_release_drive(skin,0);
fprintf(stderr,"cdrskin: FATAL : no writeable media detected.\n");
goto burn_failed;
}
ret= Cdrskin_activate_write_mode(skin,s,0);
if(ret<=0) {
fprintf(stderr,
@ -4689,9 +4726,7 @@ burn_failed:;
skin->fixed_size+= size+padding;
}
#ifdef Cdrskin_libburn_has_multI
if (s == BURN_DISC_APPENDABLE) {
if (s==BURN_DISC_APPENDABLE) {
#ifdef Cdrskin_allow_sao_for_appendablE
;
#else
@ -4701,16 +4736,7 @@ burn_failed:;
goto burn_failed;
}
#endif /* ! Cdrskin_allow_sao_for_appendablE */
} else if (s != BURN_DISC_BLANK) {
#else
if (s != BURN_DISC_BLANK) {
#endif
Cdrskin_release_drive(skin,0);
fprintf(stderr,"cdrskin: FATAL : no writeable media detected.\n");
goto burn_failed;
}
#ifndef Cdrskin_extra_leaN
@ -5546,6 +5572,9 @@ set_padsize:;
if(skin->verbosity>=Cdrskin_verbose_cmD)
printf("cdrskin: padding : %.f\n",skin->padding);
} else if(strcmp(argv[i],"--prodvd_cli_compatible")==0) {
skin->prodvd_cli_compatible= 1;
} else if(strcmp(argv[i],"-raw96r")==0) {
/* is handled in Cdrpreskin_setup() */;