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;
#[allow(dead_code)]
pub struct HAMShuffler {
- lastframe: Option<NAVideoBuffer<u8>>,
+ lastframe: Option<NAVideoBufferRef<u8>>,
}
impl HAMShuffler {
#[allow(dead_code)]
pub fn clear(&mut self) { self.lastframe = None; }
#[allow(dead_code)]
- pub fn add_frame(&mut self, buf: NAVideoBuffer<u8>) {
+ pub fn add_frame(&mut self, buf: NAVideoBufferRef<u8>) {
self.lastframe = Some(buf);
}
#[allow(dead_code)]
- pub fn clone_ref(&mut self) -> Option<NAVideoBuffer<u8>> {
+ pub fn clone_ref(&mut self) -> Option<NAVideoBufferRef<u8>> {
if let Some(ref mut frm) = self.lastframe {
let newfrm = frm.copy_buffer();
- *frm = newfrm.clone();
- Some(newfrm)
+ *frm = newfrm.clone().into_ref();
+ Some(newfrm.into_ref())
} else {
None
}
}
#[allow(dead_code)]
- pub fn get_output_frame(&mut self) -> Option<NAVideoBuffer<u8>> {
+ pub fn get_output_frame(&mut self) -> Option<NAVideoBufferRef<u8>> {
match self.lastframe {
Some(ref frm) => Some(frm.clone()),
None => None,
#[allow(dead_code)]
pub struct IPShuffler {
- lastframe: Option<NAVideoBuffer<u8>>,
+ lastframe: Option<NAVideoBufferRef<u8>>,
}
impl IPShuffler {
#[allow(dead_code)]
pub fn clear(&mut self) { self.lastframe = None; }
#[allow(dead_code)]
- pub fn add_frame(&mut self, buf: NAVideoBuffer<u8>) {
+ pub fn add_frame(&mut self, buf: NAVideoBufferRef<u8>) {
self.lastframe = Some(buf);
}
#[allow(dead_code)]
- pub fn get_ref(&mut self) -> Option<NAVideoBuffer<u8>> {
+ pub fn get_ref(&mut self) -> Option<NAVideoBufferRef<u8>> {
if let Some(ref frm) = self.lastframe {
Some(frm.clone())
} else {
#[allow(dead_code)]
pub struct IPBShuffler {
- lastframe: Option<NAVideoBuffer<u8>>,
- nextframe: Option<NAVideoBuffer<u8>>,
+ lastframe: Option<NAVideoBufferRef<u8>>,
+ nextframe: Option<NAVideoBufferRef<u8>>,
}
impl IPBShuffler {
#[allow(dead_code)]
pub fn clear(&mut self) { self.lastframe = None; self.nextframe = None; }
#[allow(dead_code)]
- pub fn add_frame(&mut self, buf: NAVideoBuffer<u8>) {
+ pub fn add_frame(&mut self, buf: NAVideoBufferRef<u8>) {
mem::swap(&mut self.lastframe, &mut self.nextframe);
self.lastframe = Some(buf);
}
#[allow(dead_code)]
- pub fn get_lastref(&mut self) -> Option<NAVideoBuffer<u8>> {
+ pub fn get_lastref(&mut self) -> Option<NAVideoBufferRef<u8>> {
if let Some(ref frm) = self.lastframe {
Some(frm.clone())
} else {
}
}
#[allow(dead_code)]
- pub fn get_nextref(&mut self) -> Option<NAVideoBuffer<u8>> {
+ pub fn get_nextref(&mut self) -> Option<NAVideoBufferRef<u8>> {
if let Some(ref frm) = self.nextframe {
Some(frm.clone())
} else {
}
}
#[allow(dead_code)]
- pub fn get_b_fwdref(&mut self) -> Option<NAVideoBuffer<u8>> {
+ pub fn get_b_fwdref(&mut self) -> Option<NAVideoBufferRef<u8>> {
if let Some(ref frm) = self.nextframe {
Some(frm.clone())
} else {
}
}
#[allow(dead_code)]
- pub fn get_b_bwdref(&mut self) -> Option<NAVideoBuffer<u8>> {
+ pub fn get_b_bwdref(&mut self) -> Option<NAVideoBufferRef<u8>> {
if let Some(ref frm) = self.lastframe {
Some(frm.clone())
} else {
fn default() -> Self { Self { lastframe: None, nextframe: None } }
}
-#[derive(Debug,Clone,Copy,PartialEq)]
+#[derive(Debug,Clone,Copy,Default,PartialEq)]
pub struct MV {
pub x: i16,
pub y: i16,
}
+#[allow(clippy::many_single_char_names)]
+#[allow(clippy::collapsible_if)]
impl MV {
- pub fn new(x: i16, y: i16) -> Self { MV{ x: x, y: y } }
+ pub fn new(x: i16, y: i16) -> Self { MV{ x, y } }
pub fn pred(a: MV, b: MV, c: MV) -> Self {
let x;
if a.x < b.x {
y = b.y;
}
}
- MV { x: x, y: y }
+ MV { x, y }
}
}
}
}
+pub struct NADecoderSupport {
+ pub pool_u8: NAVideoBufferPool<u8>,
+ pub pool_u16: NAVideoBufferPool<u16>,
+ pub pool_u32: NAVideoBufferPool<u32>,
+}
+
+impl NADecoderSupport {
+ pub fn new() -> Self {
+ Self {
+ pool_u8: NAVideoBufferPool::new(0),
+ pool_u16: NAVideoBufferPool::new(0),
+ pool_u32: NAVideoBufferPool::new(0),
+ }
+ }
+}
+
+impl Default for NADecoderSupport {
+ fn default() -> Self { Self::new() }
+}
+
pub trait NADecoder {
- fn init(&mut self, info: Rc<NACodecInfo>) -> DecoderResult<()>;
- fn decode(&mut self, pkt: &NAPacket) -> DecoderResult<NAFrameRef>;
+ fn init(&mut self, supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()>;
+ fn decode(&mut self, supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef>;
}
#[derive(Clone,Copy)]
pub struct DecoderInfo {
pub name: &'static str,
- pub get_decoder: fn () -> Box<NADecoder>,
+ pub get_decoder: fn () -> Box<dyn NADecoder>,
}
-#[cfg(any(feature="h263"))]
+#[cfg(any(feature="blockdsp"))]
pub mod blockdsp;
#[cfg(feature="h263")]
pub mod h263;
+#[derive(Default)]
pub struct RegisteredDecoders {
decs: Vec<DecoderInfo>,
}
pub fn add_decoder(&mut self, dec: DecoderInfo) {
self.decs.push(dec);
}
- pub fn find_decoder(&self, name: &str) -> Option<fn () -> Box<NADecoder>> {
+ pub fn find_decoder(&self, name: &str) -> Option<fn () -> Box<dyn NADecoder>> {
for &dec in self.decs.iter() {
if dec.name == name {
return Some(dec.get_decoder);