split nihav-codec-support crate from nihav-core
authorKostya Shishkov <kostya.shishkov@gmail.com>
Thu, 20 Feb 2020 10:00:24 +0000 (11:00 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Thu, 20 Feb 2020 10:00:24 +0000 (11:00 +0100)
The former is intended just for NihAV decoders, the latter is for both
NihAV crates and for the code using NihAV.

65 files changed:
nihav-codec-support/Cargo.toml [copied from nihav-core/Cargo.toml with 71% similarity]
nihav-codec-support/src/codecs/blockdsp.rs [moved from nihav-core/src/codecs/blockdsp.rs with 99% similarity]
nihav-codec-support/src/codecs/h263/code.rs [moved from nihav-core/src/codecs/h263/code.rs with 99% similarity]
nihav-codec-support/src/codecs/h263/data.rs [moved from nihav-core/src/codecs/h263/data.rs with 99% similarity]
nihav-codec-support/src/codecs/h263/decoder.rs [moved from nihav-core/src/codecs/h263/decoder.rs with 99% similarity]
nihav-codec-support/src/codecs/h263/mod.rs [moved from nihav-core/src/codecs/h263/mod.rs with 99% similarity]
nihav-codec-support/src/codecs/mod.rs [copied from nihav-core/src/codecs/mod.rs with 68% similarity]
nihav-codec-support/src/data/mod.rs [moved from nihav-core/src/data/mod.rs with 97% similarity]
nihav-codec-support/src/dsp/dct.rs [moved from nihav-core/src/dsp/dct.rs with 100% similarity]
nihav-codec-support/src/dsp/fft.rs [moved from nihav-core/src/dsp/fft.rs with 100% similarity]
nihav-codec-support/src/dsp/mdct.rs [moved from nihav-core/src/dsp/mdct.rs with 100% similarity]
nihav-codec-support/src/dsp/mod.rs [moved from nihav-core/src/dsp/mod.rs with 100% similarity]
nihav-codec-support/src/dsp/window.rs [moved from nihav-core/src/dsp/window.rs with 100% similarity]
nihav-codec-support/src/lib.rs [new file with mode: 0644]
nihav-codec-support/src/test/dec_video.rs [moved from nihav-core/src/test/dec_video.rs with 98% similarity]
nihav-codec-support/src/test/md5.rs [moved from nihav-core/src/test/md5.rs with 100% similarity]
nihav-codec-support/src/test/mod.rs [moved from nihav-core/src/test/mod.rs with 100% similarity]
nihav-codec-support/src/test/wavwriter.rs [moved from nihav-core/src/test/wavwriter.rs with 98% similarity]
nihav-commonfmt/Cargo.toml
nihav-commonfmt/src/codecs/aac.rs
nihav-commonfmt/src/codecs/atrac3.rs
nihav-commonfmt/src/codecs/clearvideo.rs
nihav-commonfmt/src/codecs/ts102366.rs
nihav-commonfmt/src/lib.rs
nihav-core/Cargo.toml
nihav-core/src/codecs/mod.rs
nihav-core/src/lib.rs
nihav-duck/Cargo.toml
nihav-duck/src/codecs/on2avc.rs
nihav-duck/src/codecs/vp3.rs
nihav-duck/src/codecs/vp5.rs
nihav-duck/src/codecs/vp56.rs
nihav-duck/src/codecs/vp6.rs
nihav-duck/src/codecs/vp7.rs
nihav-duck/src/codecs/vp7dsp.rs
nihav-duck/src/codecs/vpcommon.rs
nihav-duck/src/lib.rs
nihav-game/Cargo.toml
nihav-game/src/codecs/midivid.rs
nihav-game/src/codecs/vmd.rs
nihav-game/src/lib.rs
nihav-indeo/Cargo.toml
nihav-indeo/src/codecs/imc.rs
nihav-indeo/src/codecs/indeo2.rs
nihav-indeo/src/codecs/indeo4.rs
nihav-indeo/src/codecs/indeo5.rs
nihav-indeo/src/codecs/intel263.rs
nihav-indeo/src/lib.rs
nihav-rad/Cargo.toml
nihav-rad/src/codecs/bink2.rs
nihav-rad/src/codecs/binkaud.rs
nihav-rad/src/codecs/binkvid.rs
nihav-rad/src/lib.rs
nihav-realmedia/Cargo.toml
nihav-realmedia/src/codecs/cook.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/rv30dsp.rs
nihav-realmedia/src/codecs/rv40.rs
nihav-realmedia/src/codecs/rv40dsp.rs
nihav-realmedia/src/codecs/rv60.rs
nihav-realmedia/src/codecs/rv60dsp.rs
nihav-realmedia/src/lib.rs

similarity index 71%
copy from nihav-core/Cargo.toml
copy to nihav-codec-support/Cargo.toml
index e898b04a5aa85445ef2a7d90f860a8d98a722222..c302a167ae1d3f02e0bfdae89be78deef06b9d16 100644 (file)
@@ -1,14 +1,14 @@
 [package]
-name = "nihav_core"
+name = "nihav_codec_support"
 version = "0.1.0"
 authors = ["Kostya Shishkov <kostya.shishkov@gmail.com>"]
 edition = "2018"
 
-[features]
-default = ["decoders", "demuxers"]
+[dependencies.nihav_core]
+path = "../nihav-core"
 
-decoders = []
-demuxers = []
+[features]
+default = []
 
 blockdsp = []
 h263 = ["blockdsp"]
similarity index 99%
rename from nihav-core/src/codecs/blockdsp.rs
rename to nihav-codec-support/src/codecs/blockdsp.rs
index 0b66527ea9b67e1098416b3a2022a0ff288b9fe5..da92742cec741a09514379aa029ea6eb4b5bf163 100644 (file)
@@ -1,5 +1,5 @@
 //! Various pixel block manipulation functions.
-use crate::frame::*;
+use nihav_core::frame::*;
 
 /// Puts YUV420 16x16 macroblock data onto picture in the requested place.
 pub fn put_blocks(buf: &mut NAVideoBuffer<u8>, xpos: usize, ypos: usize, blk: &[[i16;64]; 6]) {
similarity index 99%
rename from nihav-core/src/codecs/h263/code.rs
rename to nihav-codec-support/src/codecs/h263/code.rs
index 1f101a27f8c81a4b4a94f10de5064f5eec697616..d794c692d8eef81170616e23fcbc20ad894a1064 100644 (file)
@@ -1,4 +1,4 @@
-use crate::frame::NAVideoBuffer;
+use nihav_core::frame::NAVideoBuffer;
 use super::{BlockDSP, CBPInfo, MV};
 use super::super::blockdsp;
 //use super::h263data::*;
similarity index 99%
rename from nihav-core/src/codecs/h263/data.rs
rename to nihav-codec-support/src/codecs/h263/data.rs
index de827d461e1ceb86a0b24b722cc4d8f4d9455583..9a2d4a226edf0ea64313011c2f6075d305508708 100644 (file)
@@ -1,4 +1,4 @@
-use crate::io::codebook::CodebookDescReader;
+use nihav_core::io::codebook::CodebookDescReader;
 
 #[allow(dead_code)]
 pub const H263_SCALES: &[u8] = &[
similarity index 99%
rename from nihav-core/src/codecs/h263/decoder.rs
rename to nihav-codec-support/src/codecs/h263/decoder.rs
index 494c0e353e4ce2f959232ddeb465105e9c5415c0..929854af4929608baf96cd43b0d471d1760d0be3 100644 (file)
@@ -1,10 +1,11 @@
 //use std::mem;
-use crate::frame::*;
+use nihav_core::codecs::DecoderError;
+use nihav_core::frame::*;
 use super::super::*;
 use super::super::blockdsp;
 use super::*;
 //use super::code::*;
-use crate::formats;
+use nihav_core::formats;
 
 #[allow(dead_code)]
 struct MVInfo {
similarity index 99%
rename from nihav-core/src/codecs/h263/mod.rs
rename to nihav-codec-support/src/codecs/h263/mod.rs
index 6f3d548b01a939520fe02d06b66b802aaa8d3749..33d71baa580a97d56ee9349ac6ed9d4ce7b5f8e2 100644 (file)
@@ -1,5 +1,6 @@
-use super::{DecoderResult, MV, ZERO_MV};
-use crate::frame::NAVideoBuffer;
+use nihav_core::codecs::DecoderResult;
+use super::{MV, ZERO_MV};
+use nihav_core::frame::NAVideoBuffer;
 
 #[allow(clippy::many_single_char_names)]
 pub mod code;
similarity index 68%
copy from nihav-core/src/codecs/mod.rs
copy to nihav-codec-support/src/codecs/mod.rs
index b409f67f17eac132bf240d89107e57708811c600..4353ad969e204d014695e4f441ba0748f8bf6b3d 100644 (file)
@@ -1,58 +1,9 @@
-//! Decoder interface definitions.
+//! Decoder support functions and definitions.
 use std::fmt;
 use std::ops::{Add, AddAssign, Sub, SubAssign};
 
-pub use crate::frame::*;
+pub use nihav_core::frame::*;
 use std::mem;
-use crate::io::byteio::ByteIOError;
-use crate::io::bitreader::BitReaderError;
-use crate::io::codebook::CodebookError;
-
-/// A list specifying general decoding errors.
-#[derive(Debug,Clone,Copy,PartialEq)]
-#[allow(dead_code)]
-pub enum DecoderError {
-    /// No frame was provided.
-    NoFrame,
-    /// Allocation failed.
-    AllocError,
-    /// Operation requires repeating.
-    TryAgain,
-    /// Invalid input data was provided.
-    InvalidData,
-    /// Provided input turned out to be incomplete.
-    ShortData,
-    /// Decoder could not decode provided frame because it references some missing previous frame.
-    MissingReference,
-    /// Feature is not implemented.
-    NotImplemented,
-    /// Some bug in decoder. It should not happen yet it might.
-    Bug,
-}
-
-/// A specialised `Result` type for decoding operations.
-pub type DecoderResult<T> = Result<T, DecoderError>;
-
-impl From<ByteIOError> for DecoderError {
-    fn from(_: ByteIOError) -> Self { DecoderError::ShortData }
-}
-
-impl From<BitReaderError> for DecoderError {
-    fn from(e: BitReaderError) -> Self {
-        match e {
-            BitReaderError::BitstreamEnd => DecoderError::ShortData,
-            _ => DecoderError::InvalidData,
-        }
-    }
-}
-
-impl From<CodebookError> for DecoderError {
-    fn from(_: CodebookError) -> Self { DecoderError::InvalidData }
-}
-
-impl From<AllocatorError> for DecoderError {
-    fn from(_: AllocatorError) -> Self { DecoderError::AllocError }
-}
 
 /// Frame manager for hold-and-modify codecs.
 ///
@@ -260,7 +211,7 @@ impl Default for IPBShuffler {
 /// # Examples
 ///
 /// ```
-/// use nihav_core::codecs::MV;
+/// use nihav_codec_support::codecs::MV;
 ///
 /// let mv0 = MV::new(1, 3);
 /// let mv1 = MV { x: 2, y: 3 }; // choose whatever style you prefer
@@ -343,92 +294,12 @@ impl fmt::Display for MV {
     }
 }
 
-/// Auxiliary structure for storing data used by decoder but also controlled by the caller.
-pub struct NADecoderSupport {
-    /// Frame buffer pool for 8-bit or packed video frames.
-    pub pool_u8:        NAVideoBufferPool<u8>,
-    /// Frame buffer pool for 16-bit video frames.
-    pub pool_u16:       NAVideoBufferPool<u16>,
-    /// Frame buffer pool for 32-bit video frames.
-    pub pool_u32:       NAVideoBufferPool<u32>,
-}
-
-impl NADecoderSupport {
-    /// Constructs a new instance of `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() }
-}
-
-/// Decoder trait.
-pub trait NADecoder {
-    /// Initialises the decoder.
-    ///
-    /// It takes [`NADecoderSupport`] allocated by the caller and `NACodecInfoRef` provided by demuxer.
-    ///
-    /// [`NADecoderSupport`]: ./struct.NADecoderSupport.html
-    fn init(&mut self, supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()>;
-    /// Decodes a single frame.
-    fn decode(&mut self, supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef>;
-    /// Tells decoder to clear internal state (e.g. after error or seeking).
-    fn flush(&mut self);
-}
-
-/// Decoder information using during creating a decoder for requested codec.
-#[derive(Clone,Copy)]
-pub struct DecoderInfo {
-    /// Short decoder name.
-    pub name: &'static str,
-    /// The function that creates a decoder instance.
-    pub get_decoder: fn () -> Box<dyn NADecoder + Send>,
-}
-
 #[cfg(any(feature="blockdsp"))]
 pub mod blockdsp;
 
 #[cfg(feature="h263")]
 pub mod h263;
 
-/// Structure for registering known decoders.
-///
-/// It is supposed to be filled using `register_all_codecs()` from some decoders crate and then it can be used to create decoders for the requested codecs.
-#[derive(Default)]
-pub struct RegisteredDecoders {
-    decs:   Vec<DecoderInfo>,
-}
-
-impl RegisteredDecoders {
-    /// Constructs a new instance of `RegisteredDecoders`.
-    pub fn new() -> Self {
-        Self { decs: Vec::new() }
-    }
-    /// Adds another decoder to the registry.
-    pub fn add_decoder(&mut self, dec: DecoderInfo) {
-        self.decs.push(dec);
-    }
-    /// Searches for the decoder for the provided name and returns a function for creating it on success.
-    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);
-            }
-        }
-        None
-    }
-    /// Provides an iterator over currently registered decoders.
-    pub fn iter(&self) -> std::slice::Iter<DecoderInfo> {
-        self.decs.iter()
-    }
-}
-
 /// The common 8x8 zigzag scan.
 pub const ZIGZAG: [usize; 64] = [
      0,  1,  8, 16,  9,  2,  3, 10,
similarity index 97%
rename from nihav-core/src/data/mod.rs
rename to nihav-codec-support/src/data/mod.rs
index 65abbf6696a75431335b68fbf4d2585e8cae7e37..35a89736b72075a71e6d4305b9bc667e6795f401 100644 (file)
@@ -10,7 +10,7 @@
 ///
 /// Create a cache for one line and use top pixel for prediction:
 /// ```
-/// use nihav_core::data::GenericCache;
+/// use nihav_codec_support::data::GenericCache;
 ///
 /// # let width = 640;
 /// # let height = 480;
diff --git a/nihav-codec-support/src/lib.rs b/nihav-codec-support/src/lib.rs
new file mode 100644 (file)
index 0000000..e2c2ef6
--- /dev/null
@@ -0,0 +1,19 @@
+//! Code and data for easier development of NihAV decoders.
+#[allow(clippy::cast_lossless)]
+#[allow(clippy::identity_op)]
+#[allow(clippy::too_many_arguments)]
+#[allow(clippy::unreadable_literal)]
+pub mod codecs;
+
+#[cfg(feature="dsp")]
+#[allow(clippy::excessive_precision)]
+#[allow(clippy::identity_op)]
+#[allow(clippy::needless_range_loop)]
+#[allow(clippy::unreadable_literal)]
+pub mod dsp;
+
+pub mod data;
+
+pub mod test;
+
+extern crate nihav_core;
similarity index 98%
rename from nihav-core/src/test/dec_video.rs
rename to nihav-codec-support/src/test/dec_video.rs
index 1dc2bed1f930e27f38907f3d686060625ee65836..cca4cb44bbfb2d06289b17b035f99d865a3d25bf 100644 (file)
@@ -1,11 +1,11 @@
 //! Routines for testing decoders.
 use std::fs::File;
 use std::io::prelude::*;
-use crate::frame::*;
-use crate::codecs::*;
-use crate::demuxers::*;
-//use crate::io::byteio::*;
-use crate::scale::*;
+use nihav_core::frame::*;
+use nihav_core::codecs::*;
+use nihav_core::demuxers::*;
+//use nihav_core::io::byteio::*;
+use nihav_core::scale::*;
 use super::wavwriter::WavWriter;
 use super::md5::MD5;
 pub use super::ExpectedTestResult;
@@ -435,8 +435,8 @@ fn frame_checksum(md5: &mut MD5, frm: NAFrameRef) {
 ///
 /// Test RealVideo 4 decoder in test stream:
 /// ```no_run
-/// use nihav_core::test::ExpectedTestResult;
-/// use nihav_core::test::dec_video::test_decoding;
+/// use nihav_codec_support::test::ExpectedTestResult;
+/// use nihav_codec_support::test::dec_video::test_decoding;
 /// use nihav_core::codecs::RegisteredDecoders;
 /// use nihav_core::demuxers::RegisteredDemuxers;
 ///
similarity index 98%
rename from nihav-core/src/test/wavwriter.rs
rename to nihav-codec-support/src/test/wavwriter.rs
index 50b194945c1dfe535d8bdb14d32d0c572f22da43..982fbc35105978fe46bae406d571b4bfca3b7f1a 100644 (file)
@@ -1,6 +1,6 @@
 //! Audio output in WAV format.
-use crate::io::byteio::*;
-use crate::frame::*;
+use nihav_core::io::byteio::*;
+use nihav_core::frame::*;
 use std::io::SeekFrom;
 
 /// WAVE output writer.
index 1ab9d0ca57780779de76b4c12ac36076399fcca1..396f1899a716b114123bd32e8f41bf5f03337eb3 100644 (file)
@@ -6,6 +6,9 @@ edition = "2018"
 
 [dependencies.nihav_core]
 path = "../nihav-core"
+
+[dependencies.nihav_codec_support]
+path = "../nihav-codec-support"
 features = ["h263", "mdct", "fft", "dsp_window"]
 
 [dev-dependencies]
index 290868a193de4102aac9da4abf3463f896377492..b6898623cc92a4bc14347ef945aa09883951e0aa 100644 (file)
@@ -1,8 +1,8 @@
 use nihav_core::formats::*;
 use nihav_core::frame::*;
 use nihav_core::codecs::*;
-use nihav_core::dsp::mdct::IMDCT;
-use nihav_core::dsp::window::*;
+use nihav_codec_support::dsp::mdct::IMDCT;
+use nihav_codec_support::dsp::window::*;
 use nihav_core::io::bitreader::*;
 use nihav_core::io::codebook::*;
 use std::fmt;
index 044fea69685d1d02863beb42eaa28bba2d3a8098..02277425c672427a0870d3492c4cab94b009185d 100644 (file)
@@ -4,7 +4,7 @@ use nihav_core::codecs::*;
 use nihav_core::io::bitreader::*;
 use nihav_core::io::byteio::*;
 use nihav_core::io::codebook::*;
-use nihav_core::dsp::mdct::IMDCT;
+use nihav_codec_support::dsp::mdct::IMDCT;
 use std::f32::consts;
 
 #[derive(Clone,Copy,PartialEq)]
index 47357311668dcfb1d7a59efe4ebaffddd626be36..ea3a9f2143239c4122a1aeecb3eaa55c09908638 100644 (file)
@@ -3,6 +3,7 @@ use nihav_core::io::bitreader::*;
 use nihav_core::io::codebook::*;
 use nihav_core::formats;
 use nihav_core::codecs::*;
+use nihav_codec_support::codecs::{HAMShuffler, MV, ZERO_MV, ZIGZAG};
 
 struct CLVDCCodeReader { }
 struct CLVACCodeReader { }
index cdad8900f2aebfe92b0393cdbc399cfd1290ad6a..3f5de521eb04b70defbe791a1954eec6e8271033 100644 (file)
@@ -2,7 +2,7 @@ use nihav_core::formats::*;
 use nihav_core::frame::*;
 use nihav_core::codecs::*;
 use nihav_core::io::bitreader::*;
-use nihav_core::dsp::fft::*;
+use nihav_codec_support::dsp::fft::*;
 use std::str::FromStr;
 use std::f32::consts;
 
index ce931feb321cb81f43d13819a874a0ee069802d7..cdb70ec2ad6c3a5a718a3c8b673fd760884a1a5b 100644 (file)
@@ -1,4 +1,5 @@
 extern crate nihav_core;
+extern crate nihav_codec_support;
 
 #[cfg(feature="decoders")]
 #[allow(clippy::unreadable_literal)]
index e898b04a5aa85445ef2a7d90f860a8d98a722222..9b0416476b3fde41330cbdb7f758e0c2bb9b220c 100644 (file)
@@ -9,12 +9,3 @@ default = ["decoders", "demuxers"]
 
 decoders = []
 demuxers = []
-
-blockdsp = []
-h263 = ["blockdsp"]
-
-dsp = []
-dct = ["dsp"]
-fft = ["dsp"]
-mdct = ["fft", "dsp"]
-dsp_window = ["dsp"]
dissimilarity index 68%
index b409f67f17eac132bf240d89107e57708811c600..9aced0763beeb6758e9f3b50cce65599a055c640 100644 (file)
-//! Decoder interface definitions.
-use std::fmt;
-use std::ops::{Add, AddAssign, Sub, SubAssign};
-
-pub use crate::frame::*;
-use std::mem;
-use crate::io::byteio::ByteIOError;
-use crate::io::bitreader::BitReaderError;
-use crate::io::codebook::CodebookError;
-
-/// A list specifying general decoding errors.
-#[derive(Debug,Clone,Copy,PartialEq)]
-#[allow(dead_code)]
-pub enum DecoderError {
-    /// No frame was provided.
-    NoFrame,
-    /// Allocation failed.
-    AllocError,
-    /// Operation requires repeating.
-    TryAgain,
-    /// Invalid input data was provided.
-    InvalidData,
-    /// Provided input turned out to be incomplete.
-    ShortData,
-    /// Decoder could not decode provided frame because it references some missing previous frame.
-    MissingReference,
-    /// Feature is not implemented.
-    NotImplemented,
-    /// Some bug in decoder. It should not happen yet it might.
-    Bug,
-}
-
-/// A specialised `Result` type for decoding operations.
-pub type DecoderResult<T> = Result<T, DecoderError>;
-
-impl From<ByteIOError> for DecoderError {
-    fn from(_: ByteIOError) -> Self { DecoderError::ShortData }
-}
-
-impl From<BitReaderError> for DecoderError {
-    fn from(e: BitReaderError) -> Self {
-        match e {
-            BitReaderError::BitstreamEnd => DecoderError::ShortData,
-            _ => DecoderError::InvalidData,
-        }
-    }
-}
-
-impl From<CodebookError> for DecoderError {
-    fn from(_: CodebookError) -> Self { DecoderError::InvalidData }
-}
-
-impl From<AllocatorError> for DecoderError {
-    fn from(_: AllocatorError) -> Self { DecoderError::AllocError }
-}
-
-/// Frame manager for hold-and-modify codecs.
-///
-/// This frame manager simplifies frame management for the case when codec decodes new frame by updating parts of the previous frame.
-///
-/// # Examples
-///
-/// ````norun
-/// let mut frame = if is_intra_frame {
-///         allocate_video_frame()
-///     } else {
-///         let ret = shuffler.clone_ref();
-///         if ret.is_none() {
-///             return Err(DecodingError::MissingReference);
-///         }
-///         ret.unwrap()
-///     };
-/// // output data into the frame
-/// shuffler.add_frame(frame.clone()); // tells frame manager to use the frame as the next reference
-/// ````
-#[allow(dead_code)]
-pub struct HAMShuffler {
-    lastframe: Option<NAVideoBufferRef<u8>>,
-}
-
-impl HAMShuffler {
-    /// Constructs a new instance of frame manager.
-    #[allow(dead_code)]
-    pub fn new() -> Self { HAMShuffler { lastframe: None } }
-    /// Clears the reference.
-    #[allow(dead_code)]
-    pub fn clear(&mut self) { self.lastframe = None; }
-    /// Sets a new frame reference.
-    #[allow(dead_code)]
-    pub fn add_frame(&mut self, buf: NAVideoBufferRef<u8>) {
-        self.lastframe = Some(buf);
-    }
-    /// Provides a copy of the reference frame if present or `None` if it is not.
-    #[allow(dead_code)]
-    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().into_ref();
-            Some(newfrm.into_ref())
-        } else {
-            None
-        }
-    }
-    /// Returns the original saved reference frame or `None` if it is not present.
-    #[allow(dead_code)]
-    pub fn get_output_frame(&mut self) -> Option<NAVideoBufferRef<u8>> {
-        match self.lastframe {
-            Some(ref frm) => Some(frm.clone()),
-            None => None,
-        }
-    }
-}
-
-impl Default for HAMShuffler {
-    fn default() -> Self { Self { lastframe: None } }
-}
-
-/// Frame manager for codecs with intra and inter frames.
-///
-/// This frame manager simplifies frame management for the case when codec decodes new frame using previous frame as source of some data.
-///
-/// # Examples
-///
-/// ````norun
-/// let mut frame = allocate_video_frame();
-/// if is_inter_frame {
-///     let ret = shuffler.get_ref();
-///     if ret.is_none() {
-///         return Err(DecodingError::MissingReference);
-///     }
-///     let ref_frame = ret.unwrap();
-///     // keep decoding using data from ref_frame
-/// }
-/// shuffler.add_frame(frame.clone()); // tells frame manager to use the frame as the next reference
-/// ````
-#[allow(dead_code)]
-pub struct IPShuffler {
-    lastframe: Option<NAVideoBufferRef<u8>>,
-}
-
-impl IPShuffler {
-    /// Constructs a new instance of frame manager.
-    #[allow(dead_code)]
-    pub fn new() -> Self { IPShuffler { lastframe: None } }
-    /// Clears the reference.
-    #[allow(dead_code)]
-    pub fn clear(&mut self) { self.lastframe = None; }
-    /// Sets a new frame reference.
-    #[allow(dead_code)]
-    pub fn add_frame(&mut self, buf: NAVideoBufferRef<u8>) {
-        self.lastframe = Some(buf);
-    }
-    /// Returns the original saved reference frame or `None` if it is not present.
-    #[allow(dead_code)]
-    pub fn get_ref(&mut self) -> Option<NAVideoBufferRef<u8>> {
-        if let Some(ref frm) = self.lastframe {
-            Some(frm.clone())
-        } else {
-            None
-        }
-    }
-}
-
-impl Default for IPShuffler {
-    fn default() -> Self { Self { lastframe: None } }
-}
-
-/// Frame manager for codecs with I-, P- and B-frames.
-///
-/// This frame manager simplifies frame management for the case when codec uses I/P/B frame scheme.
-///
-/// # Examples
-///
-/// ````norun
-/// let mut frame = allocate_video_frame();
-/// for mb in all_macroblocks {
-///     // decode macroblock type
-///     match mb_type {
-///         MBType::Inter => {
-///             do_mc(&mut frame, shuffler.get_lastref().unwrap());
-///         },
-///         MBType::BForward => {
-///             do_mc(&mut frame, shuffler.get_b_fwdref().unwrap());
-///         },
-///         MBType::BBackward => {
-///             do_mc(&mut frame, shuffler.get_b_bwdref().unwrap());
-///         },
-///         // handle the rest of cases
-///     };
-/// if is_random_access_frame {
-///     shuffler.clear(); // remove all saved references
-/// }
-/// if is_intra_frame || is_p_frame {
-///     shuffler.add_frame(frame.clone()); // tells frame manager to use the frame as the next reference
-/// }
-/// ````
-#[allow(dead_code)]
-pub struct IPBShuffler {
-    lastframe: Option<NAVideoBufferRef<u8>>,
-    nextframe: Option<NAVideoBufferRef<u8>>,
-}
-
-impl IPBShuffler {
-    /// Constructs a new instance of frame manager.
-    #[allow(dead_code)]
-    pub fn new() -> Self { IPBShuffler { lastframe: None, nextframe: None } }
-    /// Clears the reference.
-    #[allow(dead_code)]
-    pub fn clear(&mut self) { self.lastframe = None; self.nextframe = None; }
-    /// Sets a new frame reference.
-    #[allow(dead_code)]
-    pub fn add_frame(&mut self, buf: NAVideoBufferRef<u8>) {
-        mem::swap(&mut self.lastframe, &mut self.nextframe);
-        self.lastframe = Some(buf);
-    }
-    /// Returns the previous reference frame or `None` if it is not present.
-    #[allow(dead_code)]
-    pub fn get_lastref(&mut self) -> Option<NAVideoBufferRef<u8>> {
-        if let Some(ref frm) = self.lastframe {
-            Some(frm.clone())
-        } else {
-            None
-        }
-    }
-    /// Returns second last reference frame or `None` if it is not present.
-    #[allow(dead_code)]
-    pub fn get_nextref(&mut self) -> Option<NAVideoBufferRef<u8>> {
-        if let Some(ref frm) = self.nextframe {
-            Some(frm.clone())
-        } else {
-            None
-        }
-    }
-    /// Returns the temporally following reference for B-frame or `None` if it is not present.
-    #[allow(dead_code)]
-    pub fn get_b_fwdref(&mut self) -> Option<NAVideoBufferRef<u8>> {
-        if let Some(ref frm) = self.nextframe {
-            Some(frm.clone())
-        } else {
-            None
-        }
-    }
-    /// Returns the temporally preceeding reference for B-frame or `None` if it is not present.
-    #[allow(dead_code)]
-    pub fn get_b_bwdref(&mut self) -> Option<NAVideoBufferRef<u8>> {
-        if let Some(ref frm) = self.lastframe {
-            Some(frm.clone())
-        } else {
-            None
-        }
-    }
-}
-
-impl Default for IPBShuffler {
-    fn default() -> Self { Self { lastframe: None, nextframe: None } }
-}
-
-/// Motion vector data type.
-///
-/// # Examples
-///
-/// ```
-/// use nihav_core::codecs::MV;
-///
-/// let mv0 = MV::new(1, 3);
-/// let mv1 = MV { x: 2, y: 3 }; // choose whatever style you prefer
-/// let mv2 = mv1 - mv0;
-/// let mv_pred = MV::pred(mv0, mv1, mv2); // get median prediction for the vectors (1, 0)
-/// ```
-#[derive(Debug,Clone,Copy,Default,PartialEq)]
-pub struct MV {
-    /// X coordinate of the vector.
-    pub x: i16,
-    /// Y coordinate of the vector.
-    pub y: i16,
-}
-
-#[allow(clippy::many_single_char_names)]
-#[allow(clippy::collapsible_if)]
-impl MV {
-    /// Creates a new motion vector instance.
-    pub fn new(x: i16, y: i16) -> Self { MV{ x, y } }
-    /// Predicts median from provided motion vectors.
-    ///
-    /// Each component of the vector is predicted as the median of corresponding input vector components.
-    pub fn pred(a: MV, b: MV, c: MV) -> Self {
-        let x;
-        if a.x < b.x {
-            if b.x < c.x {
-                x = b.x;
-            } else {
-                if a.x < c.x { x = c.x; } else { x = a.x; }
-            }
-        } else {
-            if b.x < c.x {
-                if a.x < c.x { x = a.x; } else { x = c.x; }
-            } else {
-                x = b.x;
-            }
-        }
-        let y;
-        if a.y < b.y {
-            if b.y < c.y {
-                y = b.y;
-            } else {
-                if a.y < c.y { y = c.y; } else { y = a.y; }
-            }
-        } else {
-            if b.y < c.y {
-                if a.y < c.y { y = a.y; } else { y = c.y; }
-            } else {
-                y = b.y;
-            }
-        }
-        MV { x, y }
-    }
-}
-
-/// Zero motion vector.
-pub const ZERO_MV: MV = MV { x: 0, y: 0 };
-
-impl Add for MV {
-    type Output = MV;
-    fn add(self, other: MV) -> MV { MV { x: self.x + other.x, y: self.y + other.y } }
-}
-
-impl AddAssign for MV {
-    fn add_assign(&mut self, other: MV) { self.x += other.x; self.y += other.y; }
-}
-
-impl Sub for MV {
-    type Output = MV;
-    fn sub(self, other: MV) -> MV { MV { x: self.x - other.x, y: self.y - other.y } }
-}
-
-impl SubAssign for MV {
-    fn sub_assign(&mut self, other: MV) { self.x -= other.x; self.y -= other.y; }
-}
-
-impl fmt::Display for MV {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        write!(f, "{},{}", self.x, self.y)
-    }
-}
-
-/// Auxiliary structure for storing data used by decoder but also controlled by the caller.
-pub struct NADecoderSupport {
-    /// Frame buffer pool for 8-bit or packed video frames.
-    pub pool_u8:        NAVideoBufferPool<u8>,
-    /// Frame buffer pool for 16-bit video frames.
-    pub pool_u16:       NAVideoBufferPool<u16>,
-    /// Frame buffer pool for 32-bit video frames.
-    pub pool_u32:       NAVideoBufferPool<u32>,
-}
-
-impl NADecoderSupport {
-    /// Constructs a new instance of `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() }
-}
-
-/// Decoder trait.
-pub trait NADecoder {
-    /// Initialises the decoder.
-    ///
-    /// It takes [`NADecoderSupport`] allocated by the caller and `NACodecInfoRef` provided by demuxer.
-    ///
-    /// [`NADecoderSupport`]: ./struct.NADecoderSupport.html
-    fn init(&mut self, supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()>;
-    /// Decodes a single frame.
-    fn decode(&mut self, supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef>;
-    /// Tells decoder to clear internal state (e.g. after error or seeking).
-    fn flush(&mut self);
-}
-
-/// Decoder information using during creating a decoder for requested codec.
-#[derive(Clone,Copy)]
-pub struct DecoderInfo {
-    /// Short decoder name.
-    pub name: &'static str,
-    /// The function that creates a decoder instance.
-    pub get_decoder: fn () -> Box<dyn NADecoder + Send>,
-}
-
-#[cfg(any(feature="blockdsp"))]
-pub mod blockdsp;
-
-#[cfg(feature="h263")]
-pub mod h263;
-
-/// Structure for registering known decoders.
-///
-/// It is supposed to be filled using `register_all_codecs()` from some decoders crate and then it can be used to create decoders for the requested codecs.
-#[derive(Default)]
-pub struct RegisteredDecoders {
-    decs:   Vec<DecoderInfo>,
-}
-
-impl RegisteredDecoders {
-    /// Constructs a new instance of `RegisteredDecoders`.
-    pub fn new() -> Self {
-        Self { decs: Vec::new() }
-    }
-    /// Adds another decoder to the registry.
-    pub fn add_decoder(&mut self, dec: DecoderInfo) {
-        self.decs.push(dec);
-    }
-    /// Searches for the decoder for the provided name and returns a function for creating it on success.
-    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);
-            }
-        }
-        None
-    }
-    /// Provides an iterator over currently registered decoders.
-    pub fn iter(&self) -> std::slice::Iter<DecoderInfo> {
-        self.decs.iter()
-    }
-}
-
-/// The common 8x8 zigzag scan.
-pub const ZIGZAG: [usize; 64] = [
-     0,  1,  8, 16,  9,  2,  3, 10,
-    17, 24, 32, 25, 18, 11,  4,  5,
-    12, 19, 26, 33, 40, 48, 41, 34,
-    27, 20, 13,  6,  7, 14, 21, 28,
-    35, 42, 49, 56, 57, 50, 43, 36,
-    29, 22, 15, 23, 30, 37, 44, 51,
-    58, 59, 52, 45, 38, 31, 39, 46,
-    53, 60, 61, 54, 47, 55, 62, 63
-];
+//! Decoder interface definitions.
+pub use crate::frame::*;
+use crate::io::byteio::ByteIOError;
+use crate::io::bitreader::BitReaderError;
+use crate::io::codebook::CodebookError;
+
+/// A list specifying general decoding errors.
+#[derive(Debug,Clone,Copy,PartialEq)]
+#[allow(dead_code)]
+pub enum DecoderError {
+    /// No frame was provided.
+    NoFrame,
+    /// Allocation failed.
+    AllocError,
+    /// Operation requires repeating.
+    TryAgain,
+    /// Invalid input data was provided.
+    InvalidData,
+    /// Provided input turned out to be incomplete.
+    ShortData,
+    /// Decoder could not decode provided frame because it references some missing previous frame.
+    MissingReference,
+    /// Feature is not implemented.
+    NotImplemented,
+    /// Some bug in decoder. It should not happen yet it might.
+    Bug,
+}
+
+/// A specialised `Result` type for decoding operations.
+pub type DecoderResult<T> = Result<T, DecoderError>;
+
+impl From<ByteIOError> for DecoderError {
+    fn from(_: ByteIOError) -> Self { DecoderError::ShortData }
+}
+
+impl From<BitReaderError> for DecoderError {
+    fn from(e: BitReaderError) -> Self {
+        match e {
+            BitReaderError::BitstreamEnd => DecoderError::ShortData,
+            _ => DecoderError::InvalidData,
+        }
+    }
+}
+
+impl From<CodebookError> for DecoderError {
+    fn from(_: CodebookError) -> Self { DecoderError::InvalidData }
+}
+
+impl From<AllocatorError> for DecoderError {
+    fn from(_: AllocatorError) -> Self { DecoderError::AllocError }
+}
+
+/// Auxiliary structure for storing data used by decoder but also controlled by the caller.
+pub struct NADecoderSupport {
+    /// Frame buffer pool for 8-bit or packed video frames.
+    pub pool_u8:        NAVideoBufferPool<u8>,
+    /// Frame buffer pool for 16-bit video frames.
+    pub pool_u16:       NAVideoBufferPool<u16>,
+    /// Frame buffer pool for 32-bit video frames.
+    pub pool_u32:       NAVideoBufferPool<u32>,
+}
+
+impl NADecoderSupport {
+    /// Constructs a new instance of `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() }
+}
+
+/// Decoder trait.
+pub trait NADecoder {
+    /// Initialises the decoder.
+    ///
+    /// It takes [`NADecoderSupport`] allocated by the caller and `NACodecInfoRef` provided by demuxer.
+    ///
+    /// [`NADecoderSupport`]: ./struct.NADecoderSupport.html
+    fn init(&mut self, supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()>;
+    /// Decodes a single frame.
+    fn decode(&mut self, supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef>;
+    /// Tells decoder to clear internal state (e.g. after error or seeking).
+    fn flush(&mut self);
+}
+
+/// Decoder information using during creating a decoder for requested codec.
+#[derive(Clone,Copy)]
+pub struct DecoderInfo {
+    /// Short decoder name.
+    pub name: &'static str,
+    /// The function that creates a decoder instance.
+    pub get_decoder: fn () -> Box<dyn NADecoder + Send>,
+}
+
+/// Structure for registering known decoders.
+///
+/// It is supposed to be filled using `register_all_codecs()` from some decoders crate and then it can be used to create decoders for the requested codecs.
+#[derive(Default)]
+pub struct RegisteredDecoders {
+    decs:   Vec<DecoderInfo>,
+}
+
+impl RegisteredDecoders {
+    /// Constructs a new instance of `RegisteredDecoders`.
+    pub fn new() -> Self {
+        Self { decs: Vec::new() }
+    }
+    /// Adds another decoder to the registry.
+    pub fn add_decoder(&mut self, dec: DecoderInfo) {
+        self.decs.push(dec);
+    }
+    /// Searches for the decoder for the provided name and returns a function for creating it on success.
+    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);
+            }
+        }
+        None
+    }
+    /// Provides an iterator over currently registered decoders.
+    pub fn iter(&self) -> std::slice::Iter<DecoderInfo> {
+        self.decs.iter()
+    }
+}
index 2652c14f0dcb7125431e02100b230972e93a747e..a53f304b2b8013cd1e560bfbfd7c55dacdf1e682 100644 (file)
@@ -21,14 +21,3 @@ pub mod detect;
 pub mod reorder;
 pub mod scale;
 pub mod soundcvt;
-
-#[cfg(feature="dsp")]
-#[allow(clippy::excessive_precision)]
-#[allow(clippy::identity_op)]
-#[allow(clippy::needless_range_loop)]
-#[allow(clippy::unreadable_literal)]
-pub mod dsp;
-
-pub mod data;
-
-pub mod test;
index 4f569639b71b85f3024f0c1e803134cf959d2268..c5c65d2126b55b793e11be3a21d039978aa73ce2 100644 (file)
@@ -6,6 +6,9 @@ edition = "2018"
 
 [dependencies.nihav_core]
 path = "../nihav-core"
+
+[dependencies.nihav_codec_support]
+path = "../nihav-codec-support"
 features = ["fft", "dsp_window", "blockdsp"]
 
 [dev-dependencies]
index b0605017555861be3ecef6fc9dd024dc782fd81c..f2f5a3d0a6dbd9b7ac16fb6dd0095be9991882a1 100644 (file)
@@ -4,8 +4,8 @@ use nihav_core::io::byteio::read_u16le;
 use nihav_core::io::bitreader::*;
 use nihav_core::io::codebook::*;
 use nihav_core::io::intcode::*;
-use nihav_core::dsp::fft::*;
-use nihav_core::dsp::mdct::IMDCT;
+use nihav_codec_support::dsp::fft::*;
+use nihav_codec_support::dsp::mdct::IMDCT;
 
 use std::str::FromStr;
 
index 3b8560ee0a1bd09d2c24f1ba906853323ff4dbc3..b7fefcffe20e63384b34f3550bd35348d88c5e7b 100644 (file)
@@ -1,7 +1,8 @@
 use std::mem;
 use std::ptr;
 use nihav_core::codecs::*;
-use nihav_core::codecs::blockdsp::*;
+use nihav_codec_support::codecs::{MV, ZERO_MV, ZIGZAG};
+use nihav_codec_support::codecs::blockdsp::*;
 use nihav_core::io::bitreader::*;
 use nihav_core::io::codebook::*;
 use nihav_core::io::intcode::*;
index 35244df9da80286e70df20ccc2dbf963f5ea6443..4076989be3a53d4f1fe44ae2c0883a88263b7041 100644 (file)
@@ -1,5 +1,6 @@
 use nihav_core::codecs::*;
 use nihav_core::io::bitreader::*;
+use nihav_codec_support::codecs::{MV, ZIGZAG};
 use super::vpcommon::*;
 use super::vp56::*;
 
index de3a8498c939517553e38996b5a83026070c1d07..6f9f18c15b5538e7aec45f18b65720591904ed47 100644 (file)
@@ -1,5 +1,6 @@
 use nihav_core::codecs::*;
 use nihav_core::io::bitreader::*;
+use nihav_codec_support::codecs::{MV, ZERO_MV};
 use super::vpcommon::*;
 
 pub const TOKEN_LARGE: u8 = 5;
index da0fe400d1e93f31d003ccf6388dd9cbb10e87ce..9a6add7b7d0eb9cabedb999b8dae32d5af3590b4 100644 (file)
@@ -1,6 +1,7 @@
 use nihav_core::codecs::*;
 use nihav_core::io::bitreader::*;
-use nihav_core::codecs::blockdsp::edge_emu;
+use nihav_codec_support::codecs::{MV, ZIGZAG};
+use nihav_codec_support::codecs::blockdsp::edge_emu;
 use super::vpcommon::*;
 use super::vp56::*;
 
index 9b3eef31d34ce62bcbbe40d340febe10922675a7..9464def88ca51e86dc04074846fcdf06d828efa0 100644 (file)
@@ -1,6 +1,7 @@
 use nihav_core::codecs::*;
 use nihav_core::io::byteio::*;
-use nihav_core::data::GenericCache;
+use nihav_codec_support::codecs::{MV, ZERO_MV};
+use nihav_codec_support::data::GenericCache;
 use super::vpcommon::*;
 use super::vp7data::*;
 use super::vp7dsp::*;
index afd035f90a114066f69d2a22151399bc9f35bda0..6dfc98fb36ec3607c784950cea24d79c11d13ca0 100644 (file)
@@ -1,5 +1,5 @@
 use nihav_core::frame::*;
-use nihav_core::codecs::blockdsp::edge_emu;
+use nihav_codec_support::codecs::blockdsp::edge_emu;
 
 fn clip_u8(val: i16) -> u8 {
     val.max(0).min(255) as u8
index 8dbe16184a555889867bfd0b2fe7f48ea15d315f..f41b89b1b5ebaefefe7f9c5b39c71eb93aed40a0 100644 (file)
@@ -1,5 +1,6 @@
 use nihav_core::codecs::*;
-use nihav_core::codecs::blockdsp::*;
+use nihav_codec_support::codecs::blockdsp;
+use nihav_codec_support::codecs::blockdsp::*;
 
 pub const VP_YUVA420_FORMAT: NAPixelFormaton = NAPixelFormaton{
         model:      ColorModel::YUV(YUVSubmodel::YUVJ),
index 1760338a58897655352f2b859c42635b61bd8cf6..4e85ac506f3070142a4b3b0a090ac98aedfedcc1 100644 (file)
@@ -1,4 +1,5 @@
 extern crate nihav_core;
+extern crate nihav_codec_support;
 
 mod codecs;
 
index a429135d5aec5d0229d05abade690bd8a8aa2071..b52dabb68b8d19fa09e65b0fd27c0b916129ea9f 100644 (file)
@@ -8,6 +8,10 @@ edition = "2018"
 path = "../nihav-core"
 features = []
 
+[dependencies.nihav_codec_support]
+path = "../nihav-codec-support"
+features = []
+
 [dev-dependencies]
 nihav_commonfmt = { path = "../nihav-commonfmt" }
 
index df788f6e009cc3ceee911dd02d588da73c86276b..48456d6af427e9a94a8c39b0289129013acda15c 100644 (file)
@@ -1,5 +1,6 @@
 use nihav_core::codecs::*;
 use nihav_core::io::byteio::*;
+use nihav_codec_support::codecs::HAMShuffler;
 
 #[derive(Default)]
 struct MidividDecoder {
index 1f4964e7d2d9f487ce2faf514fbec8f51ad2a5c3..987408a2251ae9e26a79f6f3e23f97f60e12c665 100644 (file)
@@ -1,5 +1,6 @@
 use nihav_core::codecs::*;
 use nihav_core::io::byteio::*;
+use nihav_codec_support::codecs::HAMShuffler;
 use std::str::FromStr;
 
 macro_rules! lz_op {
index 20207be61cfb848f1fd3e7abab86c52bdf4e5f9e..a91da7bfb95b5fe6469fc86caa4b0ce14f80f3eb 100644 (file)
@@ -1,4 +1,5 @@
 extern crate nihav_core;
+extern crate nihav_codec_support;
 
 mod codecs;
 pub use codecs::game_register_all_codecs;
index 901d0e408b5d219cd246b908472ca29cba9e88fd..ffa83900b902d423f766dc3e944d7bcbd8e934a6 100644 (file)
@@ -6,6 +6,9 @@ edition = "2018"
 
 [dependencies.nihav_core]
 path = "../nihav-core"
+
+[dependencies.nihav_codec_support]
+path = "../nihav-codec-support"
 features = ["h263", "fft", "dsp_window"]
 
 [dev-dependencies]
index e49da707b21fdcf8079889125d112b0aec8871d3..cc801b5b83fa0cca3aedda3a1fa01db8f00813ee 100644 (file)
@@ -7,8 +7,8 @@ use nihav_core::frame::*;
 use nihav_core::codecs::*;
 use nihav_core::io::bitreader::*;
 use nihav_core::io::codebook::*;
-use nihav_core::dsp::fft::*;
-use nihav_core::dsp::window::*;
+use nihav_codec_support::dsp::fft::*;
+use nihav_codec_support::dsp::window::*;
 
 const BANDS:      usize =  32;
 const COEFFS:     usize = 256;
index 2e1d7c65c77d04c71ca3a40791e61d5021b144ea..e1571fc0475a903bfb426e178fb53cebe3d897bd 100644 (file)
@@ -2,6 +2,7 @@ use nihav_core::io::bitreader::*;
 use nihav_core::io::codebook::*;
 use nihav_core::formats;
 use nihav_core::codecs::*;
+use nihav_codec_support::codecs::HAMShuffler;
 
 static INDEO2_DELTA_TABLE: [[u8; 256]; 4] = [
     [
index 9ae4158970fa5b7a4e2646bb414dec866880b2eb..3fe3f2bdfc7999bef88c8918aba09720a731b37f 100644 (file)
@@ -2,6 +2,7 @@ use nihav_core::io::bitreader::*;
 use nihav_core::formats;
 use nihav_core::frame::*;
 use nihav_core::codecs::*;
+use nihav_codec_support::codecs::ZIGZAG;
 use super::ivi::*;
 use super::ivibr::*;
 
index 933958d787b32cb3832142cdf557421d1d0700a1..ba64e6b2ebbddad1fd23c481b0bf61bf35a99099 100644 (file)
@@ -2,6 +2,7 @@ use nihav_core::io::bitreader::*;
 use nihav_core::formats;
 use nihav_core::frame::*;
 use nihav_core::codecs::*;
+use nihav_codec_support::codecs::ZIGZAG;
 use super::ivi::*;
 use super::ivibr::*;
 
index 18c759dcc76a189be9e53023c02f77db287adec0..b003b672c0303bd2fc14e5438b39f88bcd4b8776 100644 (file)
@@ -3,10 +3,11 @@ use nihav_core::io::codebook::*;
 use nihav_core::formats;
 use nihav_core::frame::*;
 use nihav_core::codecs::*;
-use nihav_core::codecs::h263::*;
-use nihav_core::codecs::h263::decoder::*;
-use nihav_core::codecs::h263::data::*;
-use nihav_core::codecs::h263::code::H263BlockDSP;
+use nihav_codec_support::codecs::{MV, ZIGZAG};
+use nihav_codec_support::codecs::h263::*;
+use nihav_codec_support::codecs::h263::decoder::*;
+use nihav_codec_support::codecs::h263::data::*;
+use nihav_codec_support::codecs::h263::code::H263BlockDSP;
 
 #[allow(dead_code)]
 struct Tables {
index 1ceba4e5e2b11820adcf43ad239fd4ebcf1f2ae0..844b69fa4b326fa82ed2cd24c0ab6d90bd38641e 100644 (file)
@@ -1,4 +1,5 @@
 extern crate nihav_core;
+extern crate nihav_codec_support;
 
 #[allow(clippy::collapsible_if)]
 #[allow(clippy::identity_op)]
index 0fe09935759dc224b1549adee1c6da93291d9300..d155427e3df82d486c082bffc3c451d478ce9b5d 100644 (file)
@@ -6,6 +6,9 @@ edition = "2018"
 
 [dependencies.nihav_core]
 path = "../nihav-core"
+
+[dependencies.nihav_codec_support]
+path = "../nihav-codec-support"
 features = ["dct", "fft"]
 
 [features]
index 5f1fefdad043096743b7de4bf399d2e0f6bfefee..c78a5d626b26245c28183178d1ee00b286868f2c 100644 (file)
@@ -4,6 +4,7 @@ use nihav_core::io::byteio::*;
 use nihav_core::io::bitreader::*;
 use nihav_core::io::codebook::*;
 use nihav_core::io::intcode::*;
+use nihav_codec_support::codecs::{IPShuffler, MV, ZERO_MV};
 
 macro_rules! mktag {
     ($a:expr, $b:expr, $c:expr, $d:expr) => ({
index 7e34739f07a2f6dbb8992ead35b3aed168e96e5a..29b8f98abfa439a3d5ca04f5d909f2ebde2ec583 100644 (file)
@@ -1,6 +1,6 @@
 use nihav_core::codecs::*;
-use nihav_core::dsp::dct::*;
-use nihav_core::dsp::fft::*;
+use nihav_codec_support::dsp::dct::*;
+use nihav_codec_support::dsp::fft::*;
 use nihav_core::io::bitreader::*;
 use std::f32::consts;
 use std::str::FromStr;
index 920d8d560eb74339913fbfc665047a43064c1d2d..12ad2cdde32e3fd2dfdb9a42b7c9f1463553e634 100644 (file)
@@ -3,6 +3,7 @@ use nihav_core::codecs::*;
 use nihav_core::io::byteio::*;
 use nihav_core::io::bitreader::*;
 use nihav_core::io::codebook::*;
+use nihav_codec_support::codecs::{IPShuffler, HAMShuffler};
 
 const SKIP_BLOCK: u8 = 0;
 const SCALED_BLOCK: u8 = 1;
index 604d0ca590356a621f3e0165b158ee0d2162d6e1..21ef16664f4a1dcf9c302b5bc781480cb4835488 100644 (file)
@@ -1,4 +1,5 @@
 extern crate nihav_core;
+extern crate nihav_codec_support;
 
 #[cfg(feature="decoders")]
 #[allow(clippy::cast_lossless)]
index 57db27187c2e27279f3bb9297a0009f3a0c80de7..dc3c0d68e81b05362bf3f18f46426f4e4be5154b 100644 (file)
@@ -6,6 +6,9 @@ edition = "2018"
 
 [dependencies.nihav_core]
 path = "../nihav-core"
+
+[dependencies.nihav_codec_support]
+path = "../nihav-codec-support"
 features = ["h263", "mdct", "blockdsp"]
 
 [features]
index 85c8853ff3f9c291564d0eedc940d7c4226c0099..a48cf847f67fc0e2f48f6e0c84c13b592a8d2a40 100644 (file)
@@ -1,7 +1,7 @@
 use nihav_core::formats::*;
 use nihav_core::frame::*;
 use nihav_core::codecs::*;
-use nihav_core::dsp::mdct::IMDCT;
+use nihav_codec_support::dsp::mdct::IMDCT;
 use nihav_core::io::bitreader::*;
 use nihav_core::io::byteio::{ByteReader, MemoryReader};
 use nihav_core::io::codebook::*;
index 320968ad689e9bf11c05d920996229ed3621e3d3..0e2ad986f828a7aa83e003db26e98668e887c1c7 100644 (file)
@@ -3,10 +3,11 @@ use nihav_core::io::codebook::*;
 use nihav_core::formats;
 use nihav_core::frame::*;
 use nihav_core::codecs::*;
-use nihav_core::codecs::h263::*;
-use nihav_core::codecs::h263::code::H263BlockDSP;
-use nihav_core::codecs::h263::decoder::*;
-use nihav_core::codecs::h263::data::*;
+use nihav_codec_support::codecs::{MV, ZIGZAG};
+use nihav_codec_support::codecs::h263::*;
+use nihav_codec_support::codecs::h263::code::H263BlockDSP;
+use nihav_codec_support::codecs::h263::decoder::*;
+use nihav_codec_support::codecs::h263::data::*;
 
 #[allow(dead_code)]
 struct Tables {
index b3f1e560e0e2e1ee64ccc6c3f4239dfcea264b1d..4fae009db72fc9afadd212e7ac5fd8096346f09c 100644 (file)
@@ -3,10 +3,11 @@ use nihav_core::io::codebook::*;
 use nihav_core::formats;
 use nihav_core::frame::*;
 use nihav_core::codecs::*;
-use nihav_core::codecs::h263::*;
-use nihav_core::codecs::h263::code::H263BlockDSP;
-use nihav_core::codecs::h263::decoder::*;
-use nihav_core::codecs::h263::data::*;
+use nihav_codec_support::codecs::{MV, ZIGZAG};
+use nihav_codec_support::codecs::h263::*;
+use nihav_codec_support::codecs::h263::code::H263BlockDSP;
+use nihav_codec_support::codecs::h263::decoder::*;
+use nihav_codec_support::codecs::h263::data::*;
 
 
 #[allow(dead_code)]
index e38c89cc2580f6685ca873350cf0b41eccce723d..e005e90d58e4d1fe69bb3d1953295fddb7e62882 100644 (file)
@@ -3,6 +3,7 @@ use nihav_core::io::bitreader::*;
 use nihav_core::io::intcode::*;
 use nihav_core::frame::*;
 use nihav_core::codecs::*;
+use nihav_codec_support::codecs::{MV, ZERO_MV};
 use super::rv3040::*;
 use super::rv30dsp::*;
 
index f3d17435af43ff316de3803057b21d9fdcd08301..d2ff13954d13eb8e0a53b491bf8465cad418e3b4 100644 (file)
@@ -1,9 +1,10 @@
 use nihav_core::formats::YUV420_FORMAT;
 use nihav_core::frame::{NABufferType, NAVideoInfo, NAVideoBuffer, NAVideoBufferRef, FrameType, alloc_video_buffer};
-use nihav_core::codecs::{NADecoderSupport, MV, ZERO_MV, DecoderError, DecoderResult, IPBShuffler};
+use nihav_core::codecs::{NADecoderSupport, DecoderError, DecoderResult};
+use nihav_codec_support::codecs::{MV, ZERO_MV, IPBShuffler};
 use nihav_core::io::bitreader::{BitReader,BitReaderMode};
 use nihav_core::io::intcode::*;
-use nihav_core::data::GenericCache;
+use nihav_codec_support::data::GenericCache;
 use std::mem;
 
 use super::rv34codes::*;
index 86e8488de3b9286b03e26748f587525d2ffb330a..19618900851a8895110f52d4ceab64b49b82b279 100644 (file)
@@ -1,6 +1,6 @@
 use nihav_core::frame::{FrameType, NAVideoBuffer};
-use nihav_core::codecs::MV;
-use nihav_core::codecs::blockdsp::edge_emu;
+use nihav_codec_support::codecs::MV;
+use nihav_codec_support::codecs::blockdsp::edge_emu;
 use super::rv3040::{RV34DSP, RV34MBInfo};
 
 fn clip8(a: i16) -> u8 {
index 5f95f0a966fe88ab6c411923d1d7aeef5c00f5e5..bddb3553a5f869b7221858486274a086e4aadd73 100644 (file)
@@ -4,6 +4,7 @@ use nihav_core::io::bitreader::*;
 use nihav_core::io::codebook::*;
 use nihav_core::io::intcode::*;
 use nihav_core::codecs::*;
+use nihav_codec_support::codecs::{MV, ZERO_MV};
 use super::rv3040::*;
 use super::rv40dsp::*;
 
index 66c3e969edf4e9f48ace7178c9bcd9e47892764b..0dfec4772a1285ea217092409e38aa4e3cf32c0a 100644 (file)
@@ -1,6 +1,6 @@
 use nihav_core::frame::{FrameType, NAVideoBuffer};
-use nihav_core::codecs::MV;
-use nihav_core::codecs::blockdsp::edge_emu;
+use nihav_codec_support::codecs::MV;
+use nihav_codec_support::codecs::blockdsp::edge_emu;
 use super::rv3040::{RV34DSP, RV34MBInfo};
 
 fn clip8(a: i16) -> u8 {
index 801f8c212706df7733f8039686251412851afb36..9dbedef6396e49fc19aab1a838fe4e67e943e483 100644 (file)
@@ -1,6 +1,7 @@
 use nihav_core::formats::YUV420_FORMAT;
 use nihav_core::frame::*;
-use nihav_core::codecs::{NADecoder, NADecoderSupport, MV, ZERO_MV, DecoderError, DecoderResult, IPBShuffler};
+use nihav_core::codecs::{NADecoder, NADecoderSupport, DecoderError, DecoderResult};
+use nihav_codec_support::codecs::{MV, ZERO_MV, IPBShuffler};
 use nihav_core::io::byteio::{MemoryReader,ByteReader};
 use nihav_core::io::bitreader::{BitReader,BitReaderMode};
 use nihav_core::io::intcode::*;
index a5ec0c8a1dffd2c01caa9dd16833a0a96ff5a21d..c62e212cecf163533f135cae3c40c24cb7ea2e3e 100644 (file)
@@ -1,6 +1,6 @@
 use nihav_core::frame::{NAVideoBuffer, NASimpleVideoFrame};
-use nihav_core::codecs::MV;
-use nihav_core::codecs::blockdsp::edge_emu;
+use nihav_codec_support::codecs::MV;
+use nihav_codec_support::codecs::blockdsp::edge_emu;
 
 fn clip8(val: i16) -> u8 { val.min(255).max(0) as u8 }
 
index 66e001acbc1982118c4b48b15bac99c69491ffb3..944711ee393d4d27a596f56edf366dc83f4f1573 100644 (file)
@@ -1,4 +1,5 @@
 extern crate nihav_core;
+extern crate nihav_codec_support;
 
 #[cfg(feature="decoders")]
 #[allow(clippy::cast_lossless)]