add automation scripts.
This commit is contained in:
14
lib/archimedes_c_shim.dart
Normal file
14
lib/archimedes_c_shim.dart
Normal 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);
|
@ -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
25
lib/dynloader.dart
Normal 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
50
lib/util.dart
Normal 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;
|
||||
}
|
Reference in New Issue
Block a user