static bool _cdio_get_track_msf(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 = to_bcd8(_obj->tocent[track_num - 1].addr.msf.minute); msf->s = to_bcd8(_obj->tocent[track_num - 1].addr.msf.second); msf->f = to_bcd8(_obj->tocent[track_num - 1].addr.msf.frame); return true; }
/*! 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; } }