Initial commit
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user