feat: hardwareDecodeFormat

This commit is contained in:
guozhigq
2024-11-24 17:38:35 +08:00
parent aa73fb4615
commit 5201c66ac1
4 changed files with 39 additions and 1 deletions

View File

@ -31,6 +31,7 @@ class _PlaySettingState extends State<PlaySetting> {
late int defaultFullScreenMode;
late int defaultBtmProgressBehavior;
late String defaultAoOutput;
late String hardwareDecodeFormat;
@override
void initState() {
@ -49,6 +50,8 @@ class _PlaySettingState extends State<PlaySetting> {
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<PlaySetting> {
}
},
),
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<String>(
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),

View File

@ -470,6 +470,7 @@ class PlPlayerController {
configuration: VideoControllerConfiguration(
enableHardwareAcceleration: enableHA,
androidAttachSurfaceAfterVideoParameters: false,
hwdec: enableHA ? GlobalDataCache.hardwareDecodeFormat : null,
),
);

View File

@ -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');
}
}

View File

@ -116,7 +116,8 @@ class SettingBoxKey {
enableAutoExpand = 'enableAutoExpand',
defaultHomePage = 'defaultHomePage',
enableRelatedVideo = 'enableRelatedVideo',
enableDlna = 'enableDlna';
enableDlna = 'enableDlna',
hardwareDecodeFormat = 'hardwareDecodeFormat';
/// 外观
static const String themeMode = 'themeMode',