projects
/
nihav-encoder.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
3e82df4
)
calculate PTS for raw stream if needed and possible
author
Kostya Shishkov
<kostya.shishkov@gmail.com>
Thu, 18 Nov 2021 13:11:27 +0000
(14:11 +0100)
committer
Kostya Shishkov
<kostya.shishkov@gmail.com>
Thu, 18 Nov 2021 13:11:27 +0000
(14:11 +0100)
src/demux.rs
patch
|
blob
|
blame
|
history
diff --git
a/src/demux.rs
b/src/demux.rs
index 73ed14fa503ffa36ba09d6ccaf1f595d58dedc47..28f564d88134f1e3986854dba1efd56d236b5f28 100644
(file)
--- a/
src/demux.rs
+++ b/
src/demux.rs
@@
-41,13
+41,14
@@
pub struct RawStreamCtx<'a> {
sm: StreamManager,
packetiser: Box<dyn NAPacketiser + Send>,
br: &'a mut ByteReader<'a>,
sm: StreamManager,
packetiser: Box<dyn NAPacketiser + Send>,
br: &'a mut ByteReader<'a>,
+ pts: u64,
}
impl<'a> RawStreamCtx<'a> {
fn new(stream: NAStreamRef, packetiser: Box<dyn NAPacketiser + Send>, br: &'a mut ByteReader<'a>) -> Self {
let mut sm = StreamManager::new();
sm.add_stream_ref(stream.clone());
}
impl<'a> RawStreamCtx<'a> {
fn new(stream: NAStreamRef, packetiser: Box<dyn NAPacketiser + Send>, br: &'a mut ByteReader<'a>) -> Self {
let mut sm = StreamManager::new();
sm.add_stream_ref(stream.clone());
- Self { stream, sm, packetiser, br }
+ Self { stream, sm, packetiser, br
, pts: 0
}
}
}
}
}
@@
-230,7
+231,13
@@
impl<'a> DemuxerObject<'a> {
let mut buf = [0; 65536];
loop {
match ctx.packetiser.get_packet(ctx.stream.clone()) {
let mut buf = [0; 65536];
loop {
match ctx.packetiser.get_packet(ctx.stream.clone()) {
- Ok(Some(packet)) => return Ok(packet),
+ Ok(Some(mut packet)) => {
+ if packet.get_pts().is_none() && packet.get_duration().is_some() {
+ packet.ts.pts = Some(ctx.pts);
+ }
+ ctx.pts += packet.get_duration().unwrap_or(0);
+ return Ok(packet);
+ },
Ok(None) => {},
Err(DecoderError::ShortData) => {},
_ => return Err(DemuxerError::InvalidData),
Ok(None) => {},
Err(DecoderError::ShortData) => {},
_ => return Err(DemuxerError::InvalidData),
@@
-241,7
+248,13
@@
impl<'a> DemuxerObject<'a> {
},
Err(_) => {
match ctx.packetiser.get_packet(ctx.stream.clone()) {
},
Err(_) => {
match ctx.packetiser.get_packet(ctx.stream.clone()) {
- Ok(Some(packet)) => return Ok(packet),
+ Ok(Some(mut packet)) => {
+ if packet.get_pts().is_none() && packet.get_duration().is_some() {
+ packet.ts.pts = Some(ctx.pts);
+ }
+ ctx.pts += packet.get_duration().unwrap_or(0);
+ return Ok(packet);
+ },
Ok(None) | Err(DecoderError::ShortData) => return Err(DemuxerError::EOF),
_ => return Err(DemuxerError::InvalidData),
};
Ok(None) | Err(DecoderError::ShortData) => return Err(DemuxerError::EOF),
_ => return Err(DemuxerError::InvalidData),
};