shell.dart 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. part of 'data_host.dart';
  2. class _VidDataHostShell implements VidDataHostInterface {
  3. _VidDataHostShell(this.url);
  4. static PlatformService get _platform => VidDataHostEnv.platformGetter!.call();
  5. VidUsProbe? _probe;
  6. int? _frameCount;
  7. @override
  8. final String url;
  9. @override
  10. int get frameCount => _frameCount!;
  11. @override
  12. VidUsProbe get probe => _probe!;
  13. @override
  14. Future<VidUsImageData?> getData() async => null;
  15. @override
  16. Future<VidDataHostLoadInfo?> load() async {
  17. final rst = await _platform.loadVid(url);
  18. if (!rst.isSuccess) return null;
  19. final buffer = const Base64Decoder().convert(rst.probeBase64!);
  20. final probe = VidUsProbe.fromBytes(buffer);
  21. _probe = probe;
  22. _frameCount = rst.frameCount;
  23. final info = VidDataHostLoadInfo(probe);
  24. return info;
  25. }
  26. @override
  27. Future<VidUsImage?> getFrame<TProcessor extends VidFrameProcessor>(
  28. int index, {
  29. List<TProcessor>? processors,
  30. }) async {
  31. final rpcProcessors = _convert2RpcProcessors(processors);
  32. final rst = await _platform.getVidFrame(GetVidFrameRequest(
  33. index: index,
  34. processors: rpcProcessors,
  35. ));
  36. if (!rst.isSuccess) return null;
  37. final buffer = const Base64Decoder().convert(rst.frameBase64!);
  38. final frame = VidUsImage.fromBytes(buffer);
  39. return frame;
  40. }
  41. @override
  42. Future<void> release() async {
  43. _platform.releaseVid();
  44. }
  45. List<TOut>? _convert2RpcProcessors<TIn extends VidFrameProcessor,
  46. TOut extends VidFrameProcessorBase>(List<TIn>? processors) {
  47. if (processors == null || processors.isEmpty) return null;
  48. final result = <TOut>[];
  49. for (final processor in processors) {
  50. final converted = _convert2RpcProcessor<TIn, TOut>(processor);
  51. if (converted != null) {
  52. result.add(converted);
  53. }
  54. }
  55. return result;
  56. }
  57. TOut? _convert2RpcProcessor<TIn extends VidFrameProcessor,
  58. TOut extends VidFrameProcessorBase>(TIn processor) {
  59. if (processor is VidBrightnessProcessor) {
  60. return VidFrameBrightnessProcessor(processor.brightness) as TOut;
  61. }
  62. if (processor is VidContrastProcessor) {
  63. return VidFrameContrastProcessor(processor.contrast) as TOut;
  64. }
  65. return null;
  66. }
  67. }