projects
/
nihav.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
split configuration for audio and video SMUSH decoders
[nihav.git]
/
nihav-game
/
src
/
codecs
/
smush
/
mod.rs
diff --git
a/nihav-game/src/codecs/smush/mod.rs
b/nihav-game/src/codecs/smush/mod.rs
index 9274cbab6ecc51dfd1e653eacff47ed54291333a..53bb61d2484fc97ed38ccfe56c1a5eebe143b47e 100644
(file)
--- a/
nihav-game/src/codecs/smush/mod.rs
+++ b/
nihav-game/src/codecs/smush/mod.rs
@@
-1,3
+1,4
@@
+#[cfg(feature="decoder_smush_video")]
enum GlyphEdge {
Left,
Top,
enum GlyphEdge {
Left,
Top,
@@
-6,6
+7,7
@@
enum GlyphEdge {
None
}
None
}
+#[cfg(feature="decoder_smush_video")]
impl GlyphEdge {
fn get(x: usize, y: usize, size: usize) -> Self {
if y == 0 {
impl GlyphEdge {
fn get(x: usize, y: usize, size: usize) -> Self {
if y == 0 {
@@
-22,6
+24,7
@@
impl GlyphEdge {
}
}
}
}
+#[cfg(feature="decoder_smush_video")]
enum GlyphDir {
Left,
Up,
enum GlyphDir {
Left,
Up,
@@
-30,6
+33,7
@@
enum GlyphDir {
None
}
None
}
+#[cfg(feature="decoder_smush_video")]
impl GlyphDir {
fn get(edge0: GlyphEdge, edge1: GlyphEdge) -> Self {
match (edge0, edge1) {
impl GlyphDir {
fn get(edge0: GlyphEdge, edge1: GlyphEdge) -> Self {
match (edge0, edge1) {
@@
-50,11
+54,16
@@
impl GlyphDir {
}
}
}
}
+#[cfg(feature="decoder_smush_video")]
const XVEC4: [usize; 16] = [0, 1, 2, 3, 3, 3, 3, 2, 1, 0, 0, 0, 1, 2, 2, 1];
const XVEC4: [usize; 16] = [0, 1, 2, 3, 3, 3, 3, 2, 1, 0, 0, 0, 1, 2, 2, 1];
+#[cfg(feature="decoder_smush_video")]
const YVEC4: [usize; 16] = [0, 0, 0, 0, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 2, 2];
const YVEC4: [usize; 16] = [0, 0, 0, 0, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 2, 2];
+#[cfg(feature="decoder_smush_video")]
const XVEC8: [usize; 16] = [0, 2, 5, 7, 7, 7, 7, 7, 7, 5, 2, 0, 0, 0, 0, 0];
const XVEC8: [usize; 16] = [0, 2, 5, 7, 7, 7, 7, 7, 7, 5, 2, 0, 0, 0, 0, 0];
+#[cfg(feature="decoder_smush_video")]
const YVEC8: [usize; 16] = [0, 0, 0, 0, 1, 3, 4, 6, 7, 7, 7, 7, 6, 4, 3, 1];
const YVEC8: [usize; 16] = [0, 0, 0, 0, 1, 3, 4, 6, 7, 7, 7, 7, 6, 4, 3, 1];
+#[cfg(feature="decoder_smush_video")]
fn make_glyphs_47(glyphs4: &mut [[u8; 16]; 256], glyphs8: &mut [[u8; 64]; 256]) {
for (n, glyph) in glyphs4.iter_mut().enumerate() {
let i = n >> 4;
fn make_glyphs_47(glyphs4: &mut [[u8; 16]; 256], glyphs8: &mut [[u8; 64]; 256]) {
for (n, glyph) in glyphs4.iter_mut().enumerate() {
let i = n >> 4;
@@
-67,6
+76,7
@@
fn make_glyphs_47(glyphs4: &mut [[u8; 16]; 256], glyphs8: &mut [[u8; 64]; 256])
make_glyph_47(glyph, XVEC8[i], YVEC8[i], XVEC8[j], YVEC8[j], 8);
}
}
make_glyph_47(glyph, XVEC8[i], YVEC8[i], XVEC8[j], YVEC8[j], 8);
}
}
+#[cfg(feature="decoder_smush_video")]
fn make_glyph_47(dst: &mut [u8], xi: usize, yi: usize, xj: usize, yj: usize, size: usize) {
let edge0 = GlyphEdge::get(xi, yi, size);
let edge1 = GlyphEdge::get(xj, yj, size);
fn make_glyph_47(dst: &mut [u8], xi: usize, yi: usize, xj: usize, yj: usize, size: usize) {
let edge0 = GlyphEdge::get(xi, yi, size);
let edge1 = GlyphEdge::get(xj, yj, size);
@@
-105,16
+115,25
@@
fn make_glyph_47(dst: &mut [u8], xi: usize, yi: usize, xj: usize, yj: usize, siz
};
}
}
};
}
}
+#[cfg(feature="decoder_smush_video")]
fn interpolate(a: usize, b: usize, pos1: usize, range: usize) -> usize {
(a * pos1 + b * (range - pos1) + range / 2) / range
}
fn interpolate(a: usize, b: usize, pos1: usize, range: usize) -> usize {
(a * pos1 + b * (range - pos1) + range / 2) / range
}
+#[cfg(feature="decoder_smush_video")]
mod v1;
mod v1;
+#[cfg(feature="decoder_smush_video")]
pub use v1::get_decoder_video_v1;
pub use v1::get_decoder_video_v1;
+#[cfg(feature="decoder_smush_video")]
mod v2;
mod v2;
+#[cfg(feature="decoder_smush_video")]
pub use v2::get_decoder_video_v2;
pub use v2::get_decoder_video_v2;
+#[cfg(feature="decoder_smush_audio")]
mod iact;
mod iact;
+#[cfg(feature="decoder_smush_audio")]
pub use iact::get_decoder_iact;
pub use iact::get_decoder_iact;
+#[cfg(feature="decoder_smush_audio")]
mod vima;
mod vima;
+#[cfg(feature="decoder_smush_audio")]
pub use vima::get_decoder_vima;
pub use vima::get_decoder_vima;