diff --git a/Avalonia.Accelerate.Samples.sln b/Avalonia.Accelerate.Samples.sln
index 3f964db..619c99a 100644
--- a/Avalonia.Accelerate.Samples.sln
+++ b/Avalonia.Accelerate.Samples.sln
@@ -40,6 +40,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebAuthenticationBrokerSamp
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebAuthenticationBrokerSample", "WebAuthenticationBrokerSample\WebAuthenticationBrokerSample\WebAuthenticationBrokerSample.csproj", "{7CFB22DE-B8D6-799B-743C-8AF89E97E88F}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Media.Demo.LinuxFB", "MediaPlayerSample\Avalonia.Media.Demo.LinuxFB\Avalonia.Media.Demo.LinuxFB.csproj", "{649359EA-BB57-4FE2-968D-EE8EDDAF7350}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -90,6 +92,10 @@ Global
{7CFB22DE-B8D6-799B-743C-8AF89E97E88F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7CFB22DE-B8D6-799B-743C-8AF89E97E88F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7CFB22DE-B8D6-799B-743C-8AF89E97E88F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {649359EA-BB57-4FE2-968D-EE8EDDAF7350}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {649359EA-BB57-4FE2-968D-EE8EDDAF7350}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {649359EA-BB57-4FE2-968D-EE8EDDAF7350}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {649359EA-BB57-4FE2-968D-EE8EDDAF7350}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -106,5 +112,6 @@ Global
{A34DCED3-E26F-9DF0-163C-720E3F795031} = {F1654980-CA9F-ACCF-E2A2-9AEE1C29565B}
{C4E89863-6CA3-D3A6-C504-58989B5E7526} = {F1654980-CA9F-ACCF-E2A2-9AEE1C29565B}
{7CFB22DE-B8D6-799B-743C-8AF89E97E88F} = {F1654980-CA9F-ACCF-E2A2-9AEE1C29565B}
+ {649359EA-BB57-4FE2-968D-EE8EDDAF7350} = {D42C37AA-53F4-D48D-0B84-299B5E68CB34}
EndGlobalSection
EndGlobal
diff --git a/MediaPlayerSample/Avalonia.Media.Demo.LinuxFB/Avalonia.Media.Demo.LinuxFB.csproj b/MediaPlayerSample/Avalonia.Media.Demo.LinuxFB/Avalonia.Media.Demo.LinuxFB.csproj
new file mode 100644
index 0000000..d24a0c9
--- /dev/null
+++ b/MediaPlayerSample/Avalonia.Media.Demo.LinuxFB/Avalonia.Media.Demo.LinuxFB.csproj
@@ -0,0 +1,25 @@
+
+
+ Exe
+
+ net8.0
+ linux-arm64
+
+ enable
+ true
+ Avalonia.Media.Demo.LinuxFB
+
+
+ $(DefineConstants);DEMO_FB
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MediaPlayerSample/Avalonia.Media.Demo.LinuxFB/Program.cs b/MediaPlayerSample/Avalonia.Media.Demo.LinuxFB/Program.cs
new file mode 100644
index 0000000..f6066f4
--- /dev/null
+++ b/MediaPlayerSample/Avalonia.Media.Demo.LinuxFB/Program.cs
@@ -0,0 +1,23 @@
+using System;
+using Avalonia;
+using Avalonia.LinuxFramebuffer;
+
+namespace Avalonia.Media.Demo.LinuxFB;
+
+sealed class Program
+{
+ // Initialization code. Don't use any Avalonia, third-party APIs or any
+ // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
+ // yet and stuff might break.
+ [STAThread]
+ public static void Main(string[] args) => BuildAvaloniaApp()
+ // DRI paths can change. Try all the devices under /dev/dri/* if the default doesn't work.
+ .StartLinuxDrm(args: args, card: "/dev/dri/card1", scaling: 1.0);
+
+ // Avalonia configuration, don't remove; also used by visual designer.
+ public static AppBuilder BuildAvaloniaApp()
+ => AppBuilder.Configure()
+ .UsePlatformDetect()
+ .WithInterFont()
+ .LogToTrace();
+}
diff --git a/MediaPlayerSample/Avalonia.Media.Demo/Views/MainView.axaml.cs b/MediaPlayerSample/Avalonia.Media.Demo/Views/MainView.axaml.cs
index f0ba451..967d7dc 100644
--- a/MediaPlayerSample/Avalonia.Media.Demo/Views/MainView.axaml.cs
+++ b/MediaPlayerSample/Avalonia.Media.Demo/Views/MainView.axaml.cs
@@ -31,6 +31,12 @@ protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
MainVm.DropCommand = new RelayCommand(HandleDrop);
+#if DEMO_FB
+ // TODO: For testing purposes only, since Avalonia DRM backend doesn't support direct keyboard input just yet.
+ // So we "manually" set the media source for immediate playback.
+ Dispatcher.UIThread.InvokeAsync(() => { MainVm.SetSource(new UriSource("/home/user/video.mp4")); }, DispatcherPriority.Idle);
+#endif
+
base.OnAttachedToVisualTree(e);
}
@@ -41,7 +47,6 @@ private void HandleDrop(DragEventArgs? e)
if (files is null || MainVm is null) return;
MainVm.SetSource(new UriSource(files.Path));
-
}
private async void Load_Click(object? _, RoutedEventArgs __)
@@ -84,7 +89,7 @@ private async void Load_Uri_Click(object? sender, Avalonia.Interactivity.RoutedE
var result = await dialog.ShowAsync();
- if(result == ContentDialogResult.Primary)
+ if (result == ContentDialogResult.Primary)
{
if (string.IsNullOrWhiteSpace(input.Text) || MainVm == null) return;
@@ -113,4 +118,4 @@ private async void MediaPlayerControl_OnErrorOccurred(object? sender, MediaPlaye
e.Handled = true;
await dialog.ShowAsync();
}
-}
\ No newline at end of file
+}