X-Git-Url: https://git.nihav.org/?p=nihav.git;a=blobdiff_plain;f=nihav-core%2Fsrc%2Fframe.rs;h=789088a47d4445e91662565fb314661b3d1aa86d;hp=d219ee45967b180e9174b8b01d1b9c6d44d23022;hb=3fc28ece6664a34af9b7f6a52dbf8a8809fa9204;hpb=cbc3c7a23f8d41c9cb395252a6b795817b5aec96 diff --git a/nihav-core/src/frame.rs b/nihav-core/src/frame.rs index d219ee4..789088a 100644 --- a/nihav-core/src/frame.rs +++ b/nihav-core/src/frame.rs @@ -134,8 +134,13 @@ impl NAVideoBuffer { pub fn get_dimensions(&self, idx: usize) -> (usize, usize) { get_plane_size(&self.info, idx) } + pub fn into_ref(self) -> NABufferRef { + NABufferRef::new(self) + } } +pub type NAVideoBufferRef = NABufferRef>; + #[derive(Clone)] pub struct NAAudioBuffer { info: NAAudioInfo, @@ -173,10 +178,10 @@ impl NAAudioBuffer { #[derive(Clone)] pub enum NABufferType { - Video (NAVideoBuffer), - Video16 (NAVideoBuffer), - Video32 (NAVideoBuffer), - VideoPacked(NAVideoBuffer), + Video (NAVideoBufferRef), + Video16 (NAVideoBufferRef), + Video32 (NAVideoBufferRef), + VideoPacked(NAVideoBufferRef), AudioU8 (NAAudioBuffer), AudioI16 (NAAudioBuffer), AudioI32 (NAAudioBuffer), @@ -209,20 +214,20 @@ impl NABufferType { _ => None, } } - pub fn get_vbuf(&self) -> Option> { + pub fn get_vbuf(&self) -> Option> { match *self { NABufferType::Video(ref vb) => Some(vb.clone()), NABufferType::VideoPacked(ref vb) => Some(vb.clone()), _ => None, } } - pub fn get_vbuf16(&self) -> Option> { + pub fn get_vbuf16(&self) -> Option> { match *self { NABufferType::Video16(ref vb) => Some(vb.clone()), _ => None, } } - pub fn get_vbuf32(&self) -> Option> { + pub fn get_vbuf32(&self) -> Option> { match *self { NABufferType::Video32(ref vb) => Some(vb.clone()), _ => None, @@ -350,7 +355,7 @@ pub fn alloc_video_buffer(vinfo: NAVideoInfo, align: u8) -> Result = Vec::with_capacity(new_size.unwrap()); data.resize(new_size.unwrap(), 0); let buf: NAVideoBuffer = NAVideoBuffer { data: NABufferRef::new(data), info: vinfo, offs: offs, strides: strides }; - Ok(NABufferType::Video(buf)) + Ok(NABufferType::Video(buf.into_ref())) } else if !all_packed { for i in 0..fmt.get_num_comp() { let ochr = fmt.get_chromaton(i); @@ -375,17 +380,17 @@ pub fn alloc_video_buffer(vinfo: NAVideoInfo, align: u8) -> Result = Vec::with_capacity(new_size); data.resize(new_size, 0); let buf: NAVideoBuffer = NAVideoBuffer { data: NABufferRef::new(data), info: vinfo, offs: offs, strides: strides }; - Ok(NABufferType::Video(buf)) + Ok(NABufferType::Video(buf.into_ref())) } else if max_depth <= 16 { let mut data: Vec = Vec::with_capacity(new_size); data.resize(new_size, 0); let buf: NAVideoBuffer = NAVideoBuffer { data: NABufferRef::new(data), info: vinfo, offs: offs, strides: strides }; - Ok(NABufferType::Video16(buf)) + Ok(NABufferType::Video16(buf.into_ref())) } else { let mut data: Vec = Vec::with_capacity(new_size); data.resize(new_size, 0); let buf: NAVideoBuffer = NAVideoBuffer { data: NABufferRef::new(data), info: vinfo, offs: offs, strides: strides }; - Ok(NABufferType::Video32(buf)) + Ok(NABufferType::Video32(buf.into_ref())) } } else if all_bytealigned || unfit_elem_size { let elem_sz = fmt.get_elem_size(); @@ -398,7 +403,7 @@ pub fn alloc_video_buffer(vinfo: NAVideoInfo, align: u8) -> Result = NAVideoBuffer { data: NABufferRef::new(data), info: vinfo, offs: offs, strides: strides }; - Ok(NABufferType::VideoPacked(buf)) + Ok(NABufferType::VideoPacked(buf.into_ref())) } else { let elem_sz = fmt.get_elem_size(); let new_sz = width.checked_mul(height); @@ -410,14 +415,14 @@ pub fn alloc_video_buffer(vinfo: NAVideoInfo, align: u8) -> Result = NAVideoBuffer { data: NABufferRef::new(data), info: vinfo, offs: offs, strides: strides }; - Ok(NABufferType::Video16(buf)) + Ok(NABufferType::Video16(buf.into_ref())) }, 4 => { let mut data: Vec = Vec::with_capacity(new_size); data.resize(new_size, 0); strides.push(width); let buf: NAVideoBuffer = NAVideoBuffer { data: NABufferRef::new(data), info: vinfo, offs: offs, strides: strides }; - Ok(NABufferType::Video32(buf)) + Ok(NABufferType::Video32(buf.into_ref())) }, _ => unreachable!(), }