if let Some(dmx_fact) = reg.dmx_reg.find_demuxer(dmx_name) {
br.seek(SeekFrom::Start(0)).unwrap();
- let dmx = SelfBorrow::new(brb, |br_| {
+ let ret = SelfBorrow::try_new(brb, |br_| {
unsafe {
- create_demuxer(dmx_fact, br_.as_mut().unwrap().get_object_mut()).unwrap()
+ create_demuxer(dmx_fact, br_.as_mut().unwrap().get_object_mut()).ok()
}
});
- return DemuxerObject::Normal(dmx);
+ if let Some(dmx) = ret {
+ return DemuxerObject::Normal(dmx);
+ } else {
+ println!("demuxer creation failed!");
+ return DemuxerObject::None;
+ }
}
}
if ifmt.is_some() {
}
if let Some(rdmx_fact) = reg.rdmx_reg.find_demuxer(dmx_name) {
br.seek(SeekFrom::Start(0)).unwrap();
- let dmx = SelfBorrow::new(brb, |br_| {
+ let ret = SelfBorrow::try_new(brb, |br_| {
unsafe {
- create_raw_demuxer(rdmx_fact, br_.as_mut().unwrap().get_object_mut()).unwrap()
+ create_raw_demuxer(rdmx_fact, br_.as_mut().unwrap().get_object_mut()).ok()
}
});
- let mut pkts = Vec::new();
- for stream in dmx.get_object().get_streams() {
- if let Some(pcreate) = reg.pkt_reg.find_packetiser(stream.get_info().get_name()) {
- let mut packetiser = (pcreate)();
- packetiser.attach_stream(stream);
- pkts.push(Some(packetiser));
- } else {
- pkts.push(None);
+ if let Some(dmx) = ret {
+ let mut pkts = Vec::new();
+ for stream in dmx.get_object().get_streams() {
+ if let Some(pcreate) = reg.pkt_reg.find_packetiser(stream.get_info().get_name()) {
+ let mut packetiser = (pcreate)();
+ packetiser.attach_stream(stream);
+ pkts.push(Some(packetiser));
+ } else {
+ pkts.push(None);
+ }
}
+ return DemuxerObject::Raw(dmx, pkts, false);
+ } else {
+ println!("raw demuxer creation failed!");
+ return DemuxerObject::None;
}
- return DemuxerObject::Raw(dmx, pkts, false);
}
}
for rdmx in reg.rdmx_reg.iter() {
println!("detected {} as {}", name, rdmx.get_name());
}
br.seek(SeekFrom::Start(0)).unwrap();
- let dmx = SelfBorrow::new(brb, |br_| {
+ let ret = SelfBorrow::try_new(brb, |br_| {
unsafe {
- create_raw_demuxer(*rdmx, br_.as_mut().unwrap().get_object_mut()).unwrap()
+ create_raw_demuxer(*rdmx, br_.as_mut().unwrap().get_object_mut()).ok()
}
});
- let mut pkts = Vec::new();
- for stream in dmx.get_object().get_streams() {
- if let Some(pcreate) = reg.pkt_reg.find_packetiser(stream.get_info().get_name()) {
- let packetiser = (pcreate)();
- pkts.push(Some(packetiser));
- } else {
- pkts.push(None);
+ if let Some(dmx) = ret {
+ let mut pkts = Vec::new();
+ for stream in dmx.get_object().get_streams() {
+ if let Some(pcreate) = reg.pkt_reg.find_packetiser(stream.get_info().get_name()) {
+ let packetiser = (pcreate)();
+ pkts.push(Some(packetiser));
+ } else {
+ pkts.push(None);
+ }
}
+ return DemuxerObject::Raw(dmx, pkts, false);
+ } else {
+ println!("raw demuxer creation failed!");
+ return DemuxerObject::None;
}
- return DemuxerObject::Raw(dmx, pkts, false);
}
}
}
br.seek(SeekFrom::Start(0)).unwrap();
let mut buf = vec![0; 1048576];
- let size = br.peek_buf(&mut buf).unwrap();
+ let size = if let Ok(val) = br.peek_buf(&mut buf) { val } else {
+ println!("cannot read any data");
+ return DemuxerObject::None;
+ };
let mut pname = "";
for pinfo in reg.pkt_reg.iter() {
// check for ID3v{2-4}
let mut buf = [0; 5];
- br.peek_buf(&mut buf).unwrap();
+ if br.peek_buf(&mut buf).is_err() {
+ return (false, 0, None);
+ }
if &buf[0..3] == b"ID3" && buf[3] > 0 && buf[3] < 5 && buf[4] == 0 { //ID3 tag found, must be a raw stream
br.read_skip(6).unwrap();
let mut size = 0;