make decoders Send-able
authorKostya Shishkov <kostya.shishkov@gmail.com>
Wed, 27 Nov 2019 07:20:16 +0000 (08:20 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Wed, 27 Nov 2019 07:20:16 +0000 (08:20 +0100)
43 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/codecs/mod.rs
nihav-duck/src/codecs/dkadpcm.rs
nihav-duck/src/codecs/on2avc.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-duck/src/codecs/vp3.rs
nihav-duck/src/codecs/vp5.rs
nihav-duck/src/codecs/vp6.rs
nihav-duck/src/codecs/vp7.rs
nihav-game/src/codecs/bmv.rs
nihav-game/src/codecs/bmv3.rs
nihav-game/src/codecs/gremlinvideo.rs
nihav-game/src/codecs/midivid.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/rv3040.rs
nihav-realmedia/src/codecs/rv40.rs
nihav-realmedia/src/codecs/rv60.rs

index f24ba20e39a7c328bb03b7c3c27c3fcb39ef5368..c2ef76aab74c7e60806f701cb73b7cea56c0cca6 100644 (file)
@@ -1258,7 +1258,7 @@ impl NADecoder for AACDecoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(AACDecoder::new())
 }
 
index 86b23496d9c841c3bccc2da15bee91dfd18acf2e..9d416e2b812c03cde9e76dc9a688ae3dd0676eb2 100644 (file)
@@ -695,7 +695,7 @@ impl NADecoder for Atrac3Decoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(Atrac3Decoder::new())
 }
 
index 953e3c097004030ec5cfeab6943c6bdc48c6a029..c83666f869efedbd483fc9a527c59198f3f858fb 100644 (file)
@@ -705,11 +705,11 @@ impl NADecoder for ClearVideoDecoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(ClearVideoDecoder::new(false))
 }
 
-pub fn get_decoder_rm() -> Box<dyn NADecoder> {
+pub fn get_decoder_rm() -> Box<dyn NADecoder + Send> {
     Box::new(ClearVideoDecoder::new(true))
 }
 
index 32c8de0a0682891aae32ec0c02333c0e3ecbbe19..13eee09f9be01d6161b3dd0afe85af8a99befac5 100644 (file)
@@ -60,6 +60,6 @@ impl NADecoder for PCMDecoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(PCMDecoder::new())
 }
index 44f7942e2cea5706fb883a0ff63417e8d91db91e..ec70bf10262d713080eada53882531d4cd838e71 100644 (file)
@@ -736,7 +736,7 @@ impl NADecoder for SiproDecoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(SiproDecoder::new())
 }
 
index d6f214403323472bbfcbf45363f575e04c7224de..4675c05cad7ac6cb5bd748f79851ae952a209e50 100644 (file)
@@ -1240,7 +1240,7 @@ impl NADecoder for AudioDecoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(AudioDecoder::new())
 }
 
index 7ce056db4143aa455420d6d39dd010a176b91897..9c59c40184029358038e1a87bdcc25910503ae28 100644 (file)
@@ -261,7 +261,7 @@ pub trait NADecoder {
 #[derive(Clone,Copy)]
 pub struct DecoderInfo {
     pub name: &'static str,
-    pub get_decoder: fn () -> Box<dyn NADecoder>,
+    pub get_decoder: fn () -> Box<dyn NADecoder + Send>,
 }
 
 #[cfg(any(feature="blockdsp"))]
@@ -282,7 +282,7 @@ impl RegisteredDecoders {
     pub fn add_decoder(&mut self, dec: DecoderInfo) {
         self.decs.push(dec);
     }
-    pub fn find_decoder(&self, name: &str) -> Option<fn () -> Box<dyn NADecoder>> {
+    pub fn find_decoder(&self, name: &str) -> Option<fn () -> Box<dyn NADecoder + Send>> {
         for &dec in self.decs.iter() {
             if dec.name == name {
                 return Some(dec.get_decoder);
index 755d0b7e020ba3f2295251e13d155658263089a1..92e243537b5830d112ef3b7918562491332be814 100644 (file)
@@ -167,11 +167,11 @@ impl NADecoder for DuckADPCMDecoder {
     }
 }
 
-pub fn get_decoder_dk3() -> Box<dyn NADecoder> {
+pub fn get_decoder_dk3() -> Box<dyn NADecoder + Send> {
     Box::new(DuckADPCMDecoder::new(true))
 }
 
-pub fn get_decoder_dk4() -> Box<dyn NADecoder> {
+pub fn get_decoder_dk4() -> Box<dyn NADecoder + Send> {
     Box::new(DuckADPCMDecoder::new(false))
 }
 
index 97c73c123b57cc1f867f75858f3422300dacaf68..8740389785dd04010f3b8eee2503acd3e797dea9 100644 (file)
@@ -1048,11 +1048,11 @@ impl NADecoder for AVCDecoder {
     }
 }
 
-pub fn get_decoder_500() -> Box<dyn NADecoder> {
+pub fn get_decoder_500() -> Box<dyn NADecoder + Send> {
     Box::new(AVCDecoder::new(500))
 }
 
-pub fn get_decoder_501() -> Box<dyn NADecoder> {
+pub fn get_decoder_501() -> Box<dyn NADecoder + Send> {
     Box::new(AVCDecoder::new(501))
 }
 
index d7bc8c824640de1b7f976b02dd8e4c1ee8ef061c..4af75d1f664770de70ec7b843c0d7a2878035406 100644 (file)
@@ -659,7 +659,7 @@ impl NADecoder for TM1Decoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(TM1Decoder::new())
 }
 
index c222c44c5aed1b27ae01c0e40f0461a89a5d6339..d6b4732402c297590e470f79d183cefc4a7aab06 100644 (file)
@@ -581,7 +581,7 @@ impl NADecoder for TM2Decoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(TM2Decoder::new())
 }
 
index 584ee43218ebbc04729d0b08434d4ee89a789700..0effb138abba5849c9b6b9b0f3cc0dbf454a9e29 100644 (file)
@@ -692,7 +692,7 @@ impl NADecoder for TM2XDecoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(TM2XDecoder::new())
 }
 
index 97ad981aa61127d8d6fbe1eba9af827e0d083d42..7119061288e1b1c14802c90d9ee81e690e90bfa2 100644 (file)
@@ -84,7 +84,7 @@ impl NADecoder for TMRTDecoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(TMRTDecoder::new())
 }
 
index b56c62c59eed90510a5710462c5c03e30be16616..acb783f21d9143eecb029ec0132116daf98ea9ea 100644 (file)
@@ -1848,11 +1848,11 @@ impl NADecoder for VP34Decoder {
     }
 }
 
-pub fn get_decoder_vp3() -> Box<NADecoder> {
+pub fn get_decoder_vp3() -> Box<NADecoder + Send> {
     Box::new(VP34Decoder::new(3))
 }
 
-pub fn get_decoder_vp4() -> Box<NADecoder> {
+pub fn get_decoder_vp4() -> Box<NADecoder + Send> {
     Box::new(VP34Decoder::new(4))
 }
 
index d13ffabfbd1376af8db95b38a1fa472a28cf511d..0c901be35764ba173a9f022645e0560c6289d678 100644 (file)
@@ -272,7 +272,7 @@ impl NADecoder for VP5Decoder {
     }
 }
 
-pub fn get_decoder() -> Box<NADecoder> {
+pub fn get_decoder() -> Box<NADecoder + Send> {
     Box::new(VP5Decoder::new())
 }
 
index 803ce5ee417ead96dfddfb7253187c03eba9ac34..26c4dc5eda1b5053567f5a7dd4e61ad5a412bd6a 100644 (file)
@@ -706,11 +706,11 @@ impl NADecoder for VP6Decoder {
     }
 }
 
-pub fn get_decoder_vp6() -> Box<NADecoder> {
+pub fn get_decoder_vp6() -> Box<NADecoder + Send> {
     Box::new(VP6Decoder::new(false))
 }
 
-pub fn get_decoder_vp6_alpha() -> Box<NADecoder> {
+pub fn get_decoder_vp6_alpha() -> Box<NADecoder + Send> {
     Box::new(VP6Decoder::new(true))
 }
 
index 4fc7deaaa526a1414b4c531cdc92736f3dd2848b..a4d361c2664ea57eee9da55c4cb0d8e4579e4c5c 100644 (file)
@@ -1401,7 +1401,7 @@ impl NADecoder for VP7Decoder {
     }
 }
 
-pub fn get_decoder() -> Box<NADecoder> {
+pub fn get_decoder() -> Box<NADecoder + Send> {
     Box::new(VP7Decoder::new())
 }
 
index 4417fb79057b07671bc47a71f94ccd3bbe09d88e..1ff32bb88899d6f76c0cd109a0d3a2781505bd4a 100644 (file)
@@ -221,7 +221,7 @@ impl NADecoder for BMVVideoDecoder {
 }
 
 
-pub fn get_decoder_video() -> Box<dyn NADecoder> {
+pub fn get_decoder_video() -> Box<dyn NADecoder + Send> {
     Box::new(BMVVideoDecoder::new())
 }
 
@@ -299,7 +299,7 @@ impl NADecoder for BMVAudioDecoder {
     }
 }
 
-pub fn get_decoder_audio() -> Box<dyn NADecoder> {
+pub fn get_decoder_audio() -> Box<dyn NADecoder + Send> {
     Box::new(BMVAudioDecoder::new())
 }
 
index ae1419a709797cdd8f6800fadf7e1fbe5cf00841..8e71b8b9c35a49a4d5cab729fdd04c2c5c0f8ee8 100644 (file)
@@ -504,7 +504,7 @@ impl NADecoder for BMV3VideoDecoder {
 }
 
 
-pub fn get_decoder_video() -> Box<dyn NADecoder> {
+pub fn get_decoder_video() -> Box<dyn NADecoder + Send> {
     Box::new(BMV3VideoDecoder::new())
 }
 
@@ -595,7 +595,7 @@ impl NADecoder for BMV3AudioDecoder {
     }
 }
 
-pub fn get_decoder_audio() -> Box<dyn NADecoder> {
+pub fn get_decoder_audio() -> Box<dyn NADecoder + Send> {
     Box::new(BMV3AudioDecoder::new())
 }
 
index 67be656be3596fdab79aeb0d7cfabbe00668241c..0ec38619f01aec0af0f09364a6e0740b42999fa9 100644 (file)
@@ -460,7 +460,7 @@ impl NADecoder for GremlinVideoDecoder {
     }
 }
 
-pub fn get_decoder_video() -> Box<dyn NADecoder> {
+pub fn get_decoder_video() -> Box<dyn NADecoder + Send> {
     Box::new(GremlinVideoDecoder::new())
 }
 
@@ -554,7 +554,7 @@ impl NADecoder for GremlinAudioDecoder {
     }
 }
 
-pub fn get_decoder_audio() -> Box<dyn NADecoder> {
+pub fn get_decoder_audio() -> Box<dyn NADecoder + Send> {
     Box::new(GremlinAudioDecoder::new())
 }
 
index 037248fc8c11630e0fd96d157cc824bdad247cfe..2a04a9e3194e614a61bb3d88e71f6310652db5d1 100644 (file)
@@ -175,7 +175,7 @@ impl NADecoder for MidividDecoder {
 }
 
 
-pub fn get_decoder_video() -> Box<dyn NADecoder> {
+pub fn get_decoder_video() -> Box<dyn NADecoder + Send> {
     Box::new(MidividDecoder::new())
 }
 
index abcb0af7c05915ab305485d9ec0b765b038f917a..a228707bb0fce5d36b39bd66a93c37dd46eb9156 100644 (file)
@@ -270,7 +270,7 @@ impl NADecoder for VMDVideoDecoder {
 }
 
 
-pub fn get_decoder_video() -> Box<dyn NADecoder> {
+pub fn get_decoder_video() -> Box<dyn NADecoder + Send> {
     Box::new(VMDVideoDecoder::new())
 }
 
@@ -443,7 +443,7 @@ impl NADecoder for VMDAudioDecoder {
     }
 }
 
-pub fn get_decoder_audio() -> Box<dyn NADecoder> {
+pub fn get_decoder_audio() -> Box<dyn NADecoder + Send> {
     Box::new(VMDAudioDecoder::new())
 }
 
index 6840800f4a3292e02e76a42b4e3aa6a235a03222..f8a4f28fcb5acb0a7ffcc39212314b38877b37a6 100644 (file)
@@ -926,11 +926,11 @@ impl NADecoder for IMCDecoder {
     }
 }
 
-pub fn get_decoder_imc() -> Box<dyn NADecoder> {
+pub fn get_decoder_imc() -> Box<dyn NADecoder + Send> {
     Box::new(IMCDecoder::new(true))
 }
 
-pub fn get_decoder_iac() -> Box<dyn NADecoder> {
+pub fn get_decoder_iac() -> Box<dyn NADecoder + Send> {
     Box::new(IMCDecoder::new(false))
 }
 
index 56ec122594ce2f2e060a0d1c54d33329b6c8f1e9..58131c83f2b3414bf76a968d9847e50a4fc98ebb 100644 (file)
@@ -362,7 +362,7 @@ impl NADecoder for Indeo2Decoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(Indeo2Decoder::new())
 }
 
index 6e03cb3b308da41ed49dc8b065d9c521fc696df0..2d79f63d9777096448ff2e27ace0b58b6ac53d50 100644 (file)
@@ -788,7 +788,7 @@ impl NADecoder for Indeo3Decoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(Indeo3Decoder::new())
 }
 
index 03918bed238c544604e0f43f346c1a12a07f1a3c..746e2ebda99f2524cb840293f2e24bc03e8643e9 100644 (file)
@@ -227,7 +227,7 @@ impl IndeoXParser for Indeo4Parser {
         Ok(BandHeader::new(plane_no, band_no, mb_size, blk_size, mv_mode == 1, inherit_mv, false, inherit_qd, quant, rvmap_idx, num_corr, corr_map, blk_cb, tr, txtype))
     }
 
-    fn decode_mb_info(&mut self, br: &mut BitReader, pic_hdr: &PictureHeader, band: &BandHeader, tile: &mut IVITile, ref_tile: Option<Ref<IVITile>>, mv_scale: u8) -> DecoderResult<()> {
+    fn decode_mb_info(&mut self, br: &mut BitReader, pic_hdr: &PictureHeader, band: &BandHeader, tile: &mut IVITile, ref_tile: Option<&IVITile>, mv_scale: u8) -> DecoderResult<()> {
         let mut mv_x = 0;
         let mut mv_y = 0;
         let mut mb_idx = 0;
@@ -761,7 +761,7 @@ const INDEO4_Q4_INTER: [&[u16; 16]; 5] = [
     &INDEO4_QUANT4X4_INTER[3], &INDEO4_QUANT4X4_INTER[4]
 ];
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(Indeo4Decoder::new())
 }
 
index 81111647d7d64d175cdc124f9bb9b62a29c54d8f..19107862f3afad069eef001b3c79649a7eae23ab 100644 (file)
@@ -264,7 +264,7 @@ impl IndeoXParser for Indeo5Parser {
         Ok(BandHeader::new(plane_no, band_no, self.mb_size[band_id], self.blk_size[band_id], self.is_hpel[band_id], inherit_mv, has_qdelta, inherit_qd, band_q, rvmap_idx, num_corr, corr_map, blk_cb, tr, txtype))
     }
 
-    fn decode_mb_info(&mut self, br: &mut BitReader, pic_hdr: &PictureHeader, band: &BandHeader, tile: &mut IVITile, ref_tile: Option<Ref<IVITile>>, mv_scale: u8) -> DecoderResult<()> {
+    fn decode_mb_info(&mut self, br: &mut BitReader, pic_hdr: &PictureHeader, band: &BandHeader, tile: &mut IVITile, ref_tile: Option<&IVITile>, mv_scale: u8) -> DecoderResult<()> {
         let mut mv_x = 0;
         let mut mv_y = 0;
         let band_id = if pic_hdr.luma_bands == 4 { band.band_no + 1 } else { 0 };
@@ -714,7 +714,7 @@ const INDEO5_QSCALE4_INTER: [u8; 24] = [
     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23
 ];
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(Indeo5Decoder::new())
 }
 
index d7302ce444aeac643fa46508eb89e679b5fa9407..b42b5d2617e8ba1659468c7b5f128b0e3d5839b4 100644 (file)
@@ -410,7 +410,7 @@ impl NADecoder for Intel263Decoder {
 }
 
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(Intel263Decoder::new())
 }
 
index cfb073f8baad7fe3231e68ab742bb31dc8b6bb99..dd43afa1b389a23ae5fa2227d72c088a543ff681 100644 (file)
@@ -1,9 +1,8 @@
 use std::mem;
-use std::rc::Rc;
-pub use std::cell::{Ref,RefCell};
 use nihav_core::io::bitreader::*;
 //use io::intcode::*;
 use nihav_core::codecs::*;
+use nihav_core::frame::NABufferRef;
 use super::ivi::*;
 use super::ividsp::*;
 
@@ -364,12 +363,12 @@ fn align(val: usize, bits: u8) -> usize {
 }
 
 impl FrameData {
-    fn new() -> Rc<RefCell<Self>> {
-        Rc::new(RefCell::new(FrameData {
+    fn new() -> NABufferRef<Self> {
+        NABufferRef::new(FrameData {
             plane_buf:      [Vec::new(), Vec::new(), Vec::new(), Vec::new()],
             plane_stride:   [0, 0, 0, 0],
             pic_hdr:        PictureHeader::new_null(IVIFrameType::Intra),
-        }))
+        })
     }
     fn realloc(&mut self, pic_hdr: &PictureHeader) -> DecoderResult<()> {
         let width  = align(pic_hdr.width,  6);
@@ -462,7 +461,7 @@ fn do_mc_b(dst: &mut [i16], dstride: usize, src1: &[i16], sstride1: usize, src2:
 pub trait IndeoXParser {
     fn decode_picture_header(&mut self, br: &mut BitReader) -> DecoderResult<PictureHeader>;
     fn decode_band_header(&mut self, br: &mut BitReader, pic_hdr: &PictureHeader, plane: usize, band: usize) -> DecoderResult<BandHeader>;
-    fn decode_mb_info(&mut self, br: &mut BitReader, pic_hdr: &PictureHeader, band_hdr: &BandHeader, tile: &mut IVITile, ref_tile: Option<Ref<IVITile>>, mv_scale: u8) -> DecoderResult<()>;
+    fn decode_mb_info(&mut self, br: &mut BitReader, pic_hdr: &PictureHeader, band_hdr: &BandHeader, tile: &mut IVITile, ref_tile: Option<&IVITile>, mv_scale: u8) -> DecoderResult<()>;
     fn recombine_plane(&mut self, src: &[i16], sstride: usize, dst: &mut [u8], dstride: usize, w: usize, h: usize);
 }
 
@@ -470,7 +469,7 @@ const MISSING_REF: usize = 42;
 
 pub struct IVIDecoder {
     ftype:      IVIFrameType,
-    frames:     [Rc<RefCell<FrameData>>; 4],
+    frames:     [NABufferRef<FrameData>; 4],
     cur_frame:  usize,
     prev_frame: usize,
     next_frame: usize,
@@ -482,7 +481,7 @@ pub struct IVIDecoder {
     bref:       Option<NABufferType>,
 
     bands:      Vec<BandHeader>,
-    tiles:      Vec<Rc<RefCell<IVITile>>>,
+    tiles:      Vec<NABufferRef<IVITile>>,
     num_tiles:  [[usize; 4]; 4],
     tile_start: [[usize; 4]; 4],
 }
@@ -539,7 +538,7 @@ impl IVIDecoder {
                     while x < band_w {
                         let cur_w = if x + tile_w <= band_w { tile_w } else { band_w - x };
                         let tile = IVITile::new(band_xoff + x, band_yoff + y, cur_w, cur_h);
-                        self.tiles.push(Rc::new(RefCell::new(tile)));
+                        self.tiles.push(NABufferRef::new(tile));
                         self.num_tiles[plane][band] += 1;
                         tstart += 1;
                         x += tile_w;
@@ -575,7 +574,7 @@ impl IVIDecoder {
         };
         for tile_no in tstart..tend {
             {
-                let mut tile = self.tiles[tile_no].borrow_mut();
+                let mut tile = self.tiles[tile_no].clone();
                 let mb_w = (tile.w + mb_size - 1) / mb_size;
                 let mb_h = (tile.h + mb_size - 1) / mb_size;
                 tile.mb_w = mb_w;
@@ -598,8 +597,8 @@ impl IVIDecoder {
                 validate!(tile_end > br.tell());
                 validate!(tile_end <= br.tell() + (br.left() as usize));
                 {
-                    let mut tile = self.tiles[tile_no].borrow_mut();
-                    let ref_tile: Option<Ref<IVITile>>;
+                    let mut tile = self.tiles[tile_no].clone();
+                    let ref_tile: Option<&IVITile>;
                     let mv_scale;
                     if (plane_no == 0) && (band_no == 0) {
                         mv_scale = 0;
@@ -607,7 +606,7 @@ impl IVIDecoder {
                         mv_scale = (((self.bands[0].mb_size >> 3) as i8) - ((band.mb_size >> 3) as i8)) as u8;
                     }
                     if plane_no != 0 || band_no != 0 {
-                        let rtile = self.tiles[0].borrow();
+                        let rtile = &self.tiles[0];
                         if (tile.mb_w != rtile.mb_w) || (tile.mb_h != rtile.mb_h) {
                             ref_tile = None;
                         } else {
@@ -624,8 +623,8 @@ let skip_part = tile_end - br.tell();
 br.skip(skip_part as u32)?;
             } else {
                 {
-                    let mut tile = self.tiles[tile_no].borrow_mut();
-                    let ref_tile: Option<Ref<IVITile>>;
+                    let mut tile = self.tiles[tile_no].clone();
+                    let ref_tile: Option<&IVITile>;
                     let mv_scale;
                     if (plane_no == 0) && (band_no == 0) {
                         mv_scale = 0;
@@ -633,7 +632,7 @@ br.skip(skip_part as u32)?;
                         mv_scale = (((self.bands[0].mb_size >> 3) as i8) - ((band.mb_size >> 3) as i8)) as u8;
                     }
                     if plane_no != 0 || band_no != 0 {
-                        let rtile = self.tiles[0].borrow();
+                        let rtile = &self.tiles[0];
                         if (tile.mb_w != rtile.mb_w) || (tile.mb_h != rtile.mb_h) {
                             ref_tile = None;
                         } else {
@@ -671,8 +670,8 @@ br.skip(skip_part as u32)?;
     fn decode_tile(&mut self, br: &mut BitReader, band: &BandHeader, tile_no: usize, tr: &TrFunc, transform_dc: &TrFuncDC) -> DecoderResult<()> {
         let mut mb_idx = 0;
         let mut prev_dc: i32 = 0;
-        let mut tile = self.tiles[tile_no].borrow_mut();
-        let mut frame = self.frames[self.cur_frame].borrow_mut();
+        let mut tile = self.tiles[tile_no].clone();
+        let mut frame = self.frames[self.cur_frame].clone();
 
         let stride = frame.plane_stride[band.plane_no];
         let mut dstidx = tile.pos_x + tile.pos_y * stride;
@@ -700,7 +699,7 @@ br.skip(skip_part as u32)?;
                                 } else {
                                     idx = self.next_frame;
                                 }
-                                let pf = self.frames[idx].borrow();
+                                let pf = &self.frames[idx];
                                 do_mc(&mut dst[dstidx + boff..], stride,
                                       &pf.plane_buf[band.plane_no], pf.plane_stride[band.plane_no],
                                       pos_x + mb_x * band.mb_size + (blk_no & 1) * band.blk_size,
@@ -708,8 +707,8 @@ br.skip(skip_part as u32)?;
                                       pos_x, pos_x + tile_w, pos_y, pos_y + tile_h,
                                       mb.mv_x, mb.mv_y, band.halfpel, band.blk_size);
                             } else {
-                                let pf = self.frames[self.prev_frame].borrow();
-                                let nf = self.frames[self.next_frame].borrow();
+                                let pf = &self.frames[self.prev_frame];
+                                let nf = &self.frames[self.next_frame];
                                 do_mc_b(&mut dst[dstidx + boff..], stride,
                                       &pf.plane_buf[band.plane_no], pf.plane_stride[band.plane_no],
                                       &nf.plane_buf[band.plane_no], nf.plane_stride[band.plane_no],
@@ -755,7 +754,7 @@ br.skip(skip_part as u32)?;
                             } else {
                                 idx = self.next_frame;
                             }
-                            let pf = self.frames[idx].borrow();
+                            let pf = &self.frames[idx];
                             do_mc(&mut dst[dstidx + mb_x * band.blk_size..], stride,
                                   &pf.plane_buf[band.plane_no], pf.plane_stride[band.plane_no],
                                   pos_x + mb_x * band.mb_size,
@@ -763,8 +762,8 @@ br.skip(skip_part as u32)?;
                                   pos_x, pos_x + tile_w, pos_y, pos_y + tile_h,
                                   mb.mv_x, mb.mv_y, band.halfpel, band.blk_size);
                         } else {
-                            let pf = self.frames[self.prev_frame].borrow();
-                            let nf = self.frames[self.next_frame].borrow();
+                            let pf = &self.frames[self.prev_frame];
+                            let nf = &self.frames[self.next_frame];
                             do_mc_b(&mut dst[dstidx + mb_x * band.blk_size..], stride,
                                     &pf.plane_buf[band.plane_no], pf.plane_stride[band.plane_no],
                                     &nf.plane_buf[band.plane_no], nf.plane_stride[band.plane_no],
@@ -865,7 +864,7 @@ br.skip(skip_part as u32)?;
         vinfo.set_height(pic_hdr.height);
         let mut buftype = alloc_video_buffer(vinfo, 0)?;
         self.realloc(&pic_hdr)?;
-        self.frames[self.cur_frame].borrow_mut().realloc(&pic_hdr)?;
+        self.frames[self.cur_frame].realloc(&pic_hdr)?;
 
         for plane in 0..3 {
             let num_bands = if plane == 0 { pic_hdr.luma_bands } else { pic_hdr.chroma_bands };
@@ -873,7 +872,7 @@ br.skip(skip_part as u32)?;
                 self.decode_band(&pic_hdr, dec, br, plane, band)?;
             }
             if let NABufferType::Video(ref mut vb) = buftype {
-                let mut frame = self.frames[self.cur_frame].borrow_mut();
+                let mut frame = self.frames[self.cur_frame].clone();
                 if num_bands == 1 {
                     frame.fill_plane(vb, plane);
                 } else {
@@ -887,7 +886,7 @@ br.skip(skip_part as u32)?;
             }
         }
         if pic_hdr.transparent {
-            let mut frame = self.frames[self.cur_frame].borrow_mut();
+            let mut frame = self.frames[self.cur_frame].clone();
             let stride = frame.plane_stride[3];
             read_trans_band_header(br, pic_hdr.width, pic_hdr.height, &mut frame.plane_buf[3], stride)?;
             if let NABufferType::Video(ref mut vb) = buftype {
index e56bff7fc192bc6137e82eab93074c98221b37ea..1ce05ddd04d8c2e9df04f956cc2d52d3dd6a25c5 100644 (file)
@@ -1942,7 +1942,7 @@ impl NADecoder for Bink2Decoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(Bink2Decoder::new())
 }
 
index df0970e36c95f41661473004966df0ac58a102de..9695ee405ee16e887291c4fbb5f9ac167bfb29ce 100644 (file)
@@ -278,11 +278,11 @@ impl NADecoder for BinkAudioDecoder {
     }
 }
 
-pub fn get_decoder_dct() -> Box<dyn NADecoder> {
+pub fn get_decoder_dct() -> Box<dyn NADecoder + Send> {
     Box::new(BinkAudioDecoder::new(true))
 }
 
-pub fn get_decoder_rdft() -> Box<dyn NADecoder> {
+pub fn get_decoder_rdft() -> Box<dyn NADecoder + Send> {
     Box::new(BinkAudioDecoder::new(false))
 }
 
index 6d6c14acd78fbba82d31790187fc7bdbea6dc9b9..89f9cf89167e5dae59a09194bf8b1f3db597ad99 100644 (file)
@@ -1263,7 +1263,7 @@ println!("decode frame {} b={} i={}", pkt.get_pts().unwrap(), self.is_ver_b, sel
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(BinkDecoder::new())
 }
 
index 0faec8f093e7506892390c596dfd320a73174387..c22362b6b2a5721d265a639bcec3bc56a232f3c2 100644 (file)
@@ -469,7 +469,7 @@ impl NADecoder for SmackerVideoDecoder {
     }
 }
 
-pub fn get_decoder_video() -> Box<dyn NADecoder> {
+pub fn get_decoder_video() -> Box<dyn NADecoder + Send> {
     Box::new(SmackerVideoDecoder::new())
 }
 
@@ -595,7 +595,7 @@ impl NADecoder for SmackerAudioDecoder {
     }
 }
 
-pub fn get_decoder_audio() -> Box<dyn NADecoder> {
+pub fn get_decoder_audio() -> Box<dyn NADecoder + Send> {
     Box::new(SmackerAudioDecoder::new())
 }
 
index 74364fc74c6bf46528eda5fcb5f777f04b1be091..5d88be6b7ec5b751a80cc54ac90adbfb54aac81a 100644 (file)
@@ -676,7 +676,7 @@ impl NADecoder for CookDecoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(CookDecoder::new())
 }
 
index 2b70f04613fc2b5002e23b6797ee02cc6f48eeaf..394ab21adc2fc51becaa23af5203e14cf41e5df2 100644 (file)
@@ -311,7 +311,7 @@ impl NADecoder for RA144Decoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(RA144Decoder::new())
 }
 
index 251e47ce73b69086f5cd9e4e191ec9352e5e394e..20008bb305d36a1e2c01b82866a1ef602a185b39 100644 (file)
@@ -201,7 +201,7 @@ impl NADecoder for RA288Decoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(RA288Decoder::new())
 }
 
index c5a0f7fabe5266e6c650abfd911ea51d9561ba20..b3cce732907b9fe42bddd5cdce45937f62069c82 100644 (file)
@@ -471,7 +471,7 @@ impl NADecoder for RALFDecoder {
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(RALFDecoder::new())
 }
 
index 9184b5718b5c735a73d42c0c96f1f0512264fe8c..2426cd8f2c0cc7a18f54be6223e18063e4fa409d 100644 (file)
@@ -455,7 +455,7 @@ println!("???");
 }
 
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(RealVideo10Decoder::new())
 }
 
index b312a128c8c4e5e4d0e60562fcb127e1185b4248..1db190f5bc2ae0387cef5e059ba2278da967348b 100644 (file)
@@ -519,7 +519,7 @@ const H263_MBB: &[MBB; 7] = &[
     MBB{ blocks: 65536, bits: 14 },
 ];
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(RealVideo20Decoder::new())
 }
 
index 8c1141311a4265e2a361bc809f80c30ad0b88e5e..6da3fe2011cbece534e3c3c510cfcf68330343d0 100644 (file)
@@ -164,7 +164,7 @@ println!("???");
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(RealVideo30Decoder::new())
 }
 
index d19e3fe5c520805d8ae760e84da98ec7b78b7b4d..39549eb4b31358ebb9816b2485f137e5b7af4962 100644 (file)
@@ -679,13 +679,13 @@ fn decode_mv(br: &mut BitReader) -> DecoderResult<MV> {
     Ok(MV{ x, y })
 }
 
-fn do_mc_16x16(dsp: &Box<dyn RV34DSP>, buf: &mut NAVideoBuffer<u8>, prevbuf: &NAVideoBuffer<u8>, mb_x: usize, mb_y: usize, mv: MV, avg: bool) {
+fn do_mc_16x16(dsp: &Box<dyn RV34DSP + Send>, buf: &mut NAVideoBuffer<u8>, prevbuf: &NAVideoBuffer<u8>, mb_x: usize, mb_y: usize, mv: MV, avg: bool) {
     dsp.do_luma_mc  (buf, prevbuf, mb_x * 16, mb_y * 16,    mv, true, avg);
     dsp.do_chroma_mc(buf, prevbuf, mb_x *  8, mb_y *  8, 1, mv, true, avg);
     dsp.do_chroma_mc(buf, prevbuf, mb_x *  8, mb_y *  8, 2, mv, true, avg);
 }
 
-fn do_mc_8x8(dsp: &Box<dyn RV34DSP>, buf: &mut NAVideoBuffer<u8>, prevbuf: &NAVideoBuffer<u8>, mb_x: usize, xoff: usize, mb_y: usize, yoff: usize, mv: MV, avg: bool) {
+fn do_mc_8x8(dsp: &Box<dyn RV34DSP + Send>, buf: &mut NAVideoBuffer<u8>, prevbuf: &NAVideoBuffer<u8>, mb_x: usize, xoff: usize, mb_y: usize, yoff: usize, mv: MV, avg: bool) {
     dsp.do_luma_mc  (buf, prevbuf, mb_x * 16 + xoff * 8, mb_y * 16 + yoff * 8,    mv, false, avg);
     dsp.do_chroma_mc(buf, prevbuf, mb_x *  8 + xoff * 4, mb_y *  8 + yoff * 4, 1, mv, false, avg);
     dsp.do_chroma_mc(buf, prevbuf, mb_x *  8 + xoff * 4, mb_y *  8 + yoff * 4, 2, mv, false, avg);
@@ -717,7 +717,7 @@ fn do_avg(cdsp: &RV34CommonDSP, buf: &mut NAVideoBuffer<u8>, avg_buf: &NAVideoBu
 pub struct RV34Decoder {
     is_rv30:    bool,
     coderead:   RV34Codes,
-    dsp:        Box<dyn RV34DSP>,
+    dsp:        Box<dyn RV34DSP + Send>,
     cdsp:       RV34CommonDSP,
     width:      usize,
     height:     usize,
@@ -735,7 +735,7 @@ pub struct RV34Decoder {
 }
 
 impl RV34Decoder {
-    pub fn new(is_rv30: bool, dsp: Box<dyn RV34DSP>) -> Self {
+    pub fn new(is_rv30: bool, dsp: Box<dyn RV34DSP + Send>) -> Self {
         let tmp_vinfo = NAVideoInfo::new(16, 16, false, YUV420_FORMAT);
         let vt = alloc_video_buffer(tmp_vinfo, 4).unwrap();
         let vb = vt.get_vbuf();
index bd1f75bc45482a0875e757a33c304365f253ed48..82f75f25c5dabf362dca243ef27eb8cf7bbe9e7a 100644 (file)
@@ -357,7 +357,7 @@ println!("???");
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(RealVideo40Decoder::new())
 }
 
index 521025dae75b2bbbe9a93044d1d614c0cd8d7cf4..9fee64636d25a4b490807910dc101b892b171676 100644 (file)
@@ -1520,7 +1520,7 @@ println!("???");
     }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(RealVideo60Decoder::new())
 }