From e5742f724a21df0b17910cc1f0ac68f183a866d6 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sun, 1 Jan 2012 12:55:41 +0000 Subject: [PATCH] Implemented options -scms -copy -nocopy -preemp -nopreemp --- cdrskin/cdrskin.1 | 24 +++++++++++++++++- cdrskin/cdrskin.c | 49 +++++++++++++++++++++++++++++++------ cdrskin/cdrskin_timestamp.h | 2 +- 3 files changed, 65 insertions(+), 10 deletions(-) diff --git a/cdrskin/cdrskin.1 b/cdrskin/cdrskin.1 index 60a48d2..83a2cb6 100644 --- a/cdrskin/cdrskin.1 +++ b/cdrskin/cdrskin.1 @@ -2,7 +2,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH CDRSKIN 1 "Dec 30, 2011" +.TH CDRSKIN 1 "Jan 01, 2012" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -498,6 +498,9 @@ Print this list of blanking types. Retrieve some info about the addressed drive and then exit. Exits with non-zero value if the drive cannot be found and opened. .TP +.BI \-copy +Subsequent tracks get permission for an unlimited number of copies. +.TP .BI cuefile= path Read a session description from a cue sheet file in CDRWIN format. Base the tracks on a single file which is given in the sheet by command FILE. @@ -718,11 +721,19 @@ for lifting the ban on -multi. .br Note: -multi might make DVD media unreadable in some DVD-ROM drives. .TP +.BI \-nocopy +Subsequent tracks get permission for a single level of copies. I.e. those +copies would then be marked by -scms as offering no permission for further +copies. +.TP .BI \-nopad Do not add trailing zeros to the data stream. Nevertheless, since there seems to be no use for audio tracks with incomplete last sector, this option applies only to data tracks. There it is default. .TP +.BI \-nopreemp +Subsequent tracks get marked as having been mastered without pre-emphasis. +.TP .BI \-pad Add 30 kiB of trailing zeros to each data track. (This is not sufficient to avoid problems with various CD-ROM read drivers.) @@ -732,6 +743,9 @@ Add the given amount of trailing zeros to the next data track. This option gets reset to padsize=0 after that next track is written. It may be set again before the next track argument. About size specifiers, see option fs=. .TP +.BI \-preemp +Subsequent tracks get marked as having been mastered with pre-emphasis. +.TP .BI \-sao Write CD in Session At Once mode or sequential DVD-R[W] in Disc-at-once (DAO) mode. @@ -764,6 +778,14 @@ The useful fields in a result line are: .br Bus,Target,Lun Number) 'Vendor' 'Mode' 'Revision' .TP +.BI \-scms +Subsequent tracks get no permission for being copied. This is usually done +for tracks which are copies of tracks that were marked with -nocopy (but not +yet with -scms). So copies of copies are prohibited. +.br +This option gets reset by option -copy. So the combination -copy -nocopy means +-nocopy surely without -scms. +.TP .BI speed= number Set speed of drive. With data CD, 1x speed corresponds to a throughput of 150,000 bytes/second. With DVD, 1x = 1,385,000 bytes/second. diff --git a/cdrskin/cdrskin.c b/cdrskin/cdrskin.c index 1dbb3df..9ceaf96 100644 --- a/cdrskin/cdrskin.c +++ b/cdrskin/cdrskin.c @@ -1,6 +1,6 @@ /* - cdrskin.c , Copyright 2006-2011 Thomas Schmitt + cdrskin.c , Copyright 2006-2012 Thomas Schmitt Provided under GPL version 2 or later. A cdrecord compatible command line interface for libburn. @@ -862,6 +862,7 @@ struct CdrtracK { int set_by_padsize; int sector_pad_up; /* enforce single sector padding */ int track_type; + int mode_modifiers; double sector_size; int track_type_by_default; int swap_audio_bytes; @@ -928,7 +929,8 @@ int Cdrtrack_new(struct CdrtracK **track, struct CdrskiN *boss, int *use_data_image_size, double *padding, int *set_by_padsize, int *track_type, int *track_type_by_default, - int *swap_audio_bytes, int *cdxa_conversion, int flag); + int *mode_mods, int *swap_audio_bytes, + int *cdxa_conversion, int flag); int Cdrskin_get_fifo_par(struct CdrskiN *skin, int *fifo_enabled, int *fifo_size, int *fifo_start_at, int flag); @@ -947,6 +949,7 @@ int Cdrtrack_new(struct CdrtracK **track, struct CdrskiN *boss, o->set_by_padsize= 0; o->sector_pad_up= 1; o->track_type= BURN_MODE1; + o->mode_modifiers= 0; o->sector_size= 2048.0; o->track_type_by_default= 1; o->swap_audio_bytes= 0; @@ -974,8 +977,8 @@ int Cdrtrack_new(struct CdrtracK **track, struct CdrskiN *boss, ret= Cdrskin_get_source(boss,o->source_path,&(o->fixed_size), &(o->tao_to_sao_tsize),&(o->use_data_image_size), &(o->padding),&(o->set_by_padsize),&(skin_track_type), - &(o->track_type_by_default),&(o->swap_audio_bytes), - &(o->cdxa_conversion), 0); + &(o->track_type_by_default), &(o->mode_modifiers), + &(o->swap_audio_bytes), &(o->cdxa_conversion), 0); if(ret<=0) goto failed; strcpy(o->original_source_path,o->source_path); @@ -1671,7 +1674,7 @@ int Cdrtrack_add_to_session(struct CdrtracK *track, int trackno, } } burn_track_define_data(tr,0,(int) lib_padding,sector_pad_up, - track->track_type); + track->track_type | track->mode_modifiers); burn_track_set_default_size(tr, (off_t) track->tao_to_sao_tsize); burn_track_set_byte_swap(tr, (track->track_type==BURN_AUDIO && track->swap_audio_bytes)); @@ -2923,6 +2926,11 @@ see_cdrskin_eng_html:; "\t-xa1\t\tSubsequent tracks are CD-ROM XA mode 2 form 1 - 2056 bytes\n"); fprintf(stderr, "\t-isosize\tUse iso9660 file system size for next data track\n"); + fprintf(stderr,"\t-preemp\t\tAudio tracks are mastered with 50/15 microseconds preemphasis\n"); + fprintf(stderr,"\t-nopreemp\tAudio tracks are mastered with no preemphasis (default)\n"); + fprintf(stderr,"\t-copy\t\tAudio tracks have unlimited copy permission\n"); + fprintf(stderr,"\t-nocopy\t\tAudio tracks may only be copied once for personal use (default)\n"); + fprintf(stderr,"\t-scms\t\tAudio tracks will not have any copy permission at all\n"); fprintf(stderr,"\t-pad\t\tpadsize=30k\n"); fprintf(stderr, "\t-nopad\t\tDo not pad (default, but applies only to data tracks)\n"); @@ -3336,6 +3344,7 @@ struct CdrskiN { int track_type; int track_type_by_default; /* 0= explicit, 1=not set, 2=by file extension */ int swap_audio_bytes; + int track_modemods; /** CDRWIN cue sheet file */ char cuefile[Cdrskin_adrleN]; @@ -3354,7 +3363,6 @@ struct CdrskiN { char mcn[14]; char next_isrc[13]; - /** The list of tracks with their data sources and parameters */ struct CdrtracK *tracklist[Cdrskin_track_maX]; int track_counter; @@ -3516,6 +3524,7 @@ int Cdrskin_new(struct CdrskiN **skin, struct CdrpreskiN *preskin, int flag) o->cdtext_test= 0; o->mcn[0]= 0; o->next_isrc[0]= 0; + o->track_modemods= 0; o->track_type_by_default= 1; for(i=0;itracklist[i]= NULL; @@ -3625,6 +3634,7 @@ int Cdrskin_get_source(struct CdrskiN *skin, char *source_path, int *use_data_image_size, double *padding, int *set_by_padsize, int *track_type, int *track_type_by_default, + int *mode_mods, int *swap_audio_bytes, int *cdxa_conversion, int flag) { strcpy(source_path,skin->source_path); @@ -3635,6 +3645,7 @@ int Cdrskin_get_source(struct CdrskiN *skin, char *source_path, *set_by_padsize= skin->set_by_padsize; *track_type= skin->track_type; *track_type_by_default= skin->track_type_by_default; + *mode_mods= skin->track_modemods; *swap_audio_bytes= skin->swap_audio_bytes; *cdxa_conversion= skin->cdxa_conversion; return(1); @@ -7309,8 +7320,8 @@ int Cdrskin_setup(struct CdrskiN *skin, int argc, char **argv, int flag) "-fix", "-nofix", "-raw", "-raw96p", "-raw16", "-raw96r", "-clone", - "-cdi", "-preemp", "-nopreemp", "-copy", "-nocopy", - "-scms", "-shorttrack", "-noshorttrack", "-packet", "-noclose", + "-cdi", + "-shorttrack", "-noshorttrack", "-packet", "-noclose", "" }; @@ -7550,6 +7561,10 @@ unsupported_blank_option:; } else if(strcmp(argv[i],"-checkdrive")==0) { skin->do_checkdrive= 1; + } else if(strcmp(argv[i],"-copy")==0) { + skin->track_modemods|= BURN_COPY; + skin->track_modemods&= ~BURN_SCMS; + } else if(strncmp(argv[i],"-cuefile=", 9)==0) { value_pt= argv[i] + 9; goto set_cuefile; @@ -7743,6 +7758,9 @@ dvd_obs:; ClN(printf( "cdrskin: will format DVD+RW by blank=format_overwrite_full -force\n")); + } else if(strcmp(argv[i],"--four_channel")==0) { + skin->track_modemods|= BURN_4CH; + #ifndef Cdrskin_extra_leaN } else if(strncmp(argv[i],"-fs=",4)==0) { @@ -8007,11 +8025,17 @@ msifile_equals:; } else if(strcmp(argv[i],"--no_rc")==0) { /* is handled in Cdrpreskin_setup() */; + } else if(strcmp(argv[i],"-nocopy")==0) { + skin->track_modemods&= ~BURN_COPY; + } else if(strcmp(argv[i],"-nopad")==0) { skin->padding= 0.0; if(skin->verbosity>=Cdrskin_verbose_cmD) ClN(printf("cdrskin: padding : off\n")); + } else if(strcmp(argv[i],"-nopreemp")==0) { + skin->track_modemods&= ~BURN_PREEMPHASIS; + } else if(strcmp(argv[i],"--old_pseudo_scsi_adr")==0) { /* is handled in Cdrpreskin_setup() */; @@ -8032,6 +8056,9 @@ set_padsize:; if(skin->verbosity>=Cdrskin_verbose_cmD) ClN(printf("cdrskin: padding : %.f\n",skin->padding)); + } else if(strcmp(argv[i],"-preemp")==0) { + skin->track_modemods|= BURN_PREEMPHASIS; + } else if(strcmp(argv[i],"--prodvd_cli_compatible")==0) { skin->prodvd_cli_compatible= 1; @@ -8041,6 +8068,9 @@ set_padsize:; } else if(strcmp(argv[i],"-scanbus")==0) { skin->do_scanbus= 1; + } else if(strcmp(argv[i],"-scms")==0) { + skin->track_modemods|= BURN_SCMS; + } else if(strcmp(argv[i],"--single_track")==0) { skin->single_track= 1; if(skin->verbosity>=Cdrskin_verbose_cmD) @@ -8164,6 +8194,9 @@ track_too_large:; if(skin->smallest_tsize<0 || skin->smallest_tsize>skin->fixed_size) skin->smallest_tsize= skin->fixed_size; + } else if(strcmp(argv[i],"--two_channel")==0) { + skin->track_modemods&= ~BURN_4CH; + } else if(strcmp(argv[i],"-V")==0 || strcmp(argv[i],"-Verbose")==0) { /* is handled in Cdrpreskin_setup() */; } else if(strcmp(argv[i],"-v")==0 || strcmp(argv[i],"-verbose")==0) { diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index 0209053..f1e24b4 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2012.01.01.124645" +#define Cdrskin_timestamP "2012.01.01.125539"