impl Default for BinkTrees {
fn default() -> Self {
- let mut cb: [Codebook<u8>; 16];
- unsafe {
- cb = std::mem::uninitialized();
- for i in 0..16 {
- let mut cr = TableCodebookDescReader::new(&BINK_TREE_CODES[i], &BINK_TREE_BITS[i], map_u8);
- std::ptr::write(&mut cb[i], Codebook::new(&mut cr, CodebookMode::LSB).unwrap());
- }
- }
+ let cb = unsafe {
+ let mut ucb: std::mem::MaybeUninit::<[Codebook<u8>; 16]> = std::mem::MaybeUninit::uninit();
+ for i in 0..16 {
+ let mut cr = TableCodebookDescReader::new(&BINK_TREE_CODES[i], &BINK_TREE_BITS[i], map_u8);
+ std::ptr::write(&mut (*ucb.as_mut_ptr())[i], Codebook::new(&mut cr, CodebookMode::LSB).unwrap());
+ }
+ ucb.assume_init()
+ };
Self { cb }
}
}
struct BinkDecoder {
info: NACodecInfoRef,
ips: IPShuffler,
- hams: HAMShuffler,
+ hams: HAMShuffler<u8>,
is_ver_b: bool,
is_ver_i: bool,
}
}
+impl NAOptionHandler for BinkDecoder {
+ fn get_supported_options(&self) -> &[NAOptionDefinition] { &[] }
+ fn set_options(&mut self, _options: &[NAOption]) { }
+ fn query_option_value(&self, _name: &str) -> Option<NAValue> { None }
+}
+
pub fn get_decoder() -> Box<dyn NADecoder + Send> {
Box::new(BinkDecoder::new())
}
use nihav_core::codecs::RegisteredDecoders;
use nihav_core::demuxers::RegisteredDemuxers;
use nihav_codec_support::test::dec_video::*;
- use crate::rad_register_all_codecs;
+ use crate::rad_register_all_decoders;
use crate::rad_register_all_demuxers;
#[test]
fn test_binkvid_b() {
let mut dmx_reg = RegisteredDemuxers::new();
rad_register_all_demuxers(&mut dmx_reg);
let mut dec_reg = RegisteredDecoders::new();
- rad_register_all_codecs(&mut dec_reg);
+ rad_register_all_decoders(&mut dec_reg);
+ // sample: https://samples.mplayerhq.hu/game-formats/bink/bikb/NEW.BIK
test_decoding("bink", "bink-video", "assets/RAD/NEW.BIK", Some(16), &dmx_reg, &dec_reg,
ExpectedTestResult::MD5Frames(vec![
[0x00edef7e, 0x7efad3b1, 0x7e8bdd74, 0x3f6b00ba],
let mut dmx_reg = RegisteredDemuxers::new();
rad_register_all_demuxers(&mut dmx_reg);
let mut dec_reg = RegisteredDecoders::new();
- rad_register_all_codecs(&mut dec_reg);
+ rad_register_all_decoders(&mut dec_reg);
+ // sample: https://samples.mplayerhq.hu/game-formats/bink/ActivisionLogo.bik
test_decoding("bink", "bink-video", "assets/RAD/ActivisionLogo.bik", Some(42),
&dmx_reg, &dec_reg,
ExpectedTestResult::MD5([0x41128884, 0x73a8c710, 0x5072ea4a, 0x8caca428]));