switch NAFrame references to Arc
authorKostya Shishkov <kostya.shishkov@gmail.com>
Mon, 29 Apr 2019 11:37:08 +0000 (13:37 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Mon, 29 Apr 2019 11:37:08 +0000 (13:37 +0200)
37 files changed:
nihav-commonfmt/src/codecs/aac.rs
nihav-commonfmt/src/codecs/atrac3.rs
nihav-commonfmt/src/codecs/clearvideo.rs
nihav-commonfmt/src/codecs/pcm.rs
nihav-commonfmt/src/codecs/sipro.rs
nihav-commonfmt/src/codecs/ts102366.rs
nihav-core/src/frame.rs
nihav-core/src/test/dec_video.rs
nihav-duck/src/codecs/dkadpcm.rs
nihav-duck/src/codecs/truemotion1.rs
nihav-duck/src/codecs/truemotion2.rs
nihav-duck/src/codecs/truemotion2x.rs
nihav-duck/src/codecs/truemotionrt.rs
nihav-game/src/codecs/bmv.rs
nihav-game/src/codecs/bmv3.rs
nihav-game/src/codecs/gremlinvideo.rs
nihav-game/src/codecs/vmd.rs
nihav-indeo/src/codecs/imc.rs
nihav-indeo/src/codecs/indeo2.rs
nihav-indeo/src/codecs/indeo3.rs
nihav-indeo/src/codecs/indeo4.rs
nihav-indeo/src/codecs/indeo5.rs
nihav-indeo/src/codecs/intel263.rs
nihav-indeo/src/codecs/ivibr.rs
nihav-rad/src/codecs/bink2.rs
nihav-rad/src/codecs/binkaud.rs
nihav-rad/src/codecs/binkvid.rs
nihav-rad/src/codecs/smacker.rs
nihav-realmedia/src/codecs/cook.rs
nihav-realmedia/src/codecs/ra144.rs
nihav-realmedia/src/codecs/ra288.rs
nihav-realmedia/src/codecs/ralf.rs
nihav-realmedia/src/codecs/rv10.rs
nihav-realmedia/src/codecs/rv20.rs
nihav-realmedia/src/codecs/rv30.rs
nihav-realmedia/src/codecs/rv40.rs
nihav-realmedia/src/codecs/rv60.rs

index 412bc9c8b4c0883403ba31ba897dfd053334b317..7b3c9034304b8cb8206f418639708b5077ad1ce5 100644 (file)
@@ -1251,7 +1251,7 @@ impl NADecoder for AACDecoder {
 
         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())
     }
 }
 
index 42fbe8a708fe053d15d0bf20bcc27589c2bcb4be..9cc7dd4a79a536412c4356fd17f7866e30b1e685 100644 (file)
@@ -688,7 +688,7 @@ impl NADecoder for Atrac3Decoder {
 
         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())
     }
 }
 
index d485bdb6b00cb572f7bb91cdce916c7284ff9ebc..ba23148dddd77dfb7b9a77bd2079de31396a2120 100644 (file)
@@ -726,7 +726,7 @@ impl NADecoder for ClearVideoDecoder {
             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;
@@ -757,7 +757,7 @@ impl NADecoder for ClearVideoDecoder {
         } else {
             frm.set_frame_type(FrameType::P);
         }
-        Ok(Rc::new(RefCell::new(frm)))
+        Ok(frm.into_ref())
     }
 }
 
index 132d4c3a60755e91548643f05d9d8287e10d0b12..00f5c3158151082b7457a20c5fb0a6b9c67868cc 100644 (file)
@@ -51,7 +51,7 @@ impl NADecoder for PCMDecoder {
             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)
         }
index 05e6816588df5047d708a0a20ad06e0c2067caf0..88b525e94cc6bc0768c91b00534204c9fb6bb6f1 100644 (file)
@@ -729,7 +729,7 @@ impl NADecoder for SiproDecoder {
 
         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())
     }
 }
 
index f17b43106229dc75d552ac405b6248c0fc688c8d..a4d457024a7b76e9f031e5a8da929f01a8eccc5a 100644 (file)
@@ -1235,7 +1235,7 @@ impl NADecoder for AudioDecoder {
 
         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())
     }
 }
 
index d97850b7c7b59cd5a8f9d28975f10f842e0cee7d..d219ee45967b180e9174b8b01d1b9c6d44d23022 100644 (file)
@@ -1,8 +1,6 @@
 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::*;
@@ -653,7 +651,7 @@ pub struct NAFrame {
     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);
@@ -687,6 +685,8 @@ impl NAFrame {
     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 {
index 2c16b3dadb3fc155e1accc4cebb3aedf11c12fb2..538a0ef82edf8ffd272495e6aad72270f3f45a65 100644 (file)
@@ -6,8 +6,7 @@ use crate::demuxers::*;
 //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();
@@ -90,8 +89,7 @@ fn write_pgmyuv(pfx: &str, strno: usize, num: u64, frmref: NAFrameRef) {
     }
 }
 
-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();
@@ -122,8 +120,7 @@ fn write_palppm(pfx: &str, strno: usize, num: u64, frmref: NAFrameRef) {
     }
 }
 
-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() {
@@ -237,10 +234,10 @@ pub fn test_file_decoding(demuxer: &str, name: &str, limit: Option<u64>,
         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() {
@@ -300,8 +297,7 @@ pub fn test_decode_audio(demuxer: &str, name: &str, limit: Option<u64>, audio_pf
         }
         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();
index 0104b306d9e8f622743537f4e3f104f5f5469fbc..9ff5ed93cecb63987d5364de3b90a5d8697c2121 100644 (file)
@@ -158,7 +158,7 @@ impl NADecoder for DuckADPCMDecoder {
             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)
         }
index 2c8e5d273933c901763836beb5d8dcd894f2afda..b8edd4e383050ce4b5bbdeaaec3fdd91987151df 100644 (file)
@@ -578,7 +578,7 @@ impl NADecoder for TM1Decoder {
             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;
@@ -656,7 +656,7 @@ impl NADecoder for TM1Decoder {
         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())
     }
 }
 
index e8225450a52b2e17398c7652f89905d380ccbd23..1c91640883b7ca4a862351b2ad5e7dc0c68f190c 100644 (file)
@@ -585,7 +585,7 @@ impl NADecoder for TM2Decoder {
         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())
     }
 }
 
index fce5fb359b3a9bd68f0979ed4375cdb990958b87..560ab6a969d213e69bbe6e1f8b6f65ad75353415 100644 (file)
@@ -688,7 +688,7 @@ impl NADecoder for TM2XDecoder {
         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())
     }
 }
 
index 12548ef302719698dff09b1ab6d3cf80f6d19746..a96d6099085464d3170564701baf2b637b8df85c 100644 (file)
@@ -80,7 +80,7 @@ impl NADecoder for TMRTDecoder {
         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())
     }
 }
 
index 79b8745b17cdd529017e9e2e74b240eb5bc39355..6712ce2615bdf82d03fd9002e5e23c3181adfa18 100644 (file)
@@ -220,7 +220,7 @@ impl NADecoder for BMVVideoDecoder {
         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())
     }
 }
 
@@ -294,7 +294,7 @@ impl NADecoder for BMVAudioDecoder {
             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)
         }
index 687ca237c09a8420a8258dffdf9e17e442ed7b1e..2cd0b2b8868797cf83fcaaddc333943368c88ab5 100644 (file)
@@ -504,7 +504,7 @@ impl NADecoder for BMV3VideoDecoder {
         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())
     }
 }
 
@@ -591,7 +591,7 @@ impl NADecoder for BMV3AudioDecoder {
             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)
         }
index cf7f7b13c1ff23425d8fb47063e5e7c5c519d7af..c7bdaf9ff6a44cf4940e0eda74d90f8c579b7500 100644 (file)
@@ -429,12 +429,12 @@ impl NADecoder for GremlinVideoDecoder {
             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 {
@@ -456,7 +456,7 @@ impl NADecoder for GremlinVideoDecoder {
         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())
     }
 }
 
@@ -545,7 +545,7 @@ impl NADecoder for GremlinAudioDecoder {
             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)
         }
index dc831c4fb8200834e1eb8e2af4fded93f25c6ebe..a1e71ed7b7385f355080aadc1d7b38c126d7a5c8 100644 (file)
@@ -264,7 +264,7 @@ impl NADecoder for VMDVideoDecoder {
         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())
     }
 }
 
@@ -433,7 +433,7 @@ impl NADecoder for VMDAudioDecoder {
             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)
         }
index ceac0d1062e33de26dbeb77b7bab7fc33b73d9e2..5f1390aa6b69445ce24fe232fad5537ad94b92bd 100644 (file)
@@ -920,7 +920,7 @@ impl NADecoder for IMCDecoder {
 
         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())
     }
 }
 
index 5ea8b3f5ad5666e53333c9f104890e835f34d0dc..d110dc89496eeb5926847b7ce4655b3254d6ea26 100644 (file)
@@ -343,7 +343,7 @@ impl NADecoder for Indeo2Decoder {
             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); }
@@ -356,7 +356,7 @@ impl NADecoder for Indeo2Decoder {
             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())
         }
     }
 }
index ebf941c6be9c249ea26dac252b9fa1692ef7597a..eaef84b2eb31b76aeb7e0ee75bd98d76b701af98 100644 (file)
@@ -783,7 +783,7 @@ impl NADecoder for Indeo3Decoder {
         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())
     }
 }
 
index 07f6d67fa9e5faa1d6c8822a55eee3c311770fa8..9ee3a411666d5e2f99e13e1572507ea545ca398f 100644 (file)
@@ -453,7 +453,7 @@ impl NADecoder for Indeo4Decoder {
         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())
     }
 }
 
index 1f770814c4b5fbb18597cfc4207fabfeb71deaa6..faa3107fd2df864b49161399828399b245731866 100644 (file)
@@ -528,7 +528,7 @@ impl NADecoder for Indeo5Decoder {
         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())
     }
 }
 
index 3b95c5fa8e4f52466e84323a1a1a27051e77f09d..7afee94ac602363a7964a2b0e818aa501d998876 100644 (file)
@@ -393,7 +393,7 @@ impl NADecoder for Intel263Decoder {
             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);
 
@@ -402,7 +402,7 @@ impl NADecoder for Intel263Decoder {
         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())
     }
 }
 
index b5fa2919b5e2f18aca6dbfad076082f37cc0e7b7..edeec468b352fe07b92b91150f6c7c9dec04785a 100644 (file)
@@ -1,6 +1,6 @@
 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::*;
index 60d42a4fb8a9d5a0d1c05809d2771fd77711f2d4..d57f8bdaf337b872e622323e1708a25792ca91de 100644 (file)
@@ -1933,7 +1933,7 @@ impl NADecoder for Bink2Decoder {
 
         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())
     }
 }
 
index 182c6c91f2a5d7e370f429e6d3dda1d895f58be6..3d7568c538c86e10aeea10533358523549222b13 100644 (file)
@@ -268,7 +268,7 @@ impl NADecoder for BinkAudioDecoder {
             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)
         }
index 2f95ed6b58c1add29a8d1f437e1043663c06e56e..3a0b4961e43feabcd63bbdd9294f6ec3726f5246 100644 (file)
@@ -1260,7 +1260,7 @@ println!("decode frame {} b={} i={}", pkt.get_pts().unwrap(), self.is_ver_b, sel
 
         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())
     }
 }
 
index bc27ab0b31a6616d5761c6cf97d1d319f5d911ca..9ed2a9fa7511e1d9c28fc27d606e77f2c66def6c 100644 (file)
@@ -465,7 +465,7 @@ impl NADecoder for SmackerVideoDecoder {
         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())
     }
 }
 
@@ -514,7 +514,7 @@ impl NADecoder for SmackerAudioDecoder {
             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()?;
@@ -586,7 +586,7 @@ impl NADecoder for SmackerAudioDecoder {
             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)
         }
index 6303724c2ff1edcfdeecf29faca6c5a12f233e54..b954bd7c7d58eb94f48592ccda5743fa24ac9b60 100644 (file)
@@ -668,7 +668,7 @@ impl NADecoder for CookDecoder {
 
         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())
     }
 }
 
index 38d76c3764f8e1dd2107d2ba7ccb3ef2b6cc69d1..07d234a6dddf4823bdbd90a4516c4cf26cc84552 100644 (file)
@@ -305,7 +305,7 @@ impl NADecoder for RA144Decoder {
 
         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())
     }
 }
 
index 142cf2ae1cec294242c637382b9d514dcef5d268..dbb7f90c444c0f97d2ca581ec6c770ddd9ddce84 100644 (file)
@@ -195,7 +195,7 @@ impl NADecoder for RA288Decoder {
 
         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())
     }
 }
 
index 307436c9ed03743a7158a5f88761c28383e7cba7..b8a06d140f1ecd67ba987689b87430c699ed7af9 100644 (file)
@@ -417,7 +417,7 @@ impl NADecoder for RALFDecoder {
 
                 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();
         }
@@ -465,7 +465,7 @@ impl NADecoder for RALFDecoder {
 
         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())
     }
 }
 
index 1d93a012433a54cb12f2a446e9bb1de005926231..733b6776288f53faeb1b5554bf1d1e75e50794b9 100644 (file)
@@ -447,7 +447,7 @@ println!("???");
         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())
     }
 }
 
index 36ccc67846ce9dd1d806f9a9542d311ce84c91da..44386f6967b4c0a90cc8e11d77920ea9ce8fc2eb 100644 (file)
@@ -501,7 +501,7 @@ impl NADecoder for RealVideo20Decoder {
         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())
     }
 }
 
index a2d7090cc19098ddefdc98b92b4c0b5d6510035a..7ec3cb23e03bd158d8313a23424f1de0f8ee9a1c 100644 (file)
@@ -153,7 +153,7 @@ println!("???");
         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())
     }
 }
 
index eb45164401e6ed50127968d7f9549f995ba0e793..482d85680036ee0d8134f11d3c6c7bf444e85d1d 100644 (file)
@@ -346,7 +346,7 @@ println!("???");
         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())
     }
 }
 
index 4adbe394406c2b25be546fbcfb153a453998d9b4..82dce045f87d255871f6ac06122631c5691fd6cf 100644 (file)
@@ -1458,7 +1458,7 @@ println!("???");
         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())
     }
 }