switch NACodecInfo to Arc
[nihav.git] / nihav-commonfmt / src / codecs / clearvideo.rs
index 6b66dfac38cc0b1ff9276a1d770ed947ea57fab9..d485bdb6b00cb572f7bb91cdce916c7284ff9ebc 100644 (file)
@@ -1,11 +1,8 @@
-use std::rc::Rc;
-use std::cell::RefCell;
 use nihav_core::io::byteio::{ByteReader,MemoryReader};
 use nihav_core::io::bitreader::*;
 use nihav_core::io::codebook::*;
 use nihav_core::formats;
 use nihav_core::codecs::*;
-use nihav_core::frame::*;
 use std::fmt;
 use std::ops::{Add, Sub};
 
@@ -271,7 +268,7 @@ fn put_blocks(buf: &mut NAVideoBuffer<u8>, xpos: usize, ypos: usize, blk: &[[i32
     let mut idxu = buf.get_offset(1) + xpos *  8 + ypos *  8 * strideu;
     let mut idxv = buf.get_offset(2) + xpos *  8 + ypos *  8 * stridev;
 
-    let mut data = buf.get_data_mut();
+    let data = buf.get_data_mut().unwrap();
     let framebuf: &mut [u8] = data.as_mut_slice();
 
     for j in 0..8 {
@@ -329,7 +326,7 @@ fn copy_block(dst: &mut NAVideoBuffer<u8>, src: &NAVideoBuffer<u8>,
     let sbuf: &[u8] = sdta.as_slice();
     let dstride     = dst.get_stride(plane);
     let mut doff    = dst.get_offset(plane) + x + y * dstride;
-    let mut ddta    = dst.get_data_mut();
+    let ddta        = dst.get_data_mut().unwrap();
     let dbuf: &mut [u8] = ddta.as_mut_slice();
     for _ in 0..size {
         let dst = &mut dbuf[doff..][..size];
@@ -352,7 +349,7 @@ fn copyadd_block(dst: &mut NAVideoBuffer<u8>, src: &NAVideoBuffer<u8>,
     let sbuf: &[u8] = sdta.as_slice();
     let dstride     = dst.get_stride(plane);
     let mut doff    = dst.get_offset(plane) + x + y * dstride;
-    let mut ddta    = dst.get_data_mut();
+    let ddta        = dst.get_data_mut().unwrap();
     let dbuf: &mut [u8] = ddta.as_mut_slice();
     for _ in 0..size {
         let dst = &mut dbuf[doff..][..size];
@@ -405,7 +402,7 @@ fn extend_edges(buf: &mut NAVideoBuffer<u8>, tile_size: usize) {
         let size = if comp == 0 { tile_size } else { tile_size >> 1 };
         let stride = buf.get_stride(comp);
         let planeoff = buf.get_offset(comp);
-        let mut data = buf.get_data_mut();
+        let data = buf.get_data_mut().unwrap();
         let framebuf: &mut [u8] = data.as_mut_slice();
 
         let right  = size - (w & (size - 1));
@@ -431,7 +428,7 @@ fn extend_edges(buf: &mut NAVideoBuffer<u8>, tile_size: usize) {
 
 #[allow(dead_code)]
 struct ClearVideoDecoder {
-    info:    Rc<NACodecInfo>,
+    info:    NACodecInfoRef,
     dc_cb:   Codebook<i8>,
     ac_cb:   Codebook<u16>,
     frmmgr:  HAMShuffler,
@@ -531,7 +528,7 @@ fn decode_tile_info(br: &mut BitReader, lc: &[LevelCodes], level: usize) -> Deco
 
 impl ClearVideoDecoder {
     fn new(is_rm: bool) -> Self {
-        let dummy_info = Rc::new(DUMMY_CODEC_INFO);
+        let dummy_info = NACodecInfo::new_dummy();
         let mut coderead = CLVDCCodeReader{};
         let dc_cb = Codebook::new(&mut coderead, CodebookMode::MSB).unwrap();
         let mut coderead = CLVACCodeReader{};
@@ -684,7 +681,7 @@ impl ClearVideoDecoder {
 }
 
 impl NADecoder for ClearVideoDecoder {
-    fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+    fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
         if info.get_extradata().is_none() { return Err(DecoderError::InvalidData); }
         if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
             let w = vinfo.get_width();
@@ -692,7 +689,7 @@ impl NADecoder for ClearVideoDecoder {
             let f = vinfo.is_flipped();
             let fmt = formats::YUV420_FORMAT;
             let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(w, h, f, fmt));
-            self.info = Rc::new(NACodecInfo::new_ref(info.get_name(), myinfo, info.get_extradata()));
+            self.info = NACodecInfo::new_ref(info.get_name(), myinfo, info.get_extradata()).into_ref();
             self.frmmgr.clear();
             let edata = info.get_extradata().unwrap();
 //todo detect simply by extradata contents?
@@ -738,7 +735,7 @@ impl NADecoder for ClearVideoDecoder {
         let vinfo = self.info.get_properties().get_video_info().unwrap();
         let bufret = alloc_video_buffer(vinfo, self.tsize);
         if let Err(_) = bufret { return Err(DecoderError::InvalidData); }
-        let mut bufinfo = bufret.unwrap();
+        let bufinfo = bufret.unwrap();
         let mut buf = bufinfo.get_vbuf().unwrap();
 
         if is_intra {
@@ -785,8 +782,8 @@ mod test {
         generic_register_all_demuxers(&mut dmx_reg);
         let mut dec_reg = RegisteredDecoders::new();
         generic_register_all_codecs(&mut dec_reg);
-        test_file_decoding("avi", "assets/TalkingHead_352x288.avi", Some(10), true, false, None/*Some("clv")*/, &dmx_reg, &dec_reg);
-//         test_file_decoding("avi", "assets/basketball.avi", None/*Some(10)*/, true, false, Some("clv1"));
+        test_file_decoding("avi", "assets/Misc/TalkingHead_352x288.avi", Some(10), true, false, None/*Some("clv")*/, &dmx_reg, &dec_reg);
+//         test_file_decoding("avi", "assets/Misc/basketball.avi", None/*Some(10)*/, true, false, Some("clv1"));
 //panic!("debug");
     }
 }