|
@@ -1,6 +1,8 @@
|
|
|
import 'dart:typed_data';
|
|
|
+import 'package:vid/us/vid_us_application.dart';
|
|
|
import 'package:vid/us/vid_us_data_http_reader.dart';
|
|
|
import 'package:vid/us/vid_us_data_reader.dart';
|
|
|
+import 'package:vid/us/vid_us_data_writer.dart';
|
|
|
import 'package:vid/us/vid_us_image.dart';
|
|
|
import 'package:vid/us/vid_us_probe.dart';
|
|
|
|
|
@@ -12,7 +14,6 @@ enum VidUsImageFormat {
|
|
|
Diff,
|
|
|
}
|
|
|
|
|
|
-///Only suport read for now.
|
|
|
///Not suport carotid3d for now.
|
|
|
class VidUsImageData {
|
|
|
late VidUsDataReader _reader;
|
|
@@ -22,6 +23,7 @@ class VidUsImageData {
|
|
|
late VidUsProbe _probe;
|
|
|
late VidUsImageFormat _imageFormat;
|
|
|
late Uint8List _extendedData;
|
|
|
+ late List<VidUsImage> _imagesList;
|
|
|
|
|
|
final String header = "VINNO IMAGE DATA";
|
|
|
|
|
@@ -61,6 +63,66 @@ class VidUsImageData {
|
|
|
for (var i = 0; i < _imageCount; i++) {
|
|
|
_imagePositionList.add(imagePositionReader.readInt64V2());
|
|
|
}
|
|
|
+ _imagesList = [];
|
|
|
+ }
|
|
|
+
|
|
|
+ /// Create an empty third part VINNO Image Data
|
|
|
+ VidUsImageData.empty(int fps, VidUsImageFormat imageFormat) {
|
|
|
+ _imageCount = 0;
|
|
|
+ _version = 1;
|
|
|
+ _probe = VidUsProbe(
|
|
|
+ "ThirdPart",
|
|
|
+ VidUsProbeType.Linear,
|
|
|
+ VidUsApplication(
|
|
|
+ "ThirdPart",
|
|
|
+ "ThirdPart",
|
|
|
+ "ThirdPart",
|
|
|
+ "ThirdPart",
|
|
|
+ false,
|
|
|
+ ),
|
|
|
+ fps.toDouble(),
|
|
|
+ );
|
|
|
+ _imageFormat = imageFormat;
|
|
|
+ _extendedData = Uint8List(10);
|
|
|
+ _imagePositionList = [];
|
|
|
+ _imagesList = [];
|
|
|
+ }
|
|
|
+
|
|
|
+ /// Add an image to the image data.
|
|
|
+ void addJpegImage(Uint8List jpegBytes, int width, int height) {
|
|
|
+ if (_imageFormat != VidUsImageFormat.Jpeg) {
|
|
|
+ throw Exception("The image format is not Jpeg.");
|
|
|
+ }
|
|
|
+ if (_imagesList.length != _imageCount) {
|
|
|
+ _fillImageList();
|
|
|
+ }
|
|
|
+ VidUsImage image = VidUsImage(_imageCount, width, height, jpegBytes);
|
|
|
+ _imageCount++;
|
|
|
+ _imagesList.add(image);
|
|
|
+ }
|
|
|
+
|
|
|
+ Uint8List flush() {
|
|
|
+ if (_imageCount != _imagesList.length) {
|
|
|
+ _fillImageList();
|
|
|
+ }
|
|
|
+ var imagePositionOffset = 0;
|
|
|
+ var writer = VidUsDataWriter();
|
|
|
+ writer.writeString(header);
|
|
|
+ writer.writeInt(_version);
|
|
|
+ writer.writeBytes(_probe.toBytes());
|
|
|
+ writer.writeInt(_imageFormat.index);
|
|
|
+ writer.writeBytes(_extendedData);
|
|
|
+ imagePositionOffset = writer.data.length + _imageCount * 8 + 4;
|
|
|
+ var imagePositionWriter = VidUsDataWriter();
|
|
|
+ for (var i = 0; i < _imageCount; i++) {
|
|
|
+ imagePositionWriter.writeInt64(imagePositionOffset);
|
|
|
+ imagePositionOffset += _imagesList[i].toBytes().length + 4;
|
|
|
+ }
|
|
|
+ writer.writeBytes(imagePositionWriter.data);
|
|
|
+ for (var i = 0; i < _imageCount; i++) {
|
|
|
+ writer.writeBytes(_imagesList[i].toBytes());
|
|
|
+ }
|
|
|
+ return writer.data;
|
|
|
}
|
|
|
|
|
|
/// Get one image from the vid.
|
|
@@ -72,6 +134,14 @@ class VidUsImageData {
|
|
|
var imageData = _reader.readBytes(_imagePositionList[index]);
|
|
|
return VidUsImage.fromBytes(imageData);
|
|
|
}
|
|
|
+
|
|
|
+ /// Fill all images to the image list.
|
|
|
+ void _fillImageList() {
|
|
|
+ _imagesList = [];
|
|
|
+ for (var i = 0; i < _imageCount; i++) {
|
|
|
+ _imagesList.add(getImage(i));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
///Raised when getting data from the downloaded data timeout. depends on the readHeaderTimeout and
|
|
@@ -122,12 +192,17 @@ class HttpVidUsImageData {
|
|
|
/// to let the reader read the header.
|
|
|
/// [readImageTimeout] is the timeout value of reading one frame.
|
|
|
/// [minChunkSize] The min download chunk size, set to a large value may speedup the download speed, but will cause the progress not smooth.
|
|
|
- HttpVidUsImageData(String url, {DownloadCallback? downloadCallback, int minChunkSize = 65536, int readHeaderTimeout = 3000, int readImageTimeout = 500}) {
|
|
|
+ HttpVidUsImageData(String url,
|
|
|
+ {DownloadCallback? downloadCallback,
|
|
|
+ int minChunkSize = 65536,
|
|
|
+ int readHeaderTimeout = 3000,
|
|
|
+ int readImageTimeout = 500}) {
|
|
|
_initialized = false;
|
|
|
_closed = false;
|
|
|
_readHeaderTimeout = readHeaderTimeout;
|
|
|
_readImageTimeout = readImageTimeout;
|
|
|
- _reader = VidUsDataHttpReader(url, downloadCallback: downloadCallback, minChunkSize: minChunkSize);
|
|
|
+ _reader = VidUsDataHttpReader(url,
|
|
|
+ downloadCallback: downloadCallback, minChunkSize: minChunkSize);
|
|
|
}
|
|
|
|
|
|
///Get the downloaded data of this HttpVidUsImageData
|