From 62a33b9bbfbfdb3d9e8295cf1308292ba94e4034 Mon Sep 17 00:00:00 2001 From: Oscar Date: Tue, 29 Nov 2022 15:45:11 +0100 Subject: [PATCH 1/3] chore: ignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1ef5887..e613a81 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,7 @@ # The .vscode folder contains launch configuration and tasks you configure in # VS Code which you may wish to be included in version control, so this line # is commented out by default. -#.vscode/ +.vscode/settings.json # Flutter/Dart/Pub related **/doc/api/ From 78b7994ec2d2b526a15df0025c6371cca58427f7 Mon Sep 17 00:00:00 2001 From: Oscar Date: Tue, 29 Nov 2022 16:01:01 +0100 Subject: [PATCH 2/3] chore: fix test --- test/screen_recorder_test.dart | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/test/screen_recorder_test.dart b/test/screen_recorder_test.dart index eb427ff..d3f2090 100644 --- a/test/screen_recorder_test.dart +++ b/test/screen_recorder_test.dart @@ -2,11 +2,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:screen_recorder/screen_recorder.dart'; class CustomExporter extends Exporter { - @override - Future?> export() { - throw UnimplementedError(); - } - @override void onNewFrame(Frame frame) {} } @@ -20,6 +15,6 @@ void main() { final exporter = CustomExporter(); final scrennRecorder = ScreenRecorderController(exporter: exporter); - expect(scrennRecorder._exporter, equals(exporter)); + expect(scrennRecorder.exporter, equals(exporter)); }); } From ecb499964366367b76d021ed3e86d4c4334a6d5d Mon Sep 17 00:00:00 2001 From: Oscar Date: Tue, 29 Nov 2022 16:01:41 +0100 Subject: [PATCH 3/3] feat: process frame bytes on onNewFrame --- lib/src/exporter.dart | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/lib/src/exporter.dart b/lib/src/exporter.dart index d29742f..4e6f1f7 100644 --- a/lib/src/exporter.dart +++ b/lib/src/exporter.dart @@ -7,8 +7,19 @@ import 'package:screen_recorder/src/frame.dart'; class Exporter { final List _frames = []; + Map framesMap = {}; void onNewFrame(Frame frame) { _frames.add(frame); + onNewFrameAsync(frame, _frames.length - 1); + } + + Future onNewFrameAsync(Frame frame, int index) async { + final bytes = await frame.image.toByteData(format: ui.ImageByteFormat.png); + if (bytes != null) { + framesMap[index] = RawFrame(16, bytes); + } else { + print('Skipped frame while enconding'); + } } void clear() { @@ -18,20 +29,7 @@ class Exporter { bool get hasFrames => _frames.isNotEmpty; Future?> exportFrames() async { - if (_frames.isEmpty) { - return null; - } - final bytesImages = []; - for (final frame in _frames) { - final bytesImage = - await frame.image.toByteData(format: ui.ImageByteFormat.png); - if (bytesImage != null) { - bytesImages.add(RawFrame(16, bytesImage)); - } else { - print('Skipped frame while enconding'); - } - } - return bytesImages; + return framesMap.values.toList(); } Future?> exportGif() async {