add automation scripts.

This commit is contained in:
Jordan
2024-03-11 10:42:48 -07:00
parent b3cd0316b7
commit 29483913d6
8 changed files with 154 additions and 28 deletions

View File

@ -0,0 +1,14 @@
import 'dart:ffi';
import 'package:archimedes_mobile_lib/dynloader.dart';
import 'archimedes_mobile_lib_bindings_generated.dart';
final _dylib = getArchimedesCLib();
final ArchimedesMobileLibBindings _bindings =
ArchimedesMobileLibBindings(_dylib);
int getImageData(Pointer<Frame> frame, Pointer<UnsignedChar> data) =>
_bindings.archimedes_get_image_data(frame, data);
Pointer<Frame> newFrame(
Pointer<Uint8> data, int dataLen, int w, int h, int depth) =>
_bindings.new_frame_from_data(data, dataLen, w, h, depth);

View File

@ -4,43 +4,19 @@ import 'dart:io';
import 'dart:typed_data';
// import 'dart:isolate';
// import 'dart:ui';
import 'package:archimedes_mobile_lib/archimedes_c_shim.dart';
import 'package:archimedes_mobile_lib/dynloader.dart';
import "package:ffi/ffi.dart";
import "package:path/path.dart" show dirname, join;
import 'dart:io' show Platform;
import 'archimedes_mobile_lib_bindings_generated.dart';
const String _libName = 'archimedes_mobile_lib';
final here = dirname(Platform.script.path);
final build = join(dirname(here), "build");
/// The dynamic library in which the symbols for [ArchimedesMobileLibBindings] can be found.
final DynamicLibrary _dylib = () {
if (Platform.isMacOS || Platform.isIOS) {
return DynamicLibrary.open(join(build, '$_libName.framework', _libName));
}
if (Platform.isAndroid || Platform.isLinux) {
return DynamicLibrary.open(join(build, 'lib$_libName.so'));
}
if (Platform.isWindows) {
return DynamicLibrary.open(join('$_libName.dll'));
}
throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}');
}();
/// The bindings to the native functions in [_dylib].
final ArchimedesMobileLibBindings _bindings =
ArchimedesMobileLibBindings(_dylib);
int getImageData(Pointer<Frame> frame, Pointer<UnsignedChar> data) =>
_bindings.archimedes_get_image_data(frame, data);
Pointer<Frame> newFrame(
Pointer<Uint8> data, int dataLen, int w, int h, int depth) =>
_bindings.new_frame_from_data(data, dataLen, w, h, depth);
final DynamicLibrary _dylib = getArchimedesCLib();
void main(List<String> arguments) {
final assets = join(dirname(here), "assets");
final assets = join(HERE.parent.path, "assets");
final testFrames = join(assets, "test", "frames");
final firstFrame = join(testFrames, "0001.png");
final f = File(firstFrame);

25
lib/dynloader.dart Normal file
View File

@ -0,0 +1,25 @@
import 'dart:ffi';
import 'dart:io';
import "package:ffi/ffi.dart";
import "package:path/path.dart" show dirname, join;
import 'dart:io' show Platform;
import 'archimedes_mobile_lib_bindings_generated.dart';
const String _libName = 'archimedes_mobile_lib';
final HERE = File(String.fromEnvironment("CURRENT_EXEC_DIR",
defaultValue: (File(Platform.script.path).parent.absolute.path)));
final BUILD_DIR = File(join(HERE.path, "build"));
DynamicLibrary getArchimedesCLib() {
if (Platform.isMacOS || Platform.isIOS) {
return DynamicLibrary.open(
join(BUILD_DIR.path, '$_libName.framework', _libName));
}
if (Platform.isAndroid || Platform.isLinux) {
return DynamicLibrary.open(join(BUILD_DIR.path, 'lib$_libName.so'));
}
if (Platform.isWindows) {
return DynamicLibrary.open(join(BUILD_DIR.path, '$_libName.dll'));
}
throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}');
}

50
lib/util.dart Normal file
View File

@ -0,0 +1,50 @@
import 'dart:collection';
import 'dart:ffi';
import 'dart:io';
import "package:ffi/ffi.dart";
class Uint8FlexList extends ListBase<Uint8> {
final List<Uint8> _list = [];
Uint8FlexList();
late Pointer<Uint8> pointer;
@override
Uint8 operator [](int index) => _list[index];
set list(List<Uint8> l) {
_list.removeWhere((element) => true);
_list.addAll(l);
pointer = calloc<Uint8>(l.length);
_list.forEach((element) {
pointer[_list.indexOf(element)] = element as int;
});
}
@override
void operator []=(int index, Uint8 value) {
_list[index] = value;
pointer[index] = value as int;
}
@override
int get length => _list.length;
@override
set length(int newLength) {
throw Error();
}
static fromList(List<Uint8> l) {
final l2 = Uint8FlexList();
}
}
Pointer<Uint8> readUint8Ptr(File file) {
final l = file.readAsBytesSync().cast();
final dataPointer = calloc<Uint8>(l.length);
for (int i = 0; i < l.length; ++i) {
dataPointer[i] = l[i];
}
return dataPointer;
}