ソースを参照

support VidDataHostLocal

gavin.chen 3 ヶ月 前
コミット
052748e119
1 ファイル変更47 行追加0 行削除
  1. 47 0
      lib/data_host/local/data_host.dart

+ 47 - 0
lib/data_host/local/data_host.dart

@@ -0,0 +1,47 @@
+import 'dart:typed_data';
+import 'package:fis_vid/data_host/base/data_host.dart';
+import 'package:vid/us/vid_us_image_data.dart';
+import 'package:fis_vid/data_host/interface/data_host.dart';
+import 'package:vid/us/vid_us_image.dart';
+import 'package:vid/us/vid_us_probe.dart';
+
+class VidDataHostLocal extends VidDataHostBase {
+  VidDataHostLocal(this.fileContent) : super("empty_url");
+
+  VidUsImageData? _data;
+
+  final Uint8List fileContent;
+
+  @override
+  VidUsProbe get probe => _data!.probe;
+
+  @override
+  Future<VidDataHostLoadInfo?> load() async {
+    final vidFileBuffer = fileContent;
+    _data = VidUsImageData(vidFileBuffer);
+    return VidDataHostLoadInfo(probe);
+  }
+
+  @override
+  Future<VidUsImageData?> getData() async => _data;
+
+  @override
+  Future<VidUsImage> getFrame(int index) async {
+    if (_data == null) {
+      throw Exception(
+          "[VidDataHost] getFrame: must call load first and data is not null.");
+    }
+
+    final frame = _data!.getImage(index);
+    frameLoaded.emit(this, frame);
+    return frame;
+  }
+
+  @override
+  Future<void> release() async {
+    _data = null;
+  }
+
+  @override
+  int get frameCount => _data == null ? -1 : _data!.imageCount;
+}