opt: hwdec (#1269)

* mod: more HwDecType

* opt: hwdec
This commit is contained in:
My-Responsitories
2025-09-17 00:29:16 +08:00
committed by GitHub
parent 7ca6d2958f
commit 3897efd82f
3 changed files with 20 additions and 8 deletions

View File

@@ -1,10 +1,15 @@
// mpv --hwdec=help
enum HwDecType {
no('no', '启用软解'),
auto('auto', '启用任意可用解码器'),
autoSafe('auto-safe', '启用最佳解码器'),
autoCopy('auto-copy', '启用带拷贝功能的最佳解码器'),
d3d11va('d3d11va', 'DirectX11 (windows8 及以上)'),
d3d11vaCopy('d3d11va-copy', 'DirectX11 (windows8 及以上) (非直通)'),
d3d12va('d3d12va', 'DirectX 12 (Windows10 及以上)'),
d3d12vaCopy('d3d12va-copy', 'DirectX 12 (Windows10 及以上) (非直通)'),
d3d11va('d3d11va', 'DirectX 11 (Windows8 及以上)'),
d3d11vaCopy('d3d11va-copy', 'DirectX 11 (Windows8 及以上) (非直通)'),
dxva2('dxva2', 'DXVA2 (Windows7 及以上)'),
dxva2Copy('dxva2-copy', 'DXVA2 (Windows7 及以上) (非直通)'),
videotoolbox('videotoolbox', 'VideoToolbox (macOS / iOS)'),
videotoolboxCopy('videotoolbox-copy', 'VideoToolbox (macOS / iOS) (非直通)'),
vaapi('vaapi', 'VAAPI (Linux)'),
@@ -15,8 +20,6 @@ enum HwDecType {
drmCopy('drm-copy', 'DRM (Linux) (非直通)'),
vulkan('vulkan', 'Vulkan (全平台) (实验性)'),
vulkanCopy('vulkan-copy', 'Vulkan (全平台) (实验性) (非直通)'),
dxva2('dxva2', 'DXVA2 (Windows7 及以上)'),
dxva2Copy('dxva2-copy', 'DXVA2 (Windows7 及以上) (非直通)'),
vdpau('vdpau', 'VDPAU (Linux)'),
vdpauCopy('vdpau-copy', 'VDPAU (Linux) (非直通)'),
mediacodec('mediacodec', 'MediaCodec (Android)'),
@@ -24,7 +27,11 @@ enum HwDecType {
cuda('cuda', 'CUDA (NVIDIA独占) (过时)'),
cudaCopy('cuda-copy', 'CUDA (NVIDIA独占) (过时) (非直通)'),
crystalhd('crystalhd', 'CrystalHD (全平台) (过时)'),
rkmpp('rkmpp', 'Rockchip MPP (仅部分Rockchip芯片)');
rkmpp('rkmpp', 'Rockchip MPP (仅部分Rockchip芯片)'),
amf('amf', 'AMF (AMD独占)'),
amfCopy('amf-copy', 'AMF (AMD独占) (非直通)'),
qsv('qsv', 'Quick Sync Video (Intel独占)'),
qsvCopy('qsv-copy', 'Quick Sync Video (Intel独占) (非直通)');
final String hwdec;
final String desc;

View File

@@ -2059,7 +2059,7 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
getSelectTitle: (i) => '${i.name}(${i.desc})',
),
Text(
'*转码使用软解,速度可能慢于播放,请不要选择过长的时间段或过高画质',
'*转码使用CPU,速度可能慢于播放,请不要选择过长的时间段或过高画质',
style: theme.textTheme.bodySmall,
),
],
@@ -2115,13 +2115,12 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
if (await future) {
await ImageUtils.saveFileImg(
filePath: file,
fileName: '$name.webp',
fileName: name,
needToast: true,
);
} else {
SmartDialog.showToast('转码出现错误或已取消');
}
progress.close();
if (isPlay) ctr.play();
},
);

View File

@@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:ffi';
import 'package:PiliPlus/http/constants.dart';
import 'package:PiliPlus/utils/storage_pref.dart';
import 'package:flutter/foundation.dart' show kDebugMode;
import 'package:flutter/material.dart';
import 'package:get/get_rx/get_rx.dart';
@@ -35,6 +36,7 @@ class MpvConvertWebp {
}) : duration = end - start;
Future<void> _init() async {
final enableHA = Pref.enableHA;
_ctx = await Initializer.create(
NativeLibrary.path,
_onEvent,
@@ -46,6 +48,10 @@ class MpvConvertWebp {
'ovc': 'libwebp_anim',
'ofopts': 'loop=0',
'ovcopts': 'preset=${preset.flag}',
if (enableHA) 'vo': 'gpu',
if (enableHA)
'hwdec':
'${Pref.hardwareDecoding},auto-copy', // transcode only support copy
},
);
_setHeader();