Made SAO preferrable default write mode, kept TAO as default where needed

This commit is contained in:
Thomas Schmitt 2006-11-12 11:34:58 +00:00
parent 1bfd7b5a5f
commit bf20758906
2 changed files with 86 additions and 75 deletions

View File

@ -4194,6 +4194,82 @@ ex:;
} }
/** Determines the effective write mode and checks wether the drive promises
to support it.
@param s state of target media, obtained from burn_disc_get_status(),
submit BURN_DISC_BLANK if no real state is available
*/
int Cdrskin_activate_write_mode(struct CdrskiN *skin, enum burn_disc_status s,
int flag)
{
int ok;
struct burn_drive_info *drive_info;
if(strcmp(skin->preskin->write_mode_name,"DEFAULT")==0) {
#ifdef Cdrskin_allow_libburn_taO
if(s == BURN_DISC_APPENDABLE)
strcpy(skin->preskin->write_mode_name,"TAO");
else
#endif
strcpy(skin->preskin->write_mode_name,"SAO");
}
if(strcmp(skin->preskin->write_mode_name,"RAW/RAW96R")==0) {
skin->write_type= BURN_WRITE_RAW;
skin->block_type= BURN_BLOCK_RAW96R;
#ifdef Cdrskin_allow_libburn_taO
} else if(strcmp(skin->preskin->write_mode_name,"TAO")==0) {
strcpy(skin->preskin->write_mode_name,"TAO");
skin->write_type= BURN_WRITE_TAO;
skin->block_type= BURN_BLOCK_MODE1;
#endif /* Cdrskin_allow_libburn_taO */
} else {
strcpy(skin->preskin->write_mode_name,"SAO");
skin->write_type= BURN_WRITE_SAO;
skin->block_type= BURN_BLOCK_SAO;
}
/* check wether desired type combination is available with drive */
if(skin->driveno<0 || skin->driveno>skin->n_drives) {
if(skin->verbosity>=Cdrskin_verbose_debuG)
ClN(printf("cdrskin_debug: WARNING : No drive selected with Cdrskin_activate_write_mode\n"));
goto it_is_done;
}
drive_info= skin->drives+skin->driveno;
ok= 0;
if(skin->write_type==BURN_WRITE_RAW)
ok= !!(drive_info->raw_block_types & BURN_BLOCK_RAW96R);
else if(skin->write_type==BURN_WRITE_SAO)
ok= !!(drive_info->sao_block_types & BURN_BLOCK_SAO);
else if(skin->write_type==BURN_WRITE_TAO)
ok= ((drive_info->tao_block_types & (BURN_BLOCK_MODE1|BURN_BLOCK_RAW0))
== (BURN_BLOCK_MODE1|BURN_BLOCK_RAW0));
if(!ok) {
if(! skin->force_is_set) {
/* >>> if write mode was not set explicitely: try to find a better one */;
}
fprintf(stderr,
"cdrskin: %s : Drive indicated refusal for write mode %s.\n",
(skin->force_is_set?"WARNING":"FATAL"),
skin->preskin->write_mode_name);
if(! skin->force_is_set) {
fprintf(stderr,"cdrskin: HINT : If you are certain that the drive will do, try option -force\n");
return(0);
}
}
it_is_done:;
if(skin->verbosity>=Cdrskin_verbose_cmD)
printf("cdrskin: write type : %s\n", skin->preskin->write_mode_name);
return(1);
}
/** Burn data via libburn according to the parameters set in skin. /** Burn data via libburn according to the parameters set in skin.
@return <=0 error, 1 success @return <=0 error, 1 success
*/ */
@ -4252,6 +4328,13 @@ int Cdrskin_burn(struct CdrskiN *skin, int flag)
if(skin->verbosity>=Cdrskin_verbose_progresS) if(skin->verbosity>=Cdrskin_verbose_progresS)
Cdrskin_report_disc_status(skin,s,0); Cdrskin_report_disc_status(skin,s,0);
ret= Cdrskin_activate_write_mode(skin,s,0);
if(ret<=0) {
fprintf(stderr,
"cdrskin: FATAL : Cannot activate the desired write mode\n");
ret= 0; goto ex;
}
#ifdef Cdrskin_libburn_has_multI #ifdef Cdrskin_libburn_has_multI
if (s == BURN_DISC_APPENDABLE) { if (s == BURN_DISC_APPENDABLE) {
@ -4628,71 +4711,6 @@ sorry_failed_to_eject:;
} }
int Cdrskin_activate_write_mode(struct CdrskiN *skin, int flag)
{
int ok;
struct burn_drive_info *drive_info;
if(strcmp(skin->preskin->write_mode_name,"DEFAULT")==0)
if(skin->track_counter>1)
strcpy(skin->preskin->write_mode_name,"SAO");
if(strcmp(skin->preskin->write_mode_name,"RAW/RAW96R")==0) {
skin->write_type= BURN_WRITE_RAW;
skin->block_type= BURN_BLOCK_RAW96R;
#ifdef Cdrskin_allow_libburn_taO
} else if(strcmp(skin->preskin->write_mode_name,"SAO")==0) {
#else
} else {
strcpy(skin->preskin->write_mode_name,"SAO");
#endif
skin->write_type= BURN_WRITE_SAO;
skin->block_type= BURN_BLOCK_SAO;
#ifdef Cdrskin_allow_libburn_taO
} else {
strcpy(skin->preskin->write_mode_name,"TAO");
skin->write_type= BURN_WRITE_TAO;
skin->block_type= BURN_BLOCK_MODE1;
#endif /* Cdrskin_allow_libburn_taO */
}
/* check wether desired type combination is available with drive */
if(skin->driveno<0 || skin->driveno>skin->n_drives) {
if(skin->verbosity>=Cdrskin_verbose_debuG)
ClN(printf("cdrskin_debug: WARNING : No drive selected with Cdrskin_activate_write_mode\n"));
goto it_is_done;
}
drive_info= skin->drives+skin->driveno;
ok= 0;
if(skin->write_type==BURN_WRITE_RAW)
ok= !!(drive_info->raw_block_types & BURN_BLOCK_RAW96R);
else if(skin->write_type==BURN_WRITE_SAO)
ok= !!(drive_info->sao_block_types & BURN_BLOCK_SAO);
else if(skin->write_type==BURN_WRITE_TAO)
ok= ((drive_info->tao_block_types & (BURN_BLOCK_MODE1|BURN_BLOCK_RAW0))
== (BURN_BLOCK_MODE1|BURN_BLOCK_RAW0));
if(!ok) {
fprintf(stderr,
"cdrskin: %s : Drive indicated refusal for write mode %s.\n",
(skin->force_is_set?"WARNING":"FATAL"),
skin->preskin->write_mode_name);
if(! skin->force_is_set) {
fprintf(stderr,
"cdrskin: HINT : If you are certain, the drive will do, ry option -force\n");
return(0);
}
}
it_is_done:;
if(skin->verbosity>=Cdrskin_verbose_cmD)
printf("cdrskin: write type : %s\n", skin->preskin->write_mode_name);
return(1);
}
/** Interpret all arguments of the program after libburn has been initialized /** Interpret all arguments of the program after libburn has been initialized
and drives have been scanned. This call reports to stderr any valid and drives have been scanned. This call reports to stderr any valid
cdrecord options which are not implemented yet. cdrecord options which are not implemented yet.
@ -5226,9 +5244,9 @@ track_too_large:;
} else { } else {
fprintf(stderr, fprintf(stderr,
#ifdef Cdrskin_allow_libburn_taO #ifdef Cdrskin_allow_libburn_taO
"cdrskin: FATAL : '%s' needs -tao or tsize= or tao_to_sao_tsize=\n", "cdrskin: FATAL : Track source '%s' needs -tao or tsize= or tao_to_sao_tsize=\n",
#else #else
"cdrskin: FATAL : '%s' needs a fixed tsize= or tao_to_sao_tsize=\n", "cdrskin: FATAL : Track source '%s' needs a fixed tsize= or tao_to_sao_tsize=\n",
#endif #endif
skin->source_path); skin->source_path);
return(0); return(0);
@ -5325,13 +5343,6 @@ ignore_unknown:;
Cdrskin_release_drive(skin,0); Cdrskin_release_drive(skin,0);
} }
ret= Cdrskin_activate_write_mode(skin,0);
if(ret<=0) {
fprintf(stderr,
"cdrskin: FATAL : Cannot activate the desired write mode\n");
return(0);
}
if(skin->track_counter>0) { if(skin->track_counter>0) {
skin->do_burn= 1; skin->do_burn= 1;

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2006.11.12.085808" #define Cdrskin_timestamP "2006.11.12.113629"