60 lines
1.7 KiB
Dart
60 lines
1.7 KiB
Dart
|
|
import 'dart:io' show Platform;
|
||
|
|
|
||
|
|
import '../../../providers/player_engine_override_provider.dart';
|
||
|
|
|
||
|
|
|
||
|
|
enum PlayerEngineKind { fvp, mpv, media3 }
|
||
|
|
|
||
|
|
PlayerEngineKind? playerEngineKindFromDisplayName(String displayName) {
|
||
|
|
return switch (displayName) {
|
||
|
|
'fvp' => PlayerEngineKind.fvp,
|
||
|
|
'mpv' => PlayerEngineKind.mpv,
|
||
|
|
'media3' => PlayerEngineKind.media3,
|
||
|
|
_ => null,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
PlayerEngineKind? nextAutoFallbackEngine({
|
||
|
|
required PlayerEngineOverride override,
|
||
|
|
required PlayerEngineKind? failedEngineKind,
|
||
|
|
required bool isDolbyVision,
|
||
|
|
}) {
|
||
|
|
if (override != PlayerEngineOverride.auto) return null;
|
||
|
|
return switch (failedEngineKind) {
|
||
|
|
PlayerEngineKind.media3 =>
|
||
|
|
isDolbyVision ? PlayerEngineKind.fvp : PlayerEngineKind.mpv,
|
||
|
|
PlayerEngineKind.mpv => PlayerEngineKind.fvp,
|
||
|
|
PlayerEngineKind.fvp || null => null,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
PlayerEngineKind resolvePlayerEngineKind(
|
||
|
|
PlayerEngineOverride override, {
|
||
|
|
required bool isDolbyVision,
|
||
|
|
String? videoCodec,
|
||
|
|
bool? isAndroid,
|
||
|
|
}) {
|
||
|
|
final onAndroid = isAndroid ?? Platform.isAndroid;
|
||
|
|
final codec = videoCodec?.toLowerCase();
|
||
|
|
final isProRes = codec == 'prores';
|
||
|
|
switch (override) {
|
||
|
|
case PlayerEngineOverride.fvp:
|
||
|
|
return PlayerEngineKind.fvp;
|
||
|
|
case PlayerEngineOverride.mpv:
|
||
|
|
return PlayerEngineKind.mpv;
|
||
|
|
case PlayerEngineOverride.media3:
|
||
|
|
if (!onAndroid) return PlayerEngineKind.mpv;
|
||
|
|
if (isProRes) return PlayerEngineKind.fvp;
|
||
|
|
return PlayerEngineKind.media3;
|
||
|
|
case PlayerEngineOverride.auto:
|
||
|
|
if (onAndroid) {
|
||
|
|
if (isProRes) return PlayerEngineKind.fvp;
|
||
|
|
return PlayerEngineKind.media3;
|
||
|
|
}
|
||
|
|
if (isDolbyVision || isProRes) return PlayerEngineKind.fvp;
|
||
|
|
return PlayerEngineKind.mpv;
|
||
|
|
}
|
||
|
|
}
|