Browse Source

add event frameLoaded

melon.yin 2 years ago
parent
commit
9e6d4b449c

+ 18 - 0
lib/data_host/base/data_host.dart

@@ -0,0 +1,18 @@
+import 'package:fis_common/event/event_type.dart';
+import 'package:vid/us/vid_us_image.dart';
+
+import '../interface/data_host.dart';
+
+abstract class VidDataHostBase implements VidDataHostInterface {
+  late final String _url;
+
+  VidDataHostBase(String url) {
+    _url = url;
+  }
+
+  @override
+  String get url => _url;
+
+  /// 帧数据加载完成事件
+  final frameLoaded = FEventHandler<VidUsImage>();
+}

+ 1 - 3
lib/data_host/interface/data_host.dart

@@ -4,10 +4,8 @@ import 'package:vid/us/vid_us_image_data.dart';
 import 'package:vid/us/vid_us_probe.dart';
 
 abstract class VidDataHostInterface {
-  VidDataHostInterface(this.url);
-
   /// Vid文件链接
-  final String url;
+  String get url;
 
   /// 图像帧数
   int get frameCount;

+ 5 - 5
lib/data_host/native/data_host.dart

@@ -13,17 +13,16 @@ import 'package:fis_vid/processors/base.dart';
 import 'package:vid/us/vid_us_image_data.dart';
 import 'package:vid/us/vid_us_probe.dart';
 
-class VidDataHost implements VidDataHostInterface {
-  VidDataHost(this.url);
+import '../base/data_host.dart';
+
+class VidDataHost extends VidDataHostBase {
+  VidDataHost(String url) : super(url);
   static const _kStorageDir = 'ExamRecords';
 
   VidUsImageData? _data;
 
   VidFileDownloadCancelToken? _downloadCancelToken;
 
-  @override
-  final String url;
-
   @override
   VidUsProbe get probe => _data!.probe;
 
@@ -53,6 +52,7 @@ class VidDataHost implements VidDataHostInterface {
     }
 
     final frame = _data!.getImage(index);
+    frameLoaded.emit(this, frame);
     return VidFrameProcessor.processFrame(frame, processors);
   }
 

+ 10 - 7
lib/data_host/web/data_host.dart

@@ -14,17 +14,16 @@ import 'package:vid/us/vid_us_image.dart';
 import 'package:vid/us/vid_us_image_data.dart';
 import 'package:vid/us/vid_us_probe.dart';
 
+import '../base/data_host.dart';
+
 part 'broswer.dart';
 part 'shell.dart';
 
-class VidDataHost implements VidDataHostInterface {
-  VidDataHost(this.url);
+class VidDataHost extends VidDataHostBase {
+  VidDataHost(String url) : super(url);
 
   VidDataHostInterface? _hostInstance;
 
-  @override
-  final String url;
-
   @override
   int get frameCount => _hostInstance!.frameCount;
 
@@ -38,12 +37,16 @@ class VidDataHost implements VidDataHostInterface {
   Future<VidUsImage?> getFrame<TProcessor extends VidFrameProcessor>(
     int index, {
     List<TProcessor>? processors,
-  }) {
+  }) async {
     if (_hostInstance == null) {
       throw Exception(
           "[VidDataHost] getFrame: must call load first and data is not null.");
     }
-    return _hostInstance!.getFrame(index, processors: processors);
+    final frame = await _hostInstance!.getFrame(index, processors: processors);
+    if (frame != null) {
+      frameLoaded.emit(this, frame);
+    }
+    return frame;
   }
 
   @override