///|
pub fn parse_depth_metadata_csv(
text : String,
) -> Array[DepthMetadata] raise VisionFormatError {
let lines = non_empty_lines(text)
if lines.is_empty() {
raise VisionFormatError::EmptyInput
}
let start = if lines[0].to_lower().contains("encoding") { 1 } else { 0 }
let samples = Array::new()
for i in start.. String {
let rows = [
"sec,nsec,frame_id,width,height,encoding,unit,min_depth,max_depth",
]
for sample in samples {
rows.push(
"\{sample.stamp.sec},\{sample.stamp.nsec},\{sample.frame_id},\{sample.width},\{sample.height},\{sample.encoding},\{sample.unit},\{sample.min_depth},\{sample.max_depth}",
)
}
rows.join("\n")
}
///|
pub fn validate_depth_metadata(
sample : DepthMetadata,
) -> Unit raise VisionFormatError {
if sample.width <= 0 || sample.height <= 0 {
raise VisionFormatError::InvalidShape(
"depth image dimensions must be positive",
)
}
if sample.min_depth > sample.max_depth {
raise VisionFormatError::InvalidNumber("min_depth exceeds max_depth")
}
}