CHD: Check for extra frames
If the frame count is not dividable by 4, there are extra frames added to keep a padding. This is true for F355 (450 frames -> 2 extra frames) and others. Also move CD_TRACK_PADDING to chd.cpp to work around problems with including from C and C++.
This commit is contained in:
parent
14260594ea
commit
1d7ecda2af
|
@ -20,9 +20,6 @@
|
|||
CONSTANTS
|
||||
***************************************************************************/
|
||||
|
||||
/* tracks are padded to a multiple of this many frames */
|
||||
extern const uint32_t CD_TRACK_PADDING;
|
||||
|
||||
#define CD_MAX_TRACKS (99) /* AFAIK the theoretical limit */
|
||||
#define CD_MAX_SECTOR_DATA (2352)
|
||||
#define CD_MAX_SUBCODE_DATA (96)
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
#include "deps/chdr/chd.h"
|
||||
|
||||
/* tracks are padded to a multiple of this many frames */
|
||||
const uint32_t CD_TRACK_PADDING = 4;
|
||||
|
||||
struct CHDDisc : Disc
|
||||
{
|
||||
chd_file* chd;
|
||||
|
@ -95,6 +98,7 @@ bool CHDDisc::TryOpen(const wchar* file)
|
|||
|
||||
u32 total_secs = 0;
|
||||
u32 total_hunks = 0;
|
||||
int extraframes = 0;
|
||||
|
||||
for(;;)
|
||||
{
|
||||
|
@ -137,9 +141,11 @@ bool CHDDisc::TryOpen(const wchar* file)
|
|||
}
|
||||
printf("%s\n",temp);
|
||||
Track t;
|
||||
t.StartFAD=total_frames;
|
||||
t.StartFAD = total_frames + extraframes;
|
||||
int padded = (frames + CD_TRACK_PADDING - 1) / CD_TRACK_PADDING;
|
||||
extraframes += (padded * CD_TRACK_PADDING) - frames;
|
||||
total_frames += frames;
|
||||
t.EndFAD=total_frames-1;
|
||||
t.EndFAD = total_frames - 1 + extraframes;
|
||||
t.ADDR = 0;
|
||||
t.CTRL = strcmp(type,"AUDIO") == 0 ? 0 : 4;
|
||||
t.file = new CHDTrack(this, t.StartFAD, total_hunks, strcmp(type,"MODE1") ? 2352 : 2048);
|
||||
|
|
Loading…
Reference in New Issue