CDImage: Handle cue sheets where pregap is in file

This commit is contained in:
Connor McLaughlin
2019-11-10 15:01:41 +10:00
parent 68fe492130
commit 2cc5084dd1
2 changed files with 37 additions and 16 deletions

View File

@ -107,10 +107,12 @@ bool CDImageCueSheet::OpenAndParse(const char* filename)
// two seconds pregap for track 1 is assumed if not specified
long pregap_frames = track_get_zero_pre(track);
bool pregap_in_file = pregap_frames > 0;
if (pregap_frames < 0 && track_num == 1)
pregap_frames = 2 * FRAMES_PER_SECOND;
// create the index for the pregap
u64 file_offset = static_cast<u64>(static_cast<s64>(track_start)) * track_sector_size;
if (pregap_frames > 0)
{
Index pregap_index = {};
@ -120,6 +122,14 @@ bool CDImageCueSheet::OpenAndParse(const char* filename)
pregap_index.track_number = track_num;
pregap_index.index_number = 0;
pregap_index.is_pregap = true;
if (pregap_in_file)
{
pregap_index.file = it->second;
pregap_index.file_offset = file_offset;
pregap_index.file_sector_size = track_sector_size;
file_offset += static_cast<u64>(pregap_index.length) * track_sector_size;
}
m_indices.push_back(pregap_index);
disc_lba += pregap_index.length;
@ -137,7 +147,7 @@ bool CDImageCueSheet::OpenAndParse(const char* filename)
last_index.index_number = 1;
last_index.file = it->second;
last_index.file_sector_size = track_sector_size;
last_index.file_offset = 0;
last_index.file_offset = file_offset;
last_index.is_pregap = false;
long last_index_offset = track_start;