enumerateWindows method

  1. @override
Future<List<MiniAVDeviceInfo>> enumerateWindows()
override

Enumerate available windows

Implementation

@override
Future<List<MiniAVDeviceInfo>> enumerateWindows() async {
  final windowsPtrPtr = calloc<ffi.Pointer<bindings.MiniAVDeviceInfo>>();
  final countPtr = calloc<ffi.Uint32>();
  try {
    final result = bindings.MiniAV_Screen_EnumerateWindows(
      windowsPtrPtr,
      countPtr,
    );
    if (result != bindings.MiniAVResultCode.MINIAV_SUCCESS) {
      throw Exception('Failed to enumerate windows: ${result.name}');
    }
    final windowsArrayPtr = windowsPtrPtr.value;
    final count = countPtr.value;
    if (windowsArrayPtr == ffi.nullptr || count == 0) {
      return <MiniAVDeviceInfo>[];
    }
    final windowList = <MiniAVDeviceInfo>[];
    for (int i = 0; i < count; i++) {
      final ffiDevice = (windowsArrayPtr + i).ref;
      windowList.add(
        DeviceInfoFFIToPlatform.fromNative(ffiDevice).toPlatformType(),
      );
    }
    bindings.MiniAV_FreeDeviceList(windowsArrayPtr, count);
    return windowList;
  } finally {
    calloc.free(windowsPtrPtr);
    calloc.free(countPtr);
  }
}