//use std::mem;
-use frame::*;
+use crate::frame::*;
use super::super::*;
use super::super::blockdsp;
use super::*;
//use super::code::*;
-use formats;
+use crate::formats;
#[allow(dead_code)]
struct MVInfo {
_ => {},
};
}
-
+
new_mv
}
fn set_zero_mv(&mut self, mb_x: usize) {
b_data: Vec<BMB>,
pred_coeffs: Vec<PredCoeffs>,
is_gob: bool,
+ slice_reset: bool,
may_have_b_frames: bool,
mv_data: Vec<BlockMVInfo>,
}
#[allow(dead_code)]
impl H263BaseDecoder {
- pub fn new_with_opts(is_gob: bool, may_have_b_frames: bool) -> Self {
+ pub fn new_with_opts(is_gob: bool, slice_reset: bool, may_have_b_frames: bool) -> Self {
H263BaseDecoder{
w: 0, h: 0, mb_w: 0, mb_h: 0, num_mb: 0,
ftype: Type::Special,
last_ts: 0, next_ts: 0, tsdiff: 0,
has_b: false, b_data: Vec::new(),
pred_coeffs: Vec::new(),
- is_gob: is_gob,
+ is_gob: is_gob, slice_reset: slice_reset,
may_have_b_frames: may_have_b_frames,
mv_data: Vec::new(),
}
}
pub fn new(is_gob: bool) -> Self {
- Self::new_with_opts(is_gob, false)
+ Self::new_with_opts(is_gob, true, false)
}
pub fn new_b_frames(is_gob: bool) -> Self {
- Self::new_with_opts(is_gob, true)
+ Self::new_with_opts(is_gob, true, true)
}
pub fn is_intra(&self) -> bool { self.ftype == Type::I }
self.pred_coeffs.truncate(0);
self.pred_coeffs.resize(self.mb_w * self.mb_h, ZERO_PRED_COEFFS);
}
+ sstate.quant = slice.quant;
for mb_y in 0..self.mb_h {
for mb_x in 0..self.mb_w {
for i in 0..6 { for j in 0..64 { blk[i][j] = 0; } }
if slice.is_at_end(mb_pos) || (slice.needs_check() && mb_pos > 0 && bd.is_slice_end()) {
slice = bd.decode_slice_header(&pinfo)?;
- if !self.is_gob {
+ if !self.is_gob && self.slice_reset {
mvi.reset(self.mb_w, mb_x, pinfo.get_mvmode());
if is_b || pinfo.is_pb() {
mvi2.reset(self.mb_w, mb_x, pinfo.get_mvmode());
}
cbpi.reset(self.mb_w);
sstate.reset_slice(mb_x, mb_y);
+ sstate.quant = slice.quant;
}
}
let cbp = binfo.get_cbp();
cbpi.set_cbp(mb_x, cbp);
cbpi.set_q(mb_x, binfo.get_q());
+ sstate.quant = binfo.get_q();
if binfo.is_intra() {
if save_b_data {
self.mv_data.push(BlockMVInfo::Intra);