use crate::buffer::Buffer;
use super::{ObuContext, ObuError, frame_header::FrameHeader, tile_group::TileGroup};
#[derive(Debug, Clone)]
pub struct Frame {
pub header: FrameHeader,
pub tile_group: TileGroup,
}
impl Frame {
pub fn decode(ctx: &mut ObuContext, buf: &mut Buffer) -> Result<Self, ObuError> {
let header = FrameHeader::decode(ctx, buf)?;
if header.show_existing_frame {
return Ok(Frame {
tile_group: TileGroup::empty(),
header,
});
}
buf.byte_align();
let num_tiles = header.tile_info.tile_cols * header.tile_info.tile_rows;
let tile_group = TileGroup::decode(ctx, buf, &header.tile_info, num_tiles)?;
Ok(Frame { header, tile_group })
}
}