Write sectors

This commit is contained in:
Jaby 2022-10-20 20:11:00 +02:00
parent 23b2696398
commit 182358f849
4 changed files with 19 additions and 13 deletions

View File

@ -135,4 +135,14 @@ impl Sector {
Sector::CDXAAudio(sector) => sector.finalize(), Sector::CDXAAudio(sector) => sector.finalize(),
} }
} }
pub fn as_raw(&self) -> &[u8] {
match self {
Sector::Audio(sector) => unsafe {std::mem::transmute::<&Audio, &[u8; SECTOR_SIZE]>(sector)},
Sector::Empty(sector) => unsafe {std::mem::transmute::<&Mode0, &[u8; SECTOR_SIZE]>(sector)},
Sector::CDData(sector) => unsafe {std::mem::transmute::<&Mode1, &[u8; SECTOR_SIZE]>(sector)},
Sector::CDXAData(sector) => unsafe {std::mem::transmute::<&Mode2Form1, &[u8; SECTOR_SIZE]>(sector)},
Sector::CDXAAudio(sector) => unsafe {std::mem::transmute::<&Mode2Form2, &[u8; SECTOR_SIZE]>(sector)},
}
}
} }

View File

@ -9,10 +9,12 @@ pub fn encode_psx_image(cd_desc: CDDesc, sec_writer: &mut dyn SectorWriter) -> R
} }
} }
Err(Error::not_implemented("encode_psx_image")) //Err(Error::not_implemented("encode_psx_image"))
Ok(())
} }
fn process_system_area(_: &SystemArea, sec_writer: &mut dyn SectorWriter) -> Result<(), Error> { fn process_system_area(_: &SystemArea, sec_writer: &mut dyn SectorWriter) -> Result<(), Error> {
sec_writer.write(Sector::CDXAData(builder::create_xa_data_zero())) sec_writer.write(Sector::CDXAData(builder::create_xa_data_zero()))?;
Ok(())
} }

View File

@ -3,13 +3,13 @@ use cdtypes::types::time::Time;
use std::io::Write; use std::io::Write;
pub struct BinCueWriter { pub struct BinCueWriter {
_bin_out: std::boxed::Box<dyn Write>, bin_out: std::boxed::Box<dyn Write>,
cd_time: Time, cd_time: Time,
} }
impl BinCueWriter { impl BinCueWriter {
pub fn new<T: Write + 'static>(writer: T) -> BinCueWriter { pub fn new<T: Write + 'static>(writer: T) -> BinCueWriter {
BinCueWriter{_bin_out: std::boxed::Box::new(writer), cd_time: Time::cd_start()} BinCueWriter{bin_out: std::boxed::Box::new(writer), cd_time: Time::cd_start()}
} }
fn finalize(&mut self, sector: &mut Sector) -> Result<(), Error> { fn finalize(&mut self, sector: &mut Sector) -> Result<(), Error> {
@ -25,15 +25,9 @@ impl BinCueWriter {
} }
impl SectorWriter for BinCueWriter { impl SectorWriter for BinCueWriter {
fn write(&mut self, mut sector: Sector) -> Result<(), Error> { fn write(&mut self, mut sector: Sector) -> Result<usize, Error> {
self.finalize(&mut sector)?; self.finalize(&mut sector)?;
match sector { Ok(self.bin_out.write(sector.as_raw())?)
Sector::Empty(_) => Err(Error::not_implemented("Empty sector encoding")),
Sector::Audio(_) => Err(Error::not_implemented("Audio sector encoding")),
Sector::CDData(_) => Err(Error::not_implemented("CD Data sector encoding")),
Sector::CDXAData(_) => Err(Error::not_implemented("CD XA Data sector encoding")),
Sector::CDXAAudio(_) => Err(Error::not_implemented("CD XA Audio sector encoding"))
}
} }
} }

View File

@ -12,7 +12,7 @@ pub enum ImageType {
} }
pub trait SectorWriter { pub trait SectorWriter {
fn write(&mut self, sector: Sector) -> Result<(), Error>; fn write(&mut self, sector: Sector) -> Result<usize, Error>;
} }
pub fn write_image(cd_desc: CDDesc, encoder: EncoderFunction, image_type: ImageType, output_path: PathBuf) -> Result<(), Error> { pub fn write_image(cd_desc: CDDesc, encoder: EncoderFunction, image_type: ImageType, output_path: PathBuf) -> Result<(), Error> {