enumerateDevices method
Enumerate available loopback (output) devices.
Implementation
@override
Future<List<MiniAVDeviceInfo>> enumerateDevices() async {
final devicesPtrPtr = calloc<ffi.Pointer<bindings.MiniAVDeviceInfo>>();
final countPtr = calloc<ffi.Uint32>();
try {
final res = bindings.MiniAV_Loopback_EnumerateTargets(
bindings.MiniAVLoopbackTargetType.MINIAV_LOOPBACK_TARGET_SYSTEM_AUDIO,
devicesPtrPtr,
countPtr,
);
if (res != bindings.MiniAVResultCode.MINIAV_SUCCESS) {
throw Exception('Failed to enumerate loopback devices: ${res.name}');
}
final count = countPtr.value;
if (count == 0) {
return [];
}
final devicesPtr = devicesPtrPtr.value;
final devices = <MiniAVDeviceInfo>[];
for (int i = 0; i < count; i++) {
final deviceInfoC = devicesPtr.elementAt(i).ref;
devices.add(
DeviceInfoFFIToPlatform.fromNative(deviceInfoC).toPlatformType(),
);
}
bindings.MiniAV_FreeDeviceList(devicesPtr, count);
return devices;
} finally {
calloc.free(devicesPtrPtr);
calloc.free(countPtr);
}
}