decodePlan method
CameraFrameDecodePlan
decodePlan()
Builds backend-neutral decode instructions for this frame.
Image backends should allocate their source buffer from
CameraFrameDecodePlan.sourceLayout and use
PackedImageLayout.copyTo instead of list-element reconstruction APIs.
Implementation
CameraFrameDecodePlan decodePlan() {
switch (conversion) {
case CameraFrameConversion.bgra2bgr:
case CameraFrameConversion.rgba2bgr:
return CameraFrameDecodePlan(
sourceLayout: PackedImageLayout(
rows: height,
cols: strideCols,
channels: 4,
format: conversion == CameraFrameConversion.bgra2bgr
? PackedImageFormat.bgra8888
: PackedImageFormat.rgba8888,
),
visibleWidth: width,
visibleHeight: height,
hasStridePadding: strideCols != width,
conversion: conversion,
rotation: rotation,
order: CameraFrameDecodeOrder.resizeRotateThenColorConvert,
);
case CameraFrameConversion.yuv2bgrNv12:
case CameraFrameConversion.yuv2bgrNv21:
case CameraFrameConversion.yuv2bgrI420:
final format = switch (conversion) {
CameraFrameConversion.yuv2bgrNv12 => PackedImageFormat.yuv420Nv12,
CameraFrameConversion.yuv2bgrNv21 => PackedImageFormat.yuv420Nv21,
CameraFrameConversion.yuv2bgrI420 => PackedImageFormat.yuv420I420,
_ => PackedImageFormat.yuv420Nv12,
};
return CameraFrameDecodePlan(
sourceLayout: PackedImageLayout(
rows: height + height ~/ 2,
cols: width,
channels: 1,
format: format,
),
visibleWidth: width,
visibleHeight: height,
hasStridePadding: false,
conversion: conversion,
rotation: rotation,
order: CameraFrameDecodeOrder.colorConvertThenResizeRotate,
);
}
}