extern crate nihav_core;
+extern crate nihav_codec_support;
extern crate nihav_registry;
extern crate nihav_allstuff;
-use std::io::SeekFrom;
+use std::io::{SeekFrom, Write};
use std::fs::File;
use std::path::Path;
use nihav_core::io::byteio::{FileReader, ByteReader};
use nihav_core::frame::*;
use nihav_core::codecs::*;
use nihav_core::demuxers::*;
+use nihav_codec_support::imgwrite::*;
use nihav_registry::detect;
use nihav_allstuff::*;
use std::env;
-mod frmwriter;
-use crate::frmwriter::*;
-
mod wavwriter;
use crate::wavwriter::WavWriter;
NumberMode::PktPTS => { pkt.get_pts().unwrap() },
NumberMode::FrmPTS => { if let Some(pt) = frm.get_pts() { pt } else { pkt.get_pts().unwrap() } },
};
- let vinfo = frm.get_buffer().get_video_info().unwrap();
- if vinfo.get_format().is_paletted() {
- write_palppm(&self.prefix, self.streamno, pts, frm);
- } else if vinfo.get_format().get_model().is_yuv() {
- write_pgmyuv(&self.prefix, self.streamno, pts, frm);
- } else if vinfo.get_format().get_model().is_rgb() {
- write_ppm(&self.prefix, self.streamno, pts, frm);
- } else {
-panic!(" unknown format");
+ if let Err(_) = write_pnm(&self.prefix, self.streamno, pts, frm) {
+ println!("error writing output picture");
}
}
self.frameno += 1;
let mut vpfx: Option<String> = None;
let mut apfx: Option<&str> = None;
let mut ignore_errors = false;
+ let mut dump_frames = false;
while (cur_arg < args.len()) && args[cur_arg].starts_with('-') {
match args[cur_arg].as_str() {
vpfx = Some(args[cur_arg].clone());
},
"-ignerr" => { ignore_errors = true; },
+ "-dumpfrm" => { dump_frames = true; },
_ => { println!("unknown option {}", args[cur_arg]); return; },
}
cur_arg += 1;
}
}
+ let mut frmnum = 0;
loop {
let pktres = dmx.get_frame();
if let Err(e) = pktres {
let streamno = pkt.get_stream().get_id();
let sr = sids.iter().position(|x| *x == streamno);
let idx = sr.unwrap();
+ if dump_frames {
+ let name = format!("out{:02}_{:08}.frm", streamno, pkt.get_pts().unwrap_or(frmnum));
+ let mut ofile = File::create(name).unwrap();
+ ofile.write(pkt.get_buffer().as_slice()).unwrap();
+ frmnum += 1;
+ }
if let Some((ref mut dsupp, ref mut dec)) = decs[idx] {
match dec.decode(dsupp, &pkt) {
Ok(frm) => {