fn decode_block_intra(&mut self, info: &BlockInfo, sstate: &SliceState, quant: u8, no: usize, coded: bool, blk: &mut [i16; 64]) -> DecoderResult<()>;
fn decode_block_inter(&mut self, info: &BlockInfo, sstate: &SliceState, quant: u8, no: usize, coded: bool, blk: &mut [i16; 64]) -> DecoderResult<()>;
fn is_slice_end(&mut self) -> bool;
- fn is_gob(&mut self) -> bool;
}
pub trait BlockDSP {
pub is_iframe: bool,
pub mb_x: usize,
pub mb_y: usize,
+ pub first_line: bool,
+ pub first_mb: bool,
}
const SLICE_NO_END: usize = 99999999;
impl SliceState {
pub fn new(is_iframe: bool) -> Self {
- SliceState { is_iframe: is_iframe, mb_x: 0, mb_y: 0 }
+ SliceState { is_iframe: is_iframe, mb_x: 0, mb_y: 0, first_line: true, first_mb: true }
+ }
+ pub fn next_mb(&mut self) { self.mb_x += 1; self.first_mb = false; }
+ pub fn new_row(&mut self) {
+ self.mb_x = 0; self.mb_y += 1;
+ self.first_line = false; self.first_mb = true;
}
- pub fn next_mb(&mut self) { self.mb_x += 1; }
- pub fn new_row(&mut self) { self.mb_x = 0; self.mb_y += 1; }
}
#[derive(Debug,Clone,Copy)]
pub struct BlockInfo {
- intra: bool,
- skip: bool,
- mode: Type,
- cbp: u8,
- q: u8,
- mv: [MV; 4],
- num_mv: usize,
- bpart: bool,
- b_cbp: u8,
- mv2: [MV; 2],
- num_mv2: usize,
- fwd: bool,
+ pub intra: bool,
+ pub skip: bool,
+ pub mode: Type,
+ pub cbp: u8,
+ pub q: u8,
+ pub mv: [MV; 4],
+ pub num_mv: usize,
+ pub bpart: bool,
+ pub b_cbp: u8,
+ pub mv2: [MV; 2],
+ pub num_mv2: usize,
+ pub fwd: bool,
+ pub acpred: ACPredMode,
}
#[allow(dead_code)]
fwd: bool,
}
+#[allow(dead_code)]
+#[derive(Debug,Clone,Copy,PartialEq)]
+pub enum ACPredMode {
+ None,
+ DC,
+ Ver,
+ Hor,
+}
+
#[allow(dead_code)]
impl BlockInfo {
pub fn new(mode: Type, cbp: u8, q: u8) -> Self {
mv2: [ZERO_MV, ZERO_MV],
num_mv2: 0,
fwd: false,
+ acpred: ACPredMode::None,
}
}
pub fn is_intra(&self) -> bool { self.intra }
self.mv2 = mv_arr;
}
pub fn is_b_fwd(&self) -> bool { self.fwd }
+ pub fn set_acpred(&mut self, acpred: ACPredMode) { self.acpred = acpred }
+ pub fn get_acpred(&self) -> ACPredMode { self.acpred }
}
impl BBlockInfo {