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 fmt = if !self.has_alpha {
YUV420_FORMAT
} else {
- NAPixelFormaton::new(ColorModel::YUV(YUVSubmodel::YUVJ),
- Some(NAPixelChromaton::new(0, 0, false, 8, 0, 0, 1)),
- Some(NAPixelChromaton::new(1, 1, false, 8, 0, 1, 1)),
- Some(NAPixelChromaton::new(1, 1, false, 8, 0, 2, 1)),
- Some(NAPixelChromaton::new(0, 0, false, 8, 0, 3, 1)),
- None,
- 0, 4)
+ VP_YUVA420_FORMAT
};
let myvinfo = NAVideoInfo::new(vinfo.get_width(), vinfo.get_height(), false, fmt);
let myinfo = NACodecTypeInfo::Video(myvinfo.clone());
use nihav_core::codecs::*;
use nihav_core::codecs::blockdsp::*;
+pub const VP_YUVA420_FORMAT: NAPixelFormaton = NAPixelFormaton{
+ model: ColorModel::YUV(YUVSubmodel::YUVJ),
+ components: 4,
+ comp_info: [
+ Some(NAPixelChromaton{ h_ss: 0, v_ss: 0, packed: false, depth: 8, shift: 0, comp_offs: 0, next_elem: 1}),
+ Some(NAPixelChromaton{ h_ss: 1, v_ss: 1, packed: false, depth: 8, shift: 0, comp_offs: 1, next_elem: 1}),
+ Some(NAPixelChromaton{ h_ss: 1, v_ss: 1, packed: false, depth: 8, shift: 0, comp_offs: 2, next_elem: 1}),
+ Some(NAPixelChromaton{ h_ss: 0, v_ss: 0, packed: false, depth: 8, shift: 0, comp_offs: 3, next_elem: 1}),
+ None ],
+ elem_size: 0,
+ be: false,
+ alpha: true,
+ palette: false
+ };
+
#[derive(Clone,Copy,Debug,PartialEq)]
#[allow(dead_code)]
pub enum VPMBType {