Merge pull request #571 from Schnitzel5/player/hw-accel

added option to turn on/off mpv hardware acceleration
This commit is contained in:
Moustapha Kodjo Amadou 2025-08-29 12:06:20 +01:00 committed by GitHub
commit de7800c6af
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
27 changed files with 545 additions and 287 deletions

View file

@ -482,6 +482,8 @@
"you_have_finished_reading": "You have finished reading",
"return_to_the_list_of_chapters": "Return to the list of chapters",
"hwdec": "Hardware Decoder",
"enable_hardware_accel": "Hardware Acceleration",
"enable_hardware_accel_info": "Turn it on/off if you are experiencing bugs or crashes",
"track_library_navigate": "Go to existing local entry",
"track_library_add": "Add to local library",
"track_library_add_confirm": "Add tracked item to local library",

View file

@ -2967,6 +2967,18 @@ abstract class AppLocalizations {
/// **'Hardware Decoder'**
String get hwdec;
/// No description provided for @enable_hardware_accel.
///
/// In en, this message translates to:
/// **'Hardware Acceleration'**
String get enable_hardware_accel;
/// No description provided for @enable_hardware_accel_info.
///
/// In en, this message translates to:
/// **'Turn it on/off if you are experiencing bugs or crashes'**
String get enable_hardware_accel_info;
/// No description provided for @track_library_navigate.
///
/// In en, this message translates to:

View file

@ -1526,6 +1526,13 @@ class AppLocalizationsAr extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -1528,6 +1528,13 @@ class AppLocalizationsAs extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -1538,6 +1538,13 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -1527,6 +1527,13 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -1544,6 +1544,13 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -1545,6 +1545,13 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -1529,6 +1529,13 @@ class AppLocalizationsHi extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -1533,6 +1533,13 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -1542,6 +1542,13 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -1541,6 +1541,13 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -1543,6 +1543,13 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -1527,6 +1527,13 @@ class AppLocalizationsTh extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -1533,6 +1533,13 @@ class AppLocalizationsTr extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -1498,6 +1498,13 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get hwdec => 'Hardware Decoder';
@override
String get enable_hardware_accel => 'Hardware Acceleration';
@override
String get enable_hardware_accel_info =>
'Turn it on/off if you are experiencing bugs or crashes';
@override
String get track_library_navigate => 'Go to existing local entry';

View file

@ -212,6 +212,8 @@ class Settings {
String? hwdecMode;
bool? enableHardwareAcceleration;
int? libraryFilterNovelDownloadType;
int? libraryFilterNovelUnreadType;
@ -373,6 +375,7 @@ class Settings {
this.disableSectionType = SectionType.all,
this.useLibass = true,
this.hwdecMode = "auto",
this.enableHardwareAcceleration,
this.libraryFilterNovelDownloadType = 0,
this.libraryFilterNovelUnreadType = 0,
this.libraryFilterNovelStartedType = 0,
@ -577,6 +580,7 @@ class Settings {
SectionType.values[json['disableSectionType'] ?? SectionType.all.index];
useLibass = json['useLibass'];
hwdecMode = json['hwdecMode'];
enableHardwareAcceleration = json['enableHardwareAcceleration'];
libraryFilterNovelBookMarkedType = json['libraryFilterNovelBookMarkedType'];
libraryFilterNovelDownloadType = json['libraryFilterNovelDownloadType'];
libraryFilterNovelStartedType = json['libraryFilterNovelStartedType'];
@ -759,6 +763,7 @@ class Settings {
'disableSectionType': disableSectionType.index,
'useLibass': useLibass,
'hwdecMode': hwdecMode,
'enableHardwareAcceleration': enableHardwareAcceleration,
'libraryFilterNovelBookMarkedType': libraryFilterNovelBookMarkedType,
'libraryFilterNovelDownloadType': libraryFilterNovelDownloadType,
'libraryFilterNovelStartedType': libraryFilterNovelStartedType,

File diff suppressed because it is too large Load diff

View file

@ -255,6 +255,7 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage>
),
);
late final hwdecMode = ref.read(hwdecModeStateProvider());
late final enableHardwareAccel = ref.read(enableHardwareAccelStateProvider);
late final VideoController _controller;
late final _streamController = ref.read(
animeStreamControllerProvider(episode: widget.episode).notifier,
@ -843,6 +844,7 @@ mp.register_script_message('call_button_${button.id}_long', button${button.id}lo
_player,
configuration: VideoControllerConfiguration(
hwdec: hwdecMode,
enableHardwareAcceleration: enableHardwareAccel,
vo: Platform.isAndroid
? useGpuNext
? "gpu-next"

View file

@ -13,7 +13,11 @@ Stream<List<Source>> getExtensionsStream(Ref ref, ItemType itemType) async* {
.filter()
.idIsNotNull()
.and()
.repo((q) => q.hiddenIsNull().or().hiddenEqualTo(false))
.group(
(q) => q.repoIsNull().or().repo(
(q) => q.hiddenIsNull().or().hiddenEqualTo(false),
),
)
.isActiveEqualTo(true)
.itemTypeEqualTo(itemType)
.watch(fireImmediately: true);

View file

@ -149,7 +149,7 @@ class _AddDownloadToQueueProviderElement
Chapter get chapter => (origin as AddDownloadToQueueProvider).chapter;
}
String _$downloadChapterHash() => r'4d008f26f03bf21010742b73cf83643c61f66c2b';
String _$downloadChapterHash() => r'5eb401736efdfb2990fda6e2d97160aaeb94aec1';
/// See also [downloadChapter].
@ProviderFor(downloadChapter)

View file

@ -17,6 +17,7 @@ class PlayerDecoderScreen extends ConsumerStatefulWidget {
class _PlayerDecoderScreenState extends ConsumerState<PlayerDecoderScreen> {
@override
Widget build(BuildContext context) {
final enableHardwareAccel = ref.watch(enableHardwareAccelStateProvider);
final hwdecMode = ref.watch(hwdecModeStateProvider(rawValue: true));
final useGpuNext = ref.watch(useGpuNextStateProvider);
final debandingType = ref.watch(debandingStateProvider);
@ -27,6 +28,17 @@ class _PlayerDecoderScreenState extends ConsumerState<PlayerDecoderScreen> {
body: SingleChildScrollView(
child: Column(
children: [
SwitchListTile(
value: enableHardwareAccel,
title: Text(context.l10n.enable_hardware_accel),
subtitle: Text(
context.l10n.enable_hardware_accel_info,
style: TextStyle(fontSize: 11, color: context.secondaryColor),
),
onChanged: (value) {
ref.read(enableHardwareAccelStateProvider.notifier).set(value);
},
),
ListTile(
onTap: () {
final values = [

View file

@ -49,6 +49,29 @@ class HwdecModeState extends _$HwdecModeState {
}
}
@riverpod
class EnableHardwareAccelState extends _$EnableHardwareAccelState {
@override
bool build() {
return isar.settings.getSync(227)!.enableHardwareAcceleration ??
Platform.isMacOS
? false
: true;
}
void set(bool value) {
final settings = isar.settings.getSync(227);
state = value;
isar.writeTxnSync(
() => isar.settings.putSync(
settings!
..enableHardwareAcceleration = value
..updatedAt = DateTime.now().millisecondsSinceEpoch,
),
);
}
}
@riverpod
class DebandingState extends _$DebandingState {
@override

View file

@ -157,6 +157,23 @@ class _HwdecModeStateProviderElement
bool get rawValue => (origin as HwdecModeStateProvider).rawValue;
}
String _$enableHardwareAccelStateHash() =>
r'4804b699c14a78db9c760ec4eaf8a88bb6ce1b9b';
/// See also [EnableHardwareAccelState].
@ProviderFor(EnableHardwareAccelState)
final enableHardwareAccelStateProvider =
AutoDisposeNotifierProvider<EnableHardwareAccelState, bool>.internal(
EnableHardwareAccelState.new,
name: r'enableHardwareAccelStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$enableHardwareAccelStateHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$EnableHardwareAccelState = AutoDisposeNotifier<bool>;
String _$debandingStateHash() => r'b93e2fc826d98cc8bce1aab9a92900353e4d3958';
/// See also [DebandingState].

View file

@ -6,7 +6,7 @@ part of 'aniskip.dart';
// RiverpodGenerator
// **************************************************************************
String _$aniSkipHash() => r'887869b54e2e151633efd46da83bde845e14f421';
String _$aniSkipHash() => r'2e5d19b025a2207ff64da7bf7908450ea9e5ff8c';
/// See also [AniSkip].
@ProviderFor(AniSkip)

View file

@ -6,7 +6,7 @@ part of 'anilist.dart';
// RiverpodGenerator
// **************************************************************************
String _$anilistHash() => r'b3c56b172308ecd98c4dd9fb89d17ccc36487754';
String _$anilistHash() => r'89e86869bd2b807e08beb8b7af507809d8bb9895';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -1125,7 +1125,7 @@ packages:
description:
path: media_kit
ref: HEAD
resolved-ref: baeecb6aa673e49a173448909a9e15d17d1a9c23
resolved-ref: "62b08e33590cba8fba4797eaaa1e95b514adb437"
url: "https://github.com/Schnitzel5/media-kit.git"
source: git
version: "1.2.0"
@ -1133,8 +1133,8 @@ packages:
dependency: transitive
description:
path: "libs/android/media_kit_libs_android_video"
ref: baeecb6aa673e49a173448909a9e15d17d1a9c23
resolved-ref: baeecb6aa673e49a173448909a9e15d17d1a9c23
ref: "62b08e33590cba8fba4797eaaa1e95b514adb437"
resolved-ref: "62b08e33590cba8fba4797eaaa1e95b514adb437"
url: "https://github.com/Schnitzel5/media-kit.git"
source: git
version: "1.3.7"
@ -1142,8 +1142,8 @@ packages:
dependency: transitive
description:
path: "libs/ios/media_kit_libs_ios_video"
ref: baeecb6aa673e49a173448909a9e15d17d1a9c23
resolved-ref: baeecb6aa673e49a173448909a9e15d17d1a9c23
ref: "62b08e33590cba8fba4797eaaa1e95b514adb437"
resolved-ref: "62b08e33590cba8fba4797eaaa1e95b514adb437"
url: "https://github.com/Schnitzel5/media-kit.git"
source: git
version: "1.1.4"
@ -1151,8 +1151,8 @@ packages:
dependency: transitive
description:
path: "libs/linux/media_kit_libs_linux"
ref: baeecb6aa673e49a173448909a9e15d17d1a9c23
resolved-ref: baeecb6aa673e49a173448909a9e15d17d1a9c23
ref: "62b08e33590cba8fba4797eaaa1e95b514adb437"
resolved-ref: "62b08e33590cba8fba4797eaaa1e95b514adb437"
url: "https://github.com/Schnitzel5/media-kit.git"
source: git
version: "1.2.1"
@ -1160,8 +1160,8 @@ packages:
dependency: transitive
description:
path: "libs/macos/media_kit_libs_macos_video"
ref: baeecb6aa673e49a173448909a9e15d17d1a9c23
resolved-ref: baeecb6aa673e49a173448909a9e15d17d1a9c23
ref: "62b08e33590cba8fba4797eaaa1e95b514adb437"
resolved-ref: "62b08e33590cba8fba4797eaaa1e95b514adb437"
url: "https://github.com/Schnitzel5/media-kit.git"
source: git
version: "1.1.4"
@ -1170,7 +1170,7 @@ packages:
description:
path: "libs/universal/media_kit_libs_video"
ref: HEAD
resolved-ref: baeecb6aa673e49a173448909a9e15d17d1a9c23
resolved-ref: "62b08e33590cba8fba4797eaaa1e95b514adb437"
url: "https://github.com/Schnitzel5/media-kit.git"
source: git
version: "1.0.6"
@ -1178,8 +1178,8 @@ packages:
dependency: transitive
description:
path: "libs/windows/media_kit_libs_windows_video"
ref: baeecb6aa673e49a173448909a9e15d17d1a9c23
resolved-ref: baeecb6aa673e49a173448909a9e15d17d1a9c23
ref: "62b08e33590cba8fba4797eaaa1e95b514adb437"
resolved-ref: "62b08e33590cba8fba4797eaaa1e95b514adb437"
url: "https://github.com/Schnitzel5/media-kit.git"
source: git
version: "1.0.11"
@ -1188,7 +1188,7 @@ packages:
description:
path: media_kit_video
ref: HEAD
resolved-ref: baeecb6aa673e49a173448909a9e15d17d1a9c23
resolved-ref: "62b08e33590cba8fba4797eaaa1e95b514adb437"
url: "https://github.com/Schnitzel5/media-kit.git"
source: git
version: "1.3.0"