use lerc_sys::ffi;
use crate::LercError;
#[derive(Debug, Clone, Copy)]
pub struct BlobInfo {
pub version: u32,
pub data_type: u32,
pub depth: u32,
pub width: u32,
pub height: u32,
pub bands: u32,
pub valid_pixel_count: u32,
pub blob_size: u32,
pub masks: u32,
pub uses_nodata: u32,
}
pub fn get_blob_info(blob: &[u8]) -> Result<BlobInfo, LercError> {
const INFO_LEN: usize = 12;
let mut info_array = [0u32; INFO_LEN];
let mut range_array = [0f64; 2];
let status = unsafe {
ffi::lerc_getBlobInfo(
blob.as_ptr(),
blob.len() as u32,
info_array.as_mut_ptr(),
range_array.as_mut_ptr(),
INFO_LEN as i32,
range_array.len() as i32,
)
};
if status != 0 {
return Err(LercError::from_status(status));
}
Ok(BlobInfo {
version: info_array[0],
data_type: info_array[1],
depth: info_array[2],
width: info_array[3],
height: info_array[4],
bands: info_array[5],
valid_pixel_count: info_array[6],
blob_size: info_array[7],
masks: info_array[8],
uses_nodata: info_array[10],
})
}