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;
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,
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);
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 {
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)
)
)
);