From 9c32865f7d2d5dd57f306edd7b59bdec59e0a89f Mon Sep 17 00:00:00 2001 From: Jaby Date: Mon, 27 May 2024 22:31:30 +0200 Subject: [PATCH] Draft 1 of CDXA embedding --- src/Tools/cdtypes/src/types/helper.rs | 2 +- src/Tools/psxcdgen_ex/src/encoder/builder.rs | 35 +++++++++++++------- src/Tools/psxcdgen_ex/src/types/helper.rs | 14 ++++---- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/Tools/cdtypes/src/types/helper.rs b/src/Tools/cdtypes/src/types/helper.rs index d55c242d..5df47c0f 100644 --- a/src/Tools/cdtypes/src/types/helper.rs +++ b/src/Tools/cdtypes/src/types/helper.rs @@ -49,7 +49,7 @@ pub const fn xa_audio_interleave_count(files: usize) -> usize { } pub const fn sector_count_audio(audio_samples: usize) -> usize { - multiple_of_round_up(audio_samples, sector::Audio::SAMPLE_SIZE) + multiple_of_round_up(audio_samples, sector::Audio::DATA_SIZE) } pub const fn sector_count_mode2_form1(data_size: usize) -> usize { diff --git a/src/Tools/psxcdgen_ex/src/encoder/builder.rs b/src/Tools/psxcdgen_ex/src/encoder/builder.rs index a0e32bc7..313fb9fd 100644 --- a/src/Tools/psxcdgen_ex/src/encoder/builder.rs +++ b/src/Tools/psxcdgen_ex/src/encoder/builder.rs @@ -54,6 +54,7 @@ pub fn create_xa_audio_for_raw(mut sub_mode: SubMode, coding_info: CodingInfo, c sub_mode.set_audio(); + sector.sub_header.file_number = 1; sector.sub_header.channel_number = channel; sector.sub_header.sub_mode = sub_mode; sector.sub_header.coding_info = coding_info; @@ -116,21 +117,23 @@ pub fn create_xa_audio_for(data: &Vec) -> Vec { for sector_id in 0..sectors_to_parse { let mut channel_id = 0; - let sub_mode = { - let mut sub_mode = SubMode::default_form2(); - sub_mode.set_real_time(); - - if sector_id + 1 == sectors_to_parse { - sub_mode.set_eof(); - sub_mode.set_eor(); - } - sub_mode - }; - for channel in &mut channels { + let sub_mode = { + let mut sub_mode = SubMode::default_form2(); + + if sector_id + 1 == sectors_to_parse { + sub_mode.set_eof(); + sub_mode.set_eor(); + } + + else { + sub_mode.set_real_time(); + } + sub_mode + }; let (raw_data, coding_info) = { if channel.is_empty() { - ([0u8; Mode2Form2::DATA_SIZE], CodingInfo::default()) + ([0xFFu8; Mode2Form2::DATA_SIZE], CodingInfo::default()) } else { @@ -149,11 +152,19 @@ pub fn create_xa_audio_for(data: &Vec) -> Vec { (raw_data, sub_header.coding_info) } }; + sectors[cur_sector_id] = create_xa_audio_for_raw(sub_mode, coding_info, channel_id, &raw_data); channel_id += 1; cur_sector_id += 1; } } + + for channel in channels { + if !channel.is_empty() { + tool_helper::print_warning(format!("Channel not fully encoded!")); + } + } + sectors } diff --git a/src/Tools/psxcdgen_ex/src/types/helper.rs b/src/Tools/psxcdgen_ex/src/types/helper.rs index b7440a22..2afc2fe8 100644 --- a/src/Tools/psxcdgen_ex/src/types/helper.rs +++ b/src/Tools/psxcdgen_ex/src/types/helper.rs @@ -1,4 +1,4 @@ -use cdtypes::types::helper::sector_count_mode2_form2; +use cdtypes::types::helper::sector_count_audio; use super::*; @@ -108,7 +108,7 @@ pub struct InterleavedXASizes { impl InterleavedXASizes { pub fn new(content: &Vec) -> InterleavedXASizes { - let biggest_file_size = { + let biggest_file_sectors = { let mut biggest_size = 0; for channel in content { @@ -116,12 +116,14 @@ impl InterleavedXASizes { biggest_size = channel.len(); } } - biggest_size + + // Strip off all the unnecessary data + sector_count_audio(biggest_size) + 1 + // ^ encoding file end for streaming }; - let channels = content.len(); - let biggest_file_sectors = sector_count_mode2_form2(biggest_file_size); + let channels = content.len(); InterleavedXASizes{ - channels, biggest_file_sectors, full_size_bytes: channels*biggest_file_sectors*Mode2Form2::DATA_SIZE + channels, biggest_file_sectors: biggest_file_sectors, full_size_bytes: channels*biggest_file_sectors*Mode2Form2::DATA_SIZE } } } \ No newline at end of file