summaryrefslogtreecommitdiff
path: root/lib/driver/image.h
blob: 9f80777b0fed7792a451715b0c71eaf76be9517f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
  Copyright (C) 2004, 2005, 2008, 2011 Rocky Bernstein <rocky@gnu.org>

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

/*! 
  Header for image drivers. In contrast to image_common.h which contains
  routines, this header like most C headers does not depend on anything
  defined before it is included.
*/

#ifndef __CDIO_IMAGE_H__
#define __CDIO_IMAGE_H__

#if defined(HAVE_CONFIG_H) && !defined(__CDIO_CONFIG_H__)
# include "config.h"
# define __CDIO_CONFIG_H__ 1
#endif

#include <cdio/types.h>
#include <cdio/cdtext.h>
#include "cdio_private.h"
#include <cdio/sector.h>

/*! 
  The universal format for information about a track for CD image readers
  It may be that some fields can be derived from other fields.
  Over time this structure may get cleaned up. Possibly this can be
  expanded/reused for real CD formats.
*/

typedef struct {
  track_t        track_num;     /**< Probably is index+1 */
  msf_t          start_msf;
  lba_t          start_lba;
  int            start_index;
  lba_t          pregap;	/**< pre-gap */
  lba_t          silence;	/**< pre-gap with zero audio data */
  int            sec_count;     /**< Number of sectors in this track. Does not
				     include pregap */
  int            num_indices;
  flag_t         flags;         /**< "[NO] COPY", "4CH", "[NO] PREMPAHSIS" */
  char          *isrc;		/**< IRSC Code (5.22.4) exactly 12 bytes */
  char          *filename;
  CdioDataSource_t *data_source;
  off_t          offset;        /**< byte offset into data_start of track
				     beginning. In cdrdao for example, one
				     filename may cover many tracks and
				     each track would then have a different
				     offset.
				*/
  track_format_t track_format;
  bool           track_green;

  trackmode_t    mode;
  uint16_t       datasize;      /**< How much is in the portion we return 
				     back? */
  uint16_t       datastart;     /**<  Offset from begining of frame 
				      that data starts */
  uint16_t       endsize;       /**< How much stuff at the end to skip over. 
				     This stuff may have error correction 
				     (EDC, or ECC).*/
  uint16_t       blocksize;     /**< total block size = start + size + end */
} track_info_t;


#endif /* __CDIO_IMAGE_H__ */