X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-duck%2Fsrc%2Fcodecs%2Fvp56.rs;h=6f9f18c15b5538e7aec45f18b65720591904ed47;hb=bb0e22f77fd2c0f859ab342cf566a6151557745e;hp=8aa52e31e9977921b1afae15b939da42e9b5366f;hpb=13078a1fbd4d4839fc3a94c4a46c89d5829f8035;p=nihav.git diff --git a/nihav-duck/src/codecs/vp56.rs b/nihav-duck/src/codecs/vp56.rs index 8aa52e3..6f9f18c 100644 --- a/nihav-duck/src/codecs/vp56.rs +++ b/nihav-duck/src/codecs/vp56.rs @@ -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; @@ -423,7 +424,7 @@ pub fn expand_token_bc(bc: &mut BoolCoder, val_probs: &[u8; 11], token: u8, vers impl VP56Decoder { pub fn new(version: u8, has_alpha: bool, flip: bool) -> Self { - let vt = alloc_video_buffer(NAVideoInfo::new(24, 24, false, YUV420_FORMAT), 4).unwrap(); + let vt = alloc_video_buffer(NAVideoInfo::new(24, 24, false, VP_YUVA420_FORMAT), 4).unwrap(); let mc_buf = vt.get_vbuf().unwrap(); Self { version, has_alpha, flip, @@ -486,7 +487,12 @@ impl VP56Decoder { if hdr.mb_w != 0 { self.set_dimensions((hdr.mb_w as usize) * 16, (hdr.mb_h as usize) * 16); } - let vinfo = NAVideoInfo::new(self.width, self.height, self.flip, YUV420_FORMAT); + let fmt = if !self.has_alpha { + YUV420_FORMAT + } else { + VP_YUVA420_FORMAT + }; + let vinfo = NAVideoInfo::new(self.width, self.height, self.flip, fmt); let ret = supp.pool_u8.get_free(); if ret.is_none() { return Err(DecoderError::AllocError); @@ -519,7 +525,7 @@ impl VP56Decoder { let bc2 = BoolCoder::new(&src[off..])?; cr = CoeffReader::Bool(bc2); } else { - let br = BitReader::new(&src[off..], aoffset - off, BitReaderMode::BE); + let br = BitReader::new(&src[off..aoffset], BitReaderMode::BE); cr = CoeffReader::Huff(br); } } else { @@ -738,7 +744,7 @@ impl VP56Decoder { vp_tree!(bc, probs[5], VPMBType::Intra, VPMBType::InterFourMV), vp_tree!(bc, probs[6], vp_tree!(bc, probs[7], VPMBType::GoldenNoMV, VPMBType::GoldenMV), - vp_tree!(bc, probs[8], VPMBType::InterNearest, VPMBType::InterNear) + vp_tree!(bc, probs[8], VPMBType::GoldenNearest, VPMBType::GoldenNear) ) ) );