sector.h: add routines for determining if discmode is DVD or CD.

cdtext*: adjust for bigendian or not. Check for double-byte characters.

cd-info.c: new option --dvd. Don't attempt to understand DVD unless this is
           given.
This commit is contained in:
rocky
2004-08-30 00:26:59 +00:00
parent ef7030e53b
commit 1703e7dc00
4 changed files with 44 additions and 7 deletions

View File

@@ -1,5 +1,5 @@
/*
$Id: cdtext.c,v 1.6 2004/07/17 08:59:44 rocky Exp $
$Id: cdtext.c,v 1.7 2004/08/30 00:26:59 rocky Exp $
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
toc reading routine adapted from cuetools
@@ -144,6 +144,9 @@ cdtext_set (cdtext_field_t key, const char *value, cdtext_t *cdtext)
#define SET_CDTEXT_FIELD(FIELD) \
(*set_cdtext_field_fn)(user_data, i_track, i_first_track, FIELD, buffer);
/*
parse all CD-TEXT data retrieved.
*/
bool
cdtext_data_init(void *user_data, track_t i_first_track,
const unsigned char *wdata,
@@ -162,6 +165,12 @@ cdtext_data_init(void *user_data, track_t i_first_track,
pdata = (CDText_data_t *) (&wdata[4]);
for( i=0; i < CDIO_CDTEXT_MAX_PACK_DATA; i++ ) {
if ( pdata->bDBC ) {
cdio_warn("Double-byte characters not supported");
return false;
}
if( pdata->seq != i )
break;

View File

@@ -1,5 +1,5 @@
/*
$Id: cdtext_private.h,v 1.3 2004/07/17 09:34:30 rocky Exp $
$Id: cdtext_private.h,v 1.4 2004/08/30 00:26:59 rocky Exp $
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
@@ -43,10 +43,16 @@ struct CDText_data
uint8_t type;
track_t i_track;
uint8_t seq;
#ifdef WORDS_BIGENDIAN
uint8_t bDBC: 1; /* double byte character */
uint8_t block: 3; /* block number 0..7 */
uint8_t characterPosition:4; /* character position */
uint8_t block:3; /* block number 0..7 */
uint8_t bDBC:1; /* double byte character */
char text[12];
#else
uint8_t characterPosition:4; /* character position */
uint8_t block :3; /* block number 0..7 */
uint8_t bDBC :1; /* double byte character */
#endif
char text[CDIO_CDTEXT_MAX_TEXT_DATA];
uint8_t crc[2];
} GNUC_PACKED;