X-Git-Url: https://git.nihav.org/?p=nihav-tool.git;a=blobdiff_plain;f=src%2Fmain.rs;h=71ccda6490e4ccf8a7ef0d73ff9efaae68818e67;hp=1541b18e757e639841c0c64da3306c2f70f75084;hb=251d99506293d25b7ba4da91f88be3c95f848742;hpb=bcaa61dbe363c0fef533285d02789c2b4994425e 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; } }