has_b: bool,
b_data: Vec<BMB>,
pred_coeffs: Vec<PredCoeffs>,
+ is_gob: bool,
}
#[inline]
#[allow(dead_code)]
impl H263BaseDecoder {
- pub fn new() -> Self {
+ pub fn new(is_gob: bool) -> Self {
H263BaseDecoder{
w: 0, h: 0, mb_w: 0, mb_h: 0, num_mb: 0,
ftype: Type::Special,
last_ts: 0,
has_b: false, b_data: Vec::new(),
pred_coeffs: Vec::new(),
+ is_gob: is_gob,
}
}
let mut bufinfo = bufret.unwrap();
let mut buf = bufinfo.get_vbuf().unwrap();
- let mut slice = if bd.is_gob() {
+ let mut slice = if self.is_gob {
SliceInfo::get_default_slice(&pinfo)
} else {
bd.decode_slice_header(&pinfo)?
if slice.is_at_end(mb_pos) || (slice.needs_check() && mb_pos > 0 && bd.is_slice_end()) {
slice = bd.decode_slice_header(&pinfo)?;
- //mvi.reset(self.mb_w, mb_x, pinfo.get_mvmode());
- //cbpi.reset(self.mb_w);
+ if !self.is_gob {
+ mvi.reset(self.mb_w, mb_x, pinfo.get_mvmode());
+ cbpi.reset(self.mb_w);
+ sstate.first_line = true;
+ }
}
let binfo = bd.decode_block_header(&pinfo, &slice, &sstate)?;
bd.decode_block_intra(&binfo, &sstate, binfo.get_q(), i, (cbp & (1 << (5 - i))) != 0, &mut blk[i])?;
if apply_acpred && (binfo.acpred != ACPredMode::None) {
let has_b = (i == 1) || (i == 3) || (mb_x > 0);
- let has_a = (i == 2) || (i == 3) || (mb_y > 0);
+ let has_a = (i == 2) || (i == 3) || !sstate.first_line;
let (b_mb, b_blk) = if has_b {
if (i == 1) || (i == 3) {
(mb_pos, i - 1)