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 { enum HwDecType {
no('no', '启用软解'), no('no', '启用软解'),
auto('auto', '启用任意可用解码器'), auto('auto', '启用任意可用解码器'),
autoSafe('auto-safe', '启用最佳解码器'), autoSafe('auto-safe', '启用最佳解码器'),
autoCopy('auto-copy', '启用带拷贝功能的最佳解码器'), autoCopy('auto-copy', '启用带拷贝功能的最佳解码器'),
d3d11va('d3d11va', 'DirectX11 (windows8 及以上)'), d3d12va('d3d12va', 'DirectX 12 (Windows10 及以上)'),
d3d11vaCopy('d3d11va-copy', 'DirectX11 (windows8 及以上) (非直通)'), 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)'), videotoolbox('videotoolbox', 'VideoToolbox (macOS / iOS)'),
videotoolboxCopy('videotoolbox-copy', 'VideoToolbox (macOS / iOS) (非直通)'), videotoolboxCopy('videotoolbox-copy', 'VideoToolbox (macOS / iOS) (非直通)'),
vaapi('vaapi', 'VAAPI (Linux)'), vaapi('vaapi', 'VAAPI (Linux)'),
@@ -15,8 +20,6 @@ enum HwDecType {
drmCopy('drm-copy', 'DRM (Linux) (非直通)'), drmCopy('drm-copy', 'DRM (Linux) (非直通)'),
vulkan('vulkan', 'Vulkan (全平台) (实验性)'), vulkan('vulkan', 'Vulkan (全平台) (实验性)'),
vulkanCopy('vulkan-copy', 'Vulkan (全平台) (实验性) (非直通)'), vulkanCopy('vulkan-copy', 'Vulkan (全平台) (实验性) (非直通)'),
dxva2('dxva2', 'DXVA2 (Windows7 及以上)'),
dxva2Copy('dxva2-copy', 'DXVA2 (Windows7 及以上) (非直通)'),
vdpau('vdpau', 'VDPAU (Linux)'), vdpau('vdpau', 'VDPAU (Linux)'),
vdpauCopy('vdpau-copy', 'VDPAU (Linux) (非直通)'), vdpauCopy('vdpau-copy', 'VDPAU (Linux) (非直通)'),
mediacodec('mediacodec', 'MediaCodec (Android)'), mediacodec('mediacodec', 'MediaCodec (Android)'),
@@ -24,7 +27,11 @@ enum HwDecType {
cuda('cuda', 'CUDA (NVIDIA独占) (过时)'), cuda('cuda', 'CUDA (NVIDIA独占) (过时)'),
cudaCopy('cuda-copy', 'CUDA (NVIDIA独占) (过时) (非直通)'), cudaCopy('cuda-copy', 'CUDA (NVIDIA独占) (过时) (非直通)'),
crystalhd('crystalhd', 'CrystalHD (全平台) (过时)'), 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 hwdec;
final String desc; final String desc;

View File

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

View File

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