aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2019-04-29 13:02:12 +0200
committerKostya Shishkov <kostya.shishkov@gmail.com>2019-04-29 13:02:12 +0200
commit2422d9699cd56cbb86ac32b3e8dd026e20a89db5 (patch)
treece89fa9df27f1fb2ee52574f9b7b7d90a7739f23
parentcd830591a8770b4a56ce9b938574adcee3ed33f5 (diff)
downloadnihav-2422d9699cd56cbb86ac32b3e8dd026e20a89db5.tar.gz
switch NACodecInfo to Arc
-rw-r--r--nihav-commonfmt/src/codecs/aac.rs6
-rw-r--r--nihav-commonfmt/src/codecs/atrac3.rs6
-rw-r--r--nihav-commonfmt/src/codecs/clearvideo.rs10
-rw-r--r--nihav-commonfmt/src/codecs/pcm.rs4
-rw-r--r--nihav-commonfmt/src/codecs/sipro.rs6
-rw-r--r--nihav-commonfmt/src/codecs/ts102366.rs6
-rw-r--r--nihav-core/src/codecs/mod.rs3
-rw-r--r--nihav-core/src/frame.rs38
-rw-r--r--nihav-duck/src/codecs/dkadpcm.rs2
-rw-r--r--nihav-duck/src/codecs/truemotion1.rs6
-rw-r--r--nihav-duck/src/codecs/truemotion2.rs6
-rw-r--r--nihav-duck/src/codecs/truemotion2x.rs6
-rw-r--r--nihav-duck/src/codecs/truemotionrt.rs6
-rw-r--r--nihav-game/src/codecs/bmv.rs11
-rw-r--r--nihav-game/src/codecs/bmv3.rs11
-rw-r--r--nihav-game/src/codecs/gremlinvideo.rs13
-rw-r--r--nihav-game/src/codecs/vmd.rs10
-rw-r--r--nihav-indeo/src/codecs/imc.rs6
-rw-r--r--nihav-indeo/src/codecs/indeo2.rs10
-rw-r--r--nihav-indeo/src/codecs/indeo3.rs10
-rw-r--r--nihav-indeo/src/codecs/indeo4.rs8
-rw-r--r--nihav-indeo/src/codecs/indeo5.rs8
-rw-r--r--nihav-indeo/src/codecs/intel263.rs10
-rw-r--r--nihav-rad/src/codecs/bink2.rs6
-rw-r--r--nihav-rad/src/codecs/binkaud.rs2
-rw-r--r--nihav-rad/src/codecs/binkvid.rs6
-rw-r--r--nihav-rad/src/codecs/smacker.rs12
-rw-r--r--nihav-realmedia/src/codecs/cook.rs6
-rw-r--r--nihav-realmedia/src/codecs/ra144.rs6
-rw-r--r--nihav-realmedia/src/codecs/ra288.rs6
-rw-r--r--nihav-realmedia/src/codecs/ralf.rs6
-rw-r--r--nihav-realmedia/src/codecs/rv10.rs10
-rw-r--r--nihav-realmedia/src/codecs/rv20.rs10
-rw-r--r--nihav-realmedia/src/codecs/rv30.rs10
-rw-r--r--nihav-realmedia/src/codecs/rv40.rs10
-rw-r--r--nihav-realmedia/src/codecs/rv60.rs10
36 files changed, 128 insertions, 174 deletions
diff --git a/nihav-commonfmt/src/codecs/aac.rs b/nihav-commonfmt/src/codecs/aac.rs
index 8232e07..412bc9c 100644
--- a/nihav-commonfmt/src/codecs/aac.rs
+++ b/nihav-commonfmt/src/codecs/aac.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats::*;
use nihav_core::frame::*;
use nihav_core::codecs::*;
@@ -1107,7 +1105,7 @@ impl DSP {
}
struct AACDecoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
chmap: NAChannelMap,
m4ainfo: M4AInfo,
pairs: Vec<ChannelPair>,
@@ -1205,7 +1203,7 @@ impl AACDecoder {
}
impl NADecoder for AACDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(_) = info.get_properties() {
let edata = info.get_extradata().unwrap();
validate!(edata.len() >= 2);
diff --git a/nihav-commonfmt/src/codecs/atrac3.rs b/nihav-commonfmt/src/codecs/atrac3.rs
index 7b543bf..42fbe8a 100644
--- a/nihav-commonfmt/src/codecs/atrac3.rs
+++ b/nihav-commonfmt/src/codecs/atrac3.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats::*;
use nihav_core::frame::*;
use nihav_core::codecs::*;
@@ -387,7 +385,7 @@ impl DSP {
}
struct Atrac3Decoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
channels: usize,
chmap: NAChannelMap,
samples: usize,
@@ -555,7 +553,7 @@ fn interp(a: f32, b: f32, pos: usize) -> f32 {
}
impl NADecoder for Atrac3Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
self.info = info.clone();
let edata = info.get_extradata().unwrap();
diff --git a/nihav-commonfmt/src/codecs/clearvideo.rs b/nihav-commonfmt/src/codecs/clearvideo.rs
index 3c3ae9a..d485bdb 100644
--- a/nihav-commonfmt/src/codecs/clearvideo.rs
+++ b/nihav-commonfmt/src/codecs/clearvideo.rs
@@ -1,5 +1,3 @@
-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::*;
@@ -430,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,
@@ -530,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{};
@@ -683,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();
@@ -691,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?
diff --git a/nihav-commonfmt/src/codecs/pcm.rs b/nihav-commonfmt/src/codecs/pcm.rs
index edc8124..132d4c3 100644
--- a/nihav-commonfmt/src/codecs/pcm.rs
+++ b/nihav-commonfmt/src/codecs/pcm.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats::*;
use nihav_core::codecs::*;
@@ -35,7 +33,7 @@ fn get_duration(ainfo: &NAAudioInfo, duration: Option<u64>, data_size: usize) ->
}
impl NADecoder for PCMDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
self.chmap = get_default_chmap(ainfo.get_channels());
if self.chmap.num_channels() == 0 { return Err(DecoderError::InvalidData); }
diff --git a/nihav-commonfmt/src/codecs/sipro.rs b/nihav-commonfmt/src/codecs/sipro.rs
index 1b8d701..05e6816 100644
--- a/nihav-commonfmt/src/codecs/sipro.rs
+++ b/nihav-commonfmt/src/codecs/sipro.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats::*;
use nihav_core::frame::*;
use nihav_core::codecs::*;
@@ -28,7 +26,7 @@ const EXCITATION_OFFSET: usize = 281 + 10 + 1;
struct SiproDecoder {
chmap: NAChannelMap,
ainfo: NAAudioInfo,
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
mode: &'static SiproModeInfo,
mode_type: SiproMode,
@@ -640,7 +638,7 @@ fn synth_filter(dst: &mut [f32], doff: usize, filt: &[f32], src: &[f32], len: us
const CHMAP_MONO: [NAChannelType; 1] = [NAChannelType::C];
impl NADecoder for SiproDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
let mut found = false;
for i in 0..SIPRO_MODES.len() {
diff --git a/nihav-commonfmt/src/codecs/ts102366.rs b/nihav-commonfmt/src/codecs/ts102366.rs
index 5d1d66c..f17b431 100644
--- a/nihav-commonfmt/src/codecs/ts102366.rs
+++ b/nihav-commonfmt/src/codecs/ts102366.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats::*;
use nihav_core::frame::*;
use nihav_core::codecs::*;
@@ -116,7 +114,7 @@ fn do_imdct_core(fft: &mut FFT, xsc: &[FFTComplex; BLOCK_LEN/2], size: usize, il
}
struct AudioDecoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
ablk: AudioBlock,
imdct512: IMDCTContext,
imdct256: IMDCTContext,
@@ -1159,7 +1157,7 @@ impl AudioBlock {
}
impl NADecoder for AudioDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(_) = info.get_properties() {
self.info = info.clone();
Ok(())
diff --git a/nihav-core/src/codecs/mod.rs b/nihav-core/src/codecs/mod.rs
index bf4fbd4..692269e 100644
--- a/nihav-core/src/codecs/mod.rs
+++ b/nihav-core/src/codecs/mod.rs
@@ -2,7 +2,6 @@ use std::fmt;
use std::ops::{Add, AddAssign, Sub, SubAssign};
pub use crate::frame::*;
-pub use std::rc::Rc;
use std::mem;
use crate::io::byteio::ByteIOError;
use crate::io::bitreader::BitReaderError;
@@ -232,7 +231,7 @@ impl fmt::Display for MV {
pub trait NADecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()>;
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()>;
fn decode(&mut self, pkt: &NAPacket) -> DecoderResult<NAFrameRef>;
}
diff --git a/nihav-core/src/frame.rs b/nihav-core/src/frame.rs
index 45e05ca..bc3216b 100644
--- a/nihav-core/src/frame.rs
+++ b/nihav-core/src/frame.rs
@@ -3,6 +3,7 @@ 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::*;
@@ -531,22 +532,25 @@ impl NABufferPool {
pub struct NACodecInfo {
name: &'static str,
properties: NACodecTypeInfo,
- extradata: Option<Rc<Vec<u8>>>,
+ extradata: Option<Arc<Vec<u8>>>,
}
+pub type NACodecInfoRef = Arc<NACodecInfo>;
+
impl NACodecInfo {
pub fn new(name: &'static str, p: NACodecTypeInfo, edata: Option<Vec<u8>>) -> Self {
let extradata = match edata {
None => None,
- Some(vec) => Some(Rc::new(vec)),
+ Some(vec) => Some(Arc::new(vec)),
};
NACodecInfo { name: name, properties: p, extradata: extradata }
}
- pub fn new_ref(name: &'static str, p: NACodecTypeInfo, edata: Option<Rc<Vec<u8>>>) -> Self {
+ pub fn new_ref(name: &'static str, p: NACodecTypeInfo, edata: Option<Arc<Vec<u8>>>) -> Self {
NACodecInfo { name: name, properties: p, extradata: edata }
}
+ pub fn into_ref(self) -> NACodecInfoRef { Arc::new(self) }
pub fn get_properties(&self) -> NACodecTypeInfo { self.properties }
- pub fn get_extradata(&self) -> Option<Rc<Vec<u8>>> {
+ pub fn get_extradata(&self) -> Option<Arc<Vec<u8>>> {
if let Some(ref vec) = self.extradata { return Some(vec.clone()); }
None
}
@@ -559,11 +563,11 @@ impl NACodecInfo {
if let NACodecTypeInfo::Audio(_) = self.properties { return true; }
false
}
- pub fn new_dummy() -> Rc<Self> {
- Rc::new(DUMMY_CODEC_INFO)
+ pub fn new_dummy() -> Arc<Self> {
+ Arc::new(DUMMY_CODEC_INFO)
}
- pub fn replace_info(&self, p: NACodecTypeInfo) -> Rc<Self> {
- Rc::new(NACodecInfo { name: self.name, properties: p, extradata: self.extradata.clone() })
+ pub fn replace_info(&self, p: NACodecTypeInfo) -> Arc<Self> {
+ Arc::new(NACodecInfo { name: self.name, properties: p, extradata: self.extradata.clone() })
}
}
@@ -592,7 +596,7 @@ pub enum NAValue {
Int(i32),
Long(i64),
String(String),
- Data(Rc<Vec<u8>>),
+ Data(Arc<Vec<u8>>),
}
#[derive(Debug,Clone,Copy,PartialEq)]
@@ -643,7 +647,7 @@ impl NATimeInfo {
pub struct NAFrame {
ts: NATimeInfo,
buffer: NABufferType,
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
ftype: FrameType,
key: bool,
options: HashMap<String, NAValue>,
@@ -664,12 +668,12 @@ impl NAFrame {
pub fn new(ts: NATimeInfo,
ftype: FrameType,
keyframe: bool,
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
options: HashMap<String, NAValue>,
buffer: NABufferType) -> Self {
NAFrame { ts: ts, buffer: buffer, info: info, ftype: ftype, key: keyframe, options: options }
}
- pub fn get_info(&self) -> Rc<NACodecInfo> { self.info.clone() }
+ pub fn get_info(&self) -> NACodecInfoRef { self.info.clone() }
pub fn get_frame_type(&self) -> FrameType { self.ftype }
pub fn is_keyframe(&self) -> bool { self.key }
pub fn set_frame_type(&mut self, ftype: FrameType) { self.ftype = ftype; }
@@ -730,7 +734,7 @@ pub struct NAStream {
media_type: StreamType,
id: u32,
num: usize,
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
tb_num: u32,
tb_den: u32,
}
@@ -753,12 +757,12 @@ pub fn reduce_timebase(tb_num: u32, tb_den: u32) -> (u32, u32) {
impl NAStream {
pub fn new(mt: StreamType, id: u32, info: NACodecInfo, tb_num: u32, tb_den: u32) -> Self {
let (n, d) = reduce_timebase(tb_num, tb_den);
- NAStream { media_type: mt, id: id, num: 0, info: Rc::new(info), tb_num: n, tb_den: d }
+ NAStream { media_type: mt, id: id, num: 0, info: info.into_ref(), tb_num: n, tb_den: d }
}
pub fn get_id(&self) -> u32 { self.id }
pub fn get_num(&self) -> usize { self.num }
pub fn set_num(&mut self, num: usize) { self.num = num; }
- pub fn get_info(&self) -> Rc<NACodecInfo> { self.info.clone() }
+ pub fn get_info(&self) -> NACodecInfoRef { self.info.clone() }
pub fn get_timebase(&self) -> (u32, u32) { (self.tb_num, self.tb_den) }
pub fn set_timebase(&mut self, tb_num: u32, tb_den: u32) {
let (n, d) = reduce_timebase(tb_num, tb_den);
@@ -814,12 +818,12 @@ impl fmt::Display for NAPacket {
}
pub trait FrameFromPacket {
- fn new_from_pkt(pkt: &NAPacket, info: Rc<NACodecInfo>, buf: NABufferType) -> NAFrame;
+ fn new_from_pkt(pkt: &NAPacket, info: NACodecInfoRef, buf: NABufferType) -> NAFrame;
fn fill_timestamps(&mut self, pkt: &NAPacket);
}
impl FrameFromPacket for NAFrame {
- fn new_from_pkt(pkt: &NAPacket, info: Rc<NACodecInfo>, buf: NABufferType) -> NAFrame {
+ fn new_from_pkt(pkt: &NAPacket, info: NACodecInfoRef, buf: NABufferType) -> NAFrame {
NAFrame::new(pkt.ts, FrameType::Other, pkt.keyframe, info, HashMap::new(), buf)
}
fn fill_timestamps(&mut self, pkt: &NAPacket) {
diff --git a/nihav-duck/src/codecs/dkadpcm.rs b/nihav-duck/src/codecs/dkadpcm.rs
index 0410957..0104b30 100644
--- a/nihav-duck/src/codecs/dkadpcm.rs
+++ b/nihav-duck/src/codecs/dkadpcm.rs
@@ -51,7 +51,7 @@ impl DuckADPCMDecoder {
}
impl NADecoder for DuckADPCMDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
validate!(ainfo.get_block_len() > 16);
self.block_len = ainfo.get_block_len();
diff --git a/nihav-duck/src/codecs/truemotion1.rs b/nihav-duck/src/codecs/truemotion1.rs
index a156705..2c8e5d2 100644
--- a/nihav-duck/src/codecs/truemotion1.rs
+++ b/nihav-duck/src/codecs/truemotion1.rs
@@ -168,7 +168,7 @@ impl Default for FrameBuf {
#[derive(Default)]
struct TM1Decoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
last_delta_set: usize,
last_table_idx: usize,
delta_tables: DeltaTables,
@@ -515,10 +515,10 @@ impl TM1Decoder {
}
impl NADecoder for TM1Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(vinfo.get_width(), vinfo.get_height(), false, YUV410_FORMAT));
- 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();
Ok(())
} else {
Err(DecoderError::InvalidData)
diff --git a/nihav-duck/src/codecs/truemotion2.rs b/nihav-duck/src/codecs/truemotion2.rs
index 54f0d30..e822545 100644
--- a/nihav-duck/src/codecs/truemotion2.rs
+++ b/nihav-duck/src/codecs/truemotion2.rs
@@ -331,7 +331,7 @@ impl TM2Frame {
#[derive(Default)]
struct TM2Decoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
streams: [TM2Stream; TM2StreamType::Num as usize],
width: usize,
height: usize,
@@ -546,14 +546,14 @@ impl TM2Decoder {
}
impl NADecoder for TM2Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(vinfo.get_width(), vinfo.get_height(), false, YUV410_FORMAT));
self.width = vinfo.get_width();
self.height = vinfo.get_height();
self.cur_frame = TM2Frame::alloc(self.width, self.height);
self.prev_frame = TM2Frame::alloc(self.width, self.height);
- 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();
Ok(())
} else {
Err(DecoderError::InvalidData)
diff --git a/nihav-duck/src/codecs/truemotion2x.rs b/nihav-duck/src/codecs/truemotion2x.rs
index 6eb3559..fce5fb3 100644
--- a/nihav-duck/src/codecs/truemotion2x.rs
+++ b/nihav-duck/src/codecs/truemotion2x.rs
@@ -161,7 +161,7 @@ impl Frame {
#[derive(Default)]
struct TM2XDecoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
width: usize,
height: usize,
dec_buf: Vec<u8>,
@@ -556,7 +556,7 @@ impl TM2XDecoder {
}
impl NADecoder for TM2XDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let fmt = NAPixelFormaton::new(ColorModel::YUV(YUVSubmodel::YUVJ),
Some(NAPixelChromaton::new(0, 0, false, 8, 0, 0, 1)),
@@ -568,7 +568,7 @@ impl NADecoder for TM2XDecoder {
self.height = vinfo.get_height();
self.cur_frame.resize(self.width, self.height);
self.ref_frame.resize(self.width, self.height);
- 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();
Ok(())
} else {
Err(DecoderError::InvalidData)
diff --git a/nihav-duck/src/codecs/truemotionrt.rs b/nihav-duck/src/codecs/truemotionrt.rs
index df17047..12548ef 100644
--- a/nihav-duck/src/codecs/truemotionrt.rs
+++ b/nihav-duck/src/codecs/truemotionrt.rs
@@ -3,7 +3,7 @@ use nihav_core::io::bitreader::*;
#[derive(Default)]
struct TMRTDecoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
}
const TMRT_DELTA_TAB: [&[i16]; 3] = [
@@ -35,10 +35,10 @@ impl TMRTDecoder {
}
impl NADecoder for TMRTDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(vinfo.get_width(), vinfo.get_height(), false, YUV410_FORMAT));
- 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();
Ok(())
} else {
Err(DecoderError::InvalidData)
diff --git a/nihav-game/src/codecs/bmv.rs b/nihav-game/src/codecs/bmv.rs
index 46e5f65..79b8745 100644
--- a/nihav-game/src/codecs/bmv.rs
+++ b/nihav-game/src/codecs/bmv.rs
@@ -101,16 +101,15 @@ impl<'a> BMVWriter<'a> {
}
struct BMVVideoDecoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
pal: [u8; 768],
frame: [u8; FRAME_W * FRAME_H],
}
impl BMVVideoDecoder {
fn new() -> Self {
- let dummy_info = Rc::new(DUMMY_CODEC_INFO);
Self {
- info: dummy_info, pal: [0; 768], frame: [0; FRAME_W * FRAME_H],
+ info: NACodecInfoRef::default(), pal: [0; 768], frame: [0; FRAME_W * FRAME_H],
}
}
fn decode_frame(&mut self, src: &[u8], bufinfo: &mut NABufferType, line: i16) -> DecoderResult<()> {
@@ -170,7 +169,7 @@ impl BMVVideoDecoder {
}
impl NADecoder for BMVVideoDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(_vinfo) = info.get_properties() {
let fmt = NAPixelFormaton::new(ColorModel::RGB(RGBSubmodel::RGB),
Some(NAPixelChromaton::new(0, 0, true, 8, 0, 0, 3)),
@@ -179,7 +178,7 @@ impl NADecoder for BMVVideoDecoder {
None, None,
FORMATON_FLAG_PALETTE, 3);
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(FRAME_W, FRAME_H, false, 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();
Ok(())
} else {
@@ -258,7 +257,7 @@ fn scale_sample(samp: u8, scale: i32) -> i16 {
}
impl NADecoder for BMVAudioDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
self.ainfo = NAAudioInfo::new(ainfo.get_sample_rate(), ainfo.get_channels(), formats::SND_S16P_FORMAT, 32);
self.chmap = NAChannelMap::from_str("L,R").unwrap();
diff --git a/nihav-game/src/codecs/bmv3.rs b/nihav-game/src/codecs/bmv3.rs
index 099f070..687ca23 100644
--- a/nihav-game/src/codecs/bmv3.rs
+++ b/nihav-game/src/codecs/bmv3.rs
@@ -69,7 +69,7 @@ impl NibbleReader {
}
struct BMV3VideoDecoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
stride: usize,
height: usize,
frame: Vec<u16>,
@@ -85,7 +85,6 @@ struct BMV3VideoDecoder {
impl BMV3VideoDecoder {
fn new() -> Self {
- let dummy_info = Rc::new(DUMMY_CODEC_INFO);
let mut frame1 = Vec::with_capacity(BMV_MAX_SIZE);
frame1.resize(BMV_MAX_SIZE, 0);
let mut frame2 = Vec::with_capacity(BMV_MAX_SIZE);
@@ -103,7 +102,7 @@ impl BMV3VideoDecoder {
}
Self {
- info: dummy_info,
+ info: NACodecInfoRef::default(),
stride: 0,
height: 0,
frame: frame1,
@@ -442,10 +441,10 @@ impl BMV3VideoDecoder {
}
impl NADecoder for BMV3VideoDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(vinfo.get_width(), vinfo.get_height(), false, RGB565_FORMAT));
- 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.stride = vinfo.get_width();
self.height = vinfo.get_height();
@@ -553,7 +552,7 @@ fn decode_block(mode: u8, src: &[u8], dst: &mut [i16], mut pred: i16) -> i16 {
}
impl NADecoder for BMV3AudioDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
self.ainfo = NAAudioInfo::new(ainfo.get_sample_rate(), ainfo.get_channels(), formats::SND_S16P_FORMAT, 32);
self.chmap = NAChannelMap::from_str("L,R").unwrap();
diff --git a/nihav-game/src/codecs/gremlinvideo.rs b/nihav-game/src/codecs/gremlinvideo.rs
index 9dd67ca..cf7f7b1 100644
--- a/nihav-game/src/codecs/gremlinvideo.rs
+++ b/nihav-game/src/codecs/gremlinvideo.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::frame::*;
use nihav_core::formats;
use nihav_core::formats::{NAChannelType, NAChannelMap};
@@ -7,7 +5,7 @@ use nihav_core::codecs::*;
use nihav_core::io::byteio::*;
struct GremlinVideoDecoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
pal: [u8; 768],
frame: Vec<u8>,
scale_v: bool,
@@ -61,9 +59,8 @@ impl Bits32 {
impl GremlinVideoDecoder {
fn new() -> Self {
- let dummy_info = Rc::new(DUMMY_CODEC_INFO);
GremlinVideoDecoder {
- info: dummy_info, pal: [0; 768], frame: Vec::new(),
+ info: NACodecInfoRef::default(), pal: [0; 768], frame: Vec::new(),
scale_v: false, scale_h: false
}
}
@@ -374,14 +371,14 @@ impl GremlinVideoDecoder {
}
impl NADecoder for GremlinVideoDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let w = vinfo.get_width();
let h = vinfo.get_height();
if !vinfo.get_format().is_paletted() { return Err(DecoderError::NotImplemented); }
let fmt = formats::PAL8_FORMAT;
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(w, h, false, 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.frame.resize(PREAMBLE_SIZE + w * h, 0);
for i in 0..2 {
@@ -513,7 +510,7 @@ fn get_default_chmap(nch: u8) -> NAChannelMap {
}
impl NADecoder for GremlinAudioDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
self.ainfo = NAAudioInfo::new(ainfo.get_sample_rate(), ainfo.get_channels(), formats::SND_S16P_FORMAT, ainfo.get_block_len());
self.chmap = get_default_chmap(ainfo.get_channels());
diff --git a/nihav-game/src/codecs/vmd.rs b/nihav-game/src/codecs/vmd.rs
index bbe5218..dc831c4 100644
--- a/nihav-game/src/codecs/vmd.rs
+++ b/nihav-game/src/codecs/vmd.rs
@@ -147,7 +147,7 @@ fn decode_frame_data(br: &mut ByteReader, dst: &mut [u8], mut dpos: usize, strid
}
struct VMDVideoDecoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
pal: [u8; 768],
buf: Vec<u8>,
width: usize,
@@ -158,7 +158,7 @@ struct VMDVideoDecoder {
impl VMDVideoDecoder {
fn new() -> Self {
Self {
- info: Rc::new(NACodecInfo::default()),
+ info: NACodecInfoRef::default(),
pal: [0; 768],
buf: Vec::new(),
width: 0,
@@ -215,12 +215,12 @@ impl VMDVideoDecoder {
}
impl NADecoder for VMDVideoDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
self.width = vinfo.get_width();
self.height = vinfo.get_height();
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(self.width, self.height, false, PAL8_FORMAT));
- 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();
validate!(info.get_extradata().is_some());
if let Some(ref edata) = info.get_extradata() {
@@ -351,7 +351,7 @@ impl VMDAudioDecoder {
}
impl NADecoder for VMDAudioDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
let fmt;
if ainfo.get_format().get_bits() == 8 {
diff --git a/nihav-indeo/src/codecs/imc.rs b/nihav-indeo/src/codecs/imc.rs
index 2d65a7c..ceac0d1 100644
--- a/nihav-indeo/src/codecs/imc.rs
+++ b/nihav-indeo/src/codecs/imc.rs
@@ -1,8 +1,6 @@
use std::mem;
use std::ptr;
use std::f32::consts;
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats::*;
use nihav_core::frame::*;
@@ -323,7 +321,7 @@ struct IMCDecoder {
chmap: NAChannelMap,
ainfo: NAAudioInfo,
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
codes: [[Codebook<u8>; 4]; 4],
ch_data: [IMCChannel; 2],
@@ -867,7 +865,7 @@ const CHMAP_MONO: [NAChannelType; 1] = [NAChannelType::C];
const CHMAP_STEREO: [NAChannelType; 2] = [NAChannelType::L, NAChannelType::R];
impl NADecoder for IMCDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
self.chmap = NAChannelMap::new();
match ainfo.get_channels() {
diff --git a/nihav-indeo/src/codecs/indeo2.rs b/nihav-indeo/src/codecs/indeo2.rs
index c3a8a47..5ea8b3f 100644
--- a/nihav-indeo/src/codecs/indeo2.rs
+++ b/nihav-indeo/src/codecs/indeo2.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::io::bitreader::*;
use nihav_core::io::codebook::*;
use nihav_core::formats;
@@ -186,14 +184,14 @@ impl CodebookDescReader<u8> for IR2CodeReader {
}
struct Indeo2Decoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
cb: Codebook<u8>,
frmmgr: HAMShuffler,
}
impl Indeo2Decoder {
fn new() -> Self {
- let dummy_info = Rc::new(DUMMY_CODEC_INFO);
+ let dummy_info = NACodecInfo::new_dummy();
let mut coderead = IR2CodeReader{};
let cb = Codebook::new(&mut coderead, CodebookMode::LSB).unwrap();
Indeo2Decoder { info: dummy_info, cb: cb, frmmgr: HAMShuffler::new() }
@@ -309,14 +307,14 @@ impl Indeo2Decoder {
const IR2_START: usize = 48;
impl NADecoder for Indeo2Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let w = vinfo.get_width();
let h = vinfo.get_height();
let f = vinfo.is_flipped();
let fmt = formats::YUV410_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();
Ok(())
} else {
diff --git a/nihav-indeo/src/codecs/indeo3.rs b/nihav-indeo/src/codecs/indeo3.rs
index a99db74..ebf941c 100644
--- a/nihav-indeo/src/codecs/indeo3.rs
+++ b/nihav-indeo/src/codecs/indeo3.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats;
use nihav_core::codecs::*;
use nihav_core::io::byteio::*;
@@ -254,7 +252,7 @@ fn fill_block8x8(bufs: &mut Buffers, doff: usize, stride: usize, h: usize, topli
}
struct Indeo3Decoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
bpos: u8,
bbuf: u8,
width: u16,
@@ -330,7 +328,7 @@ const SKIP_OR_TREE: u8 = 2;
impl Indeo3Decoder {
fn new() -> Self {
- let dummy_info = Rc::new(DUMMY_CODEC_INFO);
+ let dummy_info = NACodecInfo::new_dummy();
Indeo3Decoder { info: dummy_info, bpos: 0, bbuf: 0, width: 0, height: 0,
mvs: Vec::new(), altquant: [0; 16],
vq_offset: 0, bufs: Buffers::new() }
@@ -690,13 +688,13 @@ const FLAG_KEYFRAME: u16 = 1 << 2;
const FLAG_NONREF: u16 = 1 << 8;
impl NADecoder for Indeo3Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let w = vinfo.get_width();
let h = vinfo.get_height();
let fmt = formats::YUV410_FORMAT;
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(w, h, false, 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.bufs.reset();
Ok(())
} else {
diff --git a/nihav-indeo/src/codecs/indeo4.rs b/nihav-indeo/src/codecs/indeo4.rs
index 6311dc9..07f6d67 100644
--- a/nihav-indeo/src/codecs/indeo4.rs
+++ b/nihav-indeo/src/codecs/indeo4.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::{Ref, RefCell};
use nihav_core::io::bitreader::*;
use nihav_core::formats;
use nihav_core::frame::*;
@@ -419,7 +417,7 @@ impl IndeoXParser for Indeo4Parser {
}
struct Indeo4Decoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
dec: IVIDecoder,
}
@@ -433,14 +431,14 @@ impl Indeo4Decoder {
}
impl NADecoder for Indeo4Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let w = vinfo.get_width();
let h = vinfo.get_height();
let f = vinfo.is_flipped();
let fmt = formats::YUV410_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();
Ok(())
} else {
Err(DecoderError::InvalidData)
diff --git a/nihav-indeo/src/codecs/indeo5.rs b/nihav-indeo/src/codecs/indeo5.rs
index 98bd340..1f77081 100644
--- a/nihav-indeo/src/codecs/indeo5.rs
+++ b/nihav-indeo/src/codecs/indeo5.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::{Ref, RefCell};
use nihav_core::io::bitreader::*;
use nihav_core::formats;
use nihav_core::frame::*;
@@ -493,7 +491,7 @@ impl IndeoXParser for Indeo5Parser {
}
struct Indeo5Decoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
dec: IVIDecoder,
ip: Indeo5Parser,
}
@@ -509,14 +507,14 @@ impl Indeo5Decoder {
}
impl NADecoder for Indeo5Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let w = vinfo.get_width();
let h = vinfo.get_height();
let f = vinfo.is_flipped();
let fmt = formats::YUV410_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();
Ok(())
} else {
Err(DecoderError::InvalidData)
diff --git a/nihav-indeo/src/codecs/intel263.rs b/nihav-indeo/src/codecs/intel263.rs
index d84aff5..3b95c5f 100644
--- a/nihav-indeo/src/codecs/intel263.rs
+++ b/nihav-indeo/src/codecs/intel263.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::io::bitreader::*;
use nihav_core::io::codebook::*;
use nihav_core::formats;
@@ -21,7 +19,7 @@ struct Tables {
}
struct Intel263Decoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
dec: H263BaseDecoder,
tables: Tables,
bdsp: H263BlockDSP,
@@ -357,7 +355,7 @@ impl Intel263Decoder {
};
Intel263Decoder{
- info: Rc::new(DUMMY_CODEC_INFO),
+ info: NACodecInfo::new_dummy(),
dec: H263BaseDecoder::new(true),
tables: tables,
bdsp: H263BlockDSP::new(),
@@ -366,13 +364,13 @@ impl Intel263Decoder {
}
impl NADecoder for Intel263Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let w = vinfo.get_width();
let h = vinfo.get_height();
let fmt = formats::YUV420_FORMAT;
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(w, h, false, 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();
Ok(())
} else {
Err(DecoderError::InvalidData)
diff --git a/nihav-rad/src/codecs/bink2.rs b/nihav-rad/src/codecs/bink2.rs
index 719608d..60d42a4 100644
--- a/nihav-rad/src/codecs/bink2.rs
+++ b/nihav-rad/src/codecs/bink2.rs
@@ -996,7 +996,7 @@ impl Default for Bink2Codes {
#[derive(Default)]
struct Bink2Decoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
ips: IPShuffler,
version: u32,
@@ -1858,7 +1858,7 @@ fn decode_acs_4blocks_old(br: &mut BitReader, codes: &Bink2Codes, dst: &mut [[f3
const KB2H_NUM_SLICES: [usize; 4] = [ 2, 3, 4, 8 ];
impl NADecoder for Bink2Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let w = vinfo.get_width();
let h = vinfo.get_height();
@@ -1907,7 +1907,7 @@ impl NADecoder for Bink2Decoder {
if self.has_alpha { FORMATON_FLAG_ALPHA } else { 0 },
if self.has_alpha { 4 } else { 3 });
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(w, h, false, 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();
Ok(())
} else {
diff --git a/nihav-rad/src/codecs/binkaud.rs b/nihav-rad/src/codecs/binkaud.rs
index c38f6d4..182c6c9 100644
--- a/nihav-rad/src/codecs/binkaud.rs
+++ b/nihav-rad/src/codecs/binkaud.rs
@@ -178,7 +178,7 @@ const CRITICAL_FREQS: [usize; MAX_BANDS] = [
const RUN_TAB: [usize; 16] = [ 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 32, 64 ];
impl NADecoder for BinkAudioDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
let srate = ainfo.get_sample_rate();
let channels = ainfo.get_channels();
diff --git a/nihav-rad/src/codecs/binkvid.rs b/nihav-rad/src/codecs/binkvid.rs
index dc9a469..2f95ed6 100644
--- a/nihav-rad/src/codecs/binkvid.rs
+++ b/nihav-rad/src/codecs/binkvid.rs
@@ -474,7 +474,7 @@ impl Default for QuantMats {
#[derive(Default)]
struct BinkDecoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
ips: IPShuffler,
hams: HAMShuffler,
@@ -1157,7 +1157,7 @@ const BINK_FLAG_ALPHA: u32 = 0x00100000;
const BINK_FLAG_GRAY: u32 = 0x00020000;
impl NADecoder for BinkDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let w = vinfo.get_width();
let h = vinfo.get_height();
@@ -1192,7 +1192,7 @@ impl NADecoder for BinkDecoder {
None, None, None, None, 0, 1);
}
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(w, h, false, 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.init_bundle_lengths(w.max(8), (w + 7) >> 3);
self.init_bundle_bufs((w + 7) >> 3, (h + 7) >> 3);
diff --git a/nihav-rad/src/codecs/smacker.rs b/nihav-rad/src/codecs/smacker.rs
index bbf4846..bc27ab0 100644
--- a/nihav-rad/src/codecs/smacker.rs
+++ b/nihav-rad/src/codecs/smacker.rs
@@ -210,7 +210,7 @@ const SMK_BLOCK_RUNS: [usize; 64] = [
];
struct SmackerVideoDecoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
mmap_tree: SmackerTree16,
mclr_tree: SmackerTree16,
full_tree: SmackerTree16,
@@ -227,9 +227,8 @@ struct SmackerVideoDecoder {
impl SmackerVideoDecoder {
fn new() -> Self {
- let dummy_info = Rc::new(DUMMY_CODEC_INFO);
Self {
- info: dummy_info,
+ info: NACodecInfoRef::default(),
mmap_tree: SmackerTree16::new(),
mclr_tree: SmackerTree16::new(),
full_tree: SmackerTree16::new(),
@@ -388,7 +387,7 @@ impl SmackerVideoDecoder {
}
impl NADecoder for SmackerVideoDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let w = vinfo.get_width();
let h = vinfo.get_height();
@@ -428,8 +427,7 @@ impl NADecoder for SmackerVideoDecoder {
out_h <<= 1;
}
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(w, out_h, false, 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();
Ok(())
} else {
@@ -494,7 +492,7 @@ impl SmackerAudioDecoder {
}
impl NADecoder for SmackerAudioDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
self.bits = ainfo.get_format().get_bits();
let fmt = if self.bits == 8 { SND_U8_FORMAT } else { SND_S16P_FORMAT };
diff --git a/nihav-realmedia/src/codecs/cook.rs b/nihav-realmedia/src/codecs/cook.rs
index 6d7877b..6303724 100644
--- a/nihav-realmedia/src/codecs/cook.rs
+++ b/nihav-realmedia/src/codecs/cook.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats::*;
use nihav_core::frame::*;
use nihav_core::codecs::*;
@@ -523,7 +521,7 @@ impl RND {
}
struct CookDecoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
chmap: NAChannelMap,
src: [u8; 65536],
num_pairs: usize,
@@ -553,7 +551,7 @@ impl CookDecoder {
}
impl NADecoder for CookDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
let edata = info.get_extradata().unwrap();
validate!(edata.len() >= 4);
diff --git a/nihav-realmedia/src/codecs/ra144.rs b/nihav-realmedia/src/codecs/ra144.rs
index 19cf38b..38d76c3 100644
--- a/nihav-realmedia/src/codecs/ra144.rs
+++ b/nihav-realmedia/src/codecs/ra144.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats::*;
use nihav_core::frame::*;
use nihav_core::codecs::*;
@@ -14,7 +12,7 @@ const FRAME_SIZE: usize = 20;
struct RA144Decoder {
chmap: NAChannelMap,
ainfo: NAAudioInfo,
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
old_energy: u16,
lpc_data: [[i32; LPC_ORDER]; 2],
@@ -244,7 +242,7 @@ fn clip_out(sample: i16) -> i16 {
}
impl NADecoder for RA144Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
self.chmap.add_channels(&CHMAP_MONO);
self.ainfo = NAAudioInfo::new(ainfo.get_sample_rate(),
diff --git a/nihav-realmedia/src/codecs/ra288.rs b/nihav-realmedia/src/codecs/ra288.rs
index 8538f85..142cf2a 100644
--- a/nihav-realmedia/src/codecs/ra288.rs
+++ b/nihav-realmedia/src/codecs/ra288.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats::*;
use nihav_core::frame::*;
use nihav_core::codecs::*;
@@ -17,7 +15,7 @@ const GAIN_START: usize = 28;
struct RA288Decoder {
chmap: NAChannelMap,
ainfo: NAAudioInfo,
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
speech_lpc: [f32; SP_LPC_ORDER],
speech_hist: [f32; 111],
@@ -153,7 +151,7 @@ impl RA288Decoder {
}
impl NADecoder for RA288Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
self.chmap.add_channels(&CHMAP_MONO);
self.ainfo = NAAudioInfo::new(ainfo.get_sample_rate(),
diff --git a/nihav-realmedia/src/codecs/ralf.rs b/nihav-realmedia/src/codecs/ralf.rs
index 76bf3df..307436c 100644
--- a/nihav-realmedia/src/codecs/ralf.rs
+++ b/nihav-realmedia/src/codecs/ralf.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats::*;
use nihav_core::frame::*;
use nihav_core::codecs::*;
@@ -246,7 +244,7 @@ struct Block {
const RALF_MAX_PACKET_SIZE: usize = 8192;
struct RALFDecoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
chmap: NAChannelMap,
channels: u8,
@@ -357,7 +355,7 @@ fn read_block_length(br: &mut BitReader) -> DecoderResult<usize> {
}
impl NADecoder for RALFDecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
let edata = info.get_extradata().unwrap();
diff --git a/nihav-realmedia/src/codecs/rv10.rs b/nihav-realmedia/src/codecs/rv10.rs
index 348a7ff..1d93a01 100644
--- a/nihav-realmedia/src/codecs/rv10.rs
+++ b/nihav-realmedia/src/codecs/rv10.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::io::bitreader::*;
use nihav_core::io::codebook::*;
use nihav_core::formats;
@@ -23,7 +21,7 @@ struct Tables {
}
struct RealVideo10Decoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
dec: H263BaseDecoder,
tables: Tables,
w: usize,
@@ -392,7 +390,7 @@ impl RealVideo10Decoder {
};
RealVideo10Decoder{
- info: Rc::new(DUMMY_CODEC_INFO),
+ info: NACodecInfoRef::default(),
dec: H263BaseDecoder::new_with_opts(false, false, false),
tables: tables,
w: 0,
@@ -405,13 +403,13 @@ impl RealVideo10Decoder {
}
impl NADecoder for RealVideo10Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let w = vinfo.get_width();
let h = vinfo.get_height();
let fmt = formats::YUV420_FORMAT;
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(w, h, false, 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.w = w;
self.h = h;
diff --git a/nihav-realmedia/src/codecs/rv20.rs b/nihav-realmedia/src/codecs/rv20.rs
index eeb56cf..36ccc67 100644
--- a/nihav-realmedia/src/codecs/rv20.rs
+++ b/nihav-realmedia/src/codecs/rv20.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::io::bitreader::*;
use nihav_core::io::codebook::*;
use nihav_core::formats;
@@ -32,7 +30,7 @@ struct RPRInfo {
}
struct RealVideo20Decoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
dec: H263BaseDecoder,
tables: Tables,
w: usize,
@@ -445,7 +443,7 @@ impl RealVideo20Decoder {
};
RealVideo20Decoder{
- info: Rc::new(DUMMY_CODEC_INFO),
+ info: NACodecInfoRef::default(),
dec: H263BaseDecoder::new_b_frames(false),
tables: tables,
w: 0,
@@ -459,13 +457,13 @@ impl RealVideo20Decoder {
impl NADecoder for RealVideo20Decoder {
#[allow(unused_variables)]
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let w = vinfo.get_width();
let h = vinfo.get_height();
let fmt = formats::YUV420_FORMAT;
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(w, h, false, 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.w = w;
self.h = h;
diff --git a/nihav-realmedia/src/codecs/rv30.rs b/nihav-realmedia/src/codecs/rv30.rs
index acdefb6..a2d7090 100644
--- a/nihav-realmedia/src/codecs/rv30.rs
+++ b/nihav-realmedia/src/codecs/rv30.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats;
use nihav_core::io::bitreader::*;
use nihav_core::io::intcode::*;
@@ -104,7 +102,7 @@ impl RV34BitstreamDecoder for RealVideo30BR {
struct RealVideo30Decoder {
bd: RealVideo30BR,
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
dec: RV34Decoder,
}
@@ -112,18 +110,18 @@ impl RealVideo30Decoder {
fn new() -> Self {
RealVideo30Decoder{
bd: RealVideo30BR::new(),
- info: Rc::new(DUMMY_CODEC_INFO),
+ info: NACodecInfoRef::default(),
dec: RV34Decoder::new(true, Box::new(RV30DSP::new())),
}
}
}
impl NADecoder for RealVideo30Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let fmt = formats::YUV420_FORMAT;
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(0, 0, false, 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();
let edata = info.get_extradata().unwrap();
let src: &[u8] = &edata;
diff --git a/nihav-realmedia/src/codecs/rv40.rs b/nihav-realmedia/src/codecs/rv40.rs
index d664dce..eb45164 100644
--- a/nihav-realmedia/src/codecs/rv40.rs
+++ b/nihav-realmedia/src/codecs/rv40.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats;
use nihav_core::frame::*;
use nihav_core::io::bitreader::*;
@@ -301,7 +299,7 @@ impl RV34BitstreamDecoder for RealVideo40BR {
struct RealVideo40Decoder {
bd: RealVideo40BR,
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
dec: RV34Decoder,
}
@@ -309,18 +307,18 @@ impl RealVideo40Decoder {
fn new() -> Self {
RealVideo40Decoder{
bd: RealVideo40BR::new(),
- info: Rc::new(DUMMY_CODEC_INFO),
+ info: NACodecInfoRef::default(),
dec: RV34Decoder::new(false, Box::new(RV40DSP::new())),
}
}
}
impl NADecoder for RealVideo40Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
let fmt = formats::YUV420_FORMAT;
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(0, 0, false, 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();
let edata = info.get_extradata().unwrap();
let src: &[u8] = &edata;
diff --git a/nihav-realmedia/src/codecs/rv60.rs b/nihav-realmedia/src/codecs/rv60.rs
index b430b5b..4adbe39 100644
--- a/nihav-realmedia/src/codecs/rv60.rs
+++ b/nihav-realmedia/src/codecs/rv60.rs
@@ -1,5 +1,3 @@
-use std::rc::Rc;
-use std::cell::RefCell;
use nihav_core::formats::YUV420_FORMAT;
use nihav_core::frame::*;
use nihav_core::codecs::{NADecoder, MV, ZERO_MV, DecoderError, DecoderResult, IPBShuffler};
@@ -610,7 +608,7 @@ impl DeblockInfo {
}
struct RealVideo60Decoder {
- info: Rc<NACodecInfo>,
+ info: NACodecInfoRef,
cbs: RV60Codebooks,
ipbs: IPBShuffler,
dsp: RV60DSP,
@@ -647,7 +645,7 @@ impl RealVideo60Decoder {
let vb = vt.get_vbuf();
let avg_buf = vb.unwrap();
RealVideo60Decoder{
- info: Rc::new(DUMMY_CODEC_INFO),
+ info: NACodecInfoRef::default(),
cbs: RV60Codebooks::init(),
ipbs: IPBShuffler::new(),
ipred: IntraPredContext::new(),
@@ -1393,11 +1391,11 @@ println!(" left {} bits", br.left());
}
impl NADecoder for RealVideo60Decoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()> {
+ fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
if let NACodecTypeInfo::Video(_vinfo) = info.get_properties() {
let fmt = YUV420_FORMAT;
let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(0, 0, false, 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();
let edata = info.get_extradata().unwrap();
let src: &[u8] = &edata;