startCapture method
Start camera capture.
onFrame is called for each frame received.
Implementation
@override
Future<void> startCapture(
void Function(MiniAVBuffer buffer, Object? userData) onFrame, {
Object? userData,
}) async {
_ensureNotDestroyed();
await stopCapture(); // Clean up any previous callback
void ffiCallback(
ffi.Pointer<bindings.MiniAVBuffer> buffer,
ffi.Pointer<ffi.Void> cbUserData,
) {
// Check if context was destroyed during callback
if (_isDestroyed) {
return; // Silently ignore if destroyed
}
final platformBuffer = MiniAVBufferFFI.fromPointer(buffer);
try {
onFrame(platformBuffer, userData);
} catch (e, s) {
print('Error in camera user callback: $e\n$s');
}
}
_callbackHandle =
ffi.NativeCallable<bindings.MiniAVBufferCallbackFunction>.listener(
ffiCallback,
);
final result = bindings.MiniAV_Camera_StartCapture(
_context!,
_callbackHandle!.nativeFunction,
ffi.nullptr,
);
if (result != bindings.MiniAVResultCode.MINIAV_SUCCESS) {
await _cleanupCallback();
throw Exception('Failed to start camera capture: ${result.name}');
}
}