示例#1
0
/*!  
  Return the starting MSF (minutes/secs/frames) for track number
  track_num in obj.  Track numbers usually start at something 
  greater than 0, usually 1.

  The "leadout" track is specified either by
  using i_track LEADOUT_TRACK or the total tracks+1.
  False is returned if there is no track entry.
*/
static bool
get_track_msf_netbsd(void *user_data, track_t track_num, msf_t *msf)
{
	_img_private_t *_obj = user_data;
	int res;

	if (!msf)
		return false;

	if (!_obj->toc_valid) {
		res = _cdio_read_toc(_obj);
		if (!res)
			return CDIO_INVALID_TRACK;
	}

	if (track_num == CDIO_CDROM_LEADOUT_TRACK)
		track_num = TOTAL_TRACKS + 1;

	if (track_num > TOTAL_TRACKS + 1 || track_num == 0)
		return false;

	msf->m = cdio_to_bcd8(_obj->tocent[track_num - 1].addr.msf.minute);
	msf->s = cdio_to_bcd8(_obj->tocent[track_num - 1].addr.msf.second);
	msf->f = cdio_to_bcd8(_obj->tocent[track_num - 1].addr.msf.frame);

	return true;
}
示例#2
0
/*!  
  Get format of track. 
*/
static track_format_t
get_track_format_netbsd(void *user_data, track_t track_num) 
{
	_img_private_t *_obj = user_data;
	int res;
  
	if (!_obj->toc_valid) {
		res = _cdio_read_toc(_obj);
		if (!res)
			return CDIO_INVALID_TRACK;
	}

	if (track_num > TOTAL_TRACKS || track_num == 0)
		return TRACK_FORMAT_ERROR;

	if (_obj->tocent[track_num - 1].control & 0x04) {
		if (!_obj->sessionformat_valid) {
			res = _cdio_read_discinfo(_obj);
			if (res)
				return CDIO_INVALID_TRACK;
		}

		if (_obj->sessionformat[track_num - 1] == 0x10)
			return TRACK_FORMAT_CDI;
		else if (_obj->sessionformat[track_num - 1] == 0x20) 
			return TRACK_FORMAT_XA;
		else
			return TRACK_FORMAT_DATA;
	} else
		return TRACK_FORMAT_AUDIO;
}
示例#3
0
/*!
  Return the number of tracks in the current medium.
  CDIO_INVALID_TRACK is returned on error.
*/
static track_t
_cdio_get_num_tracks(void *env) 
{
  _img_private_t *_obj = env;
  
  if (!_obj->gen.toc_init) _cdio_read_toc (_obj) ;

  return TOTAL_TRACKS;
}
示例#4
0
/*!
  Return the number of of the first track. 
  CDIO_INVALID_TRACK is returned on error.
*/
static track_t
_cdio_get_first_track_num(void *env) 
{
  _img_private_t *_obj = env;
  
  if (!_obj->gen.toc_init) _cdio_read_toc (_obj) ;

  return FIRST_TRACK_NUM;
}
示例#5
0
static track_t
get_num_tracks_netbsd(void *user_data) 
{
	_img_private_t *_obj = user_data;
	int res;
  
	if (!_obj->toc_valid) {
		res = _cdio_read_toc(_obj);
		if (!res)
			return CDIO_INVALID_TRACK;
	}

	return TOTAL_TRACKS;
}
示例#6
0
static track_t
get_first_track_num_netbsd(void *user_data) 
{
	_img_private_t *_obj = user_data;
	int res;
  
	if (!_obj->toc_valid) {
		res = _cdio_read_toc(_obj);
		if (!res)
			return CDIO_INVALID_TRACK;
	}

	return FIRST_TRACK_NUM;
}
示例#7
0
/*!
  Return true if we have XA data (green, mode2 form1) or
  XA data (green, mode2 form2). That is track begins:
  sync - header - subheader
  12     4      -  8

  FIXME: there's gotta be a better design for this and get_track_format?
*/
static bool
_cdio_get_track_green(void *env, track_t track_num) 
{
  _img_private_t *_obj = env;
  
  if (!_obj->gen.toc_init) _cdio_read_toc (_obj) ;

  if (track_num == CDIO_CDROM_LEADOUT_TRACK) track_num = TOTAL_TRACKS+1;

  if (track_num > TOTAL_TRACKS+1 || track_num == 0)
    return false;

  /* FIXME: Dunno if this is the right way, but it's what 
     I was using in cdinfo for a while.
   */
  return ((_obj->tocent[track_num-1].cdte_ctrl & 2) != 0);
}
示例#8
0
/*!  
  Return the starting MSF (minutes/secs/frames) for track number
  track_num in obj.  Track numbers start at 1.
  The "leadout" track is specified either by
  using track_num LEADOUT_TRACK or the total tracks+1.
  False is returned if there is no track entry.
*/
static bool
_cdio_get_track_msf(void *env, track_t track_num, msf_t *msf)
{
  _img_private_t *_obj = env;

  if (NULL == msf) return false;

  if (!_obj->gen.toc_init) _cdio_read_toc (_obj) ;

  if (track_num == CDIO_CDROM_LEADOUT_TRACK) track_num = TOTAL_TRACKS+1;

  if (track_num > TOTAL_TRACKS+1 || track_num == 0) {
    return false;
  } else {
    struct cdrom_msf0  *msf0= &_obj->tocent[track_num-1].cdte_addr.msf;
    msf->m = to_bcd8(msf0->minute);
    msf->s = to_bcd8(msf0->second);
    msf->f = to_bcd8(msf0->frame);
    return true;
  }
}
示例#9
0
/*!  
  Get format of track. 
*/
static track_format_t
_cdio_get_track_format(void *env, track_t track_num) 
{
  _img_private_t *_obj = env;
  
  if (!_obj->gen.toc_init) _cdio_read_toc (_obj) ;

  if (track_num > TOTAL_TRACKS || track_num == 0)
    return TRACK_FORMAT_ERROR;

  /* This is pretty much copied from the "badly broken" cdrom_count_tracks
     in linux/cdrom.c.
   */
  if (_obj->tocent[track_num-1].cdte_ctrl & CDROM_DATA_TRACK) {
    if (_obj->tocent[track_num-1].cdte_format == 0x10)
      return TRACK_FORMAT_CDI;
    else if (_obj->tocent[track_num-1].cdte_format == 0x20) 
      return TRACK_FORMAT_XA;
    else
      return TRACK_FORMAT_DATA;
  } else
    return TRACK_FORMAT_AUDIO;
  
}
示例#10
0
static bool
read_toc_netbsd (void *p_user_data) 
{

	return _cdio_read_toc(p_user_data);
}