diff --git a/psxavenc/cdrom.c b/psxavenc/cdrom.c index c73aac4..86018f0 100644 --- a/psxavenc/cdrom.c +++ b/psxavenc/cdrom.c @@ -23,23 +23,22 @@ freely, subject to the following restrictions: #include "common.h" -void init_sector_buffer_video(uint8_t *buffer, settings_t *settings) { - int offset; +void init_sector_buffer_video(psx_cdrom_sector_mode2_t *buffer, settings_t *settings) { if (settings->format == FORMAT_STR2CD) { - memset(buffer, 0, 2352); - memset(buffer+0x001, 0xFF, 10); - buffer[0x00F] = 0x02; - offset = 0x10; + memset(buffer, 0, PSX_CDROM_SECTOR_SIZE); + memset(buffer->sync + 1, 0xFF, 10); + buffer->header.mode = 0x02; } else { - memset(buffer, 0, 2336); - offset = 0; + memset(buffer->subheader, 0, PSX_CDROM_SECTOR_SIZE); } - buffer[offset+0] = settings->file_number; - buffer[offset+1] = settings->channel_number & 0x1F; - buffer[offset+2] = 0x08 | 0x40; - buffer[offset+3] = 0x00; - memcpy(buffer + offset + 4, buffer + offset, 4); + buffer->subheader[0].file = settings->file_number; + buffer->subheader[0].channel = settings->channel_number & PSX_CDROM_SECTOR_XA_CHANNEL_MASK; + buffer->subheader[0].submode = + PSX_CDROM_SECTOR_XA_SUBMODE_DATA + | PSX_CDROM_SECTOR_XA_SUBMODE_RT; + buffer->subheader[0].coding = 0; + memcpy(buffer->subheader + 1, buffer->subheader, sizeof(psx_cdrom_sector_xa_subheader_t)); } void calculate_edc_data(uint8_t *buffer) diff --git a/psxavenc/common.h b/psxavenc/common.h index 3408555..bc75f6f 100644 --- a/psxavenc/common.h +++ b/psxavenc/common.h @@ -124,7 +124,7 @@ typedef struct { } settings_t; // cdrom.c -void init_sector_buffer_video(uint8_t *buffer, settings_t *settings); +void init_sector_buffer_video(psx_cdrom_sector_mode2_t *buffer, settings_t *settings); void calculate_edc_data(uint8_t *buffer); // decoding.c diff --git a/psxavenc/filefmt.c b/psxavenc/filefmt.c index 77f6ea8..621bfdc 100644 --- a/psxavenc/filefmt.c +++ b/psxavenc/filefmt.c @@ -306,7 +306,7 @@ void encode_file_str(settings_t *settings, FILE *output) { if ((j%interleave) < video_sectors_per_block) { // Video sector - init_sector_buffer_video(buffer, settings); + init_sector_buffer_video((psx_cdrom_sector_mode2_t*) buffer, settings); encode_sector_str(settings->video_frames, buffer, settings); } else { // Audio sector @@ -342,7 +342,7 @@ void encode_file_str(settings_t *settings, FILE *output) { } } - fwrite(buffer, sector_size, 1, output); + fwrite(buffer + 2352 - sector_size, sector_size, 1, output); time_t t = get_elapsed_time(settings); if (t) { diff --git a/psxavenc/mdec.c b/psxavenc/mdec.c index b7f7157..c88964e 100644 --- a/psxavenc/mdec.c +++ b/psxavenc/mdec.c @@ -614,13 +614,8 @@ void encode_sector_str(uint8_t *video_frames, uint8_t *output, settings_t *setti header[0x00E] = (uint8_t)(settings->state_vid.bytes_used>>16); header[0x00F] = (uint8_t)(settings->state_vid.bytes_used>>24); - if (settings->format == FORMAT_STR2CD) { - memcpy(output + 0x018, header, sizeof(header)); - memcpy(output + 0x018 + 0x020, settings->state_vid.frame_output + settings->state_vid.frame_data_offset, 2016); - } else { - memcpy(output + 0x008, header, sizeof(header)); - memcpy(output + 0x008 + 0x020, settings->state_vid.frame_output + settings->state_vid.frame_data_offset, 2016); - } + memcpy(output + 0x018, header, sizeof(header)); + memcpy(output + 0x018 + 0x020, settings->state_vid.frame_output + settings->state_vid.frame_data_offset, 2016); settings->state_vid.frame_data_offset += 2016; }