From f2cb617a7f54feae8448d5c919b2164fea601528 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Tue, 9 Nov 2021 12:17:07 +0900 Subject: [PATCH] video: option to disable frame capture --- lib/model/settings/settings.dart | 6 ++++++ lib/widgets/settings/video/video.dart | 9 +++++++++ lib/widgets/viewer/video/fijkplayer.dart | 4 +++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/model/settings/settings.dart b/lib/model/settings/settings.dart index 62f76fd1c..493b20650 100644 --- a/lib/model/settings/settings.dart +++ b/lib/model/settings/settings.dart @@ -85,6 +85,7 @@ class Settings extends ChangeNotifier { // video static const videoQuickActionsKey = 'video_quick_actions'; static const enableVideoHardwareAccelerationKey = 'video_hwaccel_mediacodec'; + static const enableVideoFrameCaptureKey = 'video_enable_snapshot'; static const enableVideoAutoPlayKey = 'video_auto_play'; static const videoLoopModeKey = 'video_loop'; static const videoShowRawTimedTextKey = 'video_show_raw_timed_text'; @@ -362,6 +363,10 @@ class Settings extends ChangeNotifier { set enableVideoHardwareAcceleration(bool newValue) => setAndNotify(enableVideoHardwareAccelerationKey, newValue); + bool get enableVideoFrameCapture => getBoolOrDefault(enableVideoFrameCaptureKey, true); + + set enableVideoFrameCapture(bool newValue) => setAndNotify(enableVideoFrameCaptureKey, newValue); + bool get enableVideoAutoPlay => getBoolOrDefault(enableVideoAutoPlayKey, SettingsDefaults.enableVideoAutoPlay); set enableVideoAutoPlay(bool newValue) => setAndNotify(enableVideoAutoPlayKey, newValue); @@ -588,6 +593,7 @@ class Settings extends ChangeNotifier { case enableOverlayBlurEffectKey: case viewerUseCutoutKey: case enableVideoHardwareAccelerationKey: + case enableVideoFrameCaptureKey: case enableVideoAutoPlayKey: case subtitleShowOutlineKey: case saveSearchHistoryKey: diff --git a/lib/widgets/settings/video/video.dart b/lib/widgets/settings/video/video.dart index 52fa4b2b3..dd988523f 100644 --- a/lib/widgets/settings/video/video.dart +++ b/lib/widgets/settings/video/video.dart @@ -45,6 +45,15 @@ class VideoSection extends StatelessWidget { onChanged: (v) => settings.enableVideoHardwareAcceleration = v, title: Text(context.l10n.settingsVideoEnableHardwareAcceleration), ), + Selector( + selector: (context, s) => s.enableVideoFrameCapture, + builder: (context, current, child) => SwitchListTile( + value: current, + onChanged: (v) => settings.enableVideoFrameCapture = v, + // TODO TLAD l10n + title: Text('enable frame capture'), + ), + ), SwitchListTile( value: currentEnableVideoAutoPlay, onChanged: (v) => settings.enableVideoAutoPlay = v, diff --git a/lib/widgets/viewer/video/fijkplayer.dart b/lib/widgets/viewer/video/fijkplayer.dart index 6db787e10..49b56ac6b 100644 --- a/lib/widgets/viewer/video/fijkplayer.dart +++ b/lib/widgets/viewer/video/fijkplayer.dart @@ -25,6 +25,7 @@ class IjkPlayerAvesVideoController extends AvesVideoController { final List _streams = []; Timer? _initialPlayTimer; double _speed = 1; + bool captureFrameEnabled = false; // audio/video get out of sync with speed < .5 // the video stream plays at .5 but the audio is slowed as requested @@ -53,9 +54,10 @@ class IjkPlayerAvesVideoController extends AvesVideoController { static const initialPlayDelay = Duration(milliseconds: 100); static const gifLikeVideoDurationThreshold = Duration(seconds: 10); static const gifLikeBitRateThreshold = 2 << 18; // 512kB/s (4Mb/s) - static const captureFrameEnabled = true; IjkPlayerAvesVideoController(AvesEntry entry) : super(entry) { + captureFrameEnabled = settings.enableVideoFrameCapture; + _instance = FijkPlayer(); _valueStream.map((value) => value.videoRenderStart).firstWhere((v) => v, orElse: () => false).then( (started) => canCaptureFrameNotifier.value = captureFrameEnabled && started,