libpsxav: fix EOF flag being misapplied in xa/xacd output (#7)

* libpsxav: fix EOF flag being misapplied in xa/xacd output

* psxavenc: refactor str2/str2cd output to match xa/xacd output cleanup

* psxavenc: fix EDC not being calculated in 2336-byte sector mode
This commit is contained in:
Adrian Siekierka
2025-02-16 16:00:41 +01:00
committed by GitHub
parent 3478a92512
commit 87b0fe3f2a
6 changed files with 100 additions and 49 deletions

View File

@@ -79,6 +79,58 @@ void psx_audio_spu_set_flag_at_sample(uint8_t* spu_data, int sample_pos, int fla
#define PSX_CDROM_SECTOR_SIZE 2352
typedef struct {
uint8_t minute;
uint8_t second;
uint8_t sector;
uint8_t mode;
} psx_cdrom_sector_header_t;
typedef struct {
uint8_t file;
uint8_t channel;
uint8_t submode;
uint8_t coding;
} psx_cdrom_sector_xa_subheader_t;
typedef struct {
uint8_t sync[12];
psx_cdrom_sector_header_t header;
uint8_t data[0x920];
} psx_cdrom_sector_mode1_t;
typedef struct {
uint8_t sync[12];
psx_cdrom_sector_header_t header;
psx_cdrom_sector_xa_subheader_t subheader[2];
uint8_t data[0x918];
} psx_cdrom_sector_mode2_t;
_Static_assert(sizeof(psx_cdrom_sector_mode1_t) == PSX_CDROM_SECTOR_SIZE, "Invalid Mode1 sector size");
_Static_assert(sizeof(psx_cdrom_sector_mode2_t) == PSX_CDROM_SECTOR_SIZE, "Invalid Mode2 sector size");
#define PSX_CDROM_SECTOR_XA_CHANNEL_MASK 0x1F
#define PSX_CDROM_SECTOR_XA_SUBMODE_EOR 0x01
#define PSX_CDROM_SECTOR_XA_SUBMODE_VIDEO 0x02
#define PSX_CDROM_SECTOR_XA_SUBMODE_AUDIO 0x04
#define PSX_CDROM_SECTOR_XA_SUBMODE_DATA 0x08
#define PSX_CDROM_SECTOR_XA_SUBMODE_TRIGGER 0x10
#define PSX_CDROM_SECTOR_XA_SUBMODE_FORM2 0x20
#define PSX_CDROM_SECTOR_XA_SUBMODE_RT 0x40
#define PSX_CDROM_SECTOR_XA_SUBMODE_EOF 0x80
#define PSX_CDROM_SECTOR_XA_CODING_MONO 0x00
#define PSX_CDROM_SECTOR_XA_CODING_STEREO 0x01
#define PSX_CDROM_SECTOR_XA_CODING_CHANNEL_MASK 0x03
#define PSX_CDROM_SECTOR_XA_CODING_FREQ_DOUBLE 0x00
#define PSX_CDROM_SECTOR_XA_CODING_FREQ_SINGLE 0x04
#define PSX_CDROM_SECTOR_XA_CODING_FREQ_MASK 0x0C
#define PSX_CDROM_SECTOR_XA_CODING_BITS_4 0x00
#define PSX_CDROM_SECTOR_XA_CODING_BITS_8 0x10
#define PSX_CDROM_SECTOR_XA_CODING_BITS_MASK 0x30
#define PSX_CDROM_SECTOR_XA_CODING_EMPHASIS 0x40
typedef enum {
PSX_CDROM_SECTOR_TYPE_MODE1,
PSX_CDROM_SECTOR_TYPE_MODE2_FORM1,
@@ -87,4 +139,4 @@ typedef enum {
void psx_cdrom_calculate_checksums(uint8_t *sector, psx_cdrom_sector_type_t type);
#endif /* __LIBPSXAV_H__ */
#endif /* __LIBPSXAV_H__ */