}
impl<'a> DemuxCore<'a> for SmackerVideoDemuxer<'a> {
+ #[allow(clippy::unreadable_literal)]
fn open(&mut self, strmgr: &mut StreamManager, _seek_idx: &mut SeekIndex) -> DemuxerResult<()> {
let src = &mut self.src;
let mut magic: [u8; 4] = [0; 4];
Ok(())
}
+ #[allow(clippy::identity_op)]
+ #[allow(clippy::unreadable_literal)]
fn get_frame(&mut self, strmgr: &mut StreamManager) -> DemuxerResult<NAPacket> {
if !self.queued_packets.is_empty() {
let pkt = self.queued_packets.pop().unwrap();
let ts = NATimeInfo::new(Some(self.cur_pts), None, None, 1, 100000);
for i in 0..NUM_AUDIO_TRACKS {
if ((frame_flags >> (i + 1)) & 1) == 0 { continue; }
- validate!(self.ainfo[i].is_present());
let size = self.src.read_u32le()? as usize;
validate!(size > 4);
validate!(payload_size >= size);
payload_size -= size;
+ if !self.ainfo[i].is_present() {
+ self.src.read_skip(size - 4)?;
+ continue;
+ }
let strres = strmgr.get_stream(self.ainfo[i].id);
validate!(strres.is_some());
let stream = strres.unwrap();
}
}
+impl<'a> NAOptionHandler for SmackerVideoDemuxer<'a> {
+ fn get_supported_options(&self) -> &[NAOptionDefinition] { &[] }
+ fn set_options(&mut self, _options: &[NAOption]) { }
+ fn query_option_value(&self, _name: &str) -> Option<NAValue> { None }
+}
+
impl<'a> SmackerVideoDemuxer<'a> {
fn new(io: &'a mut ByteReader<'a>) -> Self {
SmackerVideoDemuxer {