162 lines
3.6 KiB
C
162 lines
3.6 KiB
C
/*
|
|
* cd.h -- cd structure
|
|
*
|
|
* Copyright (C) 2004 Svend Sorensen
|
|
* For license terms, see the file COPYING in this distribution.
|
|
*/
|
|
|
|
/* references: MMC-3 draft revsion - 10g */
|
|
|
|
#ifndef CD_H
|
|
#define CD_H
|
|
|
|
#include "cdtext.h"
|
|
|
|
#define MAXTRACK 99 /* Red Book track limit */
|
|
#define MAXINDEX 99 /* Red Book index limit */
|
|
|
|
/*
|
|
* disc modes
|
|
* DATA FORM OF MAIN DATA (5.29.2.8)
|
|
*/
|
|
enum DiscMode {
|
|
MODE_CD_DA, /* CD-DA */
|
|
MODE_CD_ROM, /* CD-ROM mode 1 */
|
|
MODE_CD_ROM_XA /* CD-ROM XA and CD-I */
|
|
};
|
|
|
|
/*
|
|
* track modes
|
|
* 5.29.2.8 DATA FORM OF MAIN DATA
|
|
* Table 350 - Data Block Type Codes
|
|
*/
|
|
enum TrackMode {
|
|
MODE_AUDIO, /* 2352 byte block length */
|
|
MODE_MODE1, /* 2048 byte block length */
|
|
MODE_MODE1_RAW, /* 2352 byte block length */
|
|
MODE_MODE2, /* 2336 byte block length */
|
|
MODE_MODE2_FORM1, /* 2048 byte block length */
|
|
MODE_MODE2_FORM2, /* 2324 byte block length */
|
|
MODE_MODE2_FORM_MIX, /* 2332 byte block length */
|
|
MODE_MODE2_RAW /* 2352 byte block length */
|
|
};
|
|
|
|
/*
|
|
* sub-channel mode
|
|
* 5.29.2.13 Data Form of Sub-channel
|
|
* NOTE: not sure if this applies to cue files
|
|
*/
|
|
enum TrackSubMode {
|
|
SUB_MODE_RW, /* RAW Data */
|
|
SUB_MODE_RW_RAW /* PACK DATA (written R-W */
|
|
};
|
|
|
|
/*
|
|
* track flags
|
|
* Q Sub-channel Control Field (4.2.3.3, 5.29.2.2)
|
|
*/
|
|
enum TrackFlag {
|
|
FLAG_NONE =0x00, /* no flags set */
|
|
FLAG_PRE_EMPHASIS =0x01, /* audio recorded with pre-emphasis */
|
|
FLAG_COPY_PERMITTED =0x02, /* digital copy permitted */
|
|
FLAG_DATA =0x04, /* data track */
|
|
FLAG_FOUR_CHANNEL =0x08, /* 4 audio channels */
|
|
FLAG_SCMS =0x10, /* SCMS (not Q Sub-ch.) (5.29.2.7) */
|
|
FLAG_ANY =0xff /* any flags set */
|
|
};
|
|
|
|
enum DataType {
|
|
DATA_AUDIO,
|
|
DATA_DATA,
|
|
DATA_FIFO,
|
|
DATA_ZERO
|
|
};
|
|
|
|
/* ADTs */
|
|
typedef struct Cd Cd;
|
|
typedef struct Track Track;
|
|
|
|
/* return pointer to CD structure */
|
|
Cd *cd_init ();
|
|
|
|
/* dump all info from CD structure
|
|
* in human readable format (for debugging)
|
|
*/
|
|
void cd_dump (Cd *cd);
|
|
|
|
/*
|
|
* Cd functions
|
|
*/
|
|
|
|
void cd_set_mode (Cd *cd, int mode);
|
|
int cd_get_mode (Cd *cd);
|
|
|
|
void cd_set_catalog (Cd *cd, char *catalog);
|
|
char *cd_get_catalog (Cd *cd);
|
|
|
|
/*
|
|
* return pointer to cd's Cdtext
|
|
*/
|
|
Cdtext *cd_get_cdtext (Cd *cd);
|
|
|
|
/*
|
|
* add a new track to cd, increment number of tracks
|
|
* and return pointer to new track
|
|
*/
|
|
Track *cd_add_track (Cd *cd);
|
|
|
|
/*
|
|
* return number of tracks in cd
|
|
*/
|
|
int cd_get_ntrack (Cd *cd);
|
|
|
|
Track *cd_get_track (Cd *cd, int i);
|
|
|
|
/*
|
|
* Track functions
|
|
*/
|
|
|
|
/* filename of data file */
|
|
void track_set_filename (Track *track, char *filename);
|
|
char *track_get_filename (Track *track);
|
|
|
|
/* track start is starting position in data file */
|
|
void track_set_start (Track *track, long start);
|
|
long track_get_start (Track *track);
|
|
|
|
/* track length is length of data file to use */
|
|
void track_set_length (Track *track, long length);
|
|
long track_get_length (Track *track);
|
|
|
|
/* see enum TrackMode */
|
|
void track_set_mode (Track *track, int mode);
|
|
int track_get_mode (Track *track);
|
|
|
|
/* see enum TrackSubMode */
|
|
void track_set_sub_mode (Track *track, int sub_mode);
|
|
int track_get_sub_mode (Track *track);
|
|
|
|
/* see enum TrackFlag */
|
|
void track_set_flag (Track *track, int flag);
|
|
void track_clear_flag (Track *track, int flag);
|
|
int track_is_set_flag (Track *track, int flag);
|
|
|
|
/* zero data pregap */
|
|
void track_set_zero_pre (Track *track, long length);
|
|
long track_get_zero_pre (Track *track);
|
|
|
|
/* zero data postgap */
|
|
void track_set_zero_post (Track *track, long length);
|
|
long track_get_zero_post (Track *track);
|
|
|
|
void track_set_isrc (Track *track, char *isrc);
|
|
char *track_get_isrc (Track *track);
|
|
|
|
Cdtext *track_get_cdtext (Track *track);
|
|
|
|
void track_add_index (Track *track, long index);
|
|
int track_get_nindex (Track *track);
|
|
long track_get_index (Track *track, int i);
|
|
|
|
#endif
|