From 5201c66ac163af98fa1ad0047a2b240857b4015e Mon Sep 17 00:00:00 2001 From: guozhigq Date: Sun, 24 Nov 2024 17:38:35 +0800 Subject: [PATCH] feat: hardwareDecodeFormat --- lib/pages/setting/play_setting.dart | 31 ++++++++++++++++++++++++++++ lib/plugin/pl_player/controller.dart | 1 + lib/utils/global_data_cache.dart | 5 +++++ lib/utils/storage.dart | 3 ++- 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/lib/pages/setting/play_setting.dart b/lib/pages/setting/play_setting.dart index 7090bfaf..c6d7fe0b 100644 --- a/lib/pages/setting/play_setting.dart +++ b/lib/pages/setting/play_setting.dart @@ -31,6 +31,7 @@ class _PlaySettingState extends State { late int defaultFullScreenMode; late int defaultBtmProgressBehavior; late String defaultAoOutput; + late String hardwareDecodeFormat; @override void initState() { @@ -49,6 +50,8 @@ class _PlaySettingState extends State { defaultValue: BtmProgresBehavior.values.first.code); defaultAoOutput = setting.get(SettingBoxKey.defaultAoOutput, defaultValue: '0'); + hardwareDecodeFormat = setting.get(SettingBoxKey.hardwareDecodeFormat, + defaultValue: Platform.isAndroid ? 'auto-safe' : 'auto'); } @override @@ -294,6 +297,34 @@ class _PlaySettingState extends State { } }, ), + ListTile( + dense: false, + title: Text('硬解方式', style: titleStyle), + subtitle: Text( + '当前硬解方式(--hwdec):$hardwareDecodeFormat', + style: subTitleStyle, + ), + onTap: () async { + String? result = await showDialog( + context: context, + builder: (context) { + return SelectDialog( + title: '硬解方式', + value: hardwareDecodeFormat, + values: ['no', 'auto-safe', 'auto', 'yes', 'auto-copy'] + .map((e) { + return {'title': e, 'value': e}; + }).toList()); + }, + ); + if (result != null) { + setting.put(SettingBoxKey.hardwareDecodeFormat, result); + hardwareDecodeFormat = result; + GlobalDataCache.hardwareDecodeFormat = result; + setState(() {}); + } + }, + ), ListTile( dense: false, title: Text('默认全屏方式', style: titleStyle), diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index 2013d5b2..075a2e91 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -470,6 +470,7 @@ class PlPlayerController { configuration: VideoControllerConfiguration( enableHardwareAcceleration: enableHA, androidAttachSurfaceAfterVideoParameters: false, + hwdec: enableHA ? GlobalDataCache.hardwareDecodeFormat : null, ), ); diff --git a/lib/utils/global_data_cache.dart b/lib/utils/global_data_cache.dart index a421f829..911a4285 100644 --- a/lib/utils/global_data_cache.dart +++ b/lib/utils/global_data_cache.dart @@ -1,3 +1,4 @@ +import 'dart:io'; import 'package:hive/hive.dart'; import 'package:pilipala/models/user/info.dart'; import 'package:pilipala/plugin/pl_player/models/play_repeat.dart'; @@ -55,6 +56,8 @@ class GlobalDataCache { static late bool enableDynamicSwitch; // 投屏开关 static bool enableDlna = false; + // 硬件解码格式 + static late String hardwareDecodeFormat; // 私有构造函数 GlobalDataCache._(); @@ -123,5 +126,7 @@ class GlobalDataCache { enableDynamicSwitch = setting.get(SettingBoxKey.enableDynamicSwitch, defaultValue: true); enableDlna = setting.get(SettingBoxKey.enableDlna, defaultValue: false); + hardwareDecodeFormat = setting.get(SettingBoxKey.hardwareDecodeFormat, + defaultValue: Platform.isAndroid ? 'auto-safe' : 'auto'); } } diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index 49a5c734..04896341 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -116,7 +116,8 @@ class SettingBoxKey { enableAutoExpand = 'enableAutoExpand', defaultHomePage = 'defaultHomePage', enableRelatedVideo = 'enableRelatedVideo', - enableDlna = 'enableDlna'; + enableDlna = 'enableDlna', + hardwareDecodeFormat = 'hardwareDecodeFormat'; /// 外观 static const String themeMode = 'themeMode',