let mut frm = NAFrame::new_from_pkt(pkt, self.info.replace_info(NACodecTypeInfo::Audio(ainfo)), abuf);
frm.set_keyframe(true);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.replace_info(NACodecTypeInfo::Audio(ainfo)), abuf);
frm.set_keyframe(true);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), NABufferType::None);
frm.set_keyframe(false);
frm.set_frame_type(FrameType::Skip);
- return Ok(Rc::new(RefCell::new(frm)));
+ return Ok(frm.into_ref());
}
let is_intra = (src[off] & 2) == 2;
} else {
frm.set_frame_type(FrameType::P);
}
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, info, NABufferType::AudioPacked(abuf));
frm.set_duration(Some(duration));
frm.set_keyframe(true);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
} else {
Err(DecoderError::InvalidData)
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), abuf);
frm.set_keyframe(true);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.replace_info(NACodecTypeInfo::Audio(ainfo)), abuf);
frm.set_keyframe(true);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
use std::cmp::max;
use std::collections::HashMap;
use std::fmt;
-pub use std::rc::Rc;
-pub use std::cell::*;
use std::sync::Arc;
pub use crate::formats::*;
pub use crate::refs::*;
options: HashMap<String, NAValue>,
}
-pub type NAFrameRef = Rc<RefCell<NAFrame>>;
+pub type NAFrameRef = Arc<NAFrame>;
fn get_plane_size(info: &NAVideoInfo, idx: usize) -> (usize, usize) {
let chromaton = info.get_format().get_chromaton(idx);
pub fn set_duration(&mut self, dur: Option<u64>) { self.ts.set_duration(dur); }
pub fn get_buffer(&self) -> NABufferType { self.buffer.clone() }
+
+ pub fn into_ref(self) -> NAFrameRef { Arc::new(self) }
}
impl fmt::Display for NAFrame {
//use crate::io::byteio::*;
use super::wavwriter::WavWriter;
-fn write_pgmyuv(pfx: &str, strno: usize, num: u64, frmref: NAFrameRef) {
- let frm = frmref.borrow();
+fn write_pgmyuv(pfx: &str, strno: usize, num: u64, frm: NAFrameRef) {
if let NABufferType::None = frm.get_buffer() { return; }
let name = format!("assets/{}out{:02}_{:06}.pgm", pfx, strno, num);
let mut ofile = File::create(name).unwrap();
}
}
-fn write_palppm(pfx: &str, strno: usize, num: u64, frmref: NAFrameRef) {
- let frm = frmref.borrow();
+fn write_palppm(pfx: &str, strno: usize, num: u64, frm: NAFrameRef) {
let name = format!("assets/{}out{:02}_{:06}.ppm", pfx, strno, num);
let mut ofile = File::create(name).unwrap();
let buf = frm.get_buffer().get_vbuf().unwrap();
}
}
-fn write_ppm(pfx: &str, strno: usize, num: u64, frmref: NAFrameRef) {
- let frm = frmref.borrow();
+fn write_ppm(pfx: &str, strno: usize, num: u64, frm: NAFrameRef) {
let name = format!("assets/{}out{:02}_{:06}.ppm", pfx, strno, num);
let mut ofile = File::create(name).unwrap();
if let NABufferType::VideoPacked(ref buf) = frm.get_buffer() {
let streamno = pkt.get_stream().get_id() as usize;
if let Some(ref mut dec) = decs[streamno] {
let frm = dec.decode(&pkt).unwrap();
- if pkt.get_stream().get_info().is_video() && video_pfx.is_some() && frm.borrow().get_frame_type() != FrameType::Skip {
+ 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.borrow().get_pts() { fpts } else { pkt.get_pts().unwrap() };
- let vinfo = frm.borrow().get_buffer().get_video_info().unwrap();
+ let pts = if let Some(fpts) = frm.get_pts() { fpts } else { pkt.get_pts().unwrap() };
+ let vinfo = frm.get_buffer().get_video_info().unwrap();
if vinfo.get_format().is_paletted() {
write_palppm(pfx, streamno, pts, frm);
} else if vinfo.get_format().get_model().is_yuv() {
}
let streamno = pkt.get_stream().get_id() as usize;
if let Some(ref mut dec) = decs[streamno] {
- let frm_ = dec.decode(&pkt).unwrap();
- let frm = frm_.borrow();
+ let frm = dec.decode(&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();
let mut frm = NAFrame::new_from_pkt(pkt, info, abuf);
frm.set_duration(Some(duration as u64));
frm.set_keyframe(false);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
} else {
Err(DecoderError::InvalidData)
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), NABufferType::None);
frm.set_keyframe(false);
frm.set_frame_type(FrameType::Skip);
- return Ok(Rc::new(RefCell::new(frm)));
+ return Ok(frm.into_ref());
}
let compr_info = cinfo.unwrap();
let is_24bit = !is_sprite && compr_info.is_24bit;
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(is_intra || is_sprite);
frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P });
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(is_intra);
frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P });
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(self.is_intra);
frm.set_frame_type(if self.is_intra { FrameType::I } else { FrameType::P });
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(true);
frm.set_frame_type(FrameType::I);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(is_intra);
frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P });
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, info, abuf);
frm.set_duration(Some(samples as u64));
frm.set_keyframe(false);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
} else {
Err(DecoderError::InvalidData)
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(self.is_intra);
frm.set_frame_type(if self.is_intra { FrameType::I } else { FrameType::P });
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, info, abuf);
frm.set_duration(Some(samples as u64));
frm.set_keyframe(false);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
} else {
Err(DecoderError::InvalidData)
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), NABufferType::None);
frm.set_keyframe(false);
frm.set_frame_type(FrameType::Skip);
- return Ok(Rc::new(RefCell::new(frm)))
+ return Ok(frm.into_ref())
} else if cmethod == 3 {
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), NABufferType::None);
frm.set_keyframe(false);
frm.set_frame_type(FrameType::Skip);
- return Ok(Rc::new(RefCell::new(frm)))
+ return Ok(frm.into_ref())
} else if cmethod == 2 {
self.decode_method2(&mut br)?;
} else if cmethod == 5 {
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(is_intra);
frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P });
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, info, abuf);
frm.set_duration(Some(samples as u64));
frm.set_keyframe(false);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
} else {
Err(DecoderError::InvalidData)
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), NABufferType::Video(buf));
frm.set_keyframe(is_intra);
frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P });
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, info, abuf);
frm.set_duration(Some(samples as u64));
frm.set_keyframe(true);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
} else {
Err(DecoderError::InvalidData)
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), abuf);
frm.set_keyframe(true);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(true);
frm.set_frame_type(FrameType::I);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
} else {
let bufret = self.frmmgr.clone_ref();
if let None = bufret { return Err(DecoderError::MissingReference); }
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), NABufferType::Video(buf));
frm.set_keyframe(false);
frm.set_frame_type(FrameType::P);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(intraframe);
frm.set_frame_type(if intraframe { FrameType::I } else { FrameType::P });
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(self.dec.is_intra());
frm.set_frame_type(self.dec.get_frame_type());
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(self.dec.is_intra());
frm.set_frame_type(self.dec.get_frame_type());
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), buftype);
frm.set_keyframe(false);
frm.set_frame_type(if is_skip { FrameType::Skip } else { FrameType::B });
- return Ok(Rc::new(RefCell::new(frm)));
+ return Ok(frm.into_ref());
}
let mut ibr = Intel263BR::new(&src, &self.tables);
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(self.dec.is_intra());
frm.set_frame_type(if self.dec.is_intra() { FrameType::I } else { FrameType::P });
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
use std::mem;
use std::rc::Rc;
-use std::cell::{Ref,RefCell};
+pub use std::cell::{Ref,RefCell};
use nihav_core::io::bitreader::*;
//use io::intcode::*;
use nihav_core::codecs::*;
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_frame_type(if self.key_frame { FrameType::I } else { FrameType::P });
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, info, abuf);
frm.set_duration(Some(self.duration as u64));
frm.set_keyframe(false);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
} else {
Err(DecoderError::InvalidData)
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_frame_type(FrameType::P);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(is_intra);
frm.set_frame_type(ftype);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
if !br.read_bool()? {
let mut frm = NAFrame::new_from_pkt(pkt, info.clone(), NABufferType::None);
frm.set_frame_type(FrameType::Skip);
- return Ok(Rc::new(RefCell::new(frm)));
+ return Ok(frm.into_ref());
}
let stereo = br.read_bool()?;
let bits16 = br.read_bool()?;
let mut frm = NAFrame::new_from_pkt(pkt, info, abuf);
frm.set_duration(Some(samples as u64));
frm.set_keyframe(false);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
} else {
Err(DecoderError::InvalidData)
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.replace_info(NACodecTypeInfo::Audio(ainfo)), abuf);
frm.set_keyframe(true);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), abuf);
frm.set_keyframe(true);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), abuf);
frm.set_keyframe(true);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.replace_info(NACodecTypeInfo::Audio(ainfo)), NABufferType::None);
frm.set_frame_type(FrameType::Skip);
- return Ok(Rc::new(RefCell::new(frm)));
+ return Ok(frm.into_ref());
}
src_len = pktbuf.len();
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.replace_info(NACodecTypeInfo::Audio(ainfo)), abuf);
frm.set_keyframe(true);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(self.dec.is_intra());
frm.set_frame_type(if self.dec.is_intra() { FrameType::I } else { FrameType::P });
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
frm.set_keyframe(self.dec.is_intra());
frm.set_frame_type(self.dec.get_frame_type());
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
frm.set_keyframe(ftype == FrameType::I);
frm.set_pts(Some(pts));
frm.set_frame_type(ftype);//if ftype == FrameType::B { FrameType::Skip } else { ftype } );
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
frm.set_keyframe(ftype == FrameType::I);
frm.set_frame_type(ftype);
frm.set_pts(Some(ts));
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}
frm.set_keyframe(hdr.ftype == FrameType::I);
frm.set_pts(Some(hdr.ts as u64));
frm.set_frame_type(hdr.ftype);
- Ok(Rc::new(RefCell::new(frm)))
+ Ok(frm.into_ref())
}
}