+
+ self.top_line_y.resize(mb_w * 16 + 1, 0x80);
+ self.top_line_c[0].resize(mb_w * 8 + 1, 0x80);
+ self.top_line_c[1].resize(mb_w * 8 + 1, 0x80);
+ self.left_y = [0x80; 17];
+ self.left_c = [[0x80; 9]; 2];
+ }
+ pub fn save_ipred_context(&mut self, frm: &NASimpleVideoFrame<u8>) {
+ let dstoff = self.mb_x * 16;
+ let srcoff = frm.offset[0] + self.mb_x * 16 + self.mb_y * 16 * frm.stride[0];
+ self.left_y[0] = self.top_line_y[dstoff + 15];
+ self.top_line_y[dstoff..][..16].copy_from_slice(&frm.data[srcoff + frm.stride[0] * 15..][..16]);
+ for (dst, src) in self.left_y[1..].iter_mut().zip(frm.data[srcoff..].chunks(frm.stride[0])) {
+ *dst = src[15];
+ }
+ for chroma in 0..2 {
+ let cstride = frm.stride[chroma + 1];
+ let dstoff = self.mb_x * 8;
+ let srcoff = frm.offset[chroma + 1] + self.mb_x * 8 + self.mb_y * 8 * cstride;
+ self.left_c[chroma][0] = self.top_line_c[chroma][dstoff + 7];
+ self.top_line_c[chroma][dstoff..][..8].copy_from_slice(&frm.data[srcoff + cstride * 7..][..8]);
+ for (dst, src) in self.left_c[chroma][1..].iter_mut().zip(frm.data[srcoff..].chunks(cstride)) {
+ *dst = src[7];
+ }
+ }