aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2020-03-24 14:47:47 +0100
committerKostya Shishkov <kostya.shishkov@gmail.com>2020-03-24 14:47:47 +0100
commit251d99506293d25b7ba4da91f88be3c95f848742 (patch)
tree893bdc87a3da97f6be213bb824e26add601a017f
parentbcaa61dbe363c0fef533285d02789c2b4994425e (diff)
downloadnihav-tool-251d99506293d25b7ba4da91f88be3c95f848742.tar.gz
handle decoding errors a bit better
-rw-r--r--src/main.rs26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/main.rs b/src/main.rs
index 1541b18..71ccda6 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -219,14 +219,24 @@ panic!("decoder {} not found", info.get_name());
let sr = sids.iter().position(|x| *x == streamno);
let idx = sr.unwrap();
if let Some((ref mut dsupp, ref mut dec)) = decs[idx] {
- let frm = dec.decode(dsupp, &pkt).unwrap();
- if !noout {
- match writers[idx] {
- Outputter::Video(ref mut wr) => { wr.output_frame(&pkt, frm); },
- Outputter::Audio(ref mut wr) => { wr.output_frame(&pkt, frm); },
- _ => {},
- };
- }
+ match dec.decode(dsupp, &pkt) {
+ Ok(frm) => {
+ if !noout {
+ match writers[idx] {
+ Outputter::Video(ref mut wr) => { wr.output_frame(&pkt, frm); },
+ Outputter::Audio(ref mut wr) => { wr.output_frame(&pkt, frm); },
+ _ => {},
+ };
+ }
+ },
+ Err(DecoderError::MissingReference) if seek_time > 0 => {
+ println!("ignoring missing ref");
+ },
+ Err(reason) => {
+ println!("error decoding frame {:?}", reason);
+ break;
+ },
+ };
}
if pkt.get_pts() != None && lastpts.is_some() && pkt.get_pts() >= lastpts { break; }
}