};
let cname = find_codec_name(RM_AUDIO_CODEC_REGISTER, ainfo.fcc);
let blk_size = if ainfo.fcc != mktag!(b"sipr") {
- ainfo.granularity as usize
+ if let Some(ref iinfo) = ainfo.ileave_info {
+ iinfo.block_size as usize
+ } else {
+ ainfo.granularity as usize
+ }
} else {
validate!(ainfo.flavor <= 3);
RM_SIPRO_BLOCK_SIZES[ainfo.flavor as usize]
skip_ra_metadata(src)?;
- let _can_copy = src.read_byte()?;
- let fcc_len = src.read_byte()?;
- validate!(fcc_len == 4);
- let fcc = src.read_u32be()?;
+ // the original RealAudio has no such fields
+ let fcc = if src.tell() != start + u64::from(header_len) + 2 {
+ let _can_copy = src.read_byte()?;
+ let fcc_len = src.read_byte()?;
+ validate!(fcc_len == 0 || fcc_len == 4);
+ src.read_u32be()?
+ } else {
+ read_u32be(b"lpcJ")?
+ };
let end = src.tell();
validate!(end - start <= (header_len as u64) + 2);
fn get_frame(&mut self, strmgr: &mut StreamManager) -> DemuxerResult<NAPacket> {
if !self.queued_pkts.is_empty() {
- let pkt = self.queued_pkts.pop().unwrap();
+ let mut pkt = self.queued_pkts.pop().unwrap();
+ pkt.ts.pts = None;
return Ok(pkt);
}
if (self.data_end != 0) && (self.src.tell() >= self.data_end) {
let stream = streamres.unwrap();
if let Some(ref mut astr) = self.stream {
loop {
- let ret = astr.read_apackets(&mut self.queued_pkts, self.src, stream.clone(), 0, false, self.blk_size);
+ let mut ret = astr.read_apackets(&mut self.queued_pkts, self.src, stream.clone(), 0, false, self.blk_size);
if let Err(DemuxerError::TryAgain) = ret {
continue;
}
+ if let Ok(ref mut pkt) = ret {
+ pkt.ts.pts = None;
+ }
return ret;
}
}