diff --git a/lib/plugin/pl_player/models/hwdec_type.dart b/lib/plugin/pl_player/models/hwdec_type.dart index 6140745d9..58636b146 100644 --- a/lib/plugin/pl_player/models/hwdec_type.dart +++ b/lib/plugin/pl_player/models/hwdec_type.dart @@ -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; diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index 460e31fbb..cf1f6e253 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -2059,7 +2059,7 @@ class _PLVideoPlayerState extends State getSelectTitle: (i) => '${i.name}(${i.desc})', ), Text( - '*转码使用软解,速度可能慢于播放,请不要选择过长的时间段或过高画质', + '*转码使用CPU,速度可能慢于播放,请不要选择过长的时间段或过高画质', style: theme.textTheme.bodySmall, ), ], @@ -2115,13 +2115,12 @@ class _PLVideoPlayerState extends State if (await future) { await ImageUtils.saveFileImg( filePath: file, - fileName: '$name.webp', + fileName: name, needToast: true, ); } else { SmartDialog.showToast('转码出现错误或已取消'); } - progress.close(); if (isPlay) ctr.play(); }, ); diff --git a/lib/plugin/pl_player/widgets/mpv_convert_webp.dart b/lib/plugin/pl_player/widgets/mpv_convert_webp.dart index 410d2f76a..dcf07a1f2 100644 --- a/lib/plugin/pl_player/widgets/mpv_convert_webp.dart +++ b/lib/plugin/pl_player/widgets/mpv_convert_webp.dart @@ -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 _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();