Storing CD-TEXT as cdtext.dat with cdrskin option -toc -vv, reporting with -vvv
This commit is contained in:
parent
570c490fe6
commit
8576e41999
@ -2,7 +2,7 @@
|
|||||||
.\" First parameter, NAME, should be all caps
|
.\" First parameter, NAME, should be all caps
|
||||||
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||||
.\" other parameters are allowed: see man(7), man(1)
|
.\" other parameters are allowed: see man(7), man(1)
|
||||||
.TH CDRSKIN 1 "Jul 28, 2011"
|
.TH CDRSKIN 1 "Dec 02, 2011"
|
||||||
.\" Please adjust this date whenever revising the manpage.
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
.\"
|
.\"
|
||||||
.\" Some roff macros, for reference:
|
.\" Some roff macros, for reference:
|
||||||
@ -766,6 +766,15 @@ The output contains all info from option -atip plus lines which begin with
|
|||||||
"track:", the track number, the word "lba:" and a number which gives the
|
"track:", the track number, the word "lba:" and a number which gives the
|
||||||
start address of the track. Addresses are counted in CD sectors which with
|
start address of the track. Addresses are counted in CD sectors which with
|
||||||
SAO or TAO data tracks hold 2048 bytes each.
|
SAO or TAO data tracks hold 2048 bytes each.
|
||||||
|
.br
|
||||||
|
If verbosity is set to level 2 (-v -v) then the CD-TEXT packs from the lead-in
|
||||||
|
of an audio CD gets extracted and written into file 'cdtext.dat', if that file
|
||||||
|
does not yet exist. Prepended is a 4 byte header, followed by one or more
|
||||||
|
packs of 18 bytes each.
|
||||||
|
.br
|
||||||
|
Verbosity level 3 causes the CD-TEXT packs to be printed as hex numbers to
|
||||||
|
standard output. Bytes 4 to 15 of certain pack types are printed as ASCII
|
||||||
|
characters if they have values in the range of 32 to 126.
|
||||||
.RS
|
.RS
|
||||||
.TP
|
.TP
|
||||||
Example. Retrieve an afio archive from track number 2:
|
Example. Retrieve an afio archive from track number 2:
|
||||||
@ -798,7 +807,7 @@ then the track on media gets truncated to the predicted size and cdrskin exits
|
|||||||
with non-zero value.
|
with non-zero value.
|
||||||
.TP
|
.TP
|
||||||
.BI \-v
|
.BI \-v
|
||||||
Increment verbose level by one. Startlevel is 0 with only few messages.
|
Increment verbosity level by one. Startlevel is 0 with only few messages.
|
||||||
Level 1 prints progress report with long running operations and also causes
|
Level 1 prints progress report with long running operations and also causes
|
||||||
some extra lines to be put out with info retrieval options.
|
some extra lines to be put out with info retrieval options.
|
||||||
Level 2 additionally reports about option settings derived from arguments or
|
Level 2 additionally reports about option settings derived from arguments or
|
||||||
|
@ -4585,6 +4585,78 @@ int Cdrskin_obtain_nwa(struct CdrskiN *skin, int *nwa, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @param flag bit0-3= source of text packs:
|
||||||
|
0= CD Lead-in
|
||||||
|
*/
|
||||||
|
int Cdrskin_print_text_packs(struct CdrskiN *skin, unsigned char *text_packs,
|
||||||
|
int num_packs, int flag)
|
||||||
|
{
|
||||||
|
int i, j, from;
|
||||||
|
char *from_text= "";
|
||||||
|
unsigned char *pack;
|
||||||
|
|
||||||
|
from= flag & 15;
|
||||||
|
if(from == 0)
|
||||||
|
from_text= " from CD Lead-in";
|
||||||
|
printf("CD-TEXT data%s:\n", from_text);
|
||||||
|
for(i= 0; i < num_packs; i++) {
|
||||||
|
pack= text_packs + 18 * i;
|
||||||
|
printf("%3d :", i);
|
||||||
|
for(j= 0; j < 18; j++) {
|
||||||
|
if(j >= 4 && j <= 15 && pack[j] >= 32 && pack[j] <= 126 &&
|
||||||
|
pack[0] != 0x88 && pack[0] != 0x89 && pack[0] != 0x8f)
|
||||||
|
printf(" %c", pack[j]);
|
||||||
|
else
|
||||||
|
printf(" %2.2x", pack[j]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Cdrskin_store_text_packs(struct CdrskiN *skin, unsigned char *text_packs,
|
||||||
|
int num_packs, int flag)
|
||||||
|
{
|
||||||
|
int data_length, ret;
|
||||||
|
struct stat stbuf;
|
||||||
|
FILE *fp;
|
||||||
|
unsigned char fake_head[4];
|
||||||
|
|
||||||
|
if(stat("cdtext.dat", &stbuf) != -1) {
|
||||||
|
fprintf(stderr, "cdrskin: SORRY : Will not overwrite file 'cdtext.dat'\n");
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
fp= fopen("cdtext.dat", "w");
|
||||||
|
if(fp == NULL) {
|
||||||
|
fprintf(stderr, "cdrskin: SORRY : Cannot open file 'cdtext.dat' for storing extracted CD-TEXT\n");
|
||||||
|
fprintf(stderr, "cdrskin: %s (errno=%d)\n", strerror(errno), errno);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
data_length= num_packs * 18 + 2;
|
||||||
|
fake_head[0]= (data_length >> 8) & 0xff;
|
||||||
|
fake_head[1]= data_length & 0xff;
|
||||||
|
fake_head[2]= fake_head[3]= 0;
|
||||||
|
ret= fwrite(fake_head, 4, 1, fp);
|
||||||
|
if(ret != 1) {
|
||||||
|
write_failure:;
|
||||||
|
fprintf(stderr,
|
||||||
|
"cdrskin: SORRY : Cannot write all data to file 'cdtext.dat'\n");
|
||||||
|
fprintf(stderr, "cdrskin: %s (errno=%d)\n", strerror(errno), errno);
|
||||||
|
fclose(fp);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
ret= fwrite(text_packs, data_length - 2, 1, fp);
|
||||||
|
if(ret != 1)
|
||||||
|
goto write_failure;
|
||||||
|
fprintf(stderr,
|
||||||
|
"cdrskin: NOTE : Wrote header and %d CD-TEXT bytes to file 'cdtext.dat'\n",
|
||||||
|
data_length - 2);
|
||||||
|
fclose(fp);
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Perform -toc under control of Cdrskin_atip().
|
/** Perform -toc under control of Cdrskin_atip().
|
||||||
@param flag Bitfield for control purposes:
|
@param flag Bitfield for control purposes:
|
||||||
bit0= do not list sessions separately (do it cdrecord style)
|
bit0= do not list sessions separately (do it cdrecord style)
|
||||||
@ -4593,7 +4665,7 @@ int Cdrskin_obtain_nwa(struct CdrskiN *skin, int *nwa, int flag)
|
|||||||
int Cdrskin_toc(struct CdrskiN *skin, int flag)
|
int Cdrskin_toc(struct CdrskiN *skin, int flag)
|
||||||
{
|
{
|
||||||
int num_sessions= 0,num_tracks= 0,lba= 0,track_count= 0,total_tracks= 0;
|
int num_sessions= 0,num_tracks= 0,lba= 0,track_count= 0,total_tracks= 0;
|
||||||
int session_no, track_no, pmin, psec, pframe, ret;
|
int session_no, track_no, pmin, psec, pframe, ret, final_ret= 1;
|
||||||
struct burn_drive *drive;
|
struct burn_drive *drive;
|
||||||
struct burn_disc *disc= NULL;
|
struct burn_disc *disc= NULL;
|
||||||
struct burn_session **sessions;
|
struct burn_session **sessions;
|
||||||
@ -4602,6 +4674,8 @@ int Cdrskin_toc(struct CdrskiN *skin, int flag)
|
|||||||
enum burn_disc_status s;
|
enum burn_disc_status s;
|
||||||
char profile_name[80];
|
char profile_name[80];
|
||||||
int profile_number;
|
int profile_number;
|
||||||
|
unsigned char *text_packs= NULL;
|
||||||
|
int num_packs= 0;
|
||||||
|
|
||||||
drive= skin->drives[skin->driveno].drive;
|
drive= skin->drives[skin->driveno].drive;
|
||||||
|
|
||||||
@ -4685,6 +4759,19 @@ int Cdrskin_toc(struct CdrskiN *skin, int flag)
|
|||||||
printf(" mode: -1\n");
|
printf(" mode: -1\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(skin->verbosity >= Cdrskin_verbose_cmD) {
|
||||||
|
ret= burn_disc_get_leadin_text(drive, &text_packs, &num_packs, 0);
|
||||||
|
if(ret > 0 && num_packs > 0) {
|
||||||
|
if(skin->verbosity >= Cdrskin_verbose_debuG)
|
||||||
|
Cdrskin_print_text_packs(skin, text_packs, num_packs, 0);
|
||||||
|
ret= Cdrskin_store_text_packs(skin, text_packs, num_packs, 0);
|
||||||
|
free(text_packs);
|
||||||
|
if(ret <= 0 && ret < final_ret)
|
||||||
|
final_ret= ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
summary:
|
summary:
|
||||||
ret= burn_disc_get_profile(drive, &profile_number, profile_name);
|
ret= burn_disc_get_profile(drive, &profile_number, profile_name);
|
||||||
if(ret <= 0)
|
if(ret <= 0)
|
||||||
@ -4703,7 +4790,7 @@ summary:
|
|||||||
burn_disc_free(disc);
|
burn_disc_free(disc);
|
||||||
if(s == BURN_DISC_EMPTY)
|
if(s == BURN_DISC_EMPTY)
|
||||||
return(0);
|
return(0);
|
||||||
return(1);
|
return(final_ret);
|
||||||
cannot_read:;
|
cannot_read:;
|
||||||
fprintf(stderr,"cdrecord_emulation: Cannot read TOC header\n");
|
fprintf(stderr,"cdrecord_emulation: Cannot read TOC header\n");
|
||||||
fprintf(stderr,"cdrecord_emulation: Cannot read TOC/PMA\n");
|
fprintf(stderr,"cdrecord_emulation: Cannot read TOC/PMA\n");
|
||||||
@ -5120,10 +5207,10 @@ int Cdrskin_atip(struct CdrskiN *skin, int flag)
|
|||||||
|
|
||||||
ret= 1;
|
ret= 1;
|
||||||
if(flag&1)
|
if(flag&1)
|
||||||
Cdrskin_toc(skin, !(flag & 2));
|
ret= Cdrskin_toc(skin, !(flag & 2));
|
||||||
/*cdrecord seems to ignore -toc errors if -atip is ok */
|
/*cdrecord seems to ignore -toc errors if -atip is ok */
|
||||||
if(flag & 4)
|
if(ret > 0 && (flag & 4))
|
||||||
Cdrskin_minfo(skin, 0);
|
ret= Cdrskin_minfo(skin, 0);
|
||||||
|
|
||||||
ex:;
|
ex:;
|
||||||
if(manuf != NULL)
|
if(manuf != NULL)
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2011.12.02.171436"
|
#define Cdrskin_timestamP "2011.12.02.171710"
|
||||||
|
Loading…
Reference in New Issue
Block a user