let mut br = ByteReader::new(&mut fr);
let mut dmx = create_demuxer(dmx_f, &mut br).unwrap();
- let mut decs: Vec<Option<Box<NADecoder>>> = Vec::new();
+ let mut decs: Vec<Option<(Box<NADecoderSupport>, Box<NADecoder>)>> = Vec::new();
for i in 0..dmx.get_num_streams() {
let s = dmx.get_stream(i).unwrap();
let info = s.get_info();
if let Some(df) = decfunc {
if (decode_video && info.is_video()) || (decode_audio && info.is_audio()) {
let mut dec = (df)();
- dec.init(info).unwrap();
- decs.push(Some(dec));
+ let mut dsupp = Box::new(NADecoderSupport::new());
+ dec.init(&mut dsupp, info).unwrap();
+ decs.push(Some((dsupp, dec)));
} else {
decs.push(None);
}
if pkt.get_pts().unwrap() > limit.unwrap() { break; }
}
let streamno = pkt.get_stream().get_id() as usize;
- if let Some(ref mut dec) = decs[streamno] {
- let frm = dec.decode(&pkt).unwrap();
+ if let Some((ref mut dsupp, ref mut dec)) = decs[streamno] {
+ let frm = dec.decode(dsupp, &pkt).unwrap();
if pkt.get_stream().get_info().is_video() && video_pfx.is_some() && frm.get_frame_type() != FrameType::Skip {
let pfx = video_pfx.unwrap();
let pts = if let Some(fpts) = frm.get_pts() { fpts } else { pkt.get_pts().unwrap() };
let mut br = ByteReader::new(&mut fr);
let mut dmx = create_demuxer(dmx_f, &mut br).unwrap();
- let mut decs: Vec<Option<Box<NADecoder>>> = Vec::new();
+ let mut decs: Vec<Option<(Box<NADecoderSupport>, Box<NADecoder>)>> = Vec::new();
for i in 0..dmx.get_num_streams() {
let s = dmx.get_stream(i).unwrap();
let info = s.get_info();
if let Some(df) = decfunc {
if info.is_audio() {
let mut dec = (df)();
- dec.init(info).unwrap();
- decs.push(Some(dec));
+ let mut dsupp = Box::new(NADecoderSupport::new());
+ dec.init(&mut dsupp, info).unwrap();
+ decs.push(Some((dsupp, dec)));
} else {
decs.push(None);
}
if pkt.get_pts().unwrap() > limit.unwrap() { break; }
}
let streamno = pkt.get_stream().get_id() as usize;
- if let Some(ref mut dec) = decs[streamno] {
- let frm = dec.decode(&pkt).unwrap();
+ if let Some((ref mut dsupp, ref mut dec)) = decs[streamno] {
+ let frm = dec.decode(dsupp, &pkt).unwrap();
if frm.get_info().is_audio() {
if !wrote_header {
wwr.write_header(frm.get_info().as_ref().get_properties().get_audio_info().unwrap()).unwrap();