From: Kostya Shishkov Date: Sun, 17 Aug 2025 16:26:09 +0000 (+0200) Subject: nihav_realmedia: switch to ByteIO X-Git-Url: https://git.nihav.org/?a=commitdiff_plain;h=5564179bd6bac081df6c10bc0c41bbbca72dc0bf;p=nihav.git nihav_realmedia: switch to ByteIO --- diff --git a/nihav-realmedia/src/codecs/cook.rs b/nihav-realmedia/src/codecs/cook.rs index 5b771d3..405b3fb 100644 --- a/nihav-realmedia/src/codecs/cook.rs +++ b/nihav-realmedia/src/codecs/cook.rs @@ -3,7 +3,7 @@ use nihav_core::frame::*; use nihav_core::codecs::*; use nihav_codec_support::dsp::mdct::IMDCT; use nihav_core::io::bitreader::*; -use nihav_core::io::byteio::{ByteReader, MemoryReader}; +use nihav_core::io::byteio::{ByteIO, MemoryReader}; use nihav_core::io::codebook::*; use nihav_core::io::intcode::*; use std::f32::consts; @@ -168,7 +168,7 @@ impl CookChannelPair { qindex: [0; MAX_SUBBANDS * 2], } } - fn read_hdr_v1(&mut self, br: &mut ByteReader) -> DecoderResult<()> { + fn read_hdr_v1(&mut self, br: &mut dyn ByteIO) -> DecoderResult<()> { let ver = br.read_u32be()?; let micro_ver = ver & 0xFF; self.samples = br.read_u16be()? as usize; @@ -198,7 +198,7 @@ impl CookChannelPair { } Ok(()) } - fn read_hdr_v2(&mut self, br: &mut ByteReader) -> DecoderResult { + fn read_hdr_v2(&mut self, br: &mut dyn ByteIO) -> DecoderResult { let ver = br.read_u32be()?; validate!((ver >> 24) == 2); self.samples = br.read_u16be()? as usize; @@ -550,8 +550,7 @@ impl NADecoder for CookDecoder { let edata = info.get_extradata().unwrap(); validate!(edata.len() >= 4); - let mut mr = MemoryReader::new_read(&edata); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&edata); let ver = br.peek_u32be()?; let maj_ver = ver >> 24; diff --git a/nihav-realmedia/src/codecs/cookenc.rs b/nihav-realmedia/src/codecs/cookenc.rs index 5080011..19f1a88 100644 --- a/nihav-realmedia/src/codecs/cookenc.rs +++ b/nihav-realmedia/src/codecs/cookenc.rs @@ -829,8 +829,7 @@ impl NAEncoder for CookEncoder { } let mut edata = Vec::new(); - let mut gw = GrowableMemoryWriter::new_write(&mut edata); - let mut bw = ByteWriter::new(&mut gw); + let mut bw = GrowableMemoryWriter::new_write(&mut edata); if flavour.channels <= 2 { let br_info = &BITRATE_PARAMS[flavour.br_ids[0]]; let ch_mode = if br_info.channels == 1 { diff --git a/nihav-realmedia/src/codecs/ralf.rs b/nihav-realmedia/src/codecs/ralf.rs index d009f18..ac34797 100644 --- a/nihav-realmedia/src/codecs/ralf.rs +++ b/nihav-realmedia/src/codecs/ralf.rs @@ -361,8 +361,7 @@ impl NADecoder for RALFDecoder { let edata = info.get_extradata().unwrap(); validate!(edata.len() >= 20); - let mut mr = MemoryReader::new_read(&edata); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(&edata); br.read_skip(4).unwrap(); let version = br.read_u16be().unwrap(); br.read_skip(2).unwrap(); diff --git a/nihav-realmedia/src/codecs/rv60.rs b/nihav-realmedia/src/codecs/rv60.rs index 54d3f29..cf247fe 100644 --- a/nihav-realmedia/src/codecs/rv60.rs +++ b/nihav-realmedia/src/codecs/rv60.rs @@ -3,7 +3,7 @@ use nihav_core::frame::*; use nihav_core::codecs::{NADecoder, NADecoderSupport, DecoderError, DecoderResult, FrameSkipMode}; use nihav_core::options::*; use nihav_codec_support::codecs::{MV, ZERO_MV, IPBShuffler}; -use nihav_core::io::byteio::{MemoryReader,ByteReader}; +use nihav_core::io::byteio::{ByteIO,MemoryReader}; use nihav_core::io::bitreader::{BitReader,BitReaderMode}; use nihav_core::io::intcode::*; use std::str::FromStr; @@ -1424,8 +1424,7 @@ impl NADecoder for RealVideo60Decoder { let src: &[u8] = &edata; if src.len() < 8 { return Err(DecoderError::InvalidData); } - let mut mr = MemoryReader::new_read(src); - let mut br = ByteReader::new(&mut mr); + let mut br = MemoryReader::new_read(src); let _flags = br.read_u32be()?; let version = br.read_u32be()?; let _unk = br.read_u16be()?; diff --git a/nihav-realmedia/src/demuxers/realmedia.rs b/nihav-realmedia/src/demuxers/realmedia.rs index 521f238..7ca526e 100644 --- a/nihav-realmedia/src/demuxers/realmedia.rs +++ b/nihav-realmedia/src/demuxers/realmedia.rs @@ -17,7 +17,7 @@ trait ReadSize { fn read_size(&mut self, ver: u16) -> ByteIOResult; } -impl<'a> ReadSize for ByteReader<'a> { +impl ReadSize for T { fn read_size(&mut self, ver: u16) -> ByteIOResult { match ver { 0 => Ok(u64::from(self.read_u32be()?)), @@ -151,7 +151,7 @@ impl RMAudioStream { } RMAudioStream { deint, iinfo, buf, sub_packet: 0 } } - fn read_apackets(&mut self, queued_packets: &mut Vec, src: &mut ByteReader, stream: NAStreamRef, ts: u32, keyframe: bool, payload_size: usize) -> DemuxerResult { + fn read_apackets(&mut self, queued_packets: &mut Vec, src: &mut dyn ByteIO, stream: NAStreamRef, ts: u32, keyframe: bool, payload_size: usize) -> DemuxerResult { let ts = stream.make_ts(Some(ts as u64), None, None); if keyframe { @@ -362,7 +362,7 @@ impl CommonStreamData { } struct RealMediaDemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, data_pos: u64, data_end: u64, next_data: u64, @@ -386,7 +386,7 @@ fn find_codec_name(registry: &[(&[u8;4], &'static str)], fcc: u32) -> &'static s "unknown" } -fn read_14or30(src: &mut ByteReader) -> DemuxerResult<(bool, u32)> { +fn read_14or30(src: &mut dyn ByteIO) -> DemuxerResult<(bool, u32)> { let tmp = src.read_u16be()?; let flag = (tmp & 0x8000) != 0; if (tmp & 0x4000) == 0x4000 { @@ -397,7 +397,7 @@ fn read_14or30(src: &mut ByteReader) -> DemuxerResult<(bool, u32)> { } } -fn read_video_buf(src: &mut ByteReader, stream: NAStreamRef, ts: u32, keyframe: bool, frame_size: usize) -> DemuxerResult { +fn read_video_buf(src: &mut dyn ByteIO, stream: NAStreamRef, ts: u32, keyframe: bool, frame_size: usize) -> DemuxerResult { let size = frame_size + 9; let mut vec: Vec = vec![0; size]; //v[0] = 0; // 1 slice @@ -408,7 +408,7 @@ fn read_video_buf(src: &mut ByteReader, stream: NAStreamRef, ts: u32, keyframe: Ok(NAPacket::new(stream, ts, keyframe, vec)) } -fn read_multiple_frame(src: &mut ByteReader, stream: NAStreamRef, keyframe: bool, skip_mtype: bool) -> DemuxerResult { +fn read_multiple_frame(src: &mut dyn ByteIO, stream: NAStreamRef, keyframe: bool, skip_mtype: bool) -> DemuxerResult { if !skip_mtype { let mtype = src.read_byte()?; validate!(mtype == 0xC0); @@ -425,8 +425,7 @@ struct RMDemuxCommon {} impl RMDemuxCommon { fn parse_stream_info(str_data: &mut CommonStreamData, strmgr: &mut StreamManager, stream_no: u32, edata: &[u8], duration: u32) -> DemuxerResult { let mut is_mlti = false; - let mut mr = MemoryReader::new_read(edata); - let mut src = ByteReader::new(&mut mr); + let mut src = MemoryReader::new_read(edata); let tag = src.read_u32be()?; let tag2 = src.peek_u32be()?; if tag == mktag!('.', 'r', 'a', 0xFD) { @@ -468,8 +467,7 @@ impl RMDemuxCommon { str_data.mlti_mapper.add_substream(); { let hdrsrc = &edata[pos..][..hdr_size]; - let mut mr = MemoryReader::new_read(hdrsrc); - let mut hsrc = ByteReader::new(&mut mr); + let mut hsrc = MemoryReader::new_read(hdrsrc); let tag = hsrc.read_u32be()?; let tag2 = hsrc.peek_u32be()?; @@ -491,7 +489,7 @@ println!("unknown MLTI substream {:08X} / {:08X}", tag, tag2); } Ok(is_mlti) } - fn parse_audio_stream(strmgr: &mut StreamManager, streams: &mut Vec, stream_no: u32, src: &mut ByteReader, edata_: &[u8], duration: u32) -> DemuxerResult<()> { + fn parse_audio_stream(strmgr: &mut StreamManager, streams: &mut Vec, stream_no: u32, src: &mut dyn ByteIO, edata_: &[u8], duration: u32) -> DemuxerResult<()> { let ver = src.read_u16be()?; let ainfo = match ver { 3 => { @@ -537,7 +535,7 @@ println!("unknown MLTI substream {:08X} / {:08X}", tag, tag2); streams.push(RMStreamType::Audio(astr)); Ok(()) } - fn parse_video_stream(strmgr: &mut StreamManager, streams: &mut Vec, stream_no: u32, src: &mut ByteReader, edata_: &[u8], tag2: u32, duration: u32) -> DemuxerResult<()> { + fn parse_video_stream(strmgr: &mut StreamManager, streams: &mut Vec, stream_no: u32, src: &mut dyn ByteIO, edata_: &[u8], tag2: u32, duration: u32) -> DemuxerResult<()> { src.read_skip(4)?; let fcc = src.read_u32be()?; let width = src.read_u16be()? as usize; @@ -568,7 +566,7 @@ println!("unknown MLTI substream {:08X} / {:08X}", tag, tag2); Ok(()) } #[allow(clippy::too_many_arguments)] - fn parse_packet_payload(src: &mut ByteReader, rmstream: &mut RMStreamType, stream: NAStreamRef, slice_buf: &mut Vec, queued_pkts: &mut Vec, keyframe: bool, ts: u32, payload_size: usize) -> DemuxerResult { + fn parse_packet_payload(src: &mut dyn ByteIO, rmstream: &mut RMStreamType, stream: NAStreamRef, slice_buf: &mut Vec, queued_pkts: &mut Vec, keyframe: bool, ts: u32, payload_size: usize) -> DemuxerResult { match rmstream { RMStreamType::Video(ref mut vstr) => { @@ -770,7 +768,7 @@ impl<'a> NAOptionHandler for RealMediaDemuxer<'a> { fn query_option_value(&self, _name: &str) -> Option { None } } -fn read_chunk(src: &mut ByteReader) -> DemuxerResult<(u32, u32, u16)> { +fn read_chunk(src: &mut dyn ByteIO) -> DemuxerResult<(u32, u32, u16)> { let id = src.read_u32be()?; if id == 0 { return Ok((0, 0, 0)); } let size = src.read_u32be()?; @@ -819,7 +817,7 @@ impl RealAudioInfo { } } -fn skip_ra_metadata(src: &mut ByteReader) -> DemuxerResult<()> { +fn skip_ra_metadata(src: &mut dyn ByteIO) -> DemuxerResult<()> { let title_len = src.read_byte()? as usize; src.read_skip(title_len)?; let author_len = src.read_byte()? as usize; @@ -831,7 +829,7 @@ fn skip_ra_metadata(src: &mut ByteReader) -> DemuxerResult<()> { Ok(()) } -fn parse_aformat3(src: &mut ByteReader) -> DemuxerResult { +fn parse_aformat3(src: &mut dyn ByteIO) -> DemuxerResult { let start = src.tell(); let header_len = src.read_u16be()?; validate!(header_len >= 24); @@ -864,7 +862,7 @@ fn parse_aformat3(src: &mut ByteReader) -> DemuxerResult { }) } -fn parse_aformat4(src: &mut ByteReader) -> DemuxerResult { +fn parse_aformat4(src: &mut dyn ByteIO) -> DemuxerResult { let start = src.tell(); src.read_skip(2)?; // zeroes let id = src.read_u32be()?; @@ -916,7 +914,7 @@ fn parse_aformat4(src: &mut ByteReader) -> DemuxerResult { }) } -fn parse_aformat5(src: &mut ByteReader) -> DemuxerResult { +fn parse_aformat5(src: &mut dyn ByteIO) -> DemuxerResult { let start = src.tell(); src.read_skip(2)?; // zeroes let id = src.read_u32be()?; @@ -982,7 +980,7 @@ const RMVB_PROP_SIZE: u32 = 50; const KEYFRAME_FLAG: u8 = 0x02; impl<'a> RealMediaDemuxer<'a> { - fn new(io: &'a mut ByteReader<'a>) -> Self { + fn new(io: &'a mut dyn ByteIO) -> Self { RealMediaDemuxer { src: io, data_pos: 0, @@ -1164,7 +1162,7 @@ impl<'a> RealMediaDemuxer<'a> { } } -fn read_string_size(src: &mut ByteReader, size: usize) -> DemuxerResult { +fn read_string_size(src: &mut dyn ByteIO, size: usize) -> DemuxerResult { let mut vec: Vec = Vec::new(); for _ in 0..size { let c = src.read_byte()?; @@ -1178,7 +1176,7 @@ fn read_string_size(src: &mut ByteReader, size: usize) -> DemuxerResult } struct RealAudioDemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, stream: Option, data_start: u64, data_end: u64, @@ -1276,7 +1274,7 @@ impl<'a> NAOptionHandler for RealAudioDemuxer<'a> { } impl<'a> RealAudioDemuxer<'a> { - fn new(io: &'a mut ByteReader<'a>) -> Self { + fn new(io: &'a mut dyn ByteIO) -> Self { RealAudioDemuxer { src: io, data_start: 0, @@ -1301,14 +1299,14 @@ enum IVRRecord { } impl IVRRecord { - fn read_string(src: &mut ByteReader) -> DemuxerResult> { + fn read_string(src: &mut dyn ByteIO) -> DemuxerResult> { let len = src.read_u32be()? as usize; let mut val = vec![0; len]; src.read_buf(val.as_mut_slice())?; Ok(val) } - fn read(src: &mut ByteReader) -> DemuxerResult { + fn read(src: &mut dyn ByteIO) -> DemuxerResult { let code = src.read_byte()?; match code { 1 => { @@ -1397,7 +1395,7 @@ impl RecordDemuxer { remap_ids: Vec::new(), } } - fn parse_header(&mut self, src: &mut ByteReader, strmgr: &mut StreamManager, str_data: &mut CommonStreamData) -> DemuxerResult<()> { + fn parse_header(&mut self, src: &mut dyn ByteIO, strmgr: &mut StreamManager, str_data: &mut CommonStreamData) -> DemuxerResult<()> { src.seek(SeekFrom::Start(self.cur_pos))?; let magic = src.read_u32be()?; validate!(magic == mktag!(b".REC")); @@ -1477,7 +1475,7 @@ impl RecordDemuxer { Ok(()) } - fn get_packet(&mut self, src: &mut ByteReader, str_data: &mut CommonStreamData, strmgr: &StreamManager, queued_pkts: &mut Vec, slice_buf: &mut Vec) -> DemuxerResult { + fn get_packet(&mut self, src: &mut dyn ByteIO, str_data: &mut CommonStreamData, strmgr: &StreamManager, queued_pkts: &mut Vec, slice_buf: &mut Vec) -> DemuxerResult { src.seek(SeekFrom::Start(self.cur_pos))?; loop { let rec = IVRRecord::read(src)?; @@ -1523,7 +1521,7 @@ impl RecordDemuxer { } struct RealIVRDemuxer<'a> { - src: &'a mut ByteReader<'a>, + src: &'a mut dyn ByteIO, recs: Vec, cur_rec: usize, queued_pkts: Vec, @@ -1615,7 +1613,7 @@ impl<'a> NAOptionHandler for RealIVRDemuxer<'a> { } impl<'a> RealIVRDemuxer<'a> { - fn new(io: &'a mut ByteReader<'a>) -> Self { + fn new(io: &'a mut dyn ByteIO) -> Self { RealIVRDemuxer { src: io, recs: Vec::new(), @@ -1652,7 +1650,7 @@ static RM_AUDIO_CODEC_REGISTER: &[(&[u8;4], &str)] = &[ pub struct RealMediaDemuxerCreator { } impl DemuxerCreator for RealMediaDemuxerCreator { - fn new_demuxer<'a>(&self, br: &'a mut ByteReader<'a>) -> Box + 'a> { + fn new_demuxer<'a>(&self, br: &'a mut dyn ByteIO) -> Box + 'a> { Box::new(RealMediaDemuxer::new(br)) } fn get_name(&self) -> &'static str { "realmedia" } @@ -1661,7 +1659,7 @@ impl DemuxerCreator for RealMediaDemuxerCreator { pub struct RealAudioDemuxerCreator { } impl DemuxerCreator for RealAudioDemuxerCreator { - fn new_demuxer<'a>(&self, br: &'a mut ByteReader<'a>) -> Box + 'a> { + fn new_demuxer<'a>(&self, br: &'a mut dyn ByteIO) -> Box + 'a> { Box::new(RealAudioDemuxer::new(br)) } fn get_name(&self) -> &'static str { "realaudio" } @@ -1670,7 +1668,7 @@ impl DemuxerCreator for RealAudioDemuxerCreator { pub struct RealIVRDemuxerCreator { } impl DemuxerCreator for RealIVRDemuxerCreator { - fn new_demuxer<'a>(&self, br: &'a mut ByteReader<'a>) -> Box + 'a> { + fn new_demuxer<'a>(&self, br: &'a mut dyn ByteIO) -> Box + 'a> { Box::new(RealIVRDemuxer::new(br)) } fn get_name(&self) -> &'static str { "real_ivr" } @@ -1696,8 +1694,7 @@ mod test { // File::open("assets/RV/clv1_sipr_384x208_realvideo_encoder_4.0.rm").unwrap(); // File::open("assets/RV/luckynight.rmvb").unwrap(); // File::open("assets/RV/rv40_ralf.rmvb").unwrap(); - let mut fr = FileReader::new_read(&mut file); - let mut br = ByteReader::new(&mut fr); + let mut br = FileReader::new_read(&mut file); let mut dmx = RealMediaDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); @@ -1720,8 +1717,7 @@ mod test { let mut file = // File::open("assets/RV/welcome288.ra").unwrap(); File::open("assets/RV/diemusik.ra").unwrap(); - let mut fr = FileReader::new_read(&mut file); - let mut br = ByteReader::new(&mut fr); + let mut br = FileReader::new_read(&mut file); let mut dmx = RealAudioDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); @@ -1743,8 +1739,7 @@ mod test { let mut file = File::open("assets/RV/Opener_rm_hi.ivr").unwrap(); // File::open("assets/RV/SherwinWilliamsCommercial.ivr").unwrap(); - let mut fr = FileReader::new_read(&mut file); - let mut br = ByteReader::new(&mut fr); + let mut br = FileReader::new_read(&mut file); let mut dmx = RealIVRDemuxer::new(&mut br); let mut sm = StreamManager::new(); let mut si = SeekIndex::new(); diff --git a/nihav-realmedia/src/muxers/rmvb/audiostream.rs b/nihav-realmedia/src/muxers/rmvb/audiostream.rs index bd8d34e..911dd4c 100644 --- a/nihav-realmedia/src/muxers/rmvb/audiostream.rs +++ b/nihav-realmedia/src/muxers/rmvb/audiostream.rs @@ -365,8 +365,7 @@ impl Interleaver for AACInterleaver { fn get_packet(&mut self) -> Option<(Vec, bool)> { if self.full { let mut dst = Vec::with_capacity(self.frame_size); - let mut gw = GrowableMemoryWriter::new_write(&mut dst); - let mut bw = ByteWriter::new(&mut gw); + let mut bw = GrowableMemoryWriter::new_write(&mut dst); bw.write_u16be((self.sizes.len() * 16) as u16).unwrap(); for &pkt_size in self.sizes.iter() { bw.write_u16be(pkt_size as u16).unwrap(); @@ -413,7 +412,7 @@ struct AudioStreamWriter { } impl RMStreamWriter for AudioStreamWriter { - fn write_header(&mut self, bw: &mut ByteWriter, astream: &NAStream) -> MuxerResult<()> { + fn write_header(&mut self, bw: &mut dyn ByteIO, astream: &NAStream) -> MuxerResult<()> { self.header_pos = bw.tell(); if self.version < 6 { bw.write_buf(b".ra\xFD")?; @@ -476,7 +475,7 @@ impl RMStreamWriter for AudioStreamWriter { } } fn flush(&mut self) { self.interleave.flush() } - fn finish(&mut self, bw: &mut ByteWriter) -> MuxerResult<()> { + fn finish(&mut self, bw: &mut dyn ByteIO) -> MuxerResult<()> { let cur_pos = bw.tell(); match self.version { 3 => { @@ -498,7 +497,7 @@ impl RMStreamWriter for AudioStreamWriter { fn set_pkt_size(&mut self, _pkt_size: usize) {} } -fn write_audio_metadata(bw: &mut ByteWriter) -> MuxerResult<()> { +fn write_audio_metadata(bw: &mut dyn ByteIO) -> MuxerResult<()> { bw.write_byte(0)?; // title_string_length bw.write_byte(0)?; // author_string_length bw.write_byte(0)?; // copyright_string_length @@ -506,7 +505,7 @@ fn write_audio_metadata(bw: &mut ByteWriter) -> MuxerResult<()> { Ok(()) } -fn write_aformat3(bw: &mut ByteWriter, _stream: &NAStream, il_info: &InterleaveInfo) -> MuxerResult<()> { +fn write_aformat3(bw: &mut dyn ByteIO, _stream: &NAStream, il_info: &InterleaveInfo) -> MuxerResult<()> { let start = bw.tell(); bw.write_u16be(0)?; // header_bytes bw.write_u16be(il_info.flavor as u16)?; @@ -525,7 +524,7 @@ fn write_aformat3(bw: &mut ByteWriter, _stream: &NAStream, il_info: &InterleaveI Ok(()) } -fn write_aformat4(bw: &mut ByteWriter, stream: &NAStream, il_info: &InterleaveInfo) -> MuxerResult<()> { +fn write_aformat4(bw: &mut dyn ByteIO, stream: &NAStream, il_info: &InterleaveInfo) -> MuxerResult<()> { let info = stream.get_info().get_properties().get_audio_info().unwrap(); bw.write_u16be(0)?; @@ -562,7 +561,7 @@ fn write_aformat4(bw: &mut ByteWriter, stream: &NAStream, il_info: &InterleaveIn Ok(()) } -fn write_aformat5(bw: &mut ByteWriter, stream: &NAStream, il_info: &InterleaveInfo) -> MuxerResult<()> { +fn write_aformat5(bw: &mut dyn ByteIO, stream: &NAStream, il_info: &InterleaveInfo) -> MuxerResult<()> { let info = stream.get_info().get_properties().get_audio_info().unwrap(); bw.write_u16be(0)?; @@ -611,7 +610,7 @@ fn write_aformat5(bw: &mut ByteWriter, stream: &NAStream, il_info: &InterleaveIn Ok(()) } -fn write_lsd(bw: &mut ByteWriter, stream: &NAStream) -> MuxerResult<()> { +fn write_lsd(bw: &mut dyn ByteIO, stream: &NAStream) -> MuxerResult<()> { if let Some(edata) = stream.get_info().get_extradata() { bw.write_buf(&edata)?; } diff --git a/nihav-realmedia/src/muxers/rmvb/mod.rs b/nihav-realmedia/src/muxers/rmvb/mod.rs index f8bdaa2..e153aac 100644 --- a/nihav-realmedia/src/muxers/rmvb/mod.rs +++ b/nihav-realmedia/src/muxers/rmvb/mod.rs @@ -10,7 +10,7 @@ trait RMWriterHelper { fn patch_value(&mut self, val: u32, off: u64) -> MuxerResult<()>; } -impl<'a> RMWriterHelper for ByteWriter<'a> { +impl RMWriterHelper for T { fn write_chunk(&mut self, id: &[u8], size: u32, version: u16) -> MuxerResult<()> { self.write_buf(id)?; self.write_u32be(size)?; @@ -33,11 +33,11 @@ impl<'a> RMWriterHelper for ByteWriter<'a> { } pub trait RMStreamWriter { - fn write_header(&mut self, bw: &mut ByteWriter, astream: &NAStream) -> MuxerResult<()>; + fn write_header(&mut self, bw: &mut dyn ByteIO, astream: &NAStream) -> MuxerResult<()>; fn queue_packet(&mut self, pkt: NAPacket, ms: u32) -> bool; fn get_packet(&mut self) -> Option<(Vec, u32, bool)>; fn flush(&mut self); - fn finish(&mut self, bw: &mut ByteWriter) -> MuxerResult<()>; + fn finish(&mut self, bw: &mut dyn ByteIO) -> MuxerResult<()>; fn set_pkt_size(&mut self, pkt_size: usize); } @@ -85,7 +85,7 @@ impl RMStream { debug: false, }) } - fn write_mdpr(&mut self, bw: &mut ByteWriter, strm: &NAStream) -> MuxerResult<()> { + fn write_mdpr(&mut self, bw: &mut dyn ByteIO, strm: &NAStream) -> MuxerResult<()> { self.mdpr_pos = bw.tell(); bw.write_chunk(b"MDPR", 0, 0)?; @@ -123,7 +123,7 @@ impl RMStream { Ok(()) } - fn write_packet(&mut self, bw: &mut ByteWriter, pkt: NAPacket, pkt_no: &mut u32) -> MuxerResult<()> { + fn write_packet(&mut self, bw: &mut dyn ByteIO, pkt: NAPacket, pkt_no: &mut u32) -> MuxerResult<()> { if let Some(pts) = pkt.get_pts() { let (tb_num, tb_den) = pkt.get_stream().get_timebase(); let ms = NATimeInfo::ts_to_time(pts, 1000, tb_num, tb_den) as u32; @@ -134,7 +134,7 @@ impl RMStream { self.packetiser.queue_packet(pkt, self.cur_time); self.write_packets(bw, pkt_no) } - fn write_packets(&mut self, bw: &mut ByteWriter, pkt_no: &mut u32) -> MuxerResult<()> { + fn write_packets(&mut self, bw: &mut dyn ByteIO, pkt_no: &mut u32) -> MuxerResult<()> { while let Some((data, ts, first)) = self.packetiser.get_packet() { validate!(data.len() < 65000); if self.keyframe && first { @@ -159,7 +159,7 @@ impl RMStream { } Ok(()) } - fn finish(&mut self, bw: &mut ByteWriter, pkt_no: &mut u32) -> MuxerResult<()> { + fn finish(&mut self, bw: &mut dyn ByteIO, pkt_no: &mut u32) -> MuxerResult<()> { self.packetiser.flush(); self.write_packets(bw, pkt_no)?; @@ -178,7 +178,7 @@ impl RMStream { } struct RMMuxer<'a> { - bw: &'a mut ByteWriter<'a>, + bw: &'a mut dyn ByteIO, streams: Vec, data_pos: u64, num_chunks: u32, @@ -189,7 +189,7 @@ struct RMMuxer<'a> { } impl<'a> RMMuxer<'a> { - fn new(bw: &'a mut ByteWriter<'a>) -> Self { + fn new(bw: &'a mut dyn ByteIO) -> Self { Self { bw, streams: Vec::new(), @@ -260,7 +260,7 @@ impl<'a> RMMuxer<'a> { } } -fn patch_size(bw: &mut ByteWriter, pos: u64) -> MuxerResult<()> { +fn patch_size(bw: &mut dyn ByteIO, pos: u64) -> MuxerResult<()> { let end = bw.tell(); bw.patch_value((end - pos) as u32, pos + 4) } @@ -401,7 +401,7 @@ impl<'a> NAOptionHandler for RMMuxer<'a> { pub struct RealMediaMuxerCreator {} impl MuxerCreator for RealMediaMuxerCreator { - fn new_muxer<'a>(&self, bw: &'a mut ByteWriter<'a>) -> Box + 'a> { + fn new_muxer<'a>(&self, bw: &'a mut dyn ByteIO) -> Box + 'a> { Box::new(RMMuxer::new(bw)) } fn get_name(&self) -> &'static str { "realmedia" } @@ -410,12 +410,12 @@ impl MuxerCreator for RealMediaMuxerCreator { } struct RAMuxer<'a> { - bw: &'a mut ByteWriter<'a>, + bw: &'a mut dyn ByteIO, sw: Option>, } impl<'a> RAMuxer<'a> { - fn new(bw: &'a mut ByteWriter<'a>) -> Self { + fn new(bw: &'a mut dyn ByteIO) -> Self { Self { bw, sw: None, @@ -469,7 +469,7 @@ impl<'a> NAOptionHandler for RAMuxer<'a> { pub struct RealAudioMuxerCreator {} impl MuxerCreator for RealAudioMuxerCreator { - fn new_muxer<'a>(&self, bw: &'a mut ByteWriter<'a>) -> Box + 'a> { + fn new_muxer<'a>(&self, bw: &'a mut dyn ByteIO) -> Box + 'a> { Box::new(RAMuxer::new(bw)) } fn get_name(&self) -> &'static str { "realaudio" } diff --git a/nihav-realmedia/src/muxers/rmvb/videostream.rs b/nihav-realmedia/src/muxers/rmvb/videostream.rs index 2d561e6..0ddb94b 100644 --- a/nihav-realmedia/src/muxers/rmvb/videostream.rs +++ b/nihav-realmedia/src/muxers/rmvb/videostream.rs @@ -15,7 +15,7 @@ static VIDEO_CODEC_REGISTRY: &[(&[u8;4], &str)] = &[ pub struct DummyStreamWriter {} impl RMStreamWriter for DummyStreamWriter { - fn write_header(&mut self, _bw: &mut ByteWriter, _stream: &NAStream) -> MuxerResult<()> { + fn write_header(&mut self, _bw: &mut dyn ByteIO, _stream: &NAStream) -> MuxerResult<()> { Ok(()) } fn queue_packet(&mut self, _pkt: NAPacket, _ms: u32) -> bool { @@ -25,7 +25,7 @@ impl RMStreamWriter for DummyStreamWriter { None } fn flush(&mut self) { } - fn finish(&mut self, _bw: &mut ByteWriter) -> MuxerResult<()> { + fn finish(&mut self, _bw: &mut dyn ByteIO) -> MuxerResult<()> { Ok(()) } fn set_pkt_size(&mut self, _pkt_size: usize) {} @@ -73,7 +73,7 @@ struct VideoStreamWriter { } impl RMStreamWriter for VideoStreamWriter { - fn write_header(&mut self, bw: &mut ByteWriter, vstream: &NAStream) -> MuxerResult<()> { + fn write_header(&mut self, bw: &mut dyn ByteIO, vstream: &NAStream) -> MuxerResult<()> { let info = vstream.get_info().get_properties().get_video_info().unwrap(); let start = bw.tell(); @@ -226,7 +226,7 @@ impl RMStreamWriter for VideoStreamWriter { fn flush(&mut self) { self.flush = true; } - fn finish(&mut self, _bw: &mut ByteWriter) -> MuxerResult<()> { + fn finish(&mut self, _bw: &mut dyn ByteIO) -> MuxerResult<()> { Ok(()) } fn set_pkt_size(&mut self, pkt_size: usize) {