]> git.nihav.org Git - nihav.git/commitdiff
nihav_realmedia: switch to ByteIO
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 17 Aug 2025 16:26:09 +0000 (18:26 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 17 Aug 2025 16:26:09 +0000 (18:26 +0200)
nihav-realmedia/src/codecs/cook.rs
nihav-realmedia/src/codecs/cookenc.rs
nihav-realmedia/src/codecs/ralf.rs
nihav-realmedia/src/codecs/rv60.rs
nihav-realmedia/src/demuxers/realmedia.rs
nihav-realmedia/src/muxers/rmvb/audiostream.rs
nihav-realmedia/src/muxers/rmvb/mod.rs
nihav-realmedia/src/muxers/rmvb/videostream.rs

index 5b771d32c35968a0e63cb639e995850940158b16..405b3fb0b883d3db49a22d49df9a45bf4c982b7c 100644 (file)
@@ -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<u32> {
+    fn read_hdr_v2(&mut self, br: &mut dyn ByteIO) -> DecoderResult<u32> {
         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;
index 5080011ce243bf2fec8758957ca98e445df179b5..19f1a8891068650eef2b326a564b49b301f45e83 100644 (file)
@@ -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 {
index d009f1885deaf74ff85a28c7098a7e1d8a584cca..ac3479773fdb8a1804e5032851c93428b9c7f48a 100644 (file)
@@ -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();
index 54d3f2901f5e14e08f15fdcba07164083bb2239b..cf247fe283552dd66d152858a68a8afeaebc6939 100644 (file)
@@ -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()?;
index 521f2386c6823c5aa64e9202ad2a9770eca98442..7ca526e5217f67c353d9af824d8de1fe06116789 100644 (file)
@@ -17,7 +17,7 @@ trait ReadSize {
     fn read_size(&mut self, ver: u16) -> ByteIOResult<u64>;
 }
 
-impl<'a> ReadSize for ByteReader<'a> {
+impl<T: ?Sized + ByteIO> ReadSize for T {
     fn read_size(&mut self, ver: u16) -> ByteIOResult<u64> {
         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<NAPacket>, src: &mut ByteReader, stream: NAStreamRef, ts: u32, keyframe: bool, payload_size: usize) -> DemuxerResult<NAPacket> {
+    fn read_apackets(&mut self, queued_packets: &mut Vec<NAPacket>, src: &mut dyn ByteIO, stream: NAStreamRef, ts: u32, keyframe: bool, payload_size: usize) -> DemuxerResult<NAPacket> {
         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<NAPacket> {
+fn read_video_buf(src: &mut dyn ByteIO, stream: NAStreamRef, ts: u32, keyframe: bool, frame_size: usize) -> DemuxerResult<NAPacket> {
     let size = frame_size + 9;
     let mut vec: Vec<u8> = 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<NAPacket> {
+fn read_multiple_frame(src: &mut dyn ByteIO, stream: NAStreamRef, keyframe: bool, skip_mtype: bool) -> DemuxerResult<NAPacket> {
     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<bool> {
         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<RMStreamType>, stream_no: u32, src: &mut ByteReader, edata_: &[u8], duration: u32) -> DemuxerResult<()> {
+    fn parse_audio_stream(strmgr: &mut StreamManager, streams: &mut Vec<RMStreamType>, 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<RMStreamType>, stream_no: u32, src: &mut ByteReader, edata_: &[u8], tag2: u32, duration: u32) -> DemuxerResult<()> {
+    fn parse_video_stream(strmgr: &mut StreamManager, streams: &mut Vec<RMStreamType>, 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<u8>, queued_pkts: &mut Vec<NAPacket>, keyframe: bool, ts: u32, payload_size: usize) -> DemuxerResult<NAPacket> {
+    fn parse_packet_payload(src: &mut dyn ByteIO, rmstream: &mut RMStreamType, stream: NAStreamRef, slice_buf: &mut Vec<u8>, queued_pkts: &mut Vec<NAPacket>, keyframe: bool, ts: u32, payload_size: usize) -> DemuxerResult<NAPacket> {
         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<NAValue> { 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<RealAudioInfo> {
+fn parse_aformat3(src: &mut dyn ByteIO) -> DemuxerResult<RealAudioInfo> {
     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<RealAudioInfo> {
     })
 }
 
-fn parse_aformat4(src: &mut ByteReader) -> DemuxerResult<RealAudioInfo> {
+fn parse_aformat4(src: &mut dyn ByteIO) -> DemuxerResult<RealAudioInfo> {
     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<RealAudioInfo> {
     })
 }
 
-fn parse_aformat5(src: &mut ByteReader) -> DemuxerResult<RealAudioInfo> {
+fn parse_aformat5(src: &mut dyn ByteIO) -> DemuxerResult<RealAudioInfo> {
     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<String> {
+fn read_string_size(src: &mut dyn ByteIO, size: usize) -> DemuxerResult<String> {
     let mut vec: Vec<u8> = 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<String>
 }
 
 struct RealAudioDemuxer<'a> {
-    src:            &'a mut ByteReader<'a>,
+    src:            &'a mut dyn ByteIO,
     stream:         Option<RMAudioStream>,
     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<Vec<u8>> {
+    fn read_string(src: &mut dyn ByteIO) -> DemuxerResult<Vec<u8>> {
         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<Self> {
+    fn read(src: &mut dyn ByteIO) -> DemuxerResult<Self> {
         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<NAPacket>, slice_buf: &mut Vec<u8>) -> DemuxerResult<NAPacket> {
+    fn get_packet(&mut self, src: &mut dyn ByteIO, str_data: &mut CommonStreamData, strmgr: &StreamManager, queued_pkts: &mut Vec<NAPacket>, slice_buf: &mut Vec<u8>) -> DemuxerResult<NAPacket> {
         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<RecordDemuxer>,
     cur_rec:        usize,
     queued_pkts:    Vec<NAPacket>,
@@ -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<dyn DemuxCore<'a> + 'a> {
+    fn new_demuxer<'a>(&self, br: &'a mut dyn ByteIO) -> Box<dyn DemuxCore<'a> + '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<dyn DemuxCore<'a> + 'a> {
+    fn new_demuxer<'a>(&self, br: &'a mut dyn ByteIO) -> Box<dyn DemuxCore<'a> + '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<dyn DemuxCore<'a> + 'a> {
+    fn new_demuxer<'a>(&self, br: &'a mut dyn ByteIO) -> Box<dyn DemuxCore<'a> + '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();
index bd8d34e4faea2e1db8c609281955189a4d327439..911dd4c1754b673ce5cbec3ebbf1fd8f56198141 100644 (file)
@@ -365,8 +365,7 @@ impl Interleaver for AACInterleaver {
     fn get_packet(&mut self) -> Option<(Vec<u8>, 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)?;
     }
index f8bdaa287c0e58cebdcd56547397c608064fc525..e153aac98f5955d1f1acee12143c5d56ce0cd13a 100644 (file)
@@ -10,7 +10,7 @@ trait RMWriterHelper {
     fn patch_value(&mut self, val: u32, off: u64) -> MuxerResult<()>;
 }
 
-impl<'a> RMWriterHelper for ByteWriter<'a> {
+impl<T: ?Sized + ByteIO> 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<u8>, 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<RMStream>,
     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<dyn MuxCore<'a> + 'a> {
+    fn new_muxer<'a>(&self, bw: &'a mut dyn ByteIO) -> Box<dyn MuxCore<'a> + '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<Box<dyn RMStreamWriter>>,
 }
 
 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<dyn MuxCore<'a> + 'a> {
+    fn new_muxer<'a>(&self, bw: &'a mut dyn ByteIO) -> Box<dyn MuxCore<'a> + 'a> {
         Box::new(RAMuxer::new(bw))
     }
     fn get_name(&self) -> &'static str { "realaudio" }
index 2d561e65063ae702b30f74349725708a6dc7abe2..0ddb94b6cb639e48c61e317b2113b2626178325b 100644 (file)
@@ -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) {