projects
/
nihav.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
introduce stream and container duration
[nihav.git]
/
nihav-rad
/
src
/
demuxers
/
smacker.rs
diff --git
a/nihav-rad/src/demuxers/smacker.rs
b/nihav-rad/src/demuxers/smacker.rs
index 41cad05e853d5bd3527b3d8da737bff660fb40bc..340af85989617c928cc968dce3b09498d2da7315 100644
(file)
--- a/
nihav-rad/src/demuxers/smacker.rs
+++ b/
nihav-rad/src/demuxers/smacker.rs
@@
-56,7
+56,7
@@
impl AudioTrack {
let soniton = if (self.flags & SMK_AUD_FLAG_16BIT) != 0 { SND_S16_FORMAT } else { SND_U8_FORMAT };
let ahdr = NAAudioInfo::new(self.srate, channels, soniton, 1);
let ainfo = NACodecInfo::new(codecname, NACodecTypeInfo::Audio(ahdr), None);
let soniton = if (self.flags & SMK_AUD_FLAG_16BIT) != 0 { SND_S16_FORMAT } else { SND_U8_FORMAT };
let ahdr = NAAudioInfo::new(self.srate, channels, soniton, 1);
let ainfo = NACodecInfo::new(codecname, NACodecTypeInfo::Audio(ahdr), None);
- let res = strmgr.add_stream(NAStream::new(StreamType::Audio, (str_id + 1) as u32, ainfo, 1, self.srate));
+ let res = strmgr.add_stream(NAStream::new(StreamType::Audio, (str_id + 1) as u32, ainfo, 1, self.srate
, 0
));
validate!(res.is_some());
self.id = res.unwrap();
validate!(res.is_some());
self.id = res.unwrap();
@@
-90,11
+90,12
@@
struct SmackerVideoDemuxer<'a> {
fn get_pts_inc(val: i32) -> u64 {
if val > 0 { (val as u64) * 100 }
fn get_pts_inc(val: i32) -> u64 {
if val > 0 { (val as u64) * 100 }
- else if val < 0 {
(-val as u64)
}
+ else if val < 0 {
-val as u64
}
else { 1 }
}
impl<'a> DemuxCore<'a> for SmackerVideoDemuxer<'a> {
else { 1 }
}
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];
fn open(&mut self, strmgr: &mut StreamManager, _seek_idx: &mut SeekIndex) -> DemuxerResult<()> {
let src = &mut self.src;
let mut magic: [u8; 4] = [0; 4];
@@
-148,7
+149,7
@@
impl<'a> DemuxCore<'a> for SmackerVideoDemuxer<'a> {
let vhdr = NAVideoInfo::new(width, height, false, PAL8_FORMAT);
let vinfo = NACodecInfo::new("smacker-video", NACodecTypeInfo::Video(vhdr), Some(treedata));
let vhdr = NAVideoInfo::new(width, height, false, PAL8_FORMAT);
let vinfo = NACodecInfo::new("smacker-video", NACodecTypeInfo::Video(vhdr), Some(treedata));
- let res = strmgr.add_stream(NAStream::new(StreamType::Video, 0, vinfo, 1, 100000));
+ let res = strmgr.add_stream(NAStream::new(StreamType::Video, 0, vinfo, 1, 100000
, 0
));
validate!(res.is_some());
self.video_id = res.unwrap();
validate!(res.is_some());
self.video_id = res.unwrap();
@@
-164,6
+165,8
@@
impl<'a> DemuxCore<'a> for SmackerVideoDemuxer<'a> {
Ok(())
}
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();
fn get_frame(&mut self, strmgr: &mut StreamManager) -> DemuxerResult<NAPacket> {
if !self.queued_packets.is_empty() {
let pkt = self.queued_packets.pop().unwrap();
@@
-248,8
+251,13
@@
impl<'a> DemuxCore<'a> for SmackerVideoDemuxer<'a> {
Ok(pkt)
}
Ok(pkt)
}
- fn seek(&mut self, time: u64, _seek_idx: &SeekIndex) -> DemuxerResult<()> {
- if time == 0 {
+ fn seek(&mut self, time: NATimePoint, _seek_idx: &SeekIndex) -> DemuxerResult<()> {
+ let seek_to_start = match time {
+ NATimePoint::Milliseconds(0) => true,
+ NATimePoint::PTS(0) => true,
+ _ => false,
+ };
+ if seek_to_start {
let start = self.start;
self.src.seek(SeekFrom::Start(start))?;
self.cur_frame = 0;
let start = self.start;
self.src.seek(SeekFrom::Start(start))?;
self.cur_frame = 0;
@@
-259,6
+267,7
@@
impl<'a> DemuxCore<'a> for SmackerVideoDemuxer<'a> {
}
Err(DemuxerError::NotImplemented)
}
}
Err(DemuxerError::NotImplemented)
}
+ fn get_duration(&self) -> u64 { self.frames as u64 * self.pts_inc / 100 }
}
impl<'a> NAOptionHandler for SmackerVideoDemuxer<'a> {
}
impl<'a> NAOptionHandler for SmackerVideoDemuxer<'a> {